LoginSignup
4
1

More than 1 year has passed since last update.

Kubernetes 1.23: SIG Storageの変更内容

Last updated at Posted at 2022-01-06

はじめに

本ドキュメントでは、Kubernetes 1.23.0のCHANGELOGをベースにSIG Storageに関する機能について紹介します。
:pencil: がついた文章は、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のサポートを追加します。これは次の方法で有効にできます。
    1. kube-controller-managerに--feature-gates=CSIMigrationPortworx=trueのfeatureフラグを追加します
    2. kubelet configのfeatureフラグに以下を追加します
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のReclaimPolicyDeleteに設定されている場合に、ユーザーが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)
  • CSIMigrationAzureDiskfeatureフラグが1.23でデフォルトで有効になりました (#104670, @andyzhangx)

ドキュメンテーション (Documentation)

SIG-Storage 関連はなし

失敗しているテスト (Failing Test)

  • SELinux が有効になった環境でのhostpath storageのE2Eテストを修正しました (#104551, @Elbehery)

バグまたはリグレッション (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サポートになりました。
どちらが良い/悪いというものではないため、利用するアプリやユースケース次第でうまく使い分けるのがお勧めです。

4
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
4
1