1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes 1.33: SIG-Scheduling の変更内容

Last updated at Posted at 2025-05-14

Kubernetes 1.33 の CHANGELOG から、SIG-Scheduling に関するところを抜粋して紹介します。 :pencil: は筆者によるコメントです。

過去 3 リリースの変更内容:

:pencil: 所感

SIG-Scheduling 含め複数の SIG にまたがる大きな機能の開発が進んでいます。
ついに InPlacePodVerticalScaling (KEP-1287) がベータに昇格しました。
デフォルトで有効ですが、Pod の /resize サブリソースを介してリソース量を変更する API なので、ユーザが使えるかどうかは RBAC で制御できます。
なお、Deployment や StatefulSet の Pod template を変更したときについては、KEP では予定されているものの 1.33 時点では未実装です。
仕様もスケッチ段階で、RBAC との整合性などがどうなるか気になるところです。

Dynamic Resource Allocation (DRA) のコア機能は 1.32 でベータに昇格していましたが、関連機能がいくつも開発されています。
個人的に注目しているのは device taints/tolerations (KEP-5055) です。
ノード単位ではなくデバイス単位で taint を設定できるようになるため、より細粒度にデバイスのメンテナンスができるようになります。

スケジューラに限った機能だと、SchedulerPopFromBackoffQ (KEP-5142) と SchedulerAsyncPreemption (KEP-4832) という二つの機能がベータ段階に昇格しました。
とくに後者は、計算リソースが有限であるなどの、プリエンプションが多い環境でスケジューリングスループットを向上させることが期待でき、注目しています。

Urgent Upgrade Notes

SIG-Scheduling に関するものはありません。

Changes by Kind

Deprecation

  • 利用可能なストレージ容量によってノードをスコアリングするための StorageCapacityScoring フィーチャゲートが追加されました。これはアルファ段階であり、デフォルトでは無効です。VolumeCapacityPriority アルファ機能はこれに置き換えられ、デフォルトの動作が変更されました。VolumeCapacityPriority は割り当て可能な容量が最も少ないノードを優先しましたが、StorageCapacityScoring は割り当て可能な容量が最も多いノードを優先します。詳細は KEP-4049 を参照してください。(#128184, @cupnes) [SIG Scheduling, Storage and Testing]
    • :pencil: デフォルトでは空き容量が多いノードを優先しますが、VolumeBinding スケジューラプラグインの設定で、空き容量が少ないノードを優先することもできます。
  • Pod の status.resize フィールドは非推奨となり、今後は設定されません。Pod のリサイズ状況は、代わりに PodResizeInProgressPodResizePending という二つの新しい conditions に公開されるようになります。(#130733, @natasha41575) [SIG API Machinery, Apps, CLI, Node, Scheduling and Testing]

API Change

  • フィーチャゲート DRAPartitionableDevices を追加しました。有効にすると、Dynamic Resource Allocation (DRA) が分割可能なデバイスの割り当てをサポートします。(#130764, @cici37) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Scheduling, Storage and Testing]
  • DRA で ResourceClaim 内にデバイス要求の基準を「いずれか一つ」の優先順位付けされたリストで記述できるようになりました。(#128586, @mortent) [SIG API Machinery, Apps, Etcd, Node, Scheduling and Testing]
    • :pencil: KEP-4816 で提案された機能で、例えば「大きい GPU 一つ、それが割り当てられない場合は小さい GPU 二つ」というような要求が書けるようになりました。
  • サイドカーコンテナ(initContainers 内で定義され、restartPolicyAlways に設定されているコンテナ)の in-place vertical scaling がサポートされました。(#128367, @vivzbansal) [SIG API Machinery, Apps, CLI, Node, Scheduling and Testing]
  • Pod レベルのリソースのため、Pod API が spec レベルで hugepages リソースをサポートするように変更されました。(#130577, @KevinTMtz) [SIG Apps, CLI, Node, Scheduling, Storage and Testing]
  • DRA: デバイス taint により、DRA ドライバまたは管理者はデバイスを使用不可としてマークでき、これによりデバイスの割り当てが防止されます。デバイスが使用不可になった場合、taint の重大性および claim がその taint を許容するかにおうじて、Pod が実行時に退避させられることもあります。(#130447, @pohly) [SIG API Machinery, Apps, Architecture, Auth, Etcd, Instrumentation, Node, Scheduling and Testing]
    • :pencil: KEP-5055 で提案された機能で、ノード単位ではなくデバイス単位で taint を設定できます。
  • PodAffinity / PodAntiAffinity の MatchLabelKeys / MismatchLabelKeys 機能を GA に昇格しました。(#130463, @sanposhiho) [SIG API Machinery, Apps, Node, Scheduling and Testing]
    • :pencil: ラベルのキーだけ指定し、同じ値をもつ Pod をアフィニティの計算対象に入れる機能です。1.31 からデフォルトで有効です。
  • Pod 作成時に Kubernetes で NodeSelectorRequirement の値に対する検証を実装しました。(#128212, @AxeZhan) [SIG Apps and Scheduling]
    • :pencil: nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions.values の検証が漏れており、不正な値であっても Pod が作成できてしまうが、スケジューラによるパースに失敗するのでスケジュールされないというバグが修正されました。
  • NodeInclusionPolicyInPodTopologySpread をで Stable (安定版) に昇格しました。(#130920, @kerthcet) [SIG Apps, Node, Scheduling and Testing]
    • :pencil: Pod のトポロジ分散の歪みを計算する際に、taint をもつノードを除外できるようにする機能です。1.26 からデフォルトで有効です。
  • フィーチャゲート InPlacePodVerticalScalingAllocatedStatus は非推奨となり、使用されなくなりました。ContainerStatusAllocatedResources フィールドは、InPlacePodVerticalScaling フィーチャゲートによってガードされるようになりました。(#130880, @tallclair) [SIG CLI, Node and Scheduling]
  • PodObservedGenerationTracking フィーチャゲートが有効な場合、kube-scheduler は Pod の conditions に observedGeneration フィールドを設定します。(#130649, @natasha41575) [SIG Node, Scheduling and Testing]
    • :pencil: In-place Update of Pod Resources により Pod spec が更新できるようになったため、どの Pod spec の世代 (.metadata.generation) を参照しているのかを明示する必要が生まれました。kube-scheduler の他に kube-controller-manager や kubelet もこのフィールドを設定します。
  • resource.k8s.io/v1beta1 API は非推奨となり、1.36 で削除される予定です。代わりに v1beta2 を使用してください。(#129970, @mortent) [SIG API Machinery, Apps, Auth, Etcd, Node, Scheduling and Testing]
    • :pencil: 主に KEP-4816 による API の変更に伴うものです。

Feature

  • SchedulerPopFromBackoffQ フィーチャゲートが追加されました。これはベータ段階であり、デフォルトで有効です。ActiveQ が空のときに backoffQ から Pod を取り出すことで、スケジューリングキューの動作が改善されました。スケジュール可能性のある Pod をできるだけ早く処理し、backoff キューのペナルティ効果を排除します。(#130772, @macsko) [SIG Scheduling and Testing]
    • :pencil: KEP-5142 で提案された機能です。スケジューラをアイドル状態にするのではなく、backoff ペナルティを受けている Pod のスケジュールを試します。PreEnqueue プラグインが呼ばれるタイミングが、Pod が activeQ に入る前から backoffQ に入る前に変更されたことに注意が必要です。
  • kube-scheduler に /flagz HTTP エンドポイントが追加されました。(#128818, @yongruilin) [SIG Architecture, Instrumentation, Scheduling and Testing]
  • kube-scheduler 用に /statusz エンドポイントが追加されました。(#128987, @Henrywu573) [SIG Instrumentation, Scheduling and Testing]
  • スケジューラフレームワークで Pod を NodeInfo に追加する際に、計算された Pod リソースがキャッシュされるようになり、スケジュール不可能な Pod を処理する際のパフォーマンスが向上しました。(#129635, @macsko) [SIG Scheduling]
    • :pencil: プリエンプション処理のスループットが scheduler_perf のベンチマークで最大 30 % 向上したようです。
  • 非同期プリエンプション機能がベータに昇格しました。現在、フィーチャーフラグ SchedulerAsyncPreemption はデフォルトで有効です。(#130550, @sanposhiho) [SIG Scheduling]
    • :pencil: KEP-4832 で提案された機能です。プリエンプションでは Pod を削除する API を呼び、その間スケジューリング処理を待たせてしまいます。これを非同期にし、並行して他の Pod のスケジューリングを進められるようにすることでスループットを向上させます。
  • PreBind または Bind でスケジューリングが失敗した場合、スケジューラは失敗の理由に関わらず、バックオフ時間の直後に失敗した Pod を再試行します。この場合、再試行前に EventsToRegister (Queueing Hints) は考慮されません。(#130189, @ania-borowiec) [SIG Scheduling]
    • :pencil: PreBind プラグインを呼ぶ前に Pod を「スケジューリング処理中の Pod リスト」から取り除くことで、スケジューラのメモリ使用量を削減します。
  • 必須のトポロジ分散をもつ Pod をスケジューリングする際のパフォーマンスが改善されました。(#129119, @macsko) [SIG Scheduling]
    • :pencil: 同じキーをもつトポロジ分散制約が複数あるときの計算が間違っているバグがありました。この修正と同時に、パフォーマンスも改善しました。
  • スケジューリングフレームワークが NodeInfo を Score プラグインに公開するようになりました。(#130537, @saintube) [SIG Scheduling, Storage and Testing]
    • :pencil: Score メソッドのシグネチャが変更されているので、カスタムスケジューラを実装している場合は注意してください。
  • SidecarContainers 機能が GA に昇格しました。SidecarContainers フィーチャゲートはデフォルト値に固定され、v1.36 で削除される予定です。このフィーチャゲートを明示的に設定していた場合は、削除してください。(#129731, @gjkim42) [SIG Apps, Node, Scheduling and Testing]
  • 利用可能なストレージ容量によってノードをスコアリングするための StorageCapacityScoring フィーチャゲートが追加されました。これはアルファ段階であり、デフォルトでは無効です。VolumeCapacityPriority アルファ機能はこれに置き換えられ、デフォルトの動作が変更されました。VolumeCapacityPriority は割り当て可能な容量が最も少ないノードを優先しましたが、StorageCapacityScoring は割り当て可能な容量が最も多いノードを優先します。詳細は KEP-4049 を参照してください。(#128184, @cupnes) [SIG Scheduling, Storage and Testing]

Documentation

SIG-Scheduling に関するものはありません。

Bug or Regression

  • DRA: ResourceClaims を使用していない Pod が他の理由でスケジュール不可能だった場合に、その理由の説明に "no new claims to deallocate" という不要な情報が含まれていました。(#129823, @googs1025) [SIG Node and Scheduling]
  • Nominated node の変更を正しく処理するようにスケジューリングの動作を修正しました。Nominated node 名が削除されたり、別のノードに変更されたりした場合に、必要に応じて Pod の再スケジューリングをトリガーします。(#129058, @dom4ha) [SIG Scheduling, Storage and Testing]
  • BalancedAllocation プラグインは、すべてのベストエフォート(リソース要求をもたない)Pod をスキップするようになりました。(#130260, @Bowser1704)
    • :pencil: BalancedAllocation プラグインは、(デフォルトでは)CPU とメモリのリソース使用率が均等に近くなるようにノードをスコアリングします。この計算に不備があり、ベストエフォート Pod が特定のノードに偏ってスケジュールされることがありました。

Other (Cleanup or Flake)

  • Pod がラベルセレクタに一致しないボリュームをアタッチしようとしたときに表示されるエラーメッセージを、"x node(s) had volume node affinity conflict" から "x node(s) didn't match PersistentVolume's node affinity" に変更しました。(#129887, @rhrmo) [SIG Scheduling and Storage]
  • scheduler_cache_size メトリクスを実装しました。また、scheduler_scheduler_cache_size メトリクスは非推奨となり scheduler_cache_size に置き換えられ、v1.34 で削除される予定です。(#128810, @googs1025)
  • 非推奨となっていた pod_scheduling_duration_seconds メトリクスを削除しました。ユーザーは pod_scheduling_sli_duration_seconds に移行する必要があります。(#128906, @sanposhiho) [SIG Instrumentation and Scheduling]
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?