本記事は、Kubernetes 変更内容共有会(v1.34) の SIG-Node(kubelet)に関する資料として準備されました。
Kubernetes 1.34の CHANGELOG から、SIG-Nodeに関するところを抜粋して紹介します。
は筆者(@y1r96)による補足です。
所感
今回の Kubernetes 1.34 の SIG-Node (kubelet) の変更内容で、印象に残ったいくつかの機能を紹介します。
Container Restart Policy
Container restart rules to customize the pod restart policy (KEP-5307) は、Kubernetes 1.34 で Alpha として導入された新しい機能です。
AI / ML ワークロードのような多数の Pod を同時に利用するワークロードでは、あるプロセスが失敗した場合に Pod をそのままリスタートせずとも、コンテナのみをリスタートすれば十分な場合があります。
しかし、ハードウェア障害のようにコンテナのみをリスタートしても解決しない場合もあります。
これを解決する方法として、コンテナの終了コードをもとにコンテナをリスタートするか、そのまま Pod を終了するか、Pod をリスタートするかを選択できたら便利です。
これを実現するのが Container Restart Policy です。
ただ、 KEP にもあるとおり、このような機能の実装は、エントリポイントを工夫して終了コードをもとに再起動させたり終了させたりすることでも実現可能です。
また、多数の Pod を同時に利用するワークロードの一部には、一部のコンテナを再起動しても解決せず、すべてのコンテナをまとめて再起動したりする必要がある場合も考えられ、
この KEP を拡張して利用することが必要になる場合もある、と感じました。
Support for env files
Support for env files (KEP-3721) は、Kubernetes 1.34 で Alpha として導入された新しい機能です。
これまでのコンテナの環境変数を設定する方法としては、 env を利用して直接指定する方法や、 envFrom を利用して ConfigMap や Secret から設定する方法がありました。
この KEP では、 emptyDir Volume にマウントされたファイルから環境変数を設定する env.fileKeyRef フィールドを追加しています。
例えば initContainer で、特別な操作(API を叩いてトークンを取得する、ハードウェアの情報を収集するなど)を行い、その結果をファイルに保存し、メインのコンテナでそのファイルを読み込んで環境変数として利用する、というユースケースが考えられます。
これまでも同様の操作は、メインのコンテナでそのファイルを読み込み環境変数に設定し、その後本来のプロセスを起動するようなエントリポイントを設定することで実現可能でしたが、 shell が利用できるコンテナイメージである必要があったり、エントリポイントのスクリプトが複雑になったりするなど、いくつかの制約がありました。
実際、筆者も MPI / NCCL という AI / ML 系のワークロードを実行するコントローラを開発する際に、同様の課題に直面し、面倒なエントリポイントのスクリプトを作成した経験があります。
この KEP により、initContainer を差し込み、Container の Env だけ更新すればそれができるようになるため、非常に頑健な仕組みかつコンテナイメージへの依存がより少なくなり、とても便利になると感じました。
Projected service account tokens for Kubelet image credential providers
Projected service account tokens for Kubelet image credential providers (KEP-4412) は、Kubernetes 1.34 で Beta に昇格した機能です。
Kubernetes の Service Account は、Bound SA の導入によりオブジェクトと紐付けて短命とすることができるようになりました。
しかし、imagePullSecret については、Secret として存在しているため長命であり、従来の Kubelet image credential provider を使った方法では、ノード単位で同一の認証情報を利用するため、細粒度なアクセス制御が行えませんでした。
この KEP では、Kubelet image credential provider が Service Account Token を利用できるようにすることで、Pod 単位で細粒度かつ短命なアクセス制御を実現しています。
また Ensure secret pulled images (KEP-2535) との同時の利用も考えられており、
イメージプルに使用された認証情報を Kubelet がキャッシュし、同じ認証情報を必要とする後続の Pod で再利用できるようにする・逆に認証情報が異なる場合は認証を行うことも可能になります。
これまで認証を都度行いたい場合は、imagePullPolicy: Always を指定する必要がありましたが、これによりキャッシュを利用できるようになるため、イメージプルのパフォーマンスも向上します。
詳しくは SIG-Auth の変更内容も参照してください。
Dynamic Resource Allocation (DRA)
DRA (Dynamic Resource Allocation) は、これまでの device plugin よりも柔軟にデバイスを管理できる仕組みとして継続的に開発が行われており、Kubernetes 1.34 ではコア機能が GA になりました。
依然として開発が続けられており、Kubernetes 1.34 ではいくつかの新しい機能が Alpha として導入されています。
Consumable Capacity / 消費可能なキャパシティ
Consumable Capacity (KEP-5075) は、Kubernetes 1.34 で Alpha として導入された新しい機能です。
Consumable Capacity は、DRA の機能の一つで、デバイスを複数の ResourceClaim 間で共有して利用できるようにする機能です。
また、デバイスによっては無尽蔵に共有できるわけではなく、限られた帯域幅やメモリ容量、IOPSなどのリソースをもつ場合もあり、これを考慮して「多すぎない範囲で」共有することが必要になる場合もあります。
この KEP では、DRA driver が広報する ResourceSlice で、どのようなリソースが存在し、それらがどのように分割可能であるかを定義できるようにしています。
対して、利用者が記述する ResourceSlice で、どのようなリソースが必要であるかを定義することで、うまくリソースを分割して利用できるようにしています。
Device Binding Conditions / デバイスバインディング条件
Device Binding Conditions (KEP-5007) は、Kubernetes 1.34 で Alpha として導入された新しい機能です。
デバイスによっては、特定の前提条件が満たされないと利用できない場合があります。
適切に前回の状態がクリーンアップされている必要があったり、それを外部のソフトウェアやコントローラが担っている場合には、非同期で状態が変化することもあります。
この KEP では、Scheduler の PreBind でデバイスが利用できる状態かどうかをチェックし、タイムアウトまでの間に利用できるようになるか、ならなければエラーにする、という仕組みを導入しています。
Extended Resource / 拡張リソース
Handle extended resource requests via DRA Driver (KEP-5004) は、Kubernetes 1.34 で Alpha として導入された新しい機能です。
Extended Resource は、device plugin で利用されている機能で、GPU などのリソースを resources.limits や resources.requests で指定できるようにする仕組みです。
DRA の文脈では、別途 ResourceClaim を定義し Pod に紐付ける必要があり、自由度が高い反面、すべての機能を利用しないユーザにとっては煩雑なものでした。
この KEP では DRA を基盤としつつ Extended Resource 経由で DRA デバイスを利用できるようにすることで、より簡単に DRA デバイスを利用できるようにしています。
クラスタ管理者が DeviceClass を定義し、その中で extendedResourceName を指定することで、どのような名前で ResourceSlice を広報するかを決定できます。
DeviceClass では、CEL 式を利用してどのような ResourceSlice をグルーピングして広報するかを定義できます。
これにより、クラスタ管理者が DRA を理解していれば、利用者が DRA の詳細を知らなくても Extended Resource 経由で DRA デバイスを利用できるようになります。
以下は Kubernetes 1.34 の CHANGELOG の PLaMo 翻訳による和訳です(一部著者により修正・補足あり)。
Urgent Upgrade Notes
(No, really, you MUST read this before you upgrade)
- Kubelet: コマンドラインから非推奨のフラグ
--cloud-configを削除しました。(#130161、@carlory) [SIG Cloud Provider, Node and Scalability] - API オブジェクトを参照する Static Pod については、 Mirror Pod の作成に失敗しても自動的に実行状態にならないよう、kubeletによる起動が拒否されるようになりました(#131837、@sreeram-venkitesh) [SIG Auth, Node, and Testing]
-
ここでの API オブジェクトとは、 ServiceAccount, Secret, ConfigMap, ResourceClaim, その他外部オブジェクトを参照する Volume などを指します。
-
Changes by Kind
Deprecation
- DRA kubelet: gRPC API がバージョン v1 に移行し、v1beta1 は 1.34 バージョンから非推奨となりました。1.34 以降の DRA ドライバーを
k8s.io/dynamic-resource-allocation/kubeletpluginヘルパーに更新することで、両 API バージョンへの対応が可能になりました。(#132700、@pohly) [SIG Node and Testing]-
この変更の影響を受けるのは、Dynamic Resource Allocation (DRA) を利用するドライバー開発者のみです。DRA ドライバーを開発していない一般のユーザは影響ありません。
-
API Change
- In-place Pod Vertical Scaling が完了した際の詳細なイベントログを追加し、クラスタ管理とデバッグ機能を向上しました。(#130387、@shiya0705) [SIG API Machinery, Apps, Autoscaling, Node, Scheduling, Testing]
- 設定可能なコンテナ再起動メカニズムを追加:コンテナレベルの再起動ルール。これは
ContainerRestartRulesfeature gate の alpha として実装されました。(#132642、@yuanwang04) [SIG API Machinery, Apps, Node and Testing]-
所感で説明している機能です。
-
- コンテナに新しい
FileKeyRefフィールドを追加しました。このフィールドを設定することで、コンテナがファイルから変数を読み込めるようになりました。また、この機能の有効化を制御するためのEnvFilesfeature gate を導入しました。(#132626、@HirazawaUi) [SIG API Machinery, Apps, Node and Testing]-
所感で説明している機能です。
-
- DRA: Consumable Capacity (KEP-5075) / 消費可能なキャパシティ
-
ResourceSliceにドライバ所有のフィールドを追加し、デバイスが複数のリソース請求(またはリクエスト)間で共有可能かどうか、および各容量をどのように異なるリクエスト間で分配するかを明示的に指定可能にしました。 -
ResourceClaimにユーザ所有のフィールドを追加し、各デバイスの容量に対する具体的なリソース要件を指定できるようにしました。 -
ResourceClaim.Statusにスケジューラ所有のフィールドを追加し、特定のリクエストに対してどの程度のデバイス容量が予約されているかを明確に指定できるようにしました。 - デバイスが複数の割り当てをサポートしている場合に対応するため、
ResourceClaim.Statusに新たな識別子を追加しました。 - 割り当て済みデバイス全体で指定された属性の一意性を保証するため、新規の制約タイプを導入しました。
- (#132522, @sunya-ch) [SIG API Machinery, Apps, Architecture, CLI, Cluster Lifecycle, Network, Node, Release, Scheduling and Testing]
-
所感で説明している機能です。
-
-
ResouceSlice.BasicおよびResourceClaim.Status.AllocatedDeviceStatusに新しいオプションAPIを追加しました。(#130160、@KobayashiD27) [SIG API Machinery, Apps, Architecture, Node, Release, Scheduling and Testing]-
これは DRA: device binding conditions (KEP-5007) の一部です。所感で説明している機能です。
-
- Dynamic Resource Allocation (DRA) によって割り当てられたデバイスの健全性を監視し、
pod.status.containerStatuses.allocatedResourcesStatusフィールドに報告する機能を Kubelet に追加しました。この機能を実現するため、DRA プラグインには新しい v1alpha1NodeHealthgRPC サービスの実装が必要となりました。この機能の有効化/無効化はResourceHealthStatusfeature gate で制御されます。(#130606、@Jpsassine) [SIG Apps, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Etcd, Network, Node, Release, Scheduling, Storage and Testing] - kubeletの Image Pull Credential Tracking において、 Service Account ベースの認証サポートを追加しました。外部認証プロバイダーを介して Service Account 認証情報を使用してイメージプルした場合、同じ Service Account (UID, name, namespace) を使用する後続のPodは、その Service Account の有効期間中、再認証なしでキャッシュされたイメージを利用できます。(#132771、@aramase) [SIG Auth, Node and Testing]
-
所感で説明している機能です。
-
- Windows OS 環境で
PodLevelResources機能が未サポートであることを理由に、同機能を使用する Pod を拒否するための検証ロジックを追加しました。API サーバーは、pod-level リソースを含み、かつPod.spec.os.nameで Windows をターゲットとする Pod を拒否します。また、Windows を実行しているノード上の Kubelet も、 admission 段階で pod-level リソースを含む Pod を拒否するようになりました。(#133046、@toVersus) [SIG Apps and Node] -
Eviction Managerヘルパー関数の基盤となるロジックを変更しました。(#132277、@KevinTMtz) [SIG Node, Scheduling and Testing]-
Eviction Manager は kubelet のコンポーネントで、ノードのリソースが逼迫した際に Pod の強制終了(Eviction)を行います。この変更では、PodLevelResource が有効な場合に、Eviction 時のメッセージとして PodLevelResource の情報を含めるようにしました。
-
- PodLevelResources: Podレベルのhugepage cgroupをコンテナに伝播
- Podレベルでhugepageリソースを指定していない場合、Podレベルのhugepage cgroupをコンテナに自動的に適用するよう内部ロジックを変更しました。
- hugepageリソースの集約上限値がPodレベルの上限値を超えないようにする検証機能を追加しました。従来はデフォルト値として設定されたリクエスト値によってこの制限が自動的に適用されていましたが、リクエスト値と上限値の両方について明確な表示がなされていませんでした。
- (#131089、@KevinTMtz) [SIG Apps, Node and Testing]
- DRA API: resource.k8s.io/v1alpha3 は現在、DeviceTaintRule のみを含むようになりました。v1beta1 API が 1.32 で導入された際に他のすべてのタイプは非推奨となったため、削除されています。Kubernetes 1.32 未満の環境で resourceclaims、resourceclaimtemplates、deviceclasses、resourceslices が保存されていたクラスターを更新する前には、これらのリソースをすべて削除してください。その後、Kubernetes 1.32 以上の環境で必要に応じて再作成します。(#132000、@pohly) [SIG Etcd, Node, Scheduling and Testing]
- DRA: Kubernetes 1.34 以降、アルファ版機能の
resource.k8s.io/admin-accessラベルがresource.kubernetes.io/admin-accessに更新されました。アルファ版機能を使用している管理者が 1.33 からアップグレードする場合、両方のラベルを設定した後、ダウングレードの予定がなくなった時点でresource.k8s.io/admin-accessラベルを削除できます。(#131996、@ritazh) [SIG Node and Testing] [sig/node, sig/testing] - DRA: v1alpha4 バージョンの kubelet gRPC API のサポートを削除しました(1.31 で追加され、1.32 で非推奨となりました)。Kubernetes 1.32 以降のヘルパーパッケージを使用する DRA ドライバーは v1beta1 API を使用し、引き続きサポートされます。(#132574、@pohly) [sig/node]
-
この変更の影響を受けるのは、Dynamic Resource Allocation (DRA) を利用するドライバー開発者のみです。DRA ドライバーを開発していない一般のユーザは影響ありません。
-
- kubelet設定ファイルから非推奨の
StreamingConnectionIdleTimeoutフィールドを削除しました。(#131992、@lalitc375) [sig/node] - Dynamic Resource Allocation: コア機能が General availability (GA) になりました。この stable になった機能は structured parameters を利用する版の DRA です。 (#132706, @pohly) [SIG API Machinery, Apps, Auth, Autoscaling, Etcd, Node, Scheduling and Testing]
- DRA(Dynamic Resource Allocation)に対応した Extended Resource 用の kubelet と scheduler
-
KubeletTracingfeature gate が General availability (GA) になりました。 (#132341, @dashpole) [SIG Instrumentation and Node] -
RelaxedEnvironmentVariableValidationfeature gate が General availability (GA) になり、デフォルトで有効な状態に固定されました。 (#132054, @HirazawaUi) [SIG Apps, Architecture, Node and Testing] -
k8s.io/kubelet/pkg/apis/pluginregistrationから非推奨となったgogoプロトコル定義を削除し、代わりにgoogle.golang.org/protobufを使用するように変更しました。(#132773、@saschagrunert) [SIG Node] -
k8s.io/cri-apiから非推奨となった gogo プロトコル定義を削除し、代わりにgoogle.golang.org/protobufを使用するように変更しました。(#128653、@saschagrunert) [SIG API Machinery, Auth, Instrumentation, Node and Testing] -
KubeletServiceAccountTokenForCredentialProviders機能はベータ版として提供されており、デフォルトで有効化されていました。(#133017、@aramase) [SIG Auth and Node]-
所感で説明している機能です。
-
-
v1Credential Provider configuration を更新し、tokenAttributes.cacheTypeフィールドを追加しました。このフィールドは必須であり、Service Account を使用してレジストリ認証情報を取得するプロバイダーを設定する際には、ServiceAccountまたはTokenのいずれかに設定する必要があります。(#132617、@aramase)[SIG Auth, Node and Testing] - Podまたはコンテナの
SecurityContextで指定されていたAppArmorプロファイルが、廃止予定のAppArmorアノテーション(prefixcontainer.apparmor.security.beta.kubernetes.io/)にコピーされなくなりました。これらの廃止予定アノテーションを検査していたシステムは、代わりにSecurityContextフィールドを使用するように移行する必要があります。(#131989、@tallclair [SIG Node]
Feature
- User Namespace が要求された場合の Pod 作成の成功/失敗を追跡するため、
started_user_namespaced_pods_totalとstarted_user_namespaced_pods_errors_totalメトリクスを追加しました。(#132902、@haircommander) [SIG Node and Testing] -
LimitedSwapスワップ動作の下でコンテナに割り当てられるスワップ制限値を公開するため、container_swap_limit_bytesメトリクスを追加しました。(#132348、@iholder101) [SIG Node and Testing] - kubelet起動後のノード状態更新に遅延時間を追加しました。設定された
nodeStatusReportFrequencyに基づいてランダムなオフセットを設定することで、ノード状態更新に伴うトラフィックと負荷をより均等に分散できるようになりました。初回の状態更新は、通常スケジュールより最大50%早くまたは遅く発生する可能性があるように変更しました。(#130919、@mengqiy) [SIG Node] -
k8s.io/dynamic-resource-allocationのdeviceattributeパッケージにおいて、DRA API バージョンをv1に更新しました。(#133164、@everpeace) [SIG Node] -
KubeletCgroupDriverFromCRIを Generally Available (GA) に昇格し、サポート対象外の CRI 実装を追跡するためのメトリクスを追加しました。(#133157、@haircommander) [SIG Node and Testing] - CRI APIのイメージプル処理において、認証フィールドが
debug_redactとしてマークされていた問題を修正しました。(#133135、@SergeyKanzhelev) [SIG Node] - DRA kubelet: 一部の追加の失敗シナリオにおいて、kubeletが
ResourceSlicesのクリーンアップも適切に処理するように修正しました(ドライバが強制削除された場合や、クラッシュ後に再起動しなかった場合など)。(#132058、@pohly) [SIG Node and Testing] -
DRAAdminAccessfeature gate がデフォルトで有効化され、ユーザーが特権モードでResourceClaimsおよびResourceClaimTemplatesを作成できるようになりました。これにより、他のユーザーが使用中のデバイスに対して、デバイスの健康状態やステータスの監視といった管理タスクのためのアクセス権を付与することが可能になります。(#133085、@ritazh) [SIG Auth and Node] - Guranteed QoS クラスの Pod が static な memory policy を利用しているときに、メモリのリサイズが
InPlacePodVerticalScalingExclusiveMemoryによって制御されるようにしました(デフォルトはfalse)。 (#132473, @pravk03) [SIG Node, Scheduling and Testing] -
kubelet_container_resize_requests_totalメトリクスの記録を修正し、コンテナサイズ変更に関連するすべての更新を記録するようにしました(#133060、@natasha41575) [SIG Node] -
PodLevelResources機能をベータ版としてリリースし、デフォルトで有効化しました。この機能により、pod.spec.resourcesで Pod 全体の CPU とメモリリソースを定義できるようになりました。(#132999、@ndixita) [SIG Node] -
PodObservedGenerationTracking機能をベータ版に移行し、デフォルトで有効化しました。この機能により、Podのstatus.observedGenerationおよびstatus.conditions[].observedGenerationフィールドに、ステータスや条件が報告された時点での Pod のmetadata.generation値が反映されるようになりました。(#132912、@natasha41575) [SIG Apps, Node and Testing] - ノードリソースが不足している場合のリサイズ要求について、
priorityClassと QoS クラスに基づく優先順位付けを実装しました。 (#132342、@natasha41575) [SIG Node and Testing]-
まず縮小が処理され、その後 priorityClassが高い順に拡張が処理されます。同一のpriorityClassの場合、Guaranteed QoS クラスの Pod が優先されます。その後は拡張要求が古い順に処理されます。ここでは、preemption や eviction はスコーブ外とされていて、高い優先度をもつ Pod のリサイズ要求であったとしても、ノードリソースが不足している場合はリサイズ要求が保留されることがあります。
-
- サードパーティ製DRAドライバ向けに、標準化されたデバイス属性
resource.kubernetes.io/pcieRootに対する共通ロジックを提供するメソッドGetPCIeRootAttributeByPCIBusID(pciBusID)を導入しました。(#132296、@everpeace) [SIG Node] - Kubelet が、CSI ボリュームのマウントに失敗し続けた場合、Pod を Failed としてマークするようになります。これにより、コントローラーが Pod を再作成できるようになり、Pod が
ContainerCreating状態で無期限に停滞するのを防ぎます。 (#132933、@torredil) [SIG Apps、Node、Storage、Testing] - kubelet が
kubelet_credential_provider_config_infoメトリクスを通じて credential provider configuration のハッシュ値を報告しました。このハッシュ値はhashラベルで公開されています。(#133016、@aramase) [SIG API Machinery and Auth] - Kubelet:
--image-credential-provider-configフラグを拡張し、単一ファイルだけでなくディレクトリパスも指定できるようにしました。ディレクトリが指定された場合、そのディレクトリ内のすべての .json、.yaml、.yml ファイルを読み込み、辞書順でマージします。(#131658、@dims) [SIG Auth and Node] -
NotRequiredリサイズ再起動ポリシーを適用することで、メモリ制限値を減少させることが可能になりました。メモリ制限値を減少させる際には、使用率を下回って OOM-kill が発動しないよう、最善の努力によるチェックを実施しています。(#133012、@tallclair) [SIG Apps, Node and Testing] - ボリューム拡張失敗時の復旧機能をGAに移行しました。(#132662、@gnufied) [SIG Apps, Auth, Node, Storage and Testing]
- Pod-level resources が有効な Pod については、CPU Manager, Memory Manager によるアラインメントや Topology Manager からのヒント生成を防止しました。(#133279, @ffromani) [SIG Node and Testing]
-
Pod-level resource では Pod 全体で CPU とメモリを指定するため、これに対する alignment は cgroup 周りに結構手を入れる必要があるはずで、実装が複雑になりそうです。
-
- Linux node pressure stall information (PSI) metrics がベータ版に昇格しました。(#132822, @roycaihw) [SIG Node]
- Pod の In-place resize に関するメトリクスの記録を開始しました。(#132903、@natasha41575) [SIG Node]
- 新しい
dra_resource_claims_in_usekubelet メトリクスにより、アクティブなResourceClaimsの総数と、ドライバー別の内訳が報告されるようになりました(#131641、@pohly) [SIG Architecture, Instrumentation, Node and Testing] - pause が
registry.k8s.io/pause:3.10.1に更新されました。 (#130713, @ArkaSaha30) [SIG Cluster Lifecycle, Node, Scheduling and Testing] -
DRAPrioritizedListがデフォルトで有効化され、ResourceClaim内で優先順位付きのサブリクエスト一覧を提供できるようになりました。(#132767、@mortent) [SIG Node, Scheduling and Test] -
PodLifecycleSleepActionが Generally Available (GA) しました。 (#132595, @AxeZhan) [SIG Apps, Node and Testing]
Failing Test
- DRA driver helper: DRA driver が使用している
resource.k8s.ioバージョンをサポートしていない Kubernetes バージョンで実行されている場合の apiserver の再起動のハンドリングを修正しました。 (#133076、@pohly) [SIG Node and Testing]
Bug or Regression
- DRA drivers:kubelet または他のコンポーネントが最近作成された ResourceSlice を削除した際に、Resource Slicer Controller が適切に反応しない問題がありました。この問題では、ResourceSlice が依然として存在すると誤って判断され、再作成が行われませんでした。(#132683, @pohly) [SIG Apps, Node and Testing]
- DRA:
adminAccessを指定して固定数のデバイスを要求する ResourceClaims が、同一デバイスを複数回割り当てられる問題を修正しました。(#131299、@nojnhuh) [SIG Node] - Pod の Preemption 時に
insufficientResourcesがポインタ形式でログに記録されていた問題を修正し、ログの可読性を向上させました。(#132183、@chrisy-x) [SIG Node] - Service Account が同名で再作成された際に、kubeletトークンキャッシュが古いトークンを返す問題を修正しました。現在は UID を考慮したキャッシュ処理に変更されています。さらに、新機能
TokenRequestServiceAccountUIDValidation(ベータ版、デフォルトで有効化済み)により、TokenRequestの UID が Service Account のUIDと一致する場合にのみ許可されるようになりました。(#132803, @aramase) [SIG API Machinery, Auth, Node and Testing] - アルファ機能
PodTopologyLabelAdmissionが正しく動作しない原因となっていた、トポロジーラベルのコピー時に誤ったラベルキーをチェックしていたバグを修正しました。このバグにより、機能のベータ版への移行が1リリース分延期され、有意義なフィードバックを得るための時間が確保されました。 (#132462, @munnerz) [SIG Node] - サブリクエストで
AllocationMode: Allを ResourceClaimで使用する際の誤った動作を修正しました。(#131660、@mortent) [SIG Node] -
InPlacePodVerticalScalingとPodObservedGenerationTrackingの両 feature gate が有効化されている場合に、Pod の resize 条件におけるobservedGenerationフィールドが、関連する Pod のgeneration を正確に反映するように修正しました。(#131157、@natasha41575) [SIG Node] -
/metrics/resourceエンドポイントにおいて、スワップ関連のメトリクスが利用できないバグを修正しました。(#132065、@yuanwang04) [SIG Node and Testing] - User Namespace を使用する Pod が、User Namespace をサポートしていないランタイム上で作成された場合に表示されるエラーメッセージを改善しました。(#131623、@rata) [SIG Node]
- kubelet: Static Pod が任意の ResourceClaims を参照できてしまう脆弱性を修正しました。これらの Pod は健全性チェックにより実行されませんでしたが、このような参照は明確に禁止されるようになりました。(#131844、@pohly) [SIG Apps, Auth and Node]
- kubelet: CSIドライバがノードボリューム拡張をサポートしていない場合に、PVCのアクセスモードが
ReadWriteManyに設定されていると、予期せずNodeResizeError状態がPVCステータスに表示されるバグを修正しました。(#131495、@carlory) [SIG Storage] - ノードローカルな
podresourcesAPIエンドポイントを変更し、 Active Pod のみを考慮するようにしました。これは長年続いていた動作を変更するため、従来の動作を復元したい場合はKubeletPodResourcesListUseActivePodsfeature gate (デフォルトで有効化済み)を無効化できます。旧動作に依存しているユーザーは、 regression が発生した場合に問題を報告してください。(#132028、@ffromani) [SIG Node and Testing] - ノードが到達不能状態になった際に
node.kubernetes.io/unreachable:NoExecuteの taint が行われるまでの5秒の遅延を短縮しました。(#120816、@tnqn) [SIG Apps and Node] -
baselineおよびrestrictedの pod security admission level では、プローブやライフサイクルハンドラのhostフィールド設定が禁止されていました。(#125271、@tssurya) [SIG Auth, Node and Testing]
Other (Cleanup or Flake)
- cel-goの依存関係をv0.25.0に更新しました。この変更内容は以下のURLで確認できます: https://github.com/google/cel-go/compare/v0.23.2...v0.25.0. (#131444, @erdii) [SIG API Machinery, Auth, Cloud Provider and Node]
- DRA kubelet:
pluginNameではなくdriverNameをロギングで使用するように変更しました。これにより、他のKubernetesコンポーネントとの整合性が図られています。 (#132096, @pohly) [SIG Node and Testing] - DRA kubelet: kubelet が Pod の削除を不必要にブロックしなくなったため、必要なドライバが動作していないノードにPodをスケジュールするといった誤操作からの回復処理を簡素化しました。 (#131968, @pohly) [SIG Node and Testing]
- kubeletパッケージのテストカバレッジを92.3%に向上させました。 (#132484, @ylink-lfs) [SIG Node]
-
/procおよび/sys経由で公開されていたLinuxのサーマル割り込み情報へのアクセスをマスクしました。(#131018, @saschagrunert) [SIG Node] - Memory Manager を contextual logging に移行しました。 (#130727, @swatisehgal) [SIG Node]
-
pkg/kubelet/statusを contextual logging に移行しました。 (#130852, @Chulong-Li) [SIG Node] -
pkg/kubelet/volumemanagerを contextual logging に移行しました。 (#131306, @Chulong-Li) [SIG Node] -
pkg/kubelet/winstatsを contextual logging に移行しました。 (#131001, @Chulong-Li) [SIG Node] -
k8s.io/kubelet/pkg/apis/devicepluginから非推奨となったgogoプロトコル定義を削除し、google.golang.org/protobufに置き換えました。 (#133028, @saschagrunert) [SIG Node and Testing] -
k8s.io/kubelet/pkg/apis/podresourcesから非推奨となったgogoプロトコル定義を削除し、google.golang.org/protobufに置き換えました。 (#133027, @saschagrunert) [SIG Node and Testing] - Generally available な feature gate
DevicePluginCDIDevicesを削除しました。 (#132083, @carlory) [SIG Node and Testing] - kubeletから非推奨となったコマンドライン引数
--register-schedulableを削除しました。 (#122384, @carlory) [SIG Cloud Provider, Node and Scalability] - 非推奨な feature gate
LegacySidecarContainersを削除しました。 (#131463, @gjkim42) [SIG Node and Testing] - CNI plugins を v1.7.1 に更新しました。 (#131602, @adrianmoisey) [SIG Cloud Provider, Node and Testing]
- etcd client library を v3.6.4 に更新しました。 (#133226, @ivanvc) [SIG API Machinery, Auth, Cloud Provider and Node]