本記事は、Kubernetes 変更内容共有会(v1.37) の SIG-Node(kubelet)に関する資料として準備されました。
Kubernetes 1.37の CHANGELOG から、SIG-Nodeに関するところを抜粋して紹介します。
は筆者(@y1r96)による補足です。
所感
今回の Kubernetes 1.37 の SIG-Node (kubelet) の変更内容で、印象に残ったいくつかの機能を紹介します。
Alpha: Pod-level checkpoint / restore に向けた CRI API の導入
checkpoint / restore は実行中のコンテナや Pod の状態を保存し、あとで復元する仕組みです。
これまでも Kubernetes では コンテナ単位の checkpoint が提供されてきました。
コンテナ単位の checkpoint では、kubelet に checkpoint を取得する API POST /checkpoint/{namespace}/{pod}/{container} があり、CRI の CheckpointContainer RPC と組み合わせてコンテナ単位の checkpoint を取得することができました。
コンテナ単位の checkpoint から restore する専用の kubelet API や RestoreContainer RPC はなく、対応するランタイムにて OCI イメージアノテーションを介した方法で復元することができました。
本 KEP では、Pod 全体を checkpoint / restore する仕組みを提案しています。
CRI の CheckpointPod と RestorePod を利用してコンテナランタイムとの連携を行い、Kubernetes API を通じてこれらの機能をユーザに提供することを目指しています。
1.37 ではその土台として、CRI に CheckpointPod と RestorePod RPC が追加されました。
kubelet がこれらの RPC を呼ぶ実装や、ユーザが操作するための Kubernetes API はまだ追加されていません。
Beta: Pods API
ノード上で動く CNI プラグインや監視ツール向けの PodsAPI が、1.37 で Beta になりました。
これは Unix ドメインソケット上の gRPC API で、API server を経由せず、kubelet が管理する Pod の情報を取得できます。
特定の Pod の取得や一覧に加え、Pod の変化を継続して受け取ることもできます。(#140286、API リファレンス)
Kubelet が管理する Pod の情報を直接取得でき、ノードが Kubernetes API Server にアクセスできない場合でも、Kubelet が把握している最新の Pod 状態を取得できます。
名前の似た PodResources API というものも以前から存在していました。
こちらも同様に Unix ドメインソケット上の gRPC API ですが、こちらが返すのは Pod の情報全般ではなく、CPU やメモリ、デバイスなどの割り当て情報です。
1.37 では Pod 単位の cpu_ids と memory が追加され、Pod 共有の割り当てをコンテナ単位の値から推測せずに取得できるようになりました。(#138738)
DRA Updates
1.37 の DRA 関連の変更点については、公式ブログ が詳しく解説しています。特に印象に残ったところのみ補足します。
-
DRADeviceCompatibilityGroupsでは、同じ共有カウンターを使うデバイスに、DRA driver が互換性グループを宣言できます。たとえば同じ GPU の MIG と vGPU のように同時利用できない組み合わせを、ノードでのデバイス準備に失敗してからではなく、スケジューリング時点で排除します。Alpha で、feature gate はデフォルト無効です。(#139795) -
resource.kubernetes.io/numaNodeが DRA デバイスの標準属性名として追加されました。対応する driver がこの属性を公開すれば、GPU と NIC など異なる driver のデバイスの NUMA 情報を比較できます。AMD EPYC 9005 の資料によると、NPS4 では各 NUMA ドメインに CPU コアとメモリコントローラが対応し、PCIe デバイスは接続先の I/O ダイの区画に応じてローカルな NUMA ドメインが決まります。KEP-6072 のリスト形式は、主にこうした PCIe デバイスについて、ローカルな NUMA node だけでなく、同じソケット内で距離の近いほかの NUMA node も表します。CPU やメモリは通常、対応する NUMA node を単一の番号で表します。NUMA 条件で比較する際は、リストに共通の番号があればデバイスを組み合わせられます。属性名の標準化自体は Stable ですが、リスト形式の利用には別の Alpha 機能DRAListTypeAttributesを有効にする必要があります。(#139929) -
DRADerivedAttributesでは、driver ごとに異なる属性名や表現を、ResourceClaim 内の CEL 式で共通の属性に写像できます。標準属性名に対応していない driver のデバイスを組み合わせたい場合にも利用できます。(#140029) -
DRANodeAllocatableResourcesでは、DRA デバイスが消費するホスト側の CPU・メモリなどを、通常のリソース要求と同様にスケジューラと kubelet が計上する方向に進みました。これにより、CPU・メモリなどをホストとDRA デバイスの両方で二重に使用してしまうことを防ぐことができます。1.37 時点では Alpha 2 の機能です。(#140009)
以下は Kubernetes 1.37 の CHANGELOG の和訳です。
Urgent Upgrade Notes
(No, really, you MUST read this before you upgrade)
- ACTION REQUIRED:
SELinuxMountfeature gate が GA に昇格した。v1.37ではデフォルトで有効になり、SELinux を有効にしたクラスタの既存ワークロードに障害が生じる可能性がある。Kubernetes のブログ記事を参照し、v1.36クラスタで問題が生じ得るワークロードを特定し、修正する方法、またはv1.37への更新前にSELinuxMountの変更を opt-out する方法を確認すること。SELinux を有効にしていないクラスタの管理者は、このリリースノートを無視してよい。(#139956、@jsafrane) [SIG API Machinery, Apps and Node] - ACTION REQUIRED:
kubelet設定のeventRecordQPSにおいて、ドキュメントに合わせ、0を無制限(レート制限なし)として扱うよう修正した。従来のデフォルト動作に依存していた場合は、50などの非ゼロ値を明示的に設定すること。(#117119、@HirazawaUi) [SIG API Machinery, Auth and Node] - ACTION REQUIRED:
kubeletが起動時に実際に有効な設定をログに出力するようにした。ログに設定の詳細が含まれる可能性があるため、クラスタ管理者はnodes/logsClusterRole を信頼できるユーザーに限定すること。これは主に従来からのベストプラクティスの再確認である。実効設定の大半は、ほかのログメッセージやkubeletの動作からも推測できる。(#139837、@SergeyKanzhelev) [SIG Node]
Changes by Kind
Dependency
-
kubeletに組み込まれたcAdvisorを、より軽量なgithub.com/google/cadvisor/libモジュールに変更した。これにより、長く非推奨だった、または旧来の次の三種類の機能が削除された。(#139870、@dims) [SIG API Machinery, Auth, Instrumentation, Network, Node and Testing]- 非推奨の
cAdvisorフラグは受け付けなくなり、いずれかを指定するとkubeletは起動に失敗する。維持されるのは--housekeeping-intervalのみ。削除対象は--application-metrics-count-limit、--boot-id-file、--container-hints、--containerd、--containerd-namespace、--enable-load-reader、--event-storage-age-limit、--event-storage-event-limit、--global-housekeeping-interval、--log-cadvisor-usage、--machine-id-file、--storage-driver-user、--storage-driver-password、--storage-driver-host、--storage-driver-db、--storage-driver-table、--storage-driver-secure、--storage-driver-buffer-duration。これらをkubeletの設定から削除すること。 -
cAdvisorのアプリケーション/カスタムメトリクスは収集されなくなる。対象は/stats/summaryのuserDefinedMetricsフィールドと、/metrics/cadvisorのカスタムcontainer_application_*ファミリー。 -
/metrics/cadvisorのcontainer_cpu_load_average_10s、container_cpu_load_d_average_10s、container_tasks_state系列は公開されなくなる。
- 非推奨の
Deprecation
SIG Node 関連はなし。
API Change
- デフォルトで無効の
DRADeviceCompatibilityGroupsfeature gate により、DRA デバイス互換性グループの Alpha サポートを追加した。DRA ドライバは ResourceSlice の各device.consumesCounters[]エントリに不透明なcompatibilityGroupsを宣言できる。スケジューラは、同じカウンター集合を消費するデバイスを同時に割り当てる際、宣言されたグループに共通部分がある場合だけ割り当てる。これにより、互換性のない組み合わせを準備時の失敗ではなくスケジューリング時の拒否として検出できる。(#139795、@omeryahud) [SIG API Machinery, Node, Scheduling and Testing] - Pod 単位の checkpoint と restore のため、CRI
v1RuntimeService API にCheckpointPodとRestorePodRPC を追加した。(#140366、@rst0git) [SIG Node, Testing and Windows] - デフォルトで無効の
DRAResourcePoolStatusfeature gate のもと、DRA リソース可用性の可視化(KEP-5677)の第2段階の Alpha を追加した。ResourcePoolStatusRequest controller は partitionable および consumable デバイスを正しく集計し、各デバイスを1回だけ数え、AdminAccess を無視し、taint のあるデバイスを利用不可として扱う。オプショナルのフィールドで partition と shareable の可用性を記述する。このアカウンティングの修正により、報告値はv1.36から変わる。(#140170、@nmn3m) [SIG API Machinery, Apps, Auth, Node and Testing] - DRA デバイスメタデータ
v1alpha1API を利用する Go コード向けに、宣言的バリデーション関数を生成した。(#140687、@alaypatel07) [SIG Node] - DRA に
DerivedAttributesを追加した。claim 内で CEL 式を使って仮想属性を定義し、デバイス制約に利用できる。たとえば、ドライバが物理属性を異なる方法で公開していても、同じ NUMA node 上の GPU と NIC など、異なるドメインのデバイスを一緒に割り当てられる。(#140029、@gauravkghildiyal) [SIG API Machinery, Node, Scheduling and Testing] - Alpha の
InPlacePodVerticalScalingMemoryBackedVolumesfeature gate のもと、memory-backed ボリュームを動的にリサイズできるようにした。(#139425、@natasha41575) [SIG API Machinery, Apps, Autoscaling, CLI, Node, Scheduling, Storage and Testing] -
emptyDirボリュームディレクトリの作成時に、modeフィールドで Unix パーミッションビット(0000~01777)を指定できるようにした。(#140244、@nispriha) [SIG API Machinery, Apps, Node, Storage and Testing] - コンテナごとのボリュームマウントに bind mount オプション(
noexec、nodev、nosuid)を指定できるようにした。(#140013、@nispriha) [SIG API Machinery, Apps, Autoscaling, Node, Scheduling and Testing]-
たとえば同じボリュームをアプリには通常どおりマウントし、別のコンテナには noexecを付けてマウントできます。volumeMounts[].bindMountOptionsを使う Alpha 機能で、VolumeBindMountOptionsfeature gate と対応するコンテナランタイムが必要です。
-
- ボリュームの健全性を報告するために必要な API 変更を追加した。(#140194、@gnufied) [SIG API Machinery, Apps, Architecture, Auth, Etcd, Instrumentation, Node, Storage and Testing]
- Alpha の
DefaultPodSysctlsfeature gate(デフォルト無効)のもと、Linux ノードにおける Pod sysctl のデフォルト値を指定するDefaultPodSysctlskubelet設定フィールドを追加した。(#140052、@VeraQin) [SIG Node and Testing] - Node ライフサイクル条件に
GracefulNodeShutdownInProgress、DrainInProgress、Drained、MaintenancePlanned、MaintenanceInProgressを追加した。(#139993、@rthallisey) [SIG Apps and Node] - DRA に Alpha の
DRAOptionalNodeOperationsサポートを追加した。ResourceSlice と ResourceClaim のSkipNodeOperationsフィールドにより、ノードレベルの準備処理とクリーンアップ処理を省略できる。(#139933、@troychiu) [SIG API Machinery, Autoscaling, Instrumentation, Node, Release, Scheduling and Testing] - DRA の
CapacityRequestPolicyRangeを修正し、ミリスケールの小数 quantity をサポートした。(#140161、@sunya-ch) [SIG API Machinery, Node and Scheduling] - Pod status で報告される Linux コンテナユーザー UID の検証を修正し、
2147483647を超え、符号なし32ビット UID の上限までの値を受け入れるようにした。(#138574、@Kunalbehbud) [SIG Apps and Node] -
KubeletInUserNamespacefeature gate を Beta に昇格した。(#134639、@AkihiroSuda) [SIG API Machinery, Apps, Node and Testing] -
MemoryQoSfeature gate を Beta に昇格した。memoryThrottlingFactorのデフォルト値はnilであり、明示的に設定しない限りmemory.highは設定されない。(#140007、@QiWang19) [SIG Node and Testing]-
Beta でも既定の kubelet 設定では memory.highによるスロットリングは始まらず、memory.min/memory.lowによる保護もmemoryReservationPolicy: Noneのため有効になりません。両者は別々の設定です。メモリ保護の仕組みは v1.36 の SIG-Node 記事 を参照してください。
-
-
NodeDeclaredFeaturesfeature gate を GA に昇格した。(#139763、@pravk03) [SIG Apps, Autoscaling, Node, Scheduling and Testing] - C++ マクロとの衝突を避けるため、
cri-apiの signal enum キーを改名した。api.proto定義ではSIGNAL_が接頭辞として付く。wire format は変わらない。(#139251、@SergeyKanzhelev) [SIG Apps, Node and Testing] - CDI spec のバージョンを動的に選択するよう変更し、互換性のない CDI spec の生成を防いだ。(#137699、@alaypatel07) [SIG Apps, Node, Scheduling and Testing]
- Pod-level resource の扱いを変更し、Pod resource に request または limit が含まれる場合だけ QoS の判定に使うようにした。空の Pod resource(
{}、{requests:{}}、{limits:{}})は QoS 計算に影響しなくなった。(#137150、@KevinTMtz) [SIG Apps, CLI, Node and Scheduling] - Alpha の
DRANodeAllocatableResources機能を更新した。(#140009、@pravk03) [SIG API Machinery, Apps, Auth, Autoscaling, Node, Scheduling and Testing]- ResourceSlice の mapping と PodStatus は、CPU・メモリ・hugepage をリソースとして扱う DRA ドライバの直接割り当て、およびアクセラレータのホスト overhead に使う overhead 割り当てに対応する。
-
kubeletは Pod / コンテナの cgroup、OOM score、Memory QoS threshold を設定するとき、DRA で割り当てられたリソースを計上する。 - DRA claim を使う Pod では、標準的な resource request と limit を in-place resize できる。
- スケジューラは参照のない Pod-level claim をサポートし、DRA を含めて resource limit を強制し、claim 共有ルールを適用する。overhead 割り当てについては Pod 間の claim 共有を許可する。
- validation は更新後の API 制約を強制し、node declared features を使って、対象 Node で
NodeAllocatableDRAfeature gate が有効であることを確認する。
-
kubelet: gRPC コンテナ probe の TLS 対応を追加した(feature gate のもとで提供)。(#137762、@amritansh1502) [SIG API Machinery, Apps, Node and Testing]
Feature
-
PodResourcesv1 API に Pod 単位のcpu_idsとmemoryフィールドを追加し、Pod に割り当てられたリソースの合計を報告できるようにした。一方、コンテナ単位の割り当ては、コンテナごとにリソースが分離されているコンテナについてのみ返す。(#138738、@KevinTMtz) [SIG Node and Testing]-
ノード上の exporter などが Pod 単位の割り当てを観測する際、コンテナ別の値を足し合わせるのではなく、Pod 単位のフィールドを参照できます。Pod で共有するリソースとコンテナごとに分離したリソースを区別するための変更です。
-
- Alpha の
kubeletメトリクスとしてkubelet_pod_deferred_resize_duration_secondshistogram を追加し、kubelet_pod_pending_resizesgauge にpriority_bucketlabel を追加した。(#140122、@natasha41575) [SIG Instrumentation and Node] - Pod admission 時の Pod-Level Resources(KEP-2837)の利用状況を追跡する Alpha の
kubeletメトリクスpod_level_resources_admission_totalを追加した。リソースの設定モードと QoS class ごとに分類して記録する。(#140463、@ndixita) [SIG Instrumentation and Node] -
kubeletにallocatedPodsendpoint を追加した。この endpoint は kubelet が割り当て済みと認識している Pod spec を公開し、in-place Pod resize やその他の Pod 更新に関する問題のデバッグに利用できる。KubeletAllocatedPodsEndpointfeature gate が必要。(#140856、@tallclair) [SIG Node and Testing]-
in-place resize の調査では、API server に保存された「希望する spec」と、kubelet が保持する「割り当て済み spec」を見比べると、変更がどこまで反映されたかを確認できます。1.37 で追加されたのは kubelet の endpoint で、Pod の /allocatedsubresource は後続の変更です。
-
- DRA driver 向けに、標準デバイス属性
resource.kubernetes.io/numaNodeと sysfs ベースの helper 関数を追加した。(#139929、@johnahull) [SIG Node] - node を unhealthy と判定する前に live
GETで lease が古くなっていることを確認するよう node の健全性チェックを改善し、古い cache による誤判定を避けた。(#138698、@michaelasp) [SIG Apps, Auth and Node] - Pod status の更新で DRA 関連フィールド
resourceClaimStatuses、extendedResourceClaimStatus、nodeAllocatableResourceClaimStatusesが省略されても、これらのデータを保持するようにした。古い client からの更新で DRA フィールドが消去され、Pod が永続的に Terminating のままになる事態を防ぐ。(#139876、@ashishpatel26) [SIG API Machinery, Auth, Node, Scheduling and Testing] -
DRAResourceClaimDeviceStatusfeature gate を GA に昇格した。(#137546、@LionelJouin) [SIG Node and Testing] -
InPlacePodVerticalScalingInitContainersfeature gate を GA に昇格した。(#140728、@natasha41575) [SIG Apps and Node] -
PLEGOnDemandRelistfeature gate を GA に昇格した。(#140805、@tallclair) [SIG Node] -
PodAndContainerStatsFromCRIfeature gate を Beta に昇格した。デフォルトでは無効。(#140081、@dgrisonnet) [SIG Node] -
PodLevelResourceManagersfeature gate を Beta に昇格し、デフォルトで有効にした、 (#140573、@KevinTMtz) [SIG Node and Testing]-
ただし、後続の #141209 によりデフォルト無効となった。
-
-
PodReadyToStartContainerscondition を GA に昇格した。(#140488、@Priyankasaggu11929) [SIG Node and Testing] -
kubeletの PodsAPI gRPC service を Beta に昇格した。(#140286、@briansonnenberg) [SIG Instrumentation, Node and Testing]-
ノード上の CNI プラグインや監視ツールが Unix socket 経由で Pod 情報を取得するための API です。API server を経由せず、ローカルの Pod 状態を参照できます。
-
-
EventedPLEGの対象範囲を、予期しない container の終了を迅速に検出する用途だけに縮小した。(#139262、@HirazawaUi) [SIG Node] -
cri-toolsを v1.36.0 に更新した。(#138613、@saschagrunert) [SIG Cloud Provider and Node] -
kubeletの設定 flag と関連する fallback 動作の deprecation の削除時期を、containerd v1.7 のサポートに合わせて v1.37 から v1.38 に延期した。(#139121、@carlory) [SIG Node and Testing]
Documentation
SIG Node 関連はなし。
Failing Test
SIG Node 関連はなし。
Bug or Regression
-
kubeletのログ関連 endpoint に明示的な HTTP method 制限を適用した。読み取り専用のkubeletserver endpoint は GET 以外を 405 で拒否し、NodeLogQuery は GET と POST のみを許可してそれ以外を 405 で拒否する。(#138088、@amritansh1502) [SIG Node] - DRA で、ResourceClaim の informer 更新をまれに見逃すと、unschedulable queue が flush されるまで Pod が Pending のままになる問題を修正した。(#140831、@pohly) [SIG Node and Scheduling]
- リリース前に重大な問題が見つかったため、
PodLevelResourceManagersfeature gate をデフォルトで無効にした。(#141209、@SergeyKanzhelev) [SIG Node] -
ListTypeAttributesfeature gate が無効でも、kube-schedulerで list 型属性、.includes関数、CEL macro を評価できるようにした。rolling upgrade 中や feature gate の切り替え時にエラーが発生することを防ぐ。(#139395、@everpeace) [SIG Node] - DRA の structured allocator が候補を評価する際に device の共有カウンターを誤って数える問題を修正した。候補の却下や backtrack の後もカウンターの予約を保持したり、共有 device の使用中 marker を消して後の割り当てでカウンターを二重に計上したりしていた。これにより、満たせる resource 要件を持つ node 上でもカウンターが枯渇したと誤判定し、Pod が Pending になることがあった。デフォルトの feature 構成で使用される allocator に影響した。(#140431、@thc1006) [SIG Node]
- in-place Pod resize 中に Pod 単位の MemoryQoS memory protection(
memory.minとmemory.low)が黙って失われる問題を修正した。PodLevelResourcesfeature gate が有効な場合には、Pod 単位のmemory.highも適用する。(#140262、@sohankunkerkar) [SIG Node and Testing] - Windows で
WindowsCPUAndMemoryAffinityfeature gate のもと、CPU Manager のstaticpolicy と Memory Manager の両方が有効な場合の CPU affinity を修正した。container は選択された NUMA node の全 CPU と CPU Manager が割り当てた CPU set の和集合ではなく、割り当てられた CPU set のみに固定される。以前の動作では他の container に排他的に割り当てられた CPU と重複することがあった。(#139684、@zylxjtu) [SIG Node] -
DecodeMetadataFromStreamは未知の API version の entry だけを skip し、対応する version の decode 失敗や不正な metadata ではエラーを返すようにした。データが黙って失われることを防ぐ。(#138530、@alaypatel07) [SIG Node] - 異なる resource の device plugin が同一 ID の device を公開した場合、
kubeletが device health 更新を誤った Pod status に適用する問題を修正した。影響を受ける Pod は、次の定期 Pod sync を待たずに device health の変更が status に反映される。(#140323、@harche) [SIG Node] -
cadvisorplugin がないため ZFS 上でkubeletを起動できない問題を修正した。(#138587、@BenTheElder) [SIG Node] - DRA の consumable capacity scheduling で、共有カウンターを消費する device に、消費容量ゼロの永続化済み共有割り当てがある場合、カウンターを二重に計上する問題を修正した。これにより同じ device に対する後続 claim が誤って拒否され、Pod が Pending になることがあった。(#140437、@thc1006) [SIG Node and Scheduling]
- 外部から削除された ResourceSlice を、driver の更新と削除のタイミングによって DRA driver が再作成しないことがある問題を修正した。(#140063、@pohly) [SIG API Machinery, Apps, Node and Testing]
- DRA の partitionable device で、driver が公開した
int64の有効範囲外の counter が informer cache 内で変更され、将来の Pod 割り当てが誤って失敗する問題を修正した。(#140518、@weizhoublue) [SIG Node] - DRA structured allocator が共有カウンターの cache を pool 名だけで識別していた問題を修正した。同一 node 上の異なる二つの driver が同じ pool 名を使うと、一方の counter 定義が他方に使われ、後者の device 割り当てが誤って受理または拒否されることがあった。(#140435、@thc1006) [SIG Node]
- DRA scheduler が、相互に排他的な device partition を複数の Pod に割り当ててしまう問題を修正した。
SharedCounters(DRAPartitionableDevices)と multi-allocatable device(DRAConsumableCapacity)を併用する DRA driver に影響した。device と driver によっては、誤った二重割り当てが workload failure、device conflict、crash、data loss につながる可能性があった。(#139040、@ashvindeodhar) [SIG Node] - Pod sandbox を再作成するとき、以前の sandbox の main container が container runtime にまだ認識されていると、
kubeletが init container を skip する問題を修正した。(#138514、@chez-shanpu) [SIG Node] - FUSE または GlusterFS の network filesystem 障害後、
subPathmount のある Pod がエラーループから抜けられなくなるkubeletの問題を修正した。(#139275、@yuehaii) [SIG Node, Storage and Testing] - Pod sync のたびに context が leak することで生じた
v1.36のkubeletmemory leak 回帰を修正した。(#139850、@compumike) [SIG Node] -
maxParallelImagePullsを 31 より大きく設定すると、image pull credential の検証時にkubeletが panic する問題を修正した。(#138937、@RajvardhanPatil07) [SIG Node] - Pod の graceful termination が始まると exec readiness probe の実行が「context canceled」で止まり、終了処理中の Pod の Ready condition が固定される
v1.35の回帰を修正した。(#140882、@karlkfi) [SIG Node] - 約 30 文字を超える名前の driver で、plugin registration socket の path が
AF_UNIXの長さ制限を超え、DRA のkubeletplugin helper で rolling update を有効にできない問題を修正した。rolling update 用 socket は、設定された registry directory に収まる最短の basename を選び、<driver>-<Pod UID>-reg.sock、<driver>-<hashed UID>-reg.sock、dra-<hashed driver+UID>-reg.sockの順に優先する。(#139623、@vishalanarase) [SIG Node and Testing] - kernel の階層的な protection model に必要な祖先側の coverage が親 cgroup にないため、Burstable Pod の
memory.lowによる soft protection が効かない問題を修正した。(#140267、@sohankunkerkar) [SIG Node and Testing] - 複数の claim を使う Pod で、Pod の
.status.resourceClaimStatusesが一部の claim しか含まないリストの間を揺れ動く問題を修正した。(#138408、@johnbelamaric) [SIG Apps and Node] - ResourceClaim を共有する PodGroup の Pod が、その ResourceClaim を利用できない Node に scheduling される問題を修正した。(#140089、@nojnhuh) [SIG Node, Scheduling and Testing]
- multi-node claim と per-node claim の両方を使用する Pod が Pending のままになる問題を修正した。(#139017、@johnbelamaric) [SIG Node and Scheduling]
- consumable capacity を持つ
allocationMode: Allの ResourceClaim で、該当 device の残容量が不足している場合に一部だけ割り当てられる問題を修正した。該当する全 device を満たせるようになるまで、その claim の割り当ては正しく失敗する。(#140769、@kiarashazarnia) [SIG Node] -
MemoryQoSfeature gate を無効にしても container ごとのmemory.highcgroup 値が消えず、古い制限による throttling が続く問題を修正した。(#139377、@sohankunkerkar) [SIG Node and Testing] -
DRAListTypeAttributesfeature gate を有効にすると、有効な組み合わせがあるのに device を割り当てられない問題を修正した。list 型属性値を使うmatchAttribute制約で複数 device を割り当てる際、allocator が backtrack する必要がある場合に発生していた。(#140325、@everpeace) [SIG Node and Scheduling] - Pod 内の image volume ごとに
kubeletが毎秒 Event を生成する問題を修正した。(#138655、@mdbooth) [SIG Node] - admission されなかった Pod が短時間だけ allocated budget に計上され、妥当なサイズの Pod に対しても不要な admission failure が生じる問題を修正した。(#139522、@haircommander) [SIG Node]
- Windows で複数の
subPathvolume mount を持つ Pod が Terminating のままになる問題を修正した。subPathの準備時に file handle が leak して volume cleanup が妨げられていた。(#138367、@timmy-wright) [SIG Node, Testing and Windows] -
kubeletの node shutdown manager が失敗を繰り返すと D-Bus 接続を leak し、最終的に thread 枯渇と crash に至る問題を修正した。(#137141、@harche) [SIG Node] - restartable init container(sidecar container)に対して
kubeletが container ごとの ephemeral-storage limit を適用せず、宣言した limit を超えても Pod が eviction されない問題を修正した。(#138462、@shachartal) [SIG Node and Testing] - DRA consumable capacity の
validRangeにあるstep、min、max、defaultの値が負数または9223372036854775807超の場合、ゼロ除算による panic と ResourceSlice admission validation の誤判定が発生する問題を修正した。(#140666、@thc1006) [SIG Node] -
DRAConsumableCapacityfeature gate が有効で、capacity request policy のvalidRange.stepを 0 にすると ResourceSlice validation が panic する問題を修正した。(#139698、@wilmerdooley) [SIG Node] -
kubeletのPrepareResourcesが、同時に unprepare 中の ResourceClaim に Pod を結び付け、未準備の device を使う Pod が動作し続ける race を修正した。(#140527、@bart0sh) [SIG Node] -
MemoryQoSfeature gate を一度有効にした後で無効化すると、kubeletが古い cgroup v2 のmemory.minとmemory.lowを消さない回帰を修正した。(#138903、@sohankunkerkar) [SIG Node and Testing] - DRA consumable capacity の scheduler で、高精度の小数(細かい分数値や
int64範囲外の値など)として保存された device capacity requirement を持つ ResourceSlice が、割り当て中に informer cache 内で変更される問題を修正した。この変更により、後続の Pod への割り当てが誤って失敗することがあった。(#140702、@weizhoublue) [SIG Node] - ResourceClaim status に同じ configuration entry が重複して報告される問題を修正した。(#139732、@LionelJouin) [SIG Node]
- DRA consumable-capacity allocator の capacity accounting を修正した。device の整数または milli-value の範囲の算術で表せない request、または負の値になる request は、満たせると誤判定して device を割り当てたり要求値を小さく丸めたりせず、拒否する。(#140442、@thc1006) [SIG Node]
- Node status の
ephemeral-storagecapacity にDecimalSIformat を使い、capacity と allocatable の format が異なる問題を修正した。(#137652、@0xMH) [SIG Node] - Windows の memory eviction threshold notifier で
GetPerformanceInfo()が失敗すると nil pointer dereference が発生する問題を修正した。(#138727、@rzlink) [SIG Node] - DRA
kubeletplugin helper が listener を起動できず、古い Unix domain socket の削除に失敗した際、listen error を繰り返す代わりに socket 削除失敗の理由を報告するようにした。(#141105、@thc1006) [SIG Node] -
cri-apiのKeyValueのvaluefield の JSON encoding をv1.34より前の動作に戻し、以前の release との互換性を回復した。(#139964、@liggitt) [SIG Node] - hugepage を持つ node で、
kubeleteviction manager がmemory.availableを計算する際、AvailableBytesから hugepage 用に予約された RAM を除外するようにした。利用可能 memory の過大報告による eviction の遅延と OOM kill を修正する。HugepageAwareEvictionfeature gate はデフォルト有効で、無効にすると従来の動作に戻せる。(#138127、@jingczhang) [SIG Node and Testing] -
PodReadyToStartContainerscondition のstatusがFalseのとき、Pod sandbox が準備できていない理由(たとえば「pod sandbox has no IP address」「no pod sandbox exists」)を示す diagnostic message を追加した。node log にアクセスせずに、ContainerCreatingで止まった Pod を調査しやすくする。(#135300、@harche) [SIG Node] - image pull が失敗した場合に限り、
kubeletがFailedToRetrieveImagePullSecretEvent を出すようにした。(#138432、@Jamstah) [SIG Node] - optional な container annotation が存在しない場合に、
kubeletがV(4)の「Label not found」log を出さないようにした。(#140163、@HirazawaUi) [SIG Node] - 部分的に失敗した
PrepareResourcesを再試行すると、kubelet/ DRA が重複した CDI device ID を CRI runtime に渡し、container の起動に失敗することがある問題を修正した。(#140274、@bart0sh) [SIG Node] -
DefaultPodSysctlsfeature でuser.*sysctl を評価する際、spec.hostUsersが未設定なら true とみなすようkubeletを変更した。(#140892、@weizhoublue) [SIG Node] -
kubeletの context が cancel されたら eviction manager の monitoring goroutine が速やかに終了するようにし、shutdown 時の goroutine leak を修正した。(#138854、@alexmchughdev) [SIG Node] -
kubelet: cgroup v2 の readback から得た Pod 単位の CPU request が status に誤って報告される問題を修正した。(#137660、@pacoxu) [SIG Node] - node が登録された後、
kubeletが node Event のinvolvedObject.uidを可能な範囲で設定し、たとえばkubectl describe nodeで UID により Event を関連付けられるようにした。UID は一度だけ解決し、その後は更新しない。kubeletが動作したまま node が削除・再作成され UID が変わった場合、kubeletを再起動するまで Event には旧 UID が使われる。(#139921、@harche) [SIG Node] -
MemoryQoSが有効な場合に、BestEffort container にも cgroup v2memory.highを設定するようkubeletを変更した(KEP-2570 に基づく)。(#138139、@amritansh1502) [SIG Node]
Other (Cleanup or Flake)
- ResourceClaim の configuration がすべての request に適用される場合、config status の
requestsfield を空にするようにした。(#139731、@LionelJouin) [SIG Node] -
DRAPrioritizedListfeature gate をデフォルト有効に固定した。Prioritized List feature はv1.36で GA に達しており、無効化できなくなった。(#139110、@mortent) [SIG Node, Scheduling and Testing] - Pod を削除すると、別の Pod がまだ使用している resource を
kubeletDRA が unprepare してしまう問題を修正した。(#140212、@bart0sh) [SIG Node] - extended resource(たとえば
nvidia.com/gpu)を使う Pod の synthesized ResourceClaim へのアクセスを node が拒否され、container がContainerCreatingで止まる可能性がある理論上の問題を修正した。実際の発生は観測されていない。(#138792、@dims) [SIG Auth and Node] - NUMA distance 情報を公開していない Windows node で
prefer-closest-numa-nodespolicy option が有効な場合、kubeletTopology Manager の error message を明確にし、その node では option がサポートされないことを説明するようにした。(#139760、@zylxjtu) [SIG Node] - static Pod に無効な
priorityまたはpriorityClassNameが指定された場合、kubeletが warning を log に出すようにした。(#136705、@sreeram-venkitesh) [SIG Node] -
RelaxedDNSSearchValidationfeature gate を削除した。(#139217、@adrianmoisey) [SIG Apps, Node and Testing] - 複数の ResourceClaim を扱う DRA e2e test から
KubeletMinVersionlabel を削除した。(#138001、@rogowski-piotr) [SIG Node and Testing] -
PreventStaticPodAPIReferencesfeature gate を削除した。static Pod は API resource を参照できず、この動作を無効化できなくなった。(#140226、@sreeram-venkitesh) [SIG Node] -
v1.33から常に有効だったSidecarContainersfeature gate を削除した。(#137755、@HirazawaUi) [SIG Apps, Node, Scheduling and Testing]