Kubernetes 1.17: SIG Scheduling の変更内容

## はじめに

ここでは, Kubernetes 1.17 の CHANGELOG から SIG Scheduling に関係のあるものを抜粋しています.

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.17.md

## 主な変更点 (1.17 What's New)

該当なし

## アップグレード時の注意点 (Urgent Upgrade Notes)

- kubeadm の設定で kube-apiserver の authorization-mode を指定する際に, これまでデフォルトで先頭に付けられていた `Node,RBAC` が付与されなくなります. これにより authorization-mode を完全に上書きできるようになります. ([#82616](https://github.com/kubernetes/kubernetes/pull/82616), [@ghouscht](https://github.com/ghouscht))

## 注目機能 (Notable Features)

### Stable

- ScheduleDaemonSetPods が GA となります. (この feature gate は 1.18 で削除されます.) ([#82795](https://github.com/kubernetes/kubernetes/pull/82795), [@draveness](https://github.com/draveness))
    - :memo: ScheduleDaemonSetPods は DaemonSet のスケジューリングに DaemonSet コントローラではなくデフォルトスケジューラを利用するためのモードです. DaemonSet コントローラによってスケジュールされる場合には次のような問題がありました.
        - 通常の Pod は作成後に `Pending` となるが, DaemonSet の Pod の場合は `Pending` にならない.
        - Pod の preemption はデフォルトスケジューラが行うため, DaemonSet コントローラによるスケジューリングに Pod の priority や preemption が考慮されない.
- TaintNodesByCondition が GA となります. (この feature gate は 1.18 で削除されます.) ([#82703](https://github.com/kubernetes/kubernetes/pull/82703), [@draveness](https://github.com/draveness))
    - :memo: TaintNodesByCondition は Node の readiness やリソース使用状況などのコンディションに応じて Node に Taint を付与するモードです.
- ResourceQuotaScopeSelectors が GA となります. (この feature gate は 1.18 で削除されます.) ([#82690](https://github.com/kubernetes/kubernetes/pull/82690), [@draveness](https://github.com/draveness))

### Beta

該当なし

### Alpha

該当なし

## その他の変更 (Other Notable Changes)

:memo: ここにかかれているものは半数以上が [Scheduling Framework](https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/20180409-scheduling-framework.md) の実装に関するものです. それ以外のものと区別が付くように Scheduling Framework に関連するものは先頭に [Scheduling Framework] という接頭辞を付けています.

- スケジューラポリシーの検証時に RequestedToCapacityRatio の重複のみを検証するようにし, 他のカスタムな predicates/priorities を許容するよう変更 ([#84646](https://github.com/kubernetes/kubernetes/pull/84646), [@liu](https://github.com/liu-cong))
- scheduler policy の設定を複数回宣言できないよう変更 ([#83963](https://github.com/kubernetes/kubernetes/pull/83963), [@damemi](https://github.com/damemi))
- TaintNodesByCondition が GA へ変更. CheckNodeMemoryPressure, CheckNodePIDPressure, CheckNodeDiskPressure, CheckNodeCondition が削除. (代わりに CheckNodeUnschedulablePred が利用可能) ([#84152](https://github.com/kubernetes/kubernetes/pull/84152), [@draveness](https://github.com/draveness))
- [Scheduling Framework] Filter プラグインに PodFitsHostPorts が追加 ([#83659](https://github.com/kubernetes/kubernetes/pull/83659), [@wgliang](https://github.com/wgliang))
- [Scheduling Framework] Filter プラグインに PodFitsResources が追加 ([#83650](https://github.com/kubernetes/kubernetes/pull/83650), [@wgliang](https://github.com/wgliang))
- [Scheduling Framework] Filter プラグインに PodMatchNodeSelector/NodAffinity が追加 ([#83660](https://github.com/kubernetes/kubernetes/pull/83660), [@wgliang](https://github.com/wgliang))
- generic_scheduler にトレースするステップを追加 ([#83539](https://github.com/kubernetes/kubernetes/pull/83539), [@wgliang](https://github.com/wgliang))
- [Scheduling Framework] Filter プラグインに PodFitsHost が追加 ([#83662](https://github.com/kubernetes/kubernetes/pull/83662), [@wgliang](https://github.com/wgliang))
- PodAffinity の利用時に kube-scheduler が panic する問題を修正 ([#82841](https://github.com/kubernetes/kubernetes/pull/82841), [@Huang](https://github.com/Huang-Wei))
- [Scheduling Framework] Schedule() 関数の受けるコンテクストの仮引数の位置を第一仮引数に変更. ([#82119](https://github.com/kubernetes/kubernetes/pull/82119), [@wgliang](https://github.com/wgliang))
- [Scheduling Framework] 複数の PluginConfig がある場合に正しい引数が PluginFactory へ渡されない問題を修正 ([#82483](https://github.com/kubernetes/kubernetes/pull/82483), [@everpeace](https://github.com/everpeace))
- kube-scheduler のプロファイリングをデフォルトで有効化 ([#84835](https://github.com/kubernetes/kubernetes/pull/84835), [@denkensk](https://github.com/denkensk))
- スケジューラがキャッシュサイズのメトリクスをレポートするよう変更 ([#83508](https://github.com/kubernetes/kubernetes/pull/83508), [@damemi](https://github.com/damemi))
- [Scheduling Framework] 利用者が ComponentConfig を利用して NodeLabel を設定できるよう変更 ([#84297](https://github.com/kubernetes/kubernetes/pull/84297), [@liu](https://github.com/liu-cong))
- preferredDuringSchedulingIgnoredDuringExecution を利用する inter-pod affinity の処理を最大で 4 倍高速化 ([#84264](https://github.com/kubernetes/kubernetes/pull/84264), [@ahg](https://github.com/ahg-g))
- [Scheduling Framework] Filter Plugin に cloud provider storage を判定するためのものを追加 ([#84148](https://github.com/kubernetes/kubernetes/pull/84148), [@gongguan](https://github.com/gongguan))
- [Scheduling Framework] Permit API のリファクタリング ([#83756](https://github.com/kubernetes/kubernetes/pull/83756), [@hex108](https://github.com/hex108))
- スケジューラーのキューに新しく追加された Pod に関するメトリクスをレポートするよう変更 ([#83577](https://github.com/kubernetes/kubernetes/pull/83577), [@liu](https://github.com/liu-cong))
- kube-scheduler がログレベルを動的な変更をサポート ([#83910](https://github.com/kubernetes/kubernetes/pull/83910), [@mrkm4ntr](https://github.com/mrkm4ntr))
- [Scheduling Framework] レイテンシとリクエスト数に関するメトリクスを追加 ([#83569](https://github.com/kubernetes/kubernetes/pull/83569), [@liu](https://github.com/liu-cong))
- [Scheduling Framework] framework のインタフェースに SharedInformerFactory を追加 ([#83663](https://github.com/kubernetes/kubernetes/pull/83663), [@draveness](https://github.com/draveness))
- [Scheduling Framework] 一度または複数のスケジューリングの試行を通して Pod ごとのメトリクスをレポートするよう変更 ([#83674](https://github.com/kubernetes/kubernetes/pull/83674), [@liu](https://github.com/liu-cong))
    - :memo: スケジューリングの試行の単位でなく, Pod 単位でメトリクスを集計するような変更のようです.
- [Scheduling Framework] スケジューラの設定に podInitialBackoffDurationSeconds と podMaxBackoffDurationSeconds を追加 ([#81263](https://github.com/kubernetes/kubernetes/pull/81263), [@draveness](https://github.com/draveness))
- [Scheduling Framework] framework のインタフェースに Kubernetes クライアントを返す ClientSet を追加 ([#82432](https://github.com/kubernetes/kubernetes/pull/82432), [@draveness](https://github.com/draveness))
- [Scheduling Framework] スケジューラ API から MaxPriority を削除 (代わりに MaxNodeScore または MaxExtenderPriority を使って下さい.) ([#83386](https://github.com/kubernetes/kubernetes/pull/83386), [@draveness](https://github.com/draveness))
- [Scheduling Framework] ScoreWithNormalizePlugin を ScorePlugin へ統合 ([#83042](https://github.com/kubernetes/kubernetes/pull/83042), [@draveness](https://github.com/draveness))
- [Scheduling Framework] PreFilter プラグインで計算済みのステートから Pod を追加･削除するための API を追加 ([#82912](https://github.com/kubernetes/kubernetes/pull/82912), [@ahg](https://github.com/ahg-g))
- [Scheduling Framework] PluginContext と ContextData に Clone メソッドを追加 ([#82951](https://github.com/kubernetes/kubernetes/pull/82951), [@ahg](https://github.com/ahg-g))
- [Scheduling Framework] Filter AIP の変更 ([#82842](https://github.com/kubernetes/kubernetes/pull/82842), [@ahg](https://github.com/ahg-g))
    - :memo: Filter() API に Node 名だけでなく Node の情報を含む構造体を渡すようになったようです.
- クリティカル Pod が kube-system ではない Namespace に作れるようになります. クリティカル Pod を kube-system のみで作れるようにするためにはクラスタ管理者が AdmissionConfiguration ファイルを用意して, デフォルトでクリティカル Pod の作成を制限した上で, kube-system に Quota オブジェクトを作成してクリティカル Pod の作成を許容するようにする必要があります. 詳しくはこちらを確認して下さい. https://kubernetes.io/docs/concepts/policy/resource-quotas/&#35;limit-priority-class-consumption-by-default ([#76310](https://github.com/kubernetes/kubernetes/pull/76310), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla))
- [Scheduling Framework] Scheduler ComponentConfig のいくつかのフィールドがポインタを利用するように変更 ([#83619](https://github.com/kubernetes/kubernetes/pull/83619), [@damemi](https://github.com/damemi))
    - :memo: いくつかのフィールドで nil を許容するようにするための修正のようです.
- Scheduler Policy API にスケジューラ API グループ kubescheduler.config.k8s.io と一貫性のある新しい API バージョン kubescheduler.config.k8s.io/v1 が追加されます. これは古い API バージョン v1 と同じ API を持ちます. ([#83578](https://github.com/kubernetes/kubernetes/pull/83578), [@Huang](https://github.com/Huang-Wei))
- [Scheduling Framework] PluginContext の名前を CycleState へ変更 ([#83430](https://github.com/kubernetes/kubernetes/pull/83430), [@draveness](https://github.com/draveness))
- scheduler extender API のフィールドが pkg/scheduler/api から pkg/scheduler/apis/extender/v1 へ移動 ([#83262](https://github.com/kubernetes/kubernetes/pull/83262), [@Huang](https://github.com/Huang-Wei))
- kube-scheduler が不正な形式の v1alpha1 の ComponentConfig を利用したときに警告を出すよう変更 ([#84129](https://github.com/kubernetes/kubernetes/pull/84129), [@obitech](https://github.com/obitech))
- kube-scheduler が events.k8s.io/v1beta1 が利用できない場合には core/v1 の Event を使うよう修正 ([#83692](https://github.com/kubernetes/kubernetes/pull/83692), [@yastij](https://github.com/yastij))
- [Scheduling Framework] プラグインが内部で利用する Node のスコアのレンジを [0, 10] から [0, 100] へ変更 ([#83522](https://github.com/kubernetes/kubernetes/pull/83522), [@draveness](https://github.com/draveness))