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 Storageの変更内容

Last updated at Posted at 2025-05-27

Kubernetes 1.33.0がリリースされました🎉

それでは、Kubernetes 1.33.0のCHANGELOGをベースにSIG Storageに関する変更について紹介します。

:pencil: がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。

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

:pencil: 所感

SIG Storageは、v1.33では、多くの機能がGAへ昇格し、大分安定してきている印象を受けます。

v1.33の注目機能(Alpha)としては下記です(詳細は本文の :pencil: を参照ください)。

  • StorageCapacityScoring: Dynamic provisioningなvolumeを持つPodをスケジュールする際に空き容量を考慮してノードのスコアリングできる機能
  • MutableCSINodeAllocatableCount: CSINode.Spec.Drivers[*].Allocatable.Countがmutableにできる機能

Feature昇格は下記の通りです:

  • Beta昇格
    • SELinuxChangePolicy, SELinuxMount(disabled by default)
  • GA昇格
    • AnyVolumeDataSource
    • CSIMigrationPortworx
    • HonorPVReclaimPolicy
  • GA後のfeature gate削除
    • PersistentVolumeLastPhaseTransitionTime

:warning: Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)

  • [Action Required] IsLikelyNotMountPoint を呼んでいるCSI driverは falseが返ってきても、そのパスがマウントポイントだと想定するべきではありません。 渡されたファイルがイレギュラーなファイルで実際はマウントポイントでない場合には許容されてしまうので、CSI Driverは返り値を適切に利用する必要があります(#129370, @andyzhangx)

:pencil: Windowsでのみインパクトのある修正です。go 1.23で入ったWindowsにおけるマウントポイントのパース処理の変更による影響です。

:wastebasket: Deprecation (非推奨になったAPI)

  • StorageCapacityScoring feature gateが追加され、ストレージの空き容量でノードをスコアするようになりました。これはAlphaステージであり、デフォルトでdisabledです。これに伴ってVolumeCapacityPriority Alpha feature gateはこのfeature gateで置き換えられます。デフォルトの挙動も変更になります。VolumeCapacityPriorityは空き容量が少ないノードを優先していましたが、StorageCapacityScoringは空き容量が多いノードを優先します。詳しくはKEP-4049を参照してください(#128184, @cupnes)

:pencil: 古いAlpha feature gateが置き換えられているのでDeprecationのセクションに記載されていますが、StorageCapacityScoringは新機能です。

Kubernetes Blog - Kubernetes v1.33: Storage Capacity Scoring of Nodes for Dynamic Provisioning (alpha)

:eyes: ブログタイトルにもあるようにこのスコアリングはDynamic Provisioningのボリュームのみを持つPodのスケジューリング時に機能します。

また、デフォルトで空き容量が多いノードを優先する仕様にしているのは、スケジュール後にPVを拡張するユースケースを重視しているからのようです。リソース/費用効率からビンパッキングしたいこともあるため、
スコアロジックはVolumeBindingプラグインの設定(.args)に.shapeというフィールド(RequestedToCapacityRatioプラグインで使えるものと同じ)が追加されており、このフィールドで変更できます。

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
  ...
  pluginConfig:
  - name: VolumeBinding
    args:
      ...
      # スプレッド:
      # (StorageCapacityScoring feature gateのdefault)
      # utilizationが低い=空き容量が多い方を優先
      shape:
      - utilization: 0
        score: 10
      - utilization: 100
        score: 0
      
      # ビンパッキング: 
      # utilizationが高い=空き容量が少ない方を優先
      shape:
      - utilization: 0
        score: 0
      - utilization: 100
        score: 10

:earth_asia: API Changes (API周りの変更)

  • 新しいAlpha feature gate MutableCSINodeAllocatableCountが導入されました。このfeature gateが有効になると、CSINode.Spec.Drivers[*].Allocatable.Countフィールドがmutableになります。また、新しいフィールドNodeAllocatableUpdatePeriodSecondsCSIDriverオブジェクトで利用可能になります。このフィールドはnodeによって報告されたvolume capacityを定期的に更新させることで、stateful podが、kube-schedulerが古い情報を参照してしまうことでスタックすることを防ぎます(#130007, @torredil)

:pencil:
KEP-4876: Mutable CSINode Allocatable Property
Kubernetes Blog - Kubernetes v1.33: Mutable CSI Node Allocatable Count

クラウドなどではVMにアタッチできるボリューム数上限があり、CSI以外のボリューム操作や、複数CSIドライバが稼働している場合には、ドライバ毎のアタッチ上限は動的に変化します。

また、誤ったAllocatable.CountでスケジュールされてしまったPodは、ContainerCreatingでスタックしてしまうため、効率的なStatefulワークロードのスケジューリングにおいては重要な機能と言えます。

  • AnyVolumeDataSource feature gateをGAに昇格させました。(#129770, @sunnylovestiramisu)
  • ClusterTrustBundle APIはv1beta1に移行します。ClusterTrustBundleProjection featureをkubeletで対応するためには、ClusterTrustBundle APIのv1beta1バージョンが利用可能な状態で、かつ、ClusterTrustBundleProjection feature gateが有効でなくてはなりません。kubelet起動後にこのAPIが有効になった場合は、機能を有効にするためにkubeletをリスタートしてください。(#128499, @stlaz)

:sparkle: Features (機能追加)

  • volume group snapshotのe2eテストを追加しました(#128972, @manishym)
  • kube-controller-managerがコンテナで実行されている際のSELinuxWarningControllerのデフォルト値を修正しました(#130037, @jsafrane)
  • kube-apiserver: StorageObjectInUseProtection アドミッションプラグインは、VolumeAttributeClassが有効かつstorage.k8s.io/v1beta1も有効な場合、kubernetes.io/vac-protectionファイナライザをVolumeAttributesClass作成時に追加するようになりました(#130553, @Phaow)
  • CSIMigrationPortworx feature gateをGAに昇格させました。アプリケーションがPortworxボリュームを利用している場合、1.31以降にアップグレードする前に、対応するPortworx CSIドライバがインストールされてていることを確認してください。このfeature gateが有効な場合、すべてのin-tree portworxVolumeはpxd.portworx.com CSIドライバにリダイレクトされるためです(#129297, @gohilankit)
  • HonorPVReclaimPolicy feature gateをGAに昇格させました(#129583, @carlory)
  • SELinuxChangePolicy,SELinuxMountがBetaに昇格しました。SELinuxMountはデフォルトoffのままです。(#130544, @jsafrane)
  • StorageCapacityScoring feature gateが追加され、ストレージの空き容量でノードをスコアするようになりました。これはAlphaステージであり、デフォルトでdisabledです。これに伴ってVolumeCapacityPriority Alpha feature gateはこのfeature gateで置き換えられます。デフォルトの挙動も変更になります。VolumeCapacityPriorityは空き容量が少ないノードを優先していましたが、StorageCapacityScoringは空き容量が多いノードを優先します。詳しくはKEP-4049を参照してください(#128184, @cupnes)

📃 Documentation (ドキュメント)

:pencil: SIG Storage関連のものはありません

:bug: Bug or Regression (バグ修正)

  • ボリュームのpermission/ownershipの変更進捗を追加しました(#130398, @gnufied)

:pencil: ボリュームのpermisison/ownershipの大規模な変更を抑制するためにfsGroupChangePolicy: onRootMismatch(ルートでだけチェック)がありますが、fsGroupChangePolicy: Alwaysな場合に、下記のように進捗イベントが発砲されるようになります。

  Warning  VolumePermissionChangeInProgress  2m50s  kubelet                  Setting volume ownership for /var/lib/kubelet/
pods/29928e79-9a46-4ab9-8aab-c612e82ec0d9/volumes/kubernetes.io~csi/biginode/mount is taking longer than 
expected, consider using OnRootMismatch - https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
#configure-volume-permission-and-ownership-change-policy-for-pods

  Warning  VolumePermissionChangeInProgress  110s   kubelet                  Setting volume ownership for /var/lib/kubelet/
pods/29928e79-9a46-4ab9-8aab-c612e82ec0d9/volumes/kubernetes.io~csi/biginode/mount, processed 2654670 files.

  Warning  VolumePermissionChangeInProgress  50s    kubelet                  Setting volume ownership for /var/lib/kubelet/
pods/29928e79-9a46-4ab9-8aab-c612e82ec0d9/volumes/kubernetes.io~csi/biginode/mount, processed 5121525 files.
  • Fix: go1.23におけるWindowsでのmount pointパース処理の変更を適用しました(#129368, @andyzhangx)
  • マルチパスに関するストレージバグを修正しました。iSCSIやFibre Channelデバイスがmultipathでアタッチされている場合、デバイスパーティションを正しく解決します(#128086, @RomanBednar)
  • volume_linux_test.goにおけるTestSetVolumeOwnershipOwnerfsGroup=3000の場合とsymlinkケースの場合のテスト失敗を修正しました。このテストは所有権の不完全な検証によるもので、所有権変更処理の調整、rootで動作する時の挙動の修正を行うことで解決しました(#130616, @gnufied)
  • 参照しているPVCがユーザによって削除されている最中にkubeletが再起動すると実行中のpodのvolumeをunmountする問題を修正しました(#130335, @carlory)
  • クラスタでPortworx security feature(Kubernetesの機能ではなくPortworxの機能)が有効な場合に、Portworxボリュームのin-tree CSI migrationを修正しました。in-tree Storage Classで参照されているSecretの認証データがCSIリクエストに渡されるべきですが、この修正前は行われていませんでした。(#129630, @gohilankit)
  • Nominated nodeが変化した時の処理を正しく扱うようにスケジューリングの挙動を見直しました。Nominated node名が消されたり別のノードにnominateされたりした際にpodの再スケジューリングをトリガします(#129058, @dom4ha)

:microscope: Others (その他修正)

  • Podがlabel/selectorとマッチしないボリュームをアタッチしようとする時のエラーメッセージを、"x node(s) had volume node affinity conflict"から"x node(s) didn't match PersistentVolume's node affinity"に変更しました(#129887, @rhrmo)
  • GA feature gate PersistentVolumeLastPhaseTransitionTimeを削除しました(#129295, @carlory)
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?