はじめに
本ドキュメントでは、Kubernetes 1.25.0のCHANGELOGをベースにSIG Storageに関する機能について紹介します。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
新着情報 (What's New (Major Themes))
Promoted Local Ephemeral Storage Capacity Isolation to Stable
Local Ephemeral Storage Capacity Isolation機能がGAになりました。この機能は1.8でアルファとして導入され、1.10でベータになり、今は安定機能です。EmptyDirなどのPod間の Local Ephemeral Storageの容量の分離(Isolation)をサポートします。これにより、Local Ephemeral Storageの消費が制限を超えた場合、Podを退避させ共有リソースの消費を制限できるようになりました。
Promoted core CSI Migration to Stable
CSI MigrationはSIG Storageが幾つかのリリースで取り組んできた取り組みです。
ゴールは、in-tree の volume プラグインが out-of-tree の CSI ドライバに移行し、最終的には in-tree の Volume プラグインを削除することです。
この CSI Migraionのコア機能がGAになりました。GCE PDとAWS EBS向けのCSI MigrationもGAになりました。vSphere向けのCSI Migrationはベータのままです(ただし、デフォルトはON)。Portworx向けのCSI Migrationはベータになりました(ただし、デフォルトはOFF)。
Promoted CSI Ephemeral Volume to Stable
CSI Ephemeral Volume 機能は、永続化しない(Ephemeral)なユースケースのため、CSI Volumeを Podの指定で直接指定できるようにします。マウントされたVolumeを使って、設定・Secret・ID(identity),変数や似た情報など任意の状態をPod内で利用できます。
この機能は、1.15でアルファとなりGAになりました。この機能は、secret-store CSI ドライバのような幾つかのCSIドライバで使われています。
既知の問題 (Known Issue)
LocalStorageCapacityIsolationFSQuotaMonitoring ConfigMap rendering failure
1.25.0でConfigMapのレンダリング問題が見つかりました。ConfigMapがAPI内で更新された際、Kubeletによって結果がPodのファイルシステムにレンダリングされません。
この機能は1.25.1でアルファに戻されました。
アップグレード前に絶対に確認が必要な変更点 (Urgent Upgrade Notes)
- flockerのin-tree volumeプラグインのサポートは、Kubernetesから完全に削除されました (#111618, @Jiawei0227)
- quobyteのin-tree volumeプラグインのサポートは、Kubernetesから完全に削除されました (#111619, @Jiawei0227)
- storageosのin-tree volumeプラグインのサポートは、Kubernetesから完全に削除されました (#111620, @Jiawei0227)
Changes by Kind
非推奨 (Deprecation)
- vSphere 7.0u2未満のリリースでは、Kubernetes v1.25にて in-treeの vSphere volumeが非サポートです。vSphere(ESXi と vCenterの両方)を 7.0u2以降にアップグレードすることを検証してください (#111255, @divyenpatel)
API周りの変更 (API Change)
- Added a deprecated warning for node beta label usage in PV/SC/RC and CSI Storage Capacity. (#108554, @pacoxu)
- PV/SC/RC 及び CSI Storage Capacityでのノードのベータラベルに関する非推奨の警告を追加しました (#108554, @pacoxu)
RCはRuntimeClassの略です
- Local Storage Capacity Isolation機能は1.25にてGAになりました。root ファイルシステムをcチェックできないシステム(rootless)の場合は、
kubelet config --local-storage-capacity-isolation=false
を設定し、本機能を無効にしてください。無効にすると、Podはlocal ephemeral storageのrequest/limitを設定できなくなり、emptyDirのsizeLimitも設定できなくなります (#111513, @jingxu97) - 互換性のあるシステムでは、mounterのUnmountの実装が変更され、指定されたターゲットがマウントポイントでないと検出された場合にエラーが返されなくなりました。Linuxでは、マウントポイントの検出の挙動は、mounterの作成時に、umountコマンドにより検出されます。さらに、ターゲットがマウントポイントでない場合にエラーを返さないという動作に返納されたmounterのUmountの場合、CleanupMountPoint/CleanupMountWithForceでマウントポイントのチェックがスキップされます (#109676, @cartermckinnon) [SIG Storage]
- PersistentVolumeClaimオブジェクトは、StorageClassが永久にnilに設定されたままになることがなくなり、StorageClassがデフォルトとして設定もしくは作成されると、遡って更新されるようになりました (#111467, @RomanBednar)
- CSIInlineVolume機能がベータからGAになりました (#111258, @dobsonj)
- このリリースでは、CSI ドライバのクライアントにNodeExpandSecretのサポートが追加され、ユーザからの要求に基づきノードの拡張操作を実施中に、CSIドライバがこのsecretを利用できるようになりました。以前は、nodeexpansionを呼び出す際にSecretを提供する必要がなかったため、CSIドライバはノード側でボリュームを拡張する際に同じものを使用しませんでした (#105963, @zhucan)
機能 (Feature)
- Feature gate のCSIMigrationは有効になりました。CSIMigrationはGAになりました。このfeature gateはv1.27で削除されます (#110410, @Jiawei0227)
- CSIMigrationAzureDiskのfeature gateがデフォルトになりました (#110491, @andyzhangx)
- LocalStorageCapacityIsolationFSQuotaMonitoringがベータになりました (#107329, @pacoxu)
- CSIMigrationAWSがGAとなり有効になりました (#111479, @wongma7)
- CSIMigrationGCEがGAとなり有効になりました (#111301, @mattcary)
- CSIMigrationvSphereがデフォルトで有効になりました (#103523, @divyenpatel)
ドキュメンテーション (Documentation)
SIG-Storageに関連するものはなし
失敗しているテスト (Failing Test)
- In-treeのGCE PDのテストケースは、Kubernetes testing harnessで実行されなくなりました(1.22でCSI migrationへスイッチした影響です)。これのテストを実施する場合には、環境変数
ENABLE_STORAGE_GCE_PD_DRIVER
をyes
に切り替えてください (#109541, @dims)
バグまたはリグレッション (Bug or Regression)
- ephemeral volumeを拡張できるようにしました (#109987, @gnufied) [SIG Node and Storage]
- Linux kernel 5.10以上にてopenat2を使いマウント検出を高速化し、Podの Churn Rateを高速化しました。Kernetlバージョンが5.10未満では、マウントポイント検出は従来方式(/proc/mountsのパースによる方法)です (#109217, @manugupt1)
- FibreChannel volume プラグインが間違ったデバイスと関連する devicemapperの親にマッチすることがありました。これによりPodが間違ったディスクをアタッチする障害が発生していました (#110719, @xakdwch)
- CSI ephemeral volumeのボリューム再構成に関し修正しました (#108997, @dobsonj) [SIG Node, Storage and Testing]
- CSI migrationでinline volumeがattach limitにカウントされていなかったバグを修正しました (#107787, @Jiawei0227)
- Kubelet: ノードが割り当て可能なephemeral-storage データを待つようになりました (#101882, @jackfrancis)
- kubeletの再起動後にマウント操作に失敗しても、再構築されたボリュームに対して正しくアンマウントされるようになりました (#110670, @gnufied)
- 新しいVMタイプに対応するため、Azure data diskのcount mapの最大値をアップデートしました (#111406, @bennerv)
その他 (Cleanup or Flake)
- PVのフレームワークのdelete時のタイムアウトをドキュメント通り5分に変更しました (#109764, @saikat-royc)
- GlusterFSのprovisioner(kubernetes.io/glusterfs)は、このリリースで非推奨となりました (#111485, @humblec)
所感
Kubernetes v1.25のSIG-Storage関連では、新しい機能はないですが、数年に渡りSIG-Storageが取り組んできた機能がGAとなったバージョンでした。
特に本バージョンでは、2019年のKubernetes v1.14にてIn-treeからCSIへのMigrationフレームワークがサポートされ始めてから約3年かかり、
パブリッククラウドの Kubernetes as a Serviceで利用されるGCE PDとAWS EBS向けのCSI MigrationもようやくGAとなりました。
さらに In-TreeのVolumeプラグインが、3つほどKubernetesのソースから削除されました。