Kubernetes 1.25: SIG Storageの変更内容

# はじめに
本ドキュメントでは、Kubernetes 1.25.0の[CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.25.md#changelog-since-v1240)をベースにSIG Storageに関する機能について紹介します。
:memo: がついた文章は、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](https://github.com/kubernetes/kubernetes/pull/111618), @Jiawei0227)
- quobyteのin-tree volumeプラグインのサポートは、Kubernetesから完全に削除されました ([#111619](https://github.com/kubernetes/kubernetes/pull/111619), @Jiawei0227)
- storageosのin-tree volumeプラグインのサポートは、Kubernetesから完全に削除されました ([#111620](https://github.com/kubernetes/kubernetes/pull/111620), @Jiawei0227)

## Changes by Kind
### 非推奨 (Deprecation)

- vSphere 7.0u2未満のリリースでは、Kubernetes v1.25にて in-treeの vSphere volumeが非サポートです。vSphere(ESXi と vCenterの両方)を 7.0u2以降にアップグレードすることを検証してください ([#111255](https://github.com/kubernetes/kubernetes/pull/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](https://github.com/kubernetes/kubernetes/pull/108554), @pacoxu)

:memo: 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](https://github.com/kubernetes/kubernetes/pull/111513), @jingxu97)
- 互換性のあるシステムでは、mounterのUnmountの実装が変更され、指定されたターゲットがマウントポイントでないと検出された場合にエラーが返されなくなりました。Linuxでは、マウントポイントの検出の挙動は、mounterの作成時に、umountコマンドにより検出されます。さらに、ターゲットがマウントポイントでない場合にエラーを返さないという動作に返納されたmounterのUmountの場合、CleanupMountPoint/CleanupMountWithForceでマウントポイントのチェックがスキップされます ([#109676](https://github.com/kubernetes/kubernetes/pull/109676), @cartermckinnon) [SIG Storage]
- PersistentVolumeClaimオブジェクトは、StorageClassが永久にnilに設定されたままになることがなくなり、StorageClassがデフォルトとして設定もしくは作成されると、遡って更新されるようになりました ([#111467](https://github.com/kubernetes/kubernetes/pull/111467), @RomanBednar)
- CSIInlineVolume機能がベータからGAになりました ([#111258](https://github.com/kubernetes/kubernetes/pull/111258), @dobsonj)
- このリリースでは、CSI ドライバのクライアントにNodeExpandSecretのサポートが追加され、ユーザからの要求に基づきノードの拡張操作を実施中に、CSIドライバがこのsecretを利用できるようになりました。以前は、nodeexpansionを呼び出す際にSecretを提供する必要がなかったため、CSIドライバはノード側でボリュームを拡張する際に同じものを使用しませんでした ([#105963](https://github.com/kubernetes/kubernetes/pull/105963), @zhucan)

### 機能 (Feature)

- Feature gate のCSIMigrationは有効になりました。CSIMigrationはGAになりました。このfeature gateはv1.27で削除されます ([#110410](https://github.com/kubernetes/kubernetes/pull/110410), @Jiawei0227) 
- CSIMigrationAzureDiskのfeature gateがデフォルトになりました ([#110491](https://github.com/kubernetes/kubernetes/pull/110491), @andyzhangx)
- LocalStorageCapacityIsolationFSQuotaMonitoringがベータになりました ([#107329](https://github.com/kubernetes/kubernetes/pull/107329), @pacoxu)
- CSIMigrationAWSがGAとなり有効になりました ([#111479](https://github.com/kubernetes/kubernetes/pull/111479), @wongma7)
- CSIMigrationGCEがGAとなり有効になりました ([#111301](https://github.com/kubernetes/kubernetes/pull/111301), @mattcary)
- CSIMigrationvSphereがデフォルトで有効になりました ([#103523](https://github.com/kubernetes/kubernetes/pull/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](https://github.com/kubernetes/kubernetes/pull/109541), @dims)

### バグまたはリグレッション (Bug or Regression)

- ephemeral volumeを拡張できるようにしました ([#109987](https://github.com/kubernetes/kubernetes/pull/109987), @gnufied) [SIG Node and Storage]
- Linux kernel 5.10以上にてopenat2を使いマウント検出を高速化し、Podの Churn Rateを高速化しました。Kernetlバージョンが5.10未満では、マウントポイント検出は従来方式(/proc/mountsのパースによる方法)です ([#109217](https://github.com/kubernetes/kubernetes/pull/109217), @manugupt1)
- FibreChannel volume プラグインが間違ったデバイスと関連する devicemapperの親にマッチすることがありました。これによりPodが間違ったディスクをアタッチする障害が発生していました ([#110719](https://github.com/kubernetes/kubernetes/pull/110719), @xakdwch)
- CSI ephemeral volumeのボリューム再構成に関し修正しました  ([#108997](https://github.com/kubernetes/kubernetes/pull/108997), @dobsonj) [SIG Node, Storage and Testing]
- CSI migrationでinline volumeがattach limitにカウントされていなかったバグを修正しました ([#107787](https://github.com/kubernetes/kubernetes/pull/107787), @Jiawei0227)
- Kubelet: ノードが割り当て可能なephemeral-storage データを待つようになりました  ([#101882](https://github.com/kubernetes/kubernetes/pull/101882), @jackfrancis)
- kubeletの再起動後にマウント操作に失敗しても、再構築されたボリュームに対して正しくアンマウントされるようになりました ([#110670](https://github.com/kubernetes/kubernetes/pull/110670), @gnufied)
- 新しいVMタイプに対応するため、Azure data diskのcount mapの最大値をアップデートしました ([#111406](https://github.com/kubernetes/kubernetes/pull/111406), @bennerv)

### その他 (Cleanup or Flake)

- PVのフレームワークのdelete時のタイムアウトをドキュメント通り5分に変更しました ([#109764](https://github.com/kubernetes/kubernetes/pull/109764), @saikat-royc)
- GlusterFSのprovisioner(kubernetes.io/glusterfs)は、このリリースで非推奨となりました ([#111485](https://github.com/kubernetes/kubernetes/pull/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のソースから削除されました。