はじめに
本ドキュメントでは、Kubernetes 1.23.0のCHANGELOGをベースにSIG Storageに関する機能について紹介します。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
新着情報 (What's New (Major Themes))
Deprecation of FlexVolume
FlexVolumeが非推奨(Deprecation)になりました。Out-of-treeのCSIドライバがKubernetesでのvolume driverを作る推奨方法です。詳細については、こちらのドキュメントを参照してください。
FlexVolumeドライバのメンテナは、CSIドライバを実装し、FlexVolumeのユーザーをCSIへ移行させる必要があります。FlexVolumeのユーザーは自分のワークロードをCSIドライバへ移行する必要があります。
Generic Ephemeral Volume feature graduates to GA
Generic Ephemeral Volumeが1.23にてGAとなりました。
この機能により、Dynamic Provisioningをサポートする既存のストレージドライバは、ボリュームのライフサイクルがPodにバインドされるEphemeral Volumeとして使用できます。
StorageClassのvolume provisioningのすべてのパラメータとPersistentVolumeClaimsでサポートされているすべての機能がサポートされています。
Skip Volume Ownership change graduates to GA
Podのボリュームのパーミッションとオーナーチェンジのポリシーを設定する機能が1.23にてGAとなりました。
これにより、マウント時に再帰的なパーミッションの変更をスキップでき、Podの起動時間を短縮できます。
Allow CSI drivers to opt-in to volume ownership and permission change graduates to GA
CSIドライバがfsGroupのパーミッションを宣言できる機能が1.23にてGAとなりました。
CSI Migration updates
CSI Migrationは既存のin-treeのStorage Plugin(kubernetes.io/gce-pd or kubernetes.io/aws-ebsなど)を対応するCSIドライバへ置き換えるものです。
CSI Migrationが正しく動作していれば、Kubernetesのエンドユーザは、違いに気が付かないはずです。
移行後、Kubernetesのユーザは、既存のインターフェースを利用して、in-treeのStorage Pluginの全ての機能を継続し利用できます。
- CSI Migration機能がデフォルトでオンになりますが、1.23ではGCE PD, AWS EBS, Azure DiskはBetaのままです。
- 1.23ではCeph RBD, PortworxのCSI Migration機能はAlphaです。
アップグレード前に絶対に確認が必要な変更点 (Urgent Upgrade Notes)
SIG Storage関連はなし
Changes by Kind
非推奨 (Deprecation)
- Feature gate
Volumesubpath
は非推奨になり無効にできません。これのFeature gateは1.25で完全に削除されます (#105474, @mauriciop) - 非推奨のメトリクス scheduler_volume_scheduling_duration_seconds は削除されました (#104518, @dntosas)
API周りの変更 (API Change)
- Feature Gate
StatefulSetAutoDeletePVC
を追加しました。これにより、StatefulSet Podのために自動的に作成されたPVCが自動的に削除されます (#99728, @mattcary) - ボリューム拡張の失敗時のリカバリーをサポートします (#106154, @gnufied) [SIG API Machinery, Apps and Storage]
- StatefulSetの
minReadySeconds
がベータに昇格しました (#104045, @ravisantoshgudimetla) - "Generic Ephemeral Volume" のfeature graduateがGAになりました。無条件で有効になります (#105609, @pohly)
- CSIDriver.Ppec.StorageCacityを変更できるようになりました (#101789, @pohly)
- CSIVolumeFSGroupPolicyがベータからGAに昇格しました (#105940, @dobsonj)
機能 (Feature)
- (ベータ機能)CSIドライバがNodeServiceCapabilityの
VOLUME_MOUNT_GROUP
をサポートしていて、DelegateFSGroupToCSIDriver
のfeature gateが有効になっている場合、kubeletは、他のFSGroupポリシーが設定されているのかに関らず、NodeStageVolumeとNodePublishVolumeへ値を渡してFSGroupの適用をドライバへ委任します (#106330, @verult) [SIG Storage] - Portworxプラグインのサポートをcsi-translation-libに追加します。(アルファリリース)
Migrationを有効にするには、Portworx CSIドライバが必要です。このPRはCSIMigrationPortworx
feature gateのサポートを追加します。これは次の方法で有効にできます。- kube-controller-managerに
--feature-gates=CSIMigrationPortworx=true
のfeatureフラグを追加します - kubelet configのfeatureフラグに以下を追加します
- kube-controller-managerに
featureGates:
CSIMigrationPortworx: true
(#103447, @trierra) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Scalability, Scheduling, Storage, Testing and Windows]
- Local volumeの拡張を許可します (#102886, @gnufied)
- CSIMigrationAWSをデフォルトでオンに変更します。この機能はAWS EBS CSIドライバのインストールが必要です (#106098, @wongma7)
- schedulerのVolumeBinding プラグインをエンハンスし、ロストしたPVCを
UnschedulableAndUnresolvable
として扱います (#105245, @yibozhuang) - PVの
ReclaimPolicy
がDelete
に設定されている場合に、ユーザーがPVオブジェクトを手動で削除しようとすると、ストレージバックエンドからボリュームが削除されることを保証します (#105773, @deepakkinni) - Feature gate
StorageObjectInUseProtection
は非推奨になり無効にできません。このFeature gateは1.25で完全に削除されます (#105495, @ikeeip) -
ConfigurableFSGroupPolicy
がGAになり、メトリクス名がvolume_fsgroup_recursive_apply
からvolume_apply_access_control
へ変更しました (#105885, @gnufied) -
CSIMigrationGCE
featureフラグがデフォルトで有効になりました (#104722, @leiyiz) -
CSIMigrationAzureDisk
featureフラグが1.23でデフォルトで有効になりました (#104670, @andyzhangx)
ドキュメンテーション (Documentation)
SIG-Storage 関連はなし
失敗しているテスト (Failing Test)
バグまたはリグレッション (Bug or Regression)
- raw block デバイスのGeneric Ephemeral Volumesを持つPodを作成できるようになりました (#105682, @pohly)
- bindマウントの変更がない限り、コンテナの作成中にsubpathのbindマウントのunmountとmountを行わない (#105512, @gnufied) [SIG Storage]
- vmssノードの削除中のディスクのdetachの問題を修正します (#104572, @andyzhangx)
- PersistentVolumeClaimのUIDがローカルキャッシュには存在しないが、updatedからreleasedフェーズのetcdに存在する場合にPersistentVolumeの妨げになるバグを修正しました (#105211, @xiaopingrubyist)
- 非常にビジーなシステム("error checking for SELinux support: could not get consistent content of /proc/self/mountinfo after 3 attempts"が発生)のCSIボリュームのSELinuxラベルの適用を修正しました (#105934, @jsafrane) [SIG Storage]
- 小文字の
managed
のkindに起因するazure diskの変換の問題を修正しました (#103439, @andyzhangx) - Node制限のスケジューラのフィルターとkubeletのhostPathのチェックにてGeneric Ephemeral Volumesを適切にハンドルングできるようにしました (#100482, @pohly)
- KubeletはGeneric Ephemeral Volumesの
kubelet_volume_stats_*
メトリクスをレポートしませんでした (#105569, @pohly) - メトリクス変更:
scheduler_volume_scheduling_duration_seconds_bucket
メトリクスを公開しました (#100720, @dntosas) - Windowsで100以上のディスクのマウントをサポートしました (#105673, @andyzhangx)
- XFS-filesystemsはsuper-blockのmagicの検出によるフォーマット時の問題を回避するためにforce-formatted (option -f)するようになりました。これによりext3/4ファイルシステムのフォーマットの挙動と同じになります (#104923, @davidkarlsen)
その他 (Cleanup or Flake)
- pkg/scheduler/framework/plugins/volumebinding/assume_cache.go を構造化ロギング(structured logging)へ移行しました (#105904, @mengjiao-liu) [SIG Instrumentation, Scheduling and Storage]
- CSINodeの
id
フィールドの最大長をCSIの仕様にあわせて256バイトへ増やしました (#104160, @pacoxu)
所感
Kubernetes v1.23のストレージ関連は大きく3つのトピックが目立っていた印象です。
- FlexVolumeの非推奨化 (CSI Driverへの移行の促進)
- Generic Ephemeral VolumeのGA
- fsGroup関連のGA (chmod,chownの再帰実行のスキップとパーミッション変更をCSI Driverへ移譲)
この中で、機能的に新しいものとしてはGeneric Ephemeral Volumeではないでしょうか。
Generic Ephemeral Volumeがどのようなものかを知りたい方は、「Kubernetes: CSI を使ったEphemeral Volumeの動作検証」に記事を公開しているのでご参照ください。
Generic Ephemeral VolumeはPodが削除されると同時に削除されるボリュームのことで、Dynamic ProvisioningをサポートしているCSI Driverであれば利用できます。
これまで提供されているemptyDirとは異なり、PVC/PVを使ったボリュームという点が大きく異なります。
これにより、PVC/PVではサポートされていたが、emptyDirではサポートされていなかったSnapshotなどのストレージ機能が利用できるメリットがあります。
つまり、Kubernetes v1.23にて、Persistent Volume(永続ボリューム: Podを削除しても削除されないボリューム)とEpeheral Volume(短命ボリューム: Podを削除すると削除されるボリューム)の2つの異なるライフサイクルのボリュームがGAサポートになりました。
どちらが良い/悪いというものではないため、利用するアプリやユースケース次第でうまく使い分けるのがお勧めです。