はじめに
本ドキュメントでは、Kubernetes 1.27.0のCHANGELOGをベースにSIG Storageに関する機能について紹介します。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
アップグレード前に絶対に確認が必要な変更点 (Urgent Upgrade Notes)
SIG-Storageに関連するものはなし
Changes by Kind
非推奨 (Deprecation)
SIG-Storageに関連するものはなし
APIの変更 (API Change)
- seccomp profile defaulting がGAになりました。
kubeletの--seccomp-default
フラグ又はkubeletのコンフィグのseccompDefault
をtrueに設定することで、RuntimeDefault
seccomp profileがノード上のPodでデフォルト設定されます。
seccompをワークロードで有効にすると、使用しているカーネルやコンテナランタイムのバージョンなどによっては性能が悪くなることがあります。
これらの問題については、軽減するためのガイダンスがKubernetesのseccomp チュートリアルに解説されています。 (#115719, @saschagrunert)
- volume expansionがGAとなったことで、次のfeature gatesは削除されており、--feature-gatesフラグで参照することはできません。
ExpandCSIVolumes
,ExpandInUsePersistentVolumes
,ExpandPersistentVolumes
(#113942, @mengjiao-liu) - control planeのコンポーネントで
/metrics/slis
が利用できるようになり、ヘルスチェックのメトリクスをスクレイピングできるようになりました。(#114997, @Richabanker) -
SELinuxMountReadWriteOncePod
のfeature gate がベータになりました。(#116425, @jsafrane) -
StatefulSetAutoDeletePVC
のfeature gateがベータになりました。(#116501, @mattcary) - inline PVC template 又は PVCの作成・アップデート時に、
volumes
:resource.claims
は影響がないため、クリアされるようになりました。(#115928, @pohly)
機能 (Feature)
-
NewVolumeManagerReconstruction
feature gateが追加されデフォルトで有効になり、kubelet起動時にマウントされたボリュームの更新を検出するようになりました。kubeletが起動時にスタックしたり、削除されたPodからボリュームがアンマウントされなかったりするなど問題があれば報告してください。(#115268, @jsafrane) - secret付きのボリュームを拡張するe2eテストが追加されました。(#115451, @zhucan)
- kubeletの起動中のボリューム再構築のメトリクスが追加されました。 (#115965, @jsafrane)
-
ReadWriteOncePod
のPVCを利用したPodのプリエンプションをschedulerを追加しました。(#114051, @chrishenzie) - kubeletの
UserNamespacesStatelessPodsSupport
のfeature gateを有効にすることで、ステートレスなPodを別のuser namespaceで実行することができるようになりました。(#116377, @giuseppe) -
CSINodeExpandSecret
機能がベータになりました。この機能は、CSIオペレーションのノード拡張の一部として、CSIドライバにsecretを渡すことを円滑にします。 (#115621, @humblec) -
CSIMigrationvSphere
のfeature gateをロックしました。(#116610, @xing-yang) - volume attach/detach controller(kube-controller-managerに含む)をcontextual loggingを使用するように変更しました。同じくPersistentVolumeClaim protection cotroller(kube-controller-managerに含む)もcontextual loggingを使用するように変更しました。
同様にPersistentVolume protection controller(kube-controller-managerに含む)もcontextual loggingを使用するように変更しました。(#113584, @yangjunmyfm192085) - klog のパフォーマンスを向上しました。(#115277, @pohly)
- Schedulerの
volumebinding:
PreFilterResult
を利用し、ローカルのPersistentVolume(s)にバインドされたClaimを持つPod向けに適切なノードのみに絞り込みます。(#109877, @yibozhuang) -
ReadWriteOncePod
のfeature gate がベータになりました。(#114494, @chrishenzie) - CSIMigrationvSphereのfeature gateのロックを解除しました。この変更により、ユーザーは、Windows、XFS、および raw ブロックアクセスを GA でサポートする vSphere CSI ドライバのリリースまで、in-treeの vSphere ドライバを使用し続けることができます。(#116342, @msau42)
#116610 と矛盾するリリースノートですが、v1.27.0では#116610が有効でありLockToDefault: true
となっています。
https://github.com/kubernetes/kubernetes/blob/v1.27.0/pkg/features/kube_features.go#LL963C1-L964C1
ドキュメンテーション (Documentation)
SIG-Storageに関連するものはなし
失敗するテスト (Failing Test)
- vSphere e2e テストにおけるパニックを修正しました。(#115863, @jsafrane)
バグまたはリグレッション (Bug or Regression)
- CSI PersistentVolumesが63文字以上のSecrets名を許可するように修正しました。(#114776, @jsafrane)
- host path provisionerによって作成された host path volumeのSELinux ラベルを修正しました。(#112021, @mrunalp)
-
OwnerReferencesPermissionEnforcement
admission pluginが有効な場合のStatefulSetAutoDeletePVC機能を修正しました。 (#114116, @jsafrane) - 非推奨のアノテーション
volume.beta.kubernetes.io/storage-class
が設定されている場合でも、Kubernetes が PersistentVolumeClaim にデフォルトの StorageClass を適用してしまうバグを修正しました。(#116089, @cvvz) - schedulerでvolume bindingが完了したかのように表示されるログを修正しました。(#116018, @TommyStarK)
- ノード上でCSI ドライバが稼働していない場合に、CSI に移行されたボリュームが早期にdetachされる場合がある問題を修正しました。ノード上で CSI migrationが有効になっている場合、csi-driverが立ち上がってる・いないに関わらず、このボリュームをDSWに追加したままにします。(#115464, @sunnylovestiramisu)
- fsGroupを使用する際、Secret/ConfigMap/projected volume のアップデート中に発生したファイルパーミッションの問題を修正しました。この問題は、正しいパーミッションが適用される前に、更新されたばかりのファイルを読み込むと、アプリケーションが断続的にpermission denied のエラーを起こすというレースコンディションを引き起こしていました。(#114464, @tsaarni)
- 実際にマウントされていないディレクトリをumountしようとした時にPodが固まり終了する問題を修正しました。(#115769, @mochizuki875)
- Kubelet: fsquotaのモニタリングが有効な時に、ConfigMapのレンダリングを停止するkubeletのバグを修正しました。(#112624, @pacoxu)
- pending中のPodに対しPVCが欠落している場合、PVCが自動的に再作成されるようになります。(#113270, @rrangith)
- OS, architecture, zone, region, instance typeにてベータ版のKubernetesのラベルを使いNodeAffinitiesを設定していたPersistentVolume API オブジェクトは、stableのKubernetesのラベルを使用するように修正されました。(#115391, @haoruan)
- マウント時に拡張可能な場合、node_stage_path が設定されるようになりました。 (#115346, @gnufied)
- tryUnmount にて mounter.withSafeNotMountedBehavior を優先するようになりました。(#114736, @andyzhangx)
その他 (Cleanup or Flake)
- AWS kubelet credential providerを削除しました。代わりに、ecr-credential-providerというバイナリ名の外部のkubelet credential providerを使用してください。(#116329, @dims)
- in-treeのAzure diskのpluginが削除されました。(#116301, @andyzhangx)
- APIバージョンがstorage.k8s.io/v1beta1 のCSIStorageCapacityはサービス終了となります。(#116523, @pacoxu)
-
CSIMigrationAzureFile
のfeature gate(v1.26でGAを卒業した機能)は、無条件で有効になりv1.28で削除される予定です。(#114953, @enj) - v1.25でGAとなり、無条件で有効になっていたfeature gatesの
CSIInlineVolume
、CSIMigration
、DaemonSetUpdateSurge
、EphemeralContainers
、IdentifyPodOS
、LocalStorageCapacityIsolation
、NetworkPolicyEndPort
、StatefulSetMinReadySeconds
はv1.27で削除されました。
所感
Kubernetes v1.27は、ノードからボリュームのdetach/attachする際の処理が改善されるなどの修正はあったものの、特に大きな変更や機能追加はありませんでした。そのなかで挙げるとすれば、ReadWriteOncePod
のAccessModeがベータに昇格したことでしょうか。feature gateがデフォルトでtrueとなり、利用するユーザも増えてくるかと推察します。
これまでReadWriteOnce
を利用していたPVC/PVの多くはReadWriteOncePod
に置き換えた方が安全性が向上しますので、是非試してみてください。
なお、ReadWriteOnce
とReadWriteOncePod
の挙動の違いは、「Kubernetes: ReadWriteOnceとReadWriteOncePodの動作検証」に記事を公開していますので、ご興味のある方はご参照ください。