はじめに
ここでは, Kubernetes 1.17 の CHANGELOG から SIG Scheduling に関係のあるものを抜粋しています.
主な変更点 (1.17 What's New)
該当なし
アップグレード時の注意点 (Urgent Upgrade Notes)
- kubeadm の設定で kube-apiserver の authorization-mode を指定する際に, これまでデフォルトで先頭に付けられていた
Node,RBAC
が付与されなくなります. これにより authorization-mode を完全に上書きできるようになります. (#82616, @ghouscht)
注目機能 (Notable Features)
Stable
- ScheduleDaemonSetPods が GA となります. (この feature gate は 1.18 で削除されます.) (#82795, @draveness)
-
ScheduleDaemonSetPods は DaemonSet のスケジューリングに DaemonSet コントローラではなくデフォルトスケジューラを利用するためのモードです. DaemonSet コントローラによってスケジュールされる場合には次のような問題がありました.
- 通常の Pod は作成後に
Pending
となるが, DaemonSet の Pod の場合はPending
にならない. - Pod の preemption はデフォルトスケジューラが行うため, DaemonSet コントローラによるスケジューリングに Pod の priority や preemption が考慮されない.
- 通常の Pod は作成後に
-
- TaintNodesByCondition が GA となります. (この feature gate は 1.18 で削除されます.) (#82703, @draveness)
-
TaintNodesByCondition は Node の readiness やリソース使用状況などのコンディションに応じて Node に Taint を付与するモードです.
-
- ResourceQuotaScopeSelectors が GA となります. (この feature gate は 1.18 で削除されます.) (#82690, @draveness)
Beta
該当なし
Alpha
該当なし
その他の変更 (Other Notable Changes)
ここにかかれているものは半数以上が Scheduling Framework の実装に関するものです. それ以外のものと区別が付くように Scheduling Framework に関連するものは先頭に [Scheduling Framework] という接頭辞を付けています.
- スケジューラポリシーの検証時に RequestedToCapacityRatio の重複のみを検証するようにし, 他のカスタムな predicates/priorities を許容するよう変更 (#84646, @liu)
- scheduler policy の設定を複数回宣言できないよう変更 (#83963, @damemi)
- TaintNodesByCondition が GA へ変更. CheckNodeMemoryPressure, CheckNodePIDPressure, CheckNodeDiskPressure, CheckNodeCondition が削除. (代わりに CheckNodeUnschedulablePred が利用可能) (#84152, @draveness)
- [Scheduling Framework] Filter プラグインに PodFitsHostPorts が追加 (#83659, @wgliang)
- [Scheduling Framework] Filter プラグインに PodFitsResources が追加 (#83650, @wgliang)
- [Scheduling Framework] Filter プラグインに PodMatchNodeSelector/NodAffinity が追加 (#83660, @wgliang)
- generic_scheduler にトレースするステップを追加 (#83539, @wgliang)
- [Scheduling Framework] Filter プラグインに PodFitsHost が追加 (#83662, @wgliang)
- PodAffinity の利用時に kube-scheduler が panic する問題を修正 (#82841, @Huang)
- [Scheduling Framework] Schedule() 関数の受けるコンテクストの仮引数の位置を第一仮引数に変更. (#82119, @wgliang)
- [Scheduling Framework] 複数の PluginConfig がある場合に正しい引数が PluginFactory へ渡されない問題を修正 (#82483, @everpeace)
- kube-scheduler のプロファイリングをデフォルトで有効化 (#84835, @denkensk)
- スケジューラがキャッシュサイズのメトリクスをレポートするよう変更 (#83508, @damemi)
- [Scheduling Framework] 利用者が ComponentConfig を利用して NodeLabel を設定できるよう変更 (#84297, @liu)
- preferredDuringSchedulingIgnoredDuringExecution を利用する inter-pod affinity の処理を最大で 4 倍高速化 (#84264, @ahg)
- [Scheduling Framework] Filter Plugin に cloud provider storage を判定するためのものを追加 (#84148, @gongguan)
- [Scheduling Framework] Permit API のリファクタリング (#83756, @hex108)
- スケジューラーのキューに新しく追加された Pod に関するメトリクスをレポートするよう変更 (#83577, @liu)
- kube-scheduler がログレベルを動的な変更をサポート (#83910, @mrkm4ntr)
- [Scheduling Framework] レイテンシとリクエスト数に関するメトリクスを追加 (#83569, @liu)
- [Scheduling Framework] framework のインタフェースに SharedInformerFactory を追加 (#83663, @draveness)
- [Scheduling Framework] 一度または複数のスケジューリングの試行を通して Pod ごとのメトリクスをレポートするよう変更 (#83674, @liu)
-
スケジューリングの試行の単位でなく, Pod 単位でメトリクスを集計するような変更のようです.
-
- [Scheduling Framework] スケジューラの設定に podInitialBackoffDurationSeconds と podMaxBackoffDurationSeconds を追加 (#81263, @draveness)
- [Scheduling Framework] framework のインタフェースに Kubernetes クライアントを返す ClientSet を追加 (#82432, @draveness)
- [Scheduling Framework] スケジューラ API から MaxPriority を削除 (代わりに MaxNodeScore または MaxExtenderPriority を使って下さい.) (#83386, @draveness)
- [Scheduling Framework] ScoreWithNormalizePlugin を ScorePlugin へ統合 (#83042, @draveness)
- [Scheduling Framework] PreFilter プラグインで計算済みのステートから Pod を追加・削除するための API を追加 (#82912, @ahg)
- [Scheduling Framework] PluginContext と ContextData に Clone メソッドを追加 (#82951, @ahg)
- [Scheduling Framework] Filter AIP の変更 (#82842, @ahg)
-
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/#limit-priority-class-consumption-by-default (#76310, @ravisantoshgudimetla)
- [Scheduling Framework] Scheduler ComponentConfig のいくつかのフィールドがポインタを利用するように変更 (#83619, @damemi)
-
いくつかのフィールドで nil を許容するようにするための修正のようです.
-
- Scheduler Policy API にスケジューラ API グループ kubescheduler.config.k8s.io と一貫性のある新しい API バージョン kubescheduler.config.k8s.io/v1 が追加されます. これは古い API バージョン v1 と同じ API を持ちます. (#83578, @Huang)
- [Scheduling Framework] PluginContext の名前を CycleState へ変更 (#83430, @draveness)
- scheduler extender API のフィールドが pkg/scheduler/api から pkg/scheduler/apis/extender/v1 へ移動 (#83262, @Huang)
- kube-scheduler が不正な形式の v1alpha1 の ComponentConfig を利用したときに警告を出すよう変更 (#84129, @obitech)
- kube-scheduler が events.k8s.io/v1beta1 が利用できない場合には core/v1 の Event を使うよう修正 (#83692, @yastij)
- [Scheduling Framework] プラグインが内部で利用する Node のスコアのレンジを [0, 10] から [0, 100] へ変更 (#83522, @draveness)