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-Node (kubelet) 変更内容

Last updated at Posted at 2025-05-27

本記事は、Kubernetes 変更内容共有会(v1.33) の SIG-Node(kubelet)に関する資料として準備されました。
Kubernetes 1.33の CHANGELOG から、SIG-Nodeに関するところを抜粋して紹介します。

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

所感 :pencil:

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

Dynamic Resource Allocation (DRA) Updates

DRA は、Kubernetes クラスタ内のリソースを動的に割り当てるための機能です。これまで Device Plugin を使ってリソースを管理していましたが、DRA はより柔軟なリソース管理を可能にします。

今回の変更でも多数の DRA に関連する機能が追加されました。
様々な機能があり状況が複雑になっているので、かんたんに整理を試みてみます:

  • API は、 resource.k8s.io/... で定義されています
    • DeviceClass (v1beta2)
      • クラスタに存在するデバイスのクラスを表現します。 Storage でいうと、 StorageClass のようなものです。
    • ResourceClaim (v1beta2)
      • PVC のように、リソースの要求を表現します。
    • ResourceClaimTemplate (v1beta2)
      • ResourceClaim のテンプレートを表現します。PodSpec で使用することで、テンプレートから自動的に ResourceClaim を生成できます。
    • ResourceSlice (v1beta2)
      • デバイスがどのような性質を持っているかを表現します。例えば GPU の場合に、VRAM のサイズや、演算能力などを表現できます。
    • DeviceTaintRule (v1alpha3)
      • デバイス を taint したいときに管理者が作成します。セレクタを記述することで、条件にマッチした特定のデバイスに taint を付与できます。付与された taint は、 ResourceClaim によって toleration される必要があります。
      • DeviceTaintRule APIは Kubernetes 1.33 でアルファとして追加されました。
  • 最近追加された Features
    • Admin access
      • 管理者が ResourceClaim や ResourceClaimTemplate に adminAccess フィールドを設定することで、管理目的でリソースを使うことができます。
        • Kubernetes 1.33 から、kubernetes.io/dra-admin-access ラベルが付与された管理者用ネームスペースへのアクセス権を持つユーザーのみが、このフィールドを持つ ResourceClaim や ResourceClaimTemplate を作成できます。
        • これを使うことで、管理者が使用中のリソースを横から利用したり、コンテナにリソースを割り当てる際に、権限を追加できたりします。
      • Admin access 自体の feature は Kubernetes 1.32 でアルファとして追加されました。
    • Partitionable Devices
      • GPU の MIG (Multi-Instance GPU) のように、デバイスをパーティション化して複数の Pod に割り当てることができます。
      • ResourceSlice に CounterSets と呼ばれるフィールドがあり、カウンタによって分割可能なリソースの数を表現できます。
      • Partitionable Devices は Kubernetes 1.33 でアルファとして追加されました。
    • Prioritized List
      • リソースを要求する際に、「大リソースなら1個 」、「小リソースならN個」のどちらかがほしい。なお、可能なら大リソースを優先して割り当てたい、というような要求があることがあります。
      • Prioritized List はこのような要求を ResourceClaim で表現するための機能です。
      • Prioritized List は Kubernetes 1.33 でアルファとして追加されました。

他にも面白い機能がたくさんあります。興味がある方は調べてみてください。

昇格した機能

  • GA になった
    • Sidecar Containers
    • CPU Manager Policy Options
    • Recursive Read-Only Mounts (RRO)
  • Beta になった
    • ProcMountType
    • DistributeCPUsAcrossNUMA
    • In-Place Pod Vertical Scaling
    • SELinuxChangePolicy, SELinuxMount
    • Fine-Grained Supplemental Groups Policy
    • User Namespace Support

ここでは、今回 GA になった機能のうち CPU Manager Policy Options について紹介します。
CPU Manager Policy Options KEP-2625 は Kubernetes 1.22 でアルファ、1.23 で ベータ、1.33 で GA になりました。

そもそも CPU Manager とは、Kubernetes で実行される コンテナ に対して、CPU リソースを効率的に割り当てるための機能です。
例えば static policy を利用することで、コンテナの CPU リソース要求量に対して、CPU コアを静的に(つまり、Core 0 と Core 1 を専有させるなど)割り当てることができます。
その際に Kubelet が、要求量の 2 コア 、という整数値から、どのコアを割り当てるかを決定する必要があります。
これを制御するのが CPU Manager Policy Options です。
同じ NUMA ノード内から コア を割り当てたい、別の NUMA ノードから コア を割り当てたい、など数多く存在する要件に対して、
それを満たすようなオプションを多数提供しています。

https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/#cpu-policy-static--options に、オプションの一覧があります。

  • full-pcpus-only (GA, visible by default) (1.33 or higher)
  • distribute-cpus-across-numa (beta, visible by default) (1.33 or higher)
  • align-by-socket (alpha, hidden by default) (1.25 or higher)
  • distribute-cpus-across-cores (alpha, hidden by default) (1.31 or higher)
  • strict-cpu-reservation (beta, visible by default) (1.32 or higher)
  • prefer-align-cpus-by-uncorecache (alpha, hidden by default) (1.32 or higher)

CPU インテンシブなワークロードをベアメタルで実行する場合などに、チューニングに取り組んでみてください。


以下は Kubernetes 1.33 の CHANGELOG の和訳です。

Urgent Upgrade Notes

  • クラスタ内のノードで CrashLoopBackOff 状態のコンテナについて、コンテナ再起動時の初期遅延と最大遅延の両方を、推奨値である 1s の初期遅延と 60s の最大遅延に削減する機能を追加しました。この設定をノードに適用するには、feature gate ReduceDefaultCrashLoopBackOffDecay を有効にしてください。また、ノードごとに設定された CrashLoopBackOff.MaxContainerRestartPeriod とともに feature gate KubeletCrashLoopBackOffMax を使用している場合、kubelet の実際の設定はドキュメント こちら で説明されている競合解決ポリシーに従います。(#130711, @lauralorenz) [SIG Node and Testing]

Changes By Kind

API Change

  • 新しいアルファ feature gate MutableCSINodeAllocatableCount が導入されました。 この feature gate を有効にすると、CSINode.Spec.Drivers[*].Allocatable.Count フィールドが変更可能になり、CSIDriver オブジェクトに NodeAllocatableUpdatePeriodSeconds という新しいフィールドが追加されます。これにより、ノードの報告済み割り当て可能ボリューム容量を周期的に更新できるようになり、kube-scheduler が依存する古い情報が原因でステートフル Pod がスタックするのを防ぎます。(#130007, @torredil) [SIG Apps, Node, Scheduling and Storage]
  • feature gate DRAPartitionableDevices を追加しました。有効にすると、動的リソース割り当てがパーティション可能なデバイスの割り当てをサポートします。(#130764, @cici37) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Scheduling, Storage and Testing]
  • リソース要求を満たすためのデバイス選択基準の「一意の」優先リストに対する DRA サポートを追加しました。(#128586, @mortent) [SIG API Machinery, Apps, Etcd, Node, Scheduling and Testing]
  • kubelet エンドポイント用の /flagz エンドポイントを追加しました。(#128857, @zhifei92) [SIG Architecture, Instrumentation and Node]
  • 新しい StopSignal コンテナライフサイクルを使用してカスタム停止シグナルを設定するためのサポートを追加しました。(#130556, @sreeram-venkitesh) [SIG API Machinery, Apps, Node and Testing]
  • サイドカー(initContainers内で定義されたコンテナでrestartPolicyAlwaysに設定されている場合)を持つPodの In-place Pod Vertical Scaling をサポートしました。(#128367, @vivzbansal) [SIG API Machinery, Apps, CLI, Node, Scheduling and Testing]
  • CPU Manager Policy Option が Generally Available となりました。(#130535, @ffromani) [SIG API Machinery, Node and Testing]
  • Pod APIを変更して、Podレベルのリソースとしてhugepage resourcesをサポートしました。(#130577, @KevinTMtz) [SIG Apps, CLI, Node, Scheduling, Storage and Testing]
  • DRA API: 同じResourceClaimを使用できるPodの最大数が32から256に変更されました。この緩和された制限を使用しているクラスタをKubernetes 1.32.0にダウングレードすることはサポートされていません。バージョン1.32.0では、status.reservedForフィールドに32を超えるエントリがあるResourceClaimの更新を拒否するためです。(#129543, @pohly) [SIG API Machinery, Node and Testing]
  • DRA: 属性文字列を使用したCEL式のコスト見積もりが不完全だったため、コスト制限を超えていました。(#129661, @pohly) [SIG Node]
  • DRA: デバイスの taint により、DRAドライバや管理者がデバイスを使用不可としてマークできるようになります。taint の severity によって tolerate されていない taint がある場合は、Pod がスケジュールされなくなったり、実行中の Pod が停止されることもあります。 (#130447, @pohly) [SIG API Machinery, Apps, Architecture, Auth, Etcd, Instrumentation, Node, Scheduling and Testing]
  • DRA: Kubernetes 1.33 以降、kubernetes.io/dra-admin-access ラベルが付与された管理者用ネームスペースへのアクセス権を持つユーザーのみが、この管理者用ネームスペース内で adminAccess フィールドを持つ ResourceClaim または ResourceClaimTemplate オブジェクトを作成できます。これらの ResourceClaim や ResourceClaimTemplate を Pod や Deployment の仕様で参照できるのは、作成者本人のみに制限されます。(#130225, @ritazh) [SIG API Machinery, Apps, Auth, Node and Testing]
  • DRA: ノード上の「すべて」のデバイスを要求する場合、Kubernetes 1.32 まではデバイスが存在しないノードにも Pod をスケジュールしていましたが、Kubernetes 1.33 では少なくとも1つのデバイスが存在するノードのみを対象とするようになりました。「デバイスがなくてもスケジュールを継続する」動作が必要な場合は、今後実装予定の Prioritized List 機能を使用し、「すべて」のデバイスと「count: 0」の代替デバイスを指定してサブリクエストを送信してください。(#129560, @bart0sh) [SIG API Machinery and Node]
  • ディスク上の kubelet 認証情報プロバイダーの設定を拡張し、オプションの tokenAttribute フィールドを設定可能にしました。設定すると、kubelet は現在の Pod とそのサービスアカウントに紐付けられた指定されたオーディエンスを持つトークンを生成します。この KSA トークンと設定で定義された KSA に必要なアノテーションは、kubelet 認証情報プロバイダープラグインに標準入力経由で送信されます(従来送信されていたイメージ情報も含まれます)。送信する KSA アノテーションは kubelet 認証情報プロバイダーの設定で変更可能です。(#128372, @aramase) [SIG API Machinery, Auth, Node and Testing]
  • InPlacePodVerticalScaling 機能について、API サーバーはリサイズ要求を受信しても resize ステータスを Proposed に設定しなくなりました。(#130574, @natasha41575) [SIG Apps, Node and Testing]
  • PodAffinity (PodAntiAffinity) の MatchLabelKeys (MismatchLabelKeys) 機能を GA に昇格しました。(#130463, @sanposhiho) [SIG API Machinery, Apps, Node, Scheduling and Testing]
  • kubelet metrics kubelet_image_volume_requested_total, kubelet_image_volume_mounted_succeed_total, kubelet_image_volume_mounted_errors_total を追加しました。(#130135, @saschagrunert) [SIG API Machinery, Apps, Node and Testing]
  • InPlacePodVerticalScaling: メモリ制限値を減少させる場合、メモリリサイズ時の再起動ポリシーをRestartContainerに設定する必要があります。コンテナのresizePolicyは変更不可となりました。(#130183, @tallclair) [SIG Apps and Node]
  • KEP-3857: 再帰的な読み取り専用 (RRO) マウント: GA に昇格 (#130116, @AkihiroSuda) [SIG Apps, Node and Testing]
  • kubelet: KubeletConfiguration.subidsPerPod を追加 (#130028, @AkihiroSuda) [SIG API Machinery and Node]
  • MergeDefaultEvictionSettings は、この設定で指定されている evictionHard、evictionSoft、evictionSoftGracePeriod、evictionMinimumReclaim フィールドのデフォルト値を、この設定で指定された値とマージすることを示します。この設定で指定されていないシグナルはデフォルト値を継承します。(#127577, @vaibhav2107) [SIG API Machinery and Node]
  • kubeletに新しい設定が追加され、コンテナイメージの追跡と取得成功に必要な認証情報を管理できるようになりました。この情報はホストの再起動やkubeletの再起動後も保持されます。kubeletは、認証情報の確認が必要なイメージについて、kubeletの再起動時に認証情報が存在しない場合必ず取得するようにし、認証を強制します。これにより、podが IfNotPresent の ImagePullPolicy を指定していても、kubeletは認証情報が存在しない場合はイメージの取得を試み、ImagePullPolicy が Never で認証情報が提供できない場合は、Podの起動に失敗する可能性があります。(#128152, @stlaz) [SIG API Machinery, Architecture, Auth, Node and Testing]
  • NodeInclusionPolicyInPodTopologySpread をv1.33で安定版に昇格しました。(#130920, @kerthcet) [SIG Apps, Node, Scheduling and Testing]
  • Graduated feature gate CPUManagerを削除しました。(#129296, @carlory) [SIG API Machinery, Node and Testing]
  • node.status.nodeSystemInfoにスワップ容量の情報を追加しました。(#129954, @iholder101) [SIG API Machinery, Apps and Node]
  • feature gate InPlacePodVerticalScalingAllocatedStatusは非推奨となり、使用されなくなりました。ContainerStatusAllocatedResourcesフィールドはInPlacePodVerticalScaling feature gate で保護されるようになりました。(#130880, @tallclair) [SIG CLI, Node and Scheduling]
  • kubeletはPodObservedGenerationTracking feature gate が設定されている場合、podの条件にobservedGenerationフィールドを設定するようになりました。(#130573, @natasha41575) [SIG Apps, Node, Scheduling, Storage, Testing and Windows]
  • DRA: resource.k8s.io/v1beta1 API が非推奨になり、Kubernetes 1.36 以降で削除されます。代わりに resource.k8s.io/v1beta2 を使用してください。 (#129970, @mortent) [SIG API Machinery, Apps, Auth, Etcd, Node, Scheduling and Testing]

Feature

  • ノードメトリクスに Pressure Stall Information (PSI) メトリクスを追加しました。 (#130701, @roycaihw) [SIG Node and Testing]
  • リソースアラインメントエラーの主な原因を公開するメトリクスを追加しました。 (#129950, @ffromani) [SIG Node and Testing]
  • kubelet に /statusz HTTP エンドポイントを追加しました。 (#128811, @zhifei92) [SIG Architecture, Instrumentation and Node]
  • CPU Manager の static policy に新しいオプション strict-cpu-reservation を追加しました。このオプションが有効になっている場合、reservedSystemCPUs の CPU コアは system daemon と interrupt processing に厳密に使用され、どのワークロードにも利用できなくなります。 (#130290, @psasnal) [SIG Node and Testing]
  • kubelet 設定ファイル内の containerLogMaxFiles の検証を追加しました。 (#129072, @kannon92) [SIG Node]
  • ProcMountType 機能がデフォルトで有効なベータに移行しました (#130798@haircommander) [SIG Node]
  • DRA: Kubernetes 1.33 以降、namespaced cluster edit ロールが割り当てられた通常ユーザーは、resourceclaimsresourceclaims/statusresourceclaimtemplates に対する read 権限と、resourceclaimsresourceclaimtemplates に対する write 権限を持つようになりました。(#130738@ritazh) [SIG Auth]
  • DRAResourceClaimDeviceStatus がデフォルトで有効になり、DRA-Driver が各割り当てデバイスのデバイスステータスデータを報告できるようになりました。(#130814@LionelJouin) [SIG Network and Node]
  • DistributeCPUsAcrossNUMA ポリシーオプションがデフォルトで有効なベータに移行しました。(#130541@swatisehgal) [SIG Node]
  • Feature gate UserNamespacesSupport をデフォルトで有効化しました。(#130138@rata) [SIG Node and Testing]
  • Pod のリサイズ操作中に発生していたエラーが、PodResizeInProgress 状態として表示されるようになりました。(#130902, @natasha41575)
  • コンテナレベルのスワップメトリクス収集に関する不具合を修正しました。(#129486, @iholder101) [SIG Node and Testing]
  • DisableNodeKubeProxyVersion feature gate をデフォルトで有効化するように変更しました。これにより、kubeletは関連ノードの.status.kubeProxyVersionフィールドを設定しなくなりました。(#129713, @HirazawaUi) [SIG Node]
  • KubeletFineGrainedAuthz feature gate をデフォルト有効なベータに移行しました。(#129656, @vinayakankugoyal) [SIG Auth, CLI, Node, Storage and Testing]
  • レガシーコードパスを有効にするLegacySidecarContainers feature gate を導入しました。この一時的 feature gate はデフォルトで無効になっており、v1.33でのみ利用可能で、v1.34で削除されます。(#130058, @gjkim42) [SIG Node]
  • KEP-3619: fine-grained supplemental groups policyがベータに移行しました。kubeletは現在、この機能をサポートしていないノードにスケジュールされた.spec.securityContext.supplementalGroupsPolicy: Strictを持つ Pod を拒否します。(#130210, @everpeace) [SIG Apps, Node and Testing]
  • kubelet + DRA: DRAドライバプラグイン(およびそれのみ)について、kubeletはドライバのDaemonSetでmaxSurge > 0を使用したローリングアップデートをサポートします。DRAドライバはこれをサポートする必要があり、k8s.io/dynamic-resource-allocation/kubeletpluginヘルパーパッケージを使用して実装できます。(#129832, @pohly) [SIG Node, Storage and Testing]
  • Podリソースのチェックポイントはallocated_pods_stateactuated_pods_stateファイルで管理されるようになり、以前使用されていたpod_status_manager_stateは廃止されました。(#130599, @tallclair) [SIG Node]
  • PodLifecycleSleepActionがデフォルトで有効化され、ユーザーはスリープライフサイクルアクションを持つコンテナを0秒の期間で作成できるようになりました。(#130621, @sreeram-venkitesh) [SIG Node]
  • In-place Pod Vertical Scaling がベータとして提供開始されました。InPlacePodVerticalScaling feature gate はデフォルトで有効化されています。(#130905, @tallclair) [SIG Node]
  • SELinuxChangePolicyとSELinuxMountがベータに昇格しました。SELinuxMountはデフォルトで無効のままです。(#130544, @jsafrane) [SIG Auth, Node and Storage]
  • SidecarContainers 機能が GA に昇格しました。'SidecarContainers' feature gate はデフォルト値にロックされ、v1.36 で削除されます。この feature gate を明示的に設定していた場合は、今すぐ削除してください。(#129731, @gjkim42) [SIG Apps, Node, Scheduling and Testing]
  • UserNamespacesSupport feature gate をデフォルト有効なベータに移行しました。 (#130138, @rata) [SIG Node and Testing]

Bug or Regression

  • ボリュームの権限と所有権の変更に対する進捗追跡を追加しました。 (#130398, @gnufied) [SIG Node and Storage]
  • PublishResources() のシグネチャを変更し、ResourceSlicesResources パラメータの代わりに resourceslice.DriverResources パラメータを受け入れるようにしました。 (#129142, @googs1025) [SIG Node and Testing]
  • DRA: ResourceClaims を使用していない Pod がスケジュール不能だった理由の説明に、他の理由でスケジュール不能だった場合に不要な「no new claims to deallocate」という文言が含まれていました。 (#129823, @googs1025) [SIG Node and Scheduling]
  • スワップが有効になっているコンテナで、メモリの ResizePolicy が RestartContainer でない場合の InPlace Pod リサイズを無効化しました。 (#130831, @ajaysundark) [SIG Node and Testing]
  • InPlacePodVerticalScalingExclusiveCPUs feature gate の排他的割り当て可用性チェックのバグを修正しました。 (#130559, @esotsal) [SIG Node]
  • 新しいシークレットや ConfigMap を参照する Pod に一時コンテナを追加すると、その新しいシークレットや ConfigMap に Pod がアクセスできなくなるバグを修正しました。(#114984, @cslink) (#129670, @cslink) [SIG Auth]
  • 1.32 で発生していた、postStart フックを持つ Pod が起動できなくなる問題を修正しました。(#129946, @alex-petrov-vt) [SIG Node]
  • 1.32 で発生していた、kubelet が再起動後にノードがステータスを報告できず、サービス証明書を更新できなくなる問題を修正しました。(#130348, @aojea) [SIG Node]
  • kubelet が再起動時に Pod の PVC がユーザーによって削除されている場合、実行中の Pod のボリュームをアンマウントする問題を修正しました。(#130335, @carlory) [SIG Node, Storage and Testing]
  • ノードの再起動後、Pod のフェーズが Pending のままになる問題を修正しました。(#128516, @gjkim42) [SIG Node and Testing]
  • 圧縮されたkubeletログファイルのパーミッションを、非圧縮のkubeletログファイルのパーミッションを使用するように修正しました。(#129893, @simonfogliato) [SIG Node]
  • kubeletのproberモジュールにおいて、Unknownステータスのプローブ結果に対するログ記録とイベント記録を実装しました。これにより、コンテナプローブがUnknown結果を返した場合の診断と監視が改善され、ヘルスチェックの可観測性と信頼性が向上しました。(#125901, @jralmaraz)
  • リブートイベントの報告を改善しました。kubeletが関連ノードにステータスを書き込みできない場合(リトライがトリガーされる場合)でも、サーバーレベルのリブートが検出された場合、kubeletは1つのリブートイベントのみを発行します。(#129151, @rphillips) [SIG Node]
  • WebSockets HTTPSプロキシのサポートを追加しました。(#129872, @seans3) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Instrumentation, Network and Node]
  • Linuxユーザーネームスペースとカーネルバージョンに関連する警告を削除しました。以前は、 feature gate UserNamespacesSupportが有効になっている場合、kubeletはLinuxカーネルバージョンが6.3.0より古いことを検出すると警告を表示していました。ユーザーネームスペースのサポートは通常カーネル6.3以降を必要としますが、古いカーネルでも動作する場合があります。(#130243, @rata) [SIG Node]
  • cpu-manager-policy=staticが設定されている場合、Static CPU 割り当ての条件を満たすコンテナ(つまり、Guaranteed QoSの Pod で、整数値の CPU requests を持つコンテナ)には cfs クォータが適用されなくなります。この修正は長年の動作を変更するため、regression を観測したユーザーはデフォルトで有効になっているDisableCPUQuotaWithExclusiveCPUs feature gate を使用して以前の動作を復元できます。問題が発生して feature gate を使用する必要がある場合は、問題を報告してください。(#127525, @scott-grimes) [SIG Node and Testing]

Other (Cleanup or Flake)

  • NUMAノード間のCPU使用率分布を計測するメトリクスを追加 (#130491, @swatisehgal) [SIG Node and Testing]
  • Uncore(L3キャッシュ)ブロックの割り当てを追跡するメトリクスを追加 (#130133, @ffromani) [SIG Node and Testing]
  • StorageNamespaceIndex feature gate をfalseに設定し、非推奨化 (#129933, @serathius) [SIG Node]
  • iptables バイナリがインストールされていないシステムで実行されている場合、kubelet が複数回のエラーをログに記録しなくなりました。(#129826, @danwinship) [SIG Network and Node]
  • Graduated feature gate AppArmor を削除しました。(#129375, @carlory) [SIG Auth and Node]
  • Graduated feature gate AppArmorFields を削除しました。(#129497, @carlory) [SIG Node]
  • CNI プラグインを v1.6.2 に更新しました。(#129776, @saschagrunert) [SIG Cloud Provider, Node and Testing]
  • etcd クライアントライブラリを v3.5.21 に更新しました。(#131103, @ahrtr) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Etcd, Instrumentation, Network, Node and Storage]
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?