Kubernetes 1.32: SIG-Node (kubelet) 変更内容

本記事は、Kubernetes 変更内容共有会(v1.32) の SIG-Node(kubelet)に関する資料として準備されました。
Kubernetes 1.32の [CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.32.md) から、SIG-Nodeに関するところを抜粋して紹介します。

:pencil: は筆者(@y1r96)による補足です。

## 所感
:pencil:

今回の Kubernetes 1.32 の SIG-Node (kubelet) の変更内容で、印象に残ったいくつかの機能を紹介します。

### Dynamic Resource Allocation (DRA) の Beta への昇格

DRA が Beta (Disabled by default) に昇格しました。Classic DRA [Dynamic Resource Allocation with Control Plane Controller](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/3063-dynamic-resource-allocation/README.md) が削除され、structured parameter DRA [Dynamic Resource Allocation with Structured Parameters](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/4381-dra-structured-parameters/README.md) に統一されました。

structured parameter を利用することで、DRA driver に構造的なパラメータを渡すことができるようになりました。
また、パラメータのマッチングが実装されていて、DRA driver が ResourceSlice として広報した情報を使って Pod をスケジューリングすることができます。

KubeCon NA 2024 で、DRA に関するセッションが数多く開催されました。
現状では NVIDIA (https://github.com/NVIDIA/k8s-dra-driver),
Intel (https://github.com/intel/intel-resource-drivers-for-kubernetes),
Google (https://github.com/google/dranet) などが DRA driver を提供しており、盛り上がりを見せています。
NVIDIA や Intel は各社のアクセラレータをサポートするために開発をしているようです。
Google の DRANET は、Google が提供する DRA driver で NIC を そのまま Pod に割り当てることができます。SR-IOV の Virtual Function などが前提となっています。
弊社でも SR-IOV の Virtual Function を直接 Pod に割り当てるように設定しているため、この DRA driver には興味を持っています。

### cgroup v2 の `singleProcessOOMKill` フラグ

cgroup v2 では、`memory.oom.group` という機能が導入されました。
この機能をある cgroup で有効にすると、その cgroup に属するタスクが Out of Memory によって kill されるとき、その cgroup に属する他のタスクも同時に kill されるようになります。
弊社では、cgroup v2 を利用しており、v1.28 の破壊的変更である `memory.oom.group` の有効化によって、この振る舞いが弊社のシステムに影響を与えました。
詳しくは、[弊社のブログエントリ](https://tech.preferred.jp/ja/blog/kubernetes-single-process-oom-kill/)でこの問題について触れ、これを回避するための `singleProcessOOMKill` フラグのコントリビューションについて紹介しました。

### 圧縮可能なリソースに限定した EnforceNodeAllocatable

kubelet では、ワークロードが利用するためのリソースと、kubelet や システムが利用するためのリソースを分離して管理するために `EnforceNodeAllocatable` という機能をもっています。
これを有効にして、`system-reserved` や `kube-reserved` を設定すると、kubelet やシステムが利用するリソースを確保することができます。
これにより、cgroup で share が設定することで優先したり（システムが使っていない場合は使える）、ノードの allocatable から除外する、などを行ってくれます。
詳しくは [Reserve Compute Resources for System Daemons](https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/) を参照してください。

今回の [Kubernetes 1.32 の PR](https://github.com/kubernetes/kubernetes/pull/125982) で、enforce するリソースについて圧縮可能なもの（現時点では CPU のみ）に絞って enforce することができるようになりました。
この機能を用いることで、memory のように圧縮できないリソースについては enforce しないので、OOM で kubelet や システム が停止させられることを防ぐことができます。

## Changes by Kind

### Deprecation

- 1.29 で非推奨となった `DisableNodeKubeProxyVersion` をデフォルトで無効に戻し、1年間の猶予期間をもたせることにしました ([#126720](https://github.com/kubernetes/kubernetes/pull/126720), [@liggitt](https://github.com/liggitt)) [SIG Architecture and Node] [sig/node,sig/architecture]
  - [Kubernetes deprecation policy](https://kubernetes.io/docs/reference/using-api/deprecation-policy/)
  - :pencil: node.status.nodeInfo.kubeProxyVersion が使えなくなります

### API Change

- `singleProcessOOMKill` フラグが kubelet の設定に追加されました。これを有効化すると、cgroups v2 での単一プロセスが OOM キルにより、残りのプロセスは OOM キルされなくなります。 ([#126096](https://github.com/kubernetes/kubernetes/pull/126096), [@utam0k](https://github.com/utam0k)) [SIG API Machinery, Node, Testing and Windows] [sig/node,sig/api-machinery,sig/windows,sig/testing]
- `Stream` フィールドが `PodLogOptions` に追加され、クライアントがコンテナの特定のログストリーム（stdout または stderr）をリクエストできるようになりました。特定の `Stream` （stdout または stderr）と `TailLines` の組み合わせはサポートされていません。([#127360](https://github.com/kubernetes/kubernetes/pull/127360), [@knight42](https://github.com/knight42)) [SIG API Machinery, Apps, Architecture, Node, Release and Testing] [sig/node,sig/api-machinery,sig/apps,sig/testing,sig/release,sig/architecture]
- `ResourceClaim.Status` にドライバが所有するフィールドが追加され、割り当てられたデバイスごとのデバイスのステータスデータを報告するようになりました。 ([#128240]([#128240](https://github.com/kubernetes/kubernetes/pull/128240), [@LionelJouin](https://github.com/LionelJouin)) [SIG API Machinery, Network, Node and Testing] [sig/network,sig/node,sig/api-machinery,sig/testing]
  - :pencil: Dynamic Resource Allocation (DRA) 関連の機能です。DRA ドライバがデバイスのステータスを報告できるようになりました。また、NIC については、IP アドレスや MAC アドレスの情報を報告する方法を標準化しています。
  - :pencil: [KEP-4817: Resource Claim Status With Possible Standardized Network Interface Data](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/4817-resource-claim-device-status)
- コンテナの再起動時にノードごとにコンテナ再起動間の最大バックオフ遅延を変更できるようになりました。ノードごとに設定するには、`KubeletCrashLoopBackoffMax` feature gate を有効にし、[kubelet の設定ファイル](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/) で `CrashLoopBackOff.MaxContainerRestartPeriod` フィールドを `"1s"` から `"300s"` の間で設定してください。 ([#128374](https://github.com/kubernetes/kubernetes/pull/128374), [@lauralorenz](https://github.com/lauralorenz)) [SIG API Machinery and Node] [sig/node,sig/api-machinery]
- ContainerStatus.AllocatedResources が 別の feature gate `InPlacePodVerticalScalingAllocatedStatus` で保護されるようになりました ([#128377](https://github.com/kubernetes/kubernetes/pull/128377), [@tallclair](https://github.com/tallclair)) [SIG API Machinery, CLI, Node, Scheduling and Testing] [sig/scheduling,sig/node,sig/api-machinery,sig/cli,sig/testing]
- DRA: opaque なデバイス構成パラメータの長さを制限しました。Kubernetes は、admission 時に 10KiB のサイズ制限を強制します。 ([#128601](https://github.com/kubernetes/kubernetes/pull/128601), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Auth, Etcd, Node, Scheduling and Testing] [sig/scheduling,sig/node,sig/api-machinery,sig/auth,sig/apps,sig/testing,sig/etcd]
- DRA: シナリオ依存だが Pod のスケジューリングが最大 16 倍高速化されるようになりました。スケジューリングのスループットはクラスタの利用状況に大きく依存します。クラスタの利用率が低いとスケジューリングスループットが高くなり、クラスタの利用率が高くなるとスケジューリングスループットが低くなります。 ([#127277](https://github.com/kubernetes/kubernetes/pull/127277), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Architecture, Auth, Etcd, Instrumentation, Node, Scheduling and Testing] [sig/scheduling,sig/node,sig/api-machinery,sig/auth,sig/apps,sig/instrumentation,sig/testing,sig/architecture,sig/etcd]
- DRA: `DeviceRequestAllocationResult` 構造体に AdminAccess フィールドが追加されました。対応する `DeviceRequest` のフィールドの代わりに使うことができます。デバイスが管理者アクセスのためだけに確保されている場合、当初から予定されていたとおり、通常の使用のために再度割り当てることができるようになりました。 管理者アクセスを許可するには、1.32 以降で `DRAAdminAccess` feature gate を有効にする必要があります。 ([#127266](https://github.com/kubernetes/kubernetes/pull/127266), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Auth, Etcd, Network, Node, Scheduling and Testing] [sig/network,sig/scheduling,sig/node,sig/api-machinery,sig/auth,sig/apps,sig/testing,sig/etcd]
- Pod の `spec.terminationGracePeriodSeconds` が soft eviction の場合常に MaxPodGracePeriodSeconds で上書きされていたバグを修正しました。`AllowOverwriteTerminationGracePeriodSeconds` feature gate を有効にすると、以前の動作に戻ります。これを設定する必要がある場合は、Kubernetes プロジェクトに issue を作ってコントリビュータに知らせてください。 ([#122890](https://github.com/kubernetes/kubernetes/pull/122890), [@HirazawaUi](https://github.com/HirazawaUi)) [SIG API Machinery, Architecture, Node and Testing] [sig/node,sig/api-machinery,sig/testing,sig/architecture]
- SELinuxChangePolicy feature gate のもとで、Pod レベルの `securityContext` のもとに alpha の `seLinuxChangePolicy` フィールドが実装されました。このフィールドは、SELinuxMount 機能が有効になっているときに、SELinux ラベルで Pod ボリュームをマウントしないようにするためのものです（現在は alpha で、デフォルトでは無効です）。SELinux が有効なクラスタでのみ有効で、[KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1710-selinux-relabeling#story-3-cluster-upgrade) を参照してどのようにユーザに SELinux の挙動の変更を警告し、どのように opt-out できるかを説明しています。SELinux が無効なクラスタでは何もする必要はありません。 ([#127981](https://github.com/kubernetes/kubernetes/pull/127981), [@jsafrane](https://github.com/jsafrane)) [SIG API Machinery, Apps, Architecture, Node, Storage and Testing] [sig/storage,sig/node,sig/api-machinery,sig/apps,sig/testing,sig/architecture]
- 圧縮可能なリソース設定が、 system-reserved と kube-reserved slice に導入されました。 ([#125982](https://github.com/kubernetes/kubernetes/pull/125982), [@harche](https://github.com/harche)) [sig/node]
  - :pencil: 圧縮可能なリソース（CPU）については enforce を行い、memory のように圧縮できないものについては enforce しないというような設定ができるようになりました。
- kubelet: `--image-credential-provider-config` ファイルが厳密に読み込まれ、設定ファイルに重複したフィールドや未知のフィールドが含まれている場合に失敗するようになりました。これにより、誤って不正な設定ファイル、インデントされていないファイル、またはフィールド名のタイポを読み込んでしまい、予期しない動作が起きることを防ぎました。 ([#128062](https://github.com/kubernetes/kubernetes/pull/128062), [@aramase](https://github.com/aramase)) [SIG Auth and Node] [sig/node,sig/auth]
- クラシックな dynamic resource allocation (DRA) のサポートを削除しました。以前は alpha であった `DRAControlPlaneController` feature gate は利用できなくなりました。Kubernetes は、dynamic な resource を割り当てるために structured parameters モデルのみを使用します。クラシックな DRA がクラスタで有効でありかつそのときに限り、classic DRA に依存する pod や deployment などのすべてのワークロードを削除し、すべての PodSchedulingContext リソースが削除されていることを確認してから更新してください。アップグレード後には、PodSchedulingContext は apiserver を経由して削除できなくなり、ワークロードは正しく動作しなくなります。 ([#128003](https://github.com/kubernetes/kubernetes/pull/128003), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Auth, Etcd, Node, Scheduling and Testing] [sig/scheduling,sig/node,sig/api-machinery,sig/auth,sig/apps,sig/testing,sig/etcd]
- subresources と一緒に使ったときの kubelet の API 認可 をリバイスして、より細粒度な認可とアクセスコントロールを kubelet エンドポイントで行えるようにしました。 `KubeletFineGrainedAuthz` feature gate を有効にすると、`/healthz` にアクセスするためには `nodes/healthz` permission を RBAC で与える必要があります。また、`/configz` については `nodes/configz` permission が必要です。もしくは、`nodes/proxy` permission を与えれば、`/healthz`, `/pods`, `/configz` への権限も付与されますが、同時に exec, run, attach などの権限も付与されるため、最小権限の原則に従っていません。 ([#126347](https://github.com/kubernetes/kubernetes/pull/126347), [@vinayakankugoyal](https://github.com/vinayakankugoyal)) [SIG API Machinery, Auth, Cluster Lifecycle and Node] [sig/node,sig/api-machinery,sig/cluster-lifecycle,sig/auth]
- Dynamic Resource Allocation (DRA) のコア機能が beta に昇格しました。更新時には特にアクション不要で、以前の v1alpha3 API はサポートされているので、deployments や DRA driver は正常に動作します。しかし、1.32 から 1.31 へのダウングレード時は、DRA resources (resourceclaims, resourceclaimtemplates, deviceclasses, resourceslices) は v1beta1 な storage version としてサポートされていて、 1.31 からは読めません。 ([#127511](https://github.com/kubernetes/kubernetes/pull/127511), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Auth, Etcd, Node, Scheduling and Testing] [sig/scheduling,sig/node,sig/api-machinery,sig/auth,sig/apps,sig/testing,sig/etcd]
- node-monitor-grace-period が 40 秒から 50 秒に変更されました (Ref - https://github.com/kubernetes/kubernetes/issues/121793) ([#126287](https://github.com/kubernetes/kubernetes/pull/126287), [@devppratik](https://github.com/devppratik)) [SIG API Machinery, Apps and Node] [sig/node,sig/api-machinery,sig/apps]
  - :pencil: ノードの健全性を確認して unhealthy とマークするまでの grace period の長さです。


### Feature

- Node Memory Manager の Windows サポートが追加されました。 ([#128560](https://github.com/kubernetes/kubernetes/pull/128560), [@marosset](https://github.com/marosset)) [SIG Node and Windows] [sig/node,sig/windows]
- device plugin gRPC registration server のヘルスチェックが追加されました。registration server がダウンしている時、kubelet は unhealthy とマークされます。systemd watchdog が設定されている場合、kubelet は再起動されます。 ([#128432](https://github.com/kubernetes/kubernetes/pull/128432), [@zhifei92](https://github.com/zhifei92)) [SIG Node] [sig/node]
- kubelet メトリクスに `container_aligned_compute_resources_count` が追加され、アラインされたコンピュートリソースを取得しているコンテナの数を報告します。 ([#127155](https://github.com/kubernetes/kubernetes/pull/127155), [@ffromani](https://github.com/ffromani)) [SIG Node and Testing] [sig/node,sig/testing]
  - :pencil: CPU Manager (static) を使用するときに、L3 キャッシュを共有する CPU コア を使っているコンテナの数が報告されます
- kubelet メトリクスとして CPU Manager (static) によって管理されている CPU プール に関する情報が報告されるようになりました。 ([#127506](https://github.com/kubernetes/kubernetes/pull/127506), [@ffromani](https://github.com/ffromani)) [SIG Node and Testing] [sig/node,sig/testing]
- CPU Manager (static) に、 `strict-cpu-reservation` オプションが追加されました。このオプションを有効にすると、`reservedSystemCPUs` にある CPU コアは、system daemon や割り込み処理に利用され、ワークロードには利用できなくなります。 ([#127483](https://github.com/kubernetes/kubernetes/pull/127483), [@jingczhang](https://github.com/jingczhang)) [SIG Node] [sig/node]
- node status update の負荷を均等に分散するため、kubelet の `nodeStatusReportFrequency` の最大 50% のランダムな期間が追加されました。([#128640](https://github.com/kubernetes/kubernetes/pull/128640), [@mengqiy](https://github.com/mengqiy)) [sig/node]
- kubelet に systemd watchdog integration サポートが追加されました。これを有効にすると、systemd がハングした kubelet を自動的に回復できます。 ([#127566](https://github.com/kubernetes/kubernetes/pull/127566), [@zhifei92](https://github.com/zhifei92)) [SIG Cloud Provider, Node and Testing] [sig/node,sig/testing,sig/cloud-provider]
  - :pencil: systemd watchdog は、`sd_notify(3)` で systemd にヘルスチェックを通知することで systemd がプロセスのハングを検知し、再起動する機能です。Go binding も用意されており、kubelet はこれを利用しているようです。
- DRA node operation や gRPC call のレイテンシを測定するためのメトリクスが追加されました ([#127146](https://github.com/kubernetes/kubernetes/pull/127146), [@bart0sh](https://github.com/bart0sh)) [SIG Instrumentation, Network, Node, and Testing] [sig/network,sig/node,sig/instrumentation,sig/testing]
- `status.containerStatuses[].resources` フィールドに extended resource についてもステータスが追加されました。 ([#124227](https://github.com/kubernetes/kubernetes/pull/124227), [@iholder101](https://github.com/iholder101)) [SIG Node and Testing] [sig/node,sig/testing]
- PreStop lifecycle handler の sleep アクションがゼロ値を持つことを許可しました ([#127094](https://github.com/kubernetes/kubernetes/pull/127094), [@sreeram-venkitesh](https://github.com/sreeram-venkitesh)) [SIG Apps, Node and Testing] [sig/node,sig/apps,sig/testing]
  - :pencil: ゼロ値の場合は Sleep しないようですが、PreStop lifecycle handler があることを validation しているようなケースでこれを無視するために追加されたようです
- CRI: Windows で CPU affinity をサポートするためのフィールドが追加されました ([#124285](https://github.com/kubernetes/kubernetes/pull/124285), [@kiashok](https://github.com/kiashok)) [SIG Node and Windows] [sig/node,sig/windows]
- サイドカーコンテナのための OOM score 調整の計算が変更されました: これらのコンテナの OOM 調整は、Pod 内の通常のコンテナの OOM スコア調整と一致するか、それ以下になります。 ([#128029](https://github.com/kubernetes/kubernetes/pull/128029), [@bouaouda-achraf](https://github.com/bouaouda-achraf)) [sig/node]
- DRA: resource claim コントローラが、 `ResourceClaims` の総数と割当数に関するメトリクスを維持するようになりました ([#127661](https://github.com/kubernetes/kubernetes/pull/127661), [@pohly](https://github.com/pohly)) [SIG Apps, Instrumentation and Node] [sig/node,sig/apps,sig/instrumentation]
- Windows ノードにおける graceful shutdown 機能が有効化されました ([#127404](https://github.com/kubernetes/kubernetes/pull/127404), [@zylxjtu](https://github.com/zylxjtu)) [SIG Node, Testing and Windows] [sig/node,sig/windows,sig/testing]
- Feature gate `InPlacePodVerticalScalingExclusiveCPUs` を設定すると、 Guaranteed Pod で 整数値の CPU リクエストをもっており、CPU Manager と Memory Manager が有効になっているようなノードで、 in-place resize が許可されないようになりました。 ([#128287](https://github.com/kubernetes/kubernetes/pull/128287), [@esotsal](https://github.com/esotsal)) [SIG Node, Release and Testing] [sig/node,sig/node,sig/testing,sig/release]
- 修正済み: systemd daemon reload 時に、systemd が in-pod vertical scaling の更新を上書きしないようにしました ([#124216](https://github.com/kubernetes/kubernetes/pull/124216), [@iholder101](https://github.com/iholder101)) [SIG Node] [sig/node]
- Kubelet の Memory Manager が Generally Available (GA) に昇格しました。 ([#128517](https://github.com/kubernetes/kubernetes/pull/128517), [@Tal-or](https://github.com/Tal-or)) [sig/node]
- `kubelet_admission_rejections_total` メトリクスが追加され、admission 時に拒否された Pod の数を追跡します。 ([#128556](https://github.com/kubernetes/kubernetes/pull/128556), [@AnishShah](https://github.com/AnishShah)) [sig/node]
- Kernel 5.8 よりも古い環境で、cgroup v2 を使う場合にログとイベントを追加しました ([#126595](https://github.com/kubernetes/kubernetes/pull/126595), [@pacoxu](https://github.com/pacoxu)) [SIG Node] [sig/node]
  - :pencil: `/sys/fs/cgroup/cpu.stat` が存在しない場合にログを出力するようになりました 
- PodLifecycleSleepAction が GA に昇格しました ([#128046](https://github.com/kubernetes/kubernetes/pull/128046), [@AxeZhan](https://github.com/AxeZhan)) [SIG Architecture, Node and Testing] [sig/node,sig/testing,sig/architecture]
- Kernel 4.15 かより新しい環境で `net.ipv4.tcp_rmem` と `net.ipv4.tcp_wmem` sysctl が、デフォルトで利用可能になりました。この sysctl が namespace 化されたためです。Pod Security Admission では v1.32+ の baseline と restricted で利用可能になります。 ([#127489](https://github.com/kubernetes/kubernetes/pull/127489), [@pacoxu](https://github.com/pacoxu)) [SIG Auth, Network and Node] [sig/network,sig/node,sig/auth]
- `SizeMemoryBackedVolumes` が stable に昇格しました ([#126981](https://github.com/kubernetes/kubernetes/pull/126981), [@kannon92](https://github.com/kannon92)) [SIG Node, Storage and Testing] [sig/storage,sig/node,sig/testing]
- `RelaxedEnvironmentVariableValidation` feature gate が beta に昇格し、デフォルト有効になりました。([#126897](https://github.com/kubernetes/kubernetes/pull/126897), [@HirazawaUi](https://github.com/HirazawaUi)) [sig/node]
  - :pencil: ほとんどの印字可能な文字が利用できるようになりました。
- カスタムのネットワークパラメータを指定して e2e-node-tests をリモートオプションで実行する際にサポートされるようになりました ([#127574](https://github.com/kubernetes/kubernetes/pull/127574), [@bouaouda-achraf](https://github.com/bouaouda-achraf)) [SIG Node and Testing] [sig/node,sig/testing]
- `TopologyManagerPolicyOptions` feature gate が GA に昇格しました ([#128124](https://github.com/kubernetes/kubernetes/pull/128124), [@PiotrProkop](https://github.com/PiotrProkop)) [sig/node]
- Vendor: updated system-validators to v1.9.0. ([#128149](https://github.com/kubernetes/kubernetes/pull/128149), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle and Node] [sig/node,sig/cluster-lifecycle]
- Vendor: updated system-validators to v1.9.1. ([#128533](https://github.com/kubernetes/kubernetes/pull/128533), [@neolit123](https://github.com/neolit123)) [sig/node]
- Windows で CPU Manager と Topology Manager がサポートされました ([#125296](https://github.com/kubernetes/kubernetes/pull/125296), [@jsturtevant](https://github.com/jsturtevant)) [SIG Node and Windows] [sig/node,sig/windows]

### Documentation

- Kubelet において、`--cloud-provider=external` を指定しているときに、`--node-ip` フラグで `0.0.0.0` か `::` を利用して、external cloud provider にその責務を委譲できるようになりました。これにより、out-of-tree な cloud provider のブートストラップ問題が解決されます。 ([#125337](https://github.com/kubernetes/kubernetes/pull/125337), [@aojea](https://github.com/aojea)) [SIG Cloud Provider, Network, Node and Testing] [sig/network,sig/node,sig/testing,sig/cloud-provider]

### Failing Test

- kubelet プラグインが `15ms` 未満の再登録期間で Windows 上で正しく再登録されるようになりました ([#114136](https://github.com/kubernetes/kubernetes/pull/114136), [@claudiubelu](https://github.com/claudiubelu)) [SIG Node, Storage, Testing and Windows] [sig/storage,sig/node,sig/windows,sig/testing]

### Bug or Regression

- kubelet が CRI マウントを構築する際に、`image` ボリュームソースタイプを参照するコンテナが、`readOnly`、`propagation`、`recursiveReadOnly` を含むマウント属性を CRI 実装に渡します。コンテナマウントの `readOnly` フィールドが明示的に `false` に設定されている場合、kubelet は、image ボリュームプラグインがマウントを読み取り専用にする必要があるため、CRI 実装に `readOnly` を `true` として渡すようになりました。また、コンテナ内の `/etc/hosts` にマウントされた場合に、Pod が予期せず実行される問題が修正されました。 ([#126806](https://github.com/kubernetes/kubernetes/pull/126806), [@carlory](https://github.com/carlory)) [SIG Node and Storage] [sig/storage,sig/node]
  - :pencil: ImageVolume feature gate の実装をする際に、早めに処理を完了して early continue していましたが、それによりマウント先が `/etc/hosts` でないことを検証したり、readOnly を設定したりするフローをスキップしてしまっていたようです。既存のマウント関連のコードとうまくマージすることで、コード量を増やさずにうまく修正できたようです。
- DRA: `allocationMode: all` に関連するいくつかの問題を修正しました。([#127565](https://github.com/kubernetes/kubernetes/pull/127565), [@pohly](https://github.com/pohly)) [sig/node]
- 1.31 の Windows における regression で kubelet の起動が失敗する問題を修正しました: Revert "fix: handle socket file detection on Windows". ([#126976](https://github.com/kubernetes/kubernetes/pull/126976), [@jsturtevant](https://github.com/jsturtevant)) [sig/node]
- systemd cgroup manager によって、cgroup v2 で cpuset cgroup が削除されたため、kubelet が `failed to initialize top level QOS containers: root container [kubepods] doesn't exist` というエフェメラルなエラーで失敗する問題を修正しました。([#125923](https://github.com/kubernetes/kubernetes/pull/125923), [@haircommander](https://github.com/haircommander)) [SIG Node and Testing] [sig/node,sig/testing]
- initContainer をもつ pod で、通常の initContainer がノード再起動後に実行が完了していない場合、pod の phase が pending にならないバグを修正しました。 ([#126653](https://github.com/kubernetes/kubernetes/pull/126653), [@zhifei92](https://github.com/zhifei92)) [SIG Node and Testing] [sig/node,sig/testing]
- 1.29 以降のデフォルト構成で、一時的なコンテナランタイムの障害により、通常の initContainer が起動に失敗する問題を修正しました。 ([#127162](https://github.com/kubernetes/kubernetes/pull/127162), [@gjkim42](https://github.com/gjkim42)) [SIG Node] [sig/node]
- `SidecarContainers` が有効なデフォルト 1.29 構成で、initContainer が一時的なコンテナランタイムの障害により起動に失敗する問題を修正しました。 ([#126543](https://github.com/kubernetes/kubernetes/pull/126543), [@gjkim42](https://github.com/gjkim42)) [sig/node]
- kubelet が、同じマウント内の書き込み可能レイヤーと読み取り専用レイヤーが異なるパスにある場合に表示される問題を修正しました。以前は、Kubernetes は、実際にはそうではない場合でも、イメージファイルシステムが分割されていると検出していました。
  - ([#128344](https://github.com/kubernetes/kubernetes/pull/128344), [@kannon92](https://github.com/kannon92)) [SIG Node] [sig/node]
  - ([#126562](https://github.com/kubernetes/kubernetes/pull/126562), [@kannon92](https://github.com/kannon92)) [sig/node]
- eviction manager が未使用のイメージやコンテナを削除しない問題を修正しました。([#127874](https://github.com/kubernetes/kubernetes/pull/127874), [@AnishShah](https://github.com/AnishShah)) [sig/node]
- kubelet/volumemanager におけるデータ競合を修正しました。 ([#127919](https://github.com/kubernetes/kubernetes/pull/127919), [@carlory](https://github.com/carlory)) [SIG Apps, Node and Storage] [sig/storage,sig/node,sig/apps]
- kubelet が、`resolvConf` オプションを drop-in kubelet 設定ファイルに設定できるように修正しました。drop-in kubelet 設定ファイルがサポートされているバージョンであることを検証します。 ([#127421](https://github.com/kubernetes/kubernetes/pull/127421), [@liggitt](https://github.com/liggitt)) [sig/node]
- `graceful_shutdown_end_time_seconds` メトリクスの正しくない help message を修正しました。また、`graceful_shutdown_start_time_seconds` と `graceful_shutdown_end_time_seconds` が graceful node shutdown 中のいくらかのケースで正しくない値を設定していた問題を修正しました。 ([#128189](https://github.com/kubernetes/kubernetes/pull/128189), [@zylxjtu](https://github.com/zylxjtu)) [SIG Node] [sig/node]
- eviction event のメッセージとアノテーションに、再起動可能な initContainer と再起動不可能な initContainer が考慮されていないバグを修正しました。 ([#124947](https://github.com/kubernetes/kubernetes/pull/124947), [@toVersus](https://github.com/toVersus)) [SIG Node] [sig/node]
- kubelet と kube-apiserver のトレースに関連するデフォルト 1.29 構成のメモリリークを修正しました。 ([#126957](https://github.com/kubernetes/kubernetes/pull/126957), [@dashpole](https://github.com/dashpole)) [SIG API Machinery, Architecture, Instrumentation and Node] [sig/node,sig/api-machinery,sig/instrumentation,sig/architecture]
- Dynamic Resource Allocation で、 protobuf パッケージ名が一意であるように、新しい `v1beta1` kubelet gRPC が名前変更されました。 ([#128764](https://github.com/kubernetes/kubernetes/pull/128764), [@pohly](https://github.com/pohly)) [SIG Node and Testing] [sig/node,sig/testing]
- HostNetwork Pod については PodIPs が割り当てられることに依存しないようになりました。これにより、Pod に定義された hostAliases を設定するために PodIPs が割り当てられる必要がなくなりました。 ([#126460](https://github.com/kubernetes/kubernetes/pull/126460), [@aojea](https://github.com/aojea)) [SIG Network, Node and Testing] [sig/network,sig/node,sig/testing]
- 古い pod spec が image volume source を使用していた場合、リソースを更新する際に ImageVolume の feature-gate が無効になっていても許可するようにしました。 ([#126733](https://github.com/kubernetes/kubernetes/pull/126733), [@carlory](https://github.com/carlory)) [SIG API Machinery, Apps and Node] [sig/node,sig/api-machinery,sig/apps]
- kubelet は、StatusForbidden でノードの作成リクエストが失敗した場合に、既存のノードを取得しようとします。 ([#126318](https://github.com/kubernetes/kubernetes/pull/126318), [@hoskeri](https://github.com/hoskeri)) [SIG Node] [sig/node]
- kubelet: ボリュームマネージャが、ボリュームをデタッチ済みとマークする前に、実際の状態でデバイスのマウント状態を確認しなかった問題を修正しました。これにより、Pod が削除されたたときに Terminating 状態で stuck する可能性があります。 ([#128219](https://github.com/kubernetes/kubernetes/pull/128219), [@carlory](https://github.com/carlory)) [sig/node]
- kubelet: Pod が拒否されたときに、kubelet が Pod の status の QOSClass フィールドを誤って削除するバグを修正しました。 ([#128083](https://github.com/kubernetes/kubernetes/pull/128083), [@carlory](https://github.com/carlory)) [SIG Node and Testing] [sig/node,sig/testing]
  - :pencil: 拒否されたことを Pod Status に反映するときに、QOSClass をコピーしそこねているようです。
- kubelet: `PodAndContainerStatsFromCRI` feature が有効になっている場合、CRI stats プロバイダを使用します。 ([#126488](https://github.com/kubernetes/kubernetes/pull/126488), [@haircommander](https://github.com/haircommander)) [SIG Node] [sig/node]
- kubelet `/metrics/slis` を常に有効にします。 ([#128430](https://github.com/kubernetes/kubernetes/pull/128430), [@richabanker](https://github.com/richabanker)) [SIG Architecture, Instrumentation and Node] [sig/node,sig/instrumentation,sig/architecture]
- Node Shutdown Controller が CSI Driver が Pod の優先度グループに従ってボリュームの teardown プロセスを完了するようにベストエフォートで取り組みました。 ([#125070](https://github.com/kubernetes/kubernetes/pull/125070), [@torredil](https://github.com/torredil)) [SIG Node, Storage and Testing] [sig/storage,sig/node,sig/testing]
- Volume Attachment 待ちの memory usage/allocation を削減しました。 ([#126575](https://github.com/kubernetes/kubernetes/pull/126575), [@Lucaber](https://github.com/Lucaber)) [SIG Node and Storage] [sig/storage,sig/node]
- port-forward 時にエラーが発生した場合、ストリームをリセットして kubectl が port-forward 接続を維持できるようにしました。 ([#128318](https://github.com/kubernetes/kubernetes/pull/128318), [@soltysh](https://github.com/soltysh)) [SIG API Machinery, CLI and Node] [sig/node,sig/api-machinery,sig/cli]
- Node における Terminated Pod が kubelet restart 時に再度 admit しないようになりました。kubelet restart 後に、Completed Pod が finalizer を待ち、Failed とマークされる問題が修正されました。([#126343](https://github.com/kubernetes/kubernetes/pull/126343), [@SergeyKanzhelev](https://github.com/SergeyKanzhelev)) [SIG Node and Testing] [sig/node,sig/testing]
- Pod Status の qosClass フィールドのバリデーションが厳しくなりました。このフィールドは不変ですが、kube-apiserver が新しい status で status subresource を経由してこのフィールドを更新するときに、新しい status で unset されている場合に、古い status で埋められる可能性があります。 ([#127744](https://github.com/kubernetes/kubernetes/pull/127744), [@carlory](https://github.com/carlory)) [SIG Apps, Instrumentation, Node, Storage and Testing] [sig/storage,sig/node,sig/apps,sig/instrumentation,sig/testing]
- Kubelet で PVC の node expansion に `allocatedResources` を使用します ([#126600](https://github.com/kubernetes/kubernetes/pull/126600), [@gnufied](https://github.com/gnufied)) [SIG Node, Storage and Testing] [sig/storage,sig/node,sig/testing]
- external 以外の値を `--cloud-provider` flag で kubelet, kube-controller-manager, kube-apiserver に与えるときに、internal cloud provider が無効になることについてログに警告が表示されるようになりました。これは、以前の非推奨の警告とは対照的です。 ([#127711](https://github.com/kubernetes/kubernetes/pull/127711), [@elmiko](https://github.com/elmiko)) [SIG API Machinery, Cloud Provider and Node] [sig/node,sig/api-machinery,sig/cloud-provider]
- `StartupProbe` が `sccessThreshold` に達したときに明示的に停止されました。これにより、`successThreshold` よりも多く `StartupProbe` を実行してしまう問題が解消されました。 ([#121206](https://github.com/kubernetes/kubernetes/pull/121206), [@mochizuki875](https://github.com/mochizuki875)) [sig/node]
- kubelet: Windows において、ファイルシステムリンクをドライブレターに正規化するのではなく、一貫してボリューム識別子に解決するようにしました。 ([#129103](https://github.com/kubernetes/kubernetes/pull/129103), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Storage and Windows] [sig/network,sig/storage,sig/node,sig/api-machinery,sig/cluster-lifecycle,sig/auth,sig/windows,sig/cli,sig/instrumentation,sig/release,sig/architecture,sig/cloud-provider]

### Other (Cleanup or Flake)

- 追加: kubelet 関連の Config リクエストに関するマージエラーのデバッグのためのログ行を追加しました。 ([#124389](https://github.com/kubernetes/kubernetes/pull/124389), [@holgerson97](https://github.com/holgerson97)) [sig/node]
- Pod の Image Pull Error を reason `ImagePullBackoff` とし、 `status.containerStatuses[*].state.waiting.message` に追加しました。以前は一般的な `Back-off pulling image...` でした。([#127918](https://github.com/kubernetes/kubernetes/pull/127918), [@saschagrunert](https://github.com/saschagrunert)) [SIG Node and Testing] [sig/node,sig/testing]
- CRI client が `ImageFsInfo` RPC のデフォルトのタイムアウトを使用するようになりました。 ([#128052](https://github.com/kubernetes/kubernetes/pull/128052), [@saschagrunert](https://github.com/saschagrunert)) [sig/node]
- Device manager: CDI device info を runtime に渡す際にアノテーションを利用するのをやめました。v1.7.2 より古い containerd はこれをサポートしないので、アップグレードの必要があります。 ([#126435](https://github.com/kubernetes/kubernetes/pull/126435), [@bart0sh](https://github.com/bart0sh)) [SIG Node] [sig/node]
- `InPlacePodVerticalScaling` feature を Windows でサポートしなくなりました。 ([#128623](https://github.com/kubernetes/kubernetes/pull/128623), [@AnishShah](https://github.com/AnishShah)) [SIG Apps and Node] [sig/node,sig/apps]
- `getPodAndContainerForDevice` メソッドを呼び出すときに、空文字列で podUID をフィルタする最適化を追加しました。 ([#126997](https://github.com/kubernetes/kubernetes/pull/126997), [@lengrongfu](https://github.com/lengrongfu)) [sig/node]
- ReadinessProbe を手動実行した後、プローブがトリガーされたときに v4 レベルのログを出力し、ReadinessProbe の周期タイマーをシフトしました。 ([#119089](https://github.com/kubernetes/kubernetes/pull/119089), [@mochizuki875](https://github.com/mochizuki875)) [sig/node]
- Generally Available な feature gate `NewVolumeManagerReconstruction` を削除しました。 ([#126775](https://github.com/kubernetes/kubernetes/pull/126775), [@carlory](https://github.com/carlory)) [SIG Node and Storage] [sig/storage,sig/node]
- Pod resize 時に、request や limit を削除するサポートを削除しました。 ([#128683](https://github.com/kubernetes/kubernetes/pull/128683), [@AnishShah](https://github.com/AnishShah)) [SIG Apps, Node and Testing] [sig/node,sig/apps,sig/testing]
- kubelet の `--runonce` モードを削除しました。もしこれを指定するとエラーになります。kubelet 設定ファイルで `runOnce` を設定してもエラーになり、その設定オプションに値を指定することは非推奨です。 ([#126336](https://github.com/kubernetes/kubernetes/pull/126336), [@HirazawaUi](https://github.com/HirazawaUi)) [SIG Node and Scalability] [sig/scalability,sig/node]
- `dynamicResources` が `DynamicResources` にリファクタリングされ、ユーザーは `dynamicresources` パッケージの外で `DynamicResources` 構造体を導入できるようになりました。 ([#128399](https://github.com/kubernetes/kubernetes/pull/128399), [@JesseStutler](https://github.com/JesseStutler)) [SIG Node and Scheduling] [sig/scheduling,sig/node]
- alpha の DynamiC Resource Allocation gRPC API はまだありますが、将来のリリースで削除される可能性があります。DRA ドライバを更新して、v1beta1 gRPC API を使用するようにしてください。 ([#128646](https://github.com/kubernetes/kubernetes/pull/128646), [@pohly](https://github.com/pohly)) [SIG Node and Testing] [sig/node,sig/testing]
- Generally Available な `PodHostIPs` feature gate が削除されました。Kubernetes 1.30 からロックされています。 ([#128634](https://github.com/kubernetes/kubernetes/pull/128634), [@thockin](https://github.com/thockin)) [SIG Apps, Architecture, Node and Testing] [sig/node,sig/apps,sig/testing,sig/architecture]
- Updated cni-plugins to [v1.5.1](https://github.com/containernetworking/plugins/releases/tag/v1.5.1). ([#126966](https://github.com/kubernetes/kubernetes/pull/126966), [@saschagrunert](https://github.com/saschagrunert)) [SIG Cloud Provider, Node and Testing] [sig/node,sig/testing,sig/cloud-provider]
- Updated cni-plugins to [v1.6.0](https://github.com/containernetworking/plugins/releases/tag/v1.6.0). ([#128091](https://github.com/kubernetes/kubernetes/pull/128091), [@saschagrunert](https://github.com/saschagrunert)) [SIG Cloud Provider, Node and Testing] [sig/node,sig/testing,sig/cloud-provider]
- Updated cri-tools to v1.31.0. ([#126590](https://github.com/kubernetes/kubernetes/pull/126590), [@saschagrunert](https://github.com/saschagrunert)) [SIG Cloud Provider and Node] [sig/node,sig/cloud-provider]
- Upgraded etcd client to v3.5.16. ([#127279](https://github.com/kubernetes/kubernetes/pull/127279), [@serathius](https://github.com/serathius)) [SIG API Machinery, Auth, Cloud Provider and Node] [sig/node,sig/api-machinery,sig/auth,sig/cloud-provider]
- kubelet: 1.32.0 release candidate で、Windows ノートにおいて CSI volume のマウントで起きる問題を修正しました。 ([#129083](https://github.com/kubernetes/kubernetes/pull/129083) [liggitt](https://github.com/liggitt)) [SIG API Machinery, architecture, auth, cli, cloud-provider, cluster-lifecycle, instrumentation,network,node, release, storage, windows ] [sig/network,sig/storage,sig/node,sig/api-machinery,sig/cluster-lifecycle,sig/auth,sig/windows,sig/cli,sig/instrumentation,sig/release,sig/architecture,sig/cloud-provider]