Kubernetes 1.18: SIG Storageの変更内容

# はじめに
本ドキュメントでは、Kubernetes 1.18.0の[CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md)をベースにSIG Storageに関する機能について紹介します。
:memo: がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。

# 新着情報 (What's New)

- Kubernetes向けWindowsCSIのアルファサポートの紹介

Kubernetes 1.18のリリースに伴い、Windows用CSI Proxyのアルファバージョンがリリースされます。
CSI Proxyを有効にすると、特権のない(non-privileged(pre-approved))コンテナにて、Windowsで特権が必要なストレージ操作を実行できます。 
CSI Proxyを活用することで、CSI DriverがWindowsでサポートできるようになりました。
SIG Storageは1.18リリースで多くの進捗がありました。
 特に、Kubernetes 1.18では、次のストレージ機能がGAに移行しています。

- Raw Block Support: FileSystem でのマウントだけでなく、コンテナ内のブロックデバイスとしてRaw ブロックボリュームを使うことができます。
- Volume Cloning: CSI経由でKubernetes APIを使って、PersistentVolumeClaimとその実体のストレージボリュームを複製します。
- CSIDriver Kubernetes API Object: CSI driverのディスカバリーを簡素化し、CSI driverでKubernetesの動作をカスタマイズできるようにします。

SIG StorageはKubernetes 1.18でアルファとして以下のストレージの新機能を導入しています。

- Windows CSI Support: 新しく追加されたCSIProxyを通じてWindowsでコンテナ化されたCSI node pluginsを有効にします。
- Recursive Volume Ownership OnRootMismatch Option: “OnRootMismatch” ポリシーを追加します。これにより、所有権の変更が必要かつ多量のディレクトリやファイルを持つボリュームのマウント時間を短縮することができます。

# 既知の問題点 (Known Issues)

なし
  
# アップグレード前に絶対に確認が必要な変更点 (Urgent Upgrade Notes)

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

**kubelet**
将来のリリースでは、kubeletはCSIの仕様に従い、CSI NodePublishVolumeのターゲットディレクトリを作成しなくなります。
ターゲットパスを作成・処理するには、CSIドライバーを適宜アップデートする必要があります。([#75535](https://github.com/kubernetes/kubernetes/issues/75535))[SIG Storage]

### API周りの変更 (API Change)

**New API types/versions**
CSIDriver APIはstorage.k8s.io/v1に移行されました。 ([#84814](https://github.com/kubernetes/kubernetes/pull/84814)) [SIG Storage]

**New API fields**

- アルファ機能のAnyVolumeDataSourceを使うと、PersistentVolumeClaimのspec.dataSourceフィールドにて、カスタムタイプをデータソースとして参照できます。 ([#88636](https://github.com/kubernetes/kubernetes/pull/88636)) [SIG Apps and Storage]) 
- アルファ機能のConfigurableFSGroupPolicyを使うと、v1のPodでspec.securityContext.fsGroupChangePolicy ポリシーを指定し、Podにマウントされたボリュームのファイル権限をコントロールすることができます。 ([#88488](https://github.com/kubernetes/kubernetes/pull/88488)) [SIG Storage]

**Other API changes**
SIG Storage関連はなし

**Configuration file changes**
SIG Storage関連はなし

**Features graduated to beta**
SIG Storage関連はなし

**Features graduated to GA**

- VolumePVCDataSource ([#88686](https://github.com/kubernetes/kubernetes/pull/88686)) [SIG Storage]
- BlockVolume and CSIBlockVolume ([#88673](https://github.com/kubernetes/kubernetes/pull/88673)) [SIG Storage]

### 機能 (Feature)

- FC volume pluginにマウントオプションのサポートを追加しました ([#87499](https://github.com/kubernetes/kubernetes/pull/87499)) [SIG Storage]

### その他 (Other (Bug, Cleanup or Flak))

- PVのファイルシステムと、実際のディスク上のファイルシステムが一致しない場合、PVにイベントを追加します。 ([#86982](https://github.com/kubernetes/kubernetes/pull/86982)) [SIG Storage]
- azure diskのWriteAcceleratorをサポートしました。 ([#87945](https://github.com/kubernetes/kubernetes/pull/87945)) [SIG Cloud Provider and Storage]
- PVとPVCをマイグレートする際、`volume.beta.kubernetes.io/migrated-to`アノテーションをPVとPVCに追加すると、割り当てと削除用にそれらのオブジェクトをピックアップするようexternal provisionerへ通知します。 ([#87098](https://github.com/kubernetes/kubernetes/pull/87098))  [SIG Storage]
- AzureFileとCephFSは、重要なマウントオプションをログに出力するために新しいマウントライブラリを使用します。 ([#88684](https://github.com/kubernetes/kubernetes/pull/88684)) [SIG Storage]
- azure fileのAuthorizationFailureを修正しました。 ([#85475](https://github.com/kubernetes/kubernetes/pull/85475)) [SIG Cloud Provider and Storage]
- Podのボリュームの処理が失敗した時、PVC/PVオブジェクトのフェッチの繰り返しを防ぐように修正しました。これにより、これらのエラーシナリオでAPI serverが壊れるのを防ぐことができますが、Podの処理中のボリュームのエラーによっては、リトライ前に2-3分かかることがあります。 ([#88141](https://github.com/kubernetes/kubernetes/pull/88141)) [SIG Node and Storage]
- 修正: CSINodeの azure diskマイグレーションサポートの追加漏れを修正しました。 ([#88014](https://github.com/kubernetes/kubernetes/pull/88014)) [SIG Cloud Provider and Storage]
- 修正:  azure diskはStandard_DC4s/DC2sインスタンスにマウントできませんでした。 ([#86612](https://github.com/kubernetes/kubernetes/pull/86612)) [SIG Cloud Provider and Storage]
- 修正: azure fileのマウントのタイムアウトの問題を修正しました。 ([#88610](https://github.com/kubernetes/kubernetes/pull/88610)) [SIG Cloud Provider and Storage] 
- 修正: CSI driverの壊れたマウントポイントを修正しました。 ([#88569](https://github.com/kubernetes/kubernetes/pull/88569)) [SIG Storage]

:memo: CSI driverがfuseを利用している場合、CSI driverのPodがKillされるとfuseデーモンもKillされます。これにより全てのボリュームのマウントが強制終了され、アプリケーションのデータが破損する可能性があったとのことです。今回の修正で壊れたマウントパスを検出・壊れたマウントパスをアンマウント・マウントパスを再マウントが行われます。ただし、壊れたマウントパスは修正されませんのでご注意ください。

- 修正: azure diskのLUNのタイムアウトの取得のバグを修正しました。 ([#88158](https://github.com/kubernetes/kubernetes/pull/88158)) [SIG Cloud Provider and Storage]
- 修正: azure diskの最大数をアップデートしました。 ([#88201](https://github.com/kubernetes/kubernetes/pull/88201)) [SIG Cloud Provider and Storage]
- 修正: AWSで"requested device X but found Y"というアタッチのエラーを修正しました。([#85675](https://github.com/kubernetes/kubernetes/pull/85675)) [SIG Cloud Provider and Storage]
- 修正: Podのボリュームをクリーンアップするkubeletのバグを修正しました。 ([#86277](https://github.com/kubernetes/kubernetes/pull/86277)) [SIG Storage]

:memo: subPath利用時のバグ修正です。

- 修正: タイムアウト後にCSIボリュームのクリーンアップをブロックします。([#88660](https://github.com/kubernetes/kubernetes/pull/88660)) [SIG Storage]
- 修正: CSI raw ブロックボリュームのクリーニングを修正しました。 ([#87978](https://github.com/kubernetes/kubernetes/pull/87978)) [SIG Storage]
- 修正: 15を超えるGCP Persistent Diskがc2, n2, m1, m2のマシンタイプにアタッチできない問題を修正しました。 ([#88602](https://github.com/kubernetes/kubernetes/pull/88602)) [SIG Storage]
- 複数のノード間で接続できるボリュームの場合、異なるノード間でのアタッチとデタッチ操作が並行し実行されるようになりました。 ([#88678](https://github.com/kubernetes/kubernetes/pull/88678)) [SIG Storage]
- CSIのPersistentVolumeをdescribeした際にFSTypeを含むようにしました。 ([#85293](https://github.com/kubernetes/kubernetes/pull/85293)) [SIG CLI and Storage]

# 依存のあるコンポーネント (Dependencies)

SIG Storage関連はなし

# 所感

Kubernetes v1.18のストレージ関連のアップデートは、ほぼWindwos・Azure対応と言っても良いぐらいです。数多くのWindows・Azureの機能やバグ修正が入っています。
WindowsでのCSI対応が一歩前進したことで、より多くのユーザがステートフルアプリケーションをKubernetes上で動作させることに挑戦できるようになったのではないでしょうか。