はじめに
本ドキュメントでは、Kubernetes 1.15.0のCHANGELOGをベースにSIG Storageに関する機能について紹介します。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
新着情報 (What's New)
CSIの継続的改善
Kubernetes v1.15において、SIG Storageは in-tree volume pluginsをContainer Storage Interface(CSI)への移行作業を継続しました。
SIG Storageはリサイジング、inline volumeなどの機能をCSIへ取り込みました。さらに、Kubernetesのstorage機能で存在していないvolume cloningのような新しいaplha機能をCSIに導入しました。
Volume cloningでは新しいボリュームのプロビジョニングを行うときに、別のPVCを"DataSource"として指定することができます。これにより、ストレージ装置が、ボリュームのクローニングをサポートし、CSIドライバで"CLONE_VOLUME"機能を実装している場合、新しいボリュームはソースボリュームのクローンになります。
これらの変更は、以下のKubernetesの機能に関連しています。
(#625)
CSIにてVolume Cloningがサポートされました。使い方はこちらを参照。
KubernetesではAlpha機能のため、APIServerに--feature-gates=VolumePVCDataSource=true
の指定が必要になります。
ただし、残念ながら2019/7時点ではCSI Driverのサポートページの情報ではサポートしているCSIは不明な状況です。
既知の問題点 (Known Issues)
Storageに関するものはなし
アップグレード前に絶対に確認が必要な変更点 (Urgent Upgrade Notes)
- CSI Volumeでは
Node.Status.Volumes.Attached.DevicePath
フィールドの設定がなくなりました。このフィールドに依存する外部コントローラは修正が必要です。
(#75799, @msau42) - CSIに関するaplha版のCRDsが削除されました。(#75747, @msau42)
-
StorageObjectInUseProtection
admission plugin がデフォルトで有効になりました。これにより、デフォルトで有効になっているadmission pluginは
NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,StorageObjectInUseProtection
です。
以前に--admission-control
フラグを設定していなかった場合、クラスタの動作が標準的な動作に変わるかもしれませんので気をつけてください。(#74610, @oomichi)
非推奨or廃止される機能 (Deprecations and Removals)
- 次の機能がGAになりました。これに関連するFeature gatesがDeprecationになりv1.17で削除される予定です。
GCERegionalPersistentDisk
メトリックスの変更 (Metrics Changes)
追加されたメトリックス (Added metrics )
- CSI volumeの状態がkubelet volumeメトリックス経由で取得できるようになりました。 (#76188, @humblec)
- kube-controller-managerとkubeletに、成功とエラーのステータスをカウントする新しいメトリック
storage_operation_status_count
が追加されました。 (#75750, @msau42)
非推奨/変更されたメトリックス (Deprecated/changed metrics)
- Volume 割当/解除のEnd to End のレイテンシーのための
volume_operation_total_seconds
メトリックの新しいセマンティックを紹介します。
従来のstorage_operation_duration_seconds
メトリックは変更されませんが、以下のような潜在的な問題がありました。- 外部のprovisioner/deleterを使ってボリュームの割当/削除を行なった際、
storage_operation_duration_seconds
では、外部の操作の完了を待たずにレイテンシーのメトリックスを返します(実際には0に近い値となります)。これはvolume_operation_total_seconds
を代わりに使うことで解決します。 - ボリュームの割当/削除中に一時的なエラーが発生した場合(例えば、ボリュームが deleteVolumeの呼び出し中にまだ使用中の場合)、オリジナルの
storage_operation_duration_seconds
は、ボリュームが最終的に削除されるまで待たないため、間違ったレイテンシーのメトリックをレポートします。しかしながら、新しい実装のvolume_operation_total_seconds
は、ボリュームの割当/削除が完全に実行されるのを待ちます。
- 外部のprovisioner/deleterを使ってボリュームの割当/削除を行なった際、
潜在的なインパクト: SLO/alertがvolume_operaion_total_seconds
をベースに定義されている場合、 より正確なメトリックとなったため以前のレポートの値よりも大きな値となるため、違反扱いになるかもしれません。このメトリックをヒストグラムとして定義していた場合、新しい値は分布を変えます。 (#78061, @yuxiangqian)
注目機能 (Notable Features)
Beta
Alpha
- kubeletはエフェメラルストレージ(一時利用のためのストレージ)のストレージ消費量を監視するため、(XFSおよび適切に構築されているext4ファイルシステムの)XFS quotaが利用できるようになりました。現在、
emptyDir
ボリュームのみ利用可能なこの消費量のモニタリング方法は、従来のファイルシステムのツリーをなめる方法よりも早くて正確です。注釈として、これはQuotaの容量制限を強制するのではなく、単に消費量を監視するだけです。この機能を利用するにはfeature gateにLocalStorageCapacityIsolationFSQuotaMonitoring=true
を設定します。 ext4ファイルシステムの場合、mkfs.ext4 -O project <block_device>
でファイルシステムを作成し、tune2fs -Q prjquota <block_device>
を実行します。XFS ファイルシステムでは追加の準備作業は不要です。なお、このファイルシステムは/etc/fstab
内でproject
オプションでマウント設定しておく必要があります。また、プライマリパーティションがrootファイルシステムである場合、GRUBのconfigファイルにrootflags=pquota
を追加してください。(#66928, @RobertKrawitz)
原文ではext4fs filesystems
と記載されていますが、ext4ファイルシステムの呼び名が一般的なため、上記はext4ファイルシステムと訳しています。
- アルファ機能の
CSIINlineVolume
が有効になっている場合、Inline CSI ephemeral volumeがPodSecurityPolicyでコントロールできるようになりました。
(#76915, @vladimirvivien)
Staging Repositories
- Azure File pluginのサポートに
csi-translation-lib
(CSIMigrationAzureFile)が追加されました。 (#78356, @andyzhangx) - Azure Disk pluginのサポートに
csi-translation-lib
(CSIMigrationAzureDisk)が追加されました。 (#78330, @andyzhangx)
その他注目すべき変更 (Other notable changes)
- AWSで無効なデバイスパスを待っているkubeletの問題を修正しました。(#78595, @gnufied)
- StorageOSのボリュームは、StorageOSの管理用CLIとUIに正しい情報(ノードとマウント時間)を表示するようになりました。(#78522, @croomes)
- Portworxのボリュームドライバーにてコントローラマネージャがクラッシュする問題を修正しました。 (#76341, @harsh-px)
- 空の通常ファイルの場合、
stat --printf %F
の実行結果がregular file
の代わりにregular empty file
を表示するようになりました。(#62159, @dixudx) - 異なるストレージオペレーションに異なるオペレーション名をつけることができるようになりました。これは、同じボリュームに2つのオペレーションが発生することを抑止しますが、もしオペレーションが変更された場合、指数関数的にリセットされます。(#75213, @gnufied)
-
AttachVolume
のストレージオペレーションのイベントのスパムを削減しました。(#75986, @mucahitkurt) - このリリースまで、iSCSI pluginはデバイスリスト内にパスが現れるまで10秒間待っていました。しかしながら、このタイムアウトは短い過ぎるか、もしくは多くのシステムのデバイス検出の時間よりも短いため、特定のデバイスを検出出来ませんでした。そこで、タイムアウトの時間を30秒に引き上げられました。これにより、デバイス検出によるマウントの問題を回避します。 (#78475, @humblec)
- CSIのボリューム拡張にsecretを保持するフィールドを追加しました。(#77516, @gnufied)
- Blockボリューム拡張のバグを修正しました。(#77317, @gnufied)
ボリューム拡張の際、PVCのVolumeModeがfilesystem
であるかをチェックするようになりました。