5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kubernetes 1.28: SIG Storageの変更内容

Last updated at Posted at 2023-09-04

はじめに

本ドキュメントでは、Kubernetes 1.28.0のCHANGELOGをベースにSIG Storageに関する機能について紹介します。
:pencil: がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。

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

Changes by Kind

非推奨 (Deprecation)

  • Kube-controller-managerは--volume-host-cidr-denylistと--volume-host-allow-local-loopbackフラグを非推奨としました。(#118128, @carlory)

APIの変更 (API Change)

  • PersistentVolumes に新しいLastPhaseTransitionTime フィールドが追加され、ボリュームが最後にフェーズを遷移したタイムスタンプが保持されるようになりました。(#116469, @RomanBednar)

  • pvc.StatusからresizeStatus列挙型を削除し、AllocatedResourceStatusに置き換えました。(#116335,@gnufied)

機能 (Feature)

  • RetroactiveDefaultStorageClass 機能が安定版となりデフォルトで有効になりました。(#118102, @RomanBednar)

:pencil: RetroactiveDefaultStorageClassは、PVCにてstorageClassNameを省略した際に利用されるデフォルトのStorageClassに関する機能です。
従来は、デフォルトのStorageClassを事前に設定し、その後にPVCを作成する必要がありました。つまり、後からデフォルトのStorageClassを設定しても、PVCはPendingのままでした。
この機能により、PVC作成時にstorageClassNameが未指定であっても、後からStorageClassのデフォルトを設定することでPVが作成されPVCとバインドされるようになりました。
なお、デフォルトのStorageClassの指定は、アノテーションにstorageclass.kubernetes.io/is-default-class: true を指定することで設定できます。

  • Added reason to metric attachdetach_controller_forced_detaches in the attach detach controller. (#119185, @xing-yang) [sig/storage,sig/apps]
  • attach detach controller のメトリクスattachdetach_controller_forced_detachesに理由を追加しました。(#119185, @xing-yang)
  • non-graceful ノードシャットダウンがGAになりました。 (#118228, @carlory)

:pencil: non-graceful ノードシャットダウンがGAとなったことで、シャットダウンが正しく行われずにノードが立ち上がらなかった場合にVolumeのデタッチが出来なくなってしますケースを救う機能になります。特にブロックストレージでは複数ノード/Podから同時書き込みによりボリュームが壊れることを防ぐためMulti Attachを抑止しているものがあります。そのため、古いノードからデタッチされないと、
新しいノードでいつまでもアタッチできない状態が続くことがありました。
non-graceful ノードシャットダウンでは、このような場合、taint node.kubernetes.io/out-of-service=nodeshutdown:NoExecute もしくはnode.kubernetes.io/out-of-service=nodeshutdown:NoScheduleを付与することで、強制的にデタッチされ新しいノードでアタッチできるようになります。

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

  • ボリューム作成の際の待機時のエラーメッセージをより明確にしました。 (#118262, @torredil)

失敗するテスト (Failing Test)

  • Azure Disk e2e がノードから利用できる場合、新しいトポロジーラベルを使用できるように許可しました。(#117216, @gnufied)
  • サイドカーのリリースのためのAfterEach volumeperf.goテストのnilポインタを修正しました。 (#117368, @sunnylovestiramisu)

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

  • ノードがダウンして復旧に時間がかかると、追い出されたPodのマウントポイントを正常にクリーンアップできない問題を修正しました(#111933)。 一方、Kubeletは2秒ごとに、 Orphaned pod "xxx" found, but error not a directory occurred when trying to remove the volumes dir というログを出力します。(#105536)(#116134, @cvvz)
  • PodとPVCのオブジェクトが削除された後、ボリュームがデタッチできない問題を修正しました。(#116138, @cvvz)
  • rmコマンドでARG_MAX制限に引っかかり、ディレクトリ内のファイル数が多すぎるボリュームをpv recyclerがスクラビングできなかったバグを修正しました。(#117283, @defo89)
  • NewVolumeManagerReconstruction 機能が有効で、/var/lib/kubelet/pods に CSI ボリュームが存在する場合に、kubelet のスタートアップがスタックする問題を修正しました。(#117804, @jsafrane)
  • emptyDirのメトリクス storage_operation_duration_seconds_count に報告されるエラーの数は、以前はprojected volumeが作成されるたびに1つエラーが報告されていましたが、大幅に減少しました。 (#117022, @mpatlasov)
  • NewVolumeManagerReconstructionSELinuxMountReadWriteOncePodのfeature gatesをデフォルトで無効に戻し、kubelet/ノード再起動時のボリューム再構築のリグレッションを解決しました。(#117751, @liggitt)
  • pvまたはpvcでvolume.beta.kubernetes.io/storage-classアノテーションが使用されている場合に警告を表示するようになりました。(#117036, @haoruan)

その他 (Cleanup or Flake)

  • GAされたfeature gate DelegateFSGroupToCSIDriver を削除しました。(#117655, @carlory)
  • 非推奨であった azureFile の in-treeのストレージプラグインを削除しました。(#118236, @andyzhangx)
  • feature gate CSIStorageCapacityは削除されました。--feature-gatesフラグの参照を行わないでください。(#118018, @humblec)
  • feature gate CSIMigrationGCEはGAとなり、デフォルトで有効になっていた機能はv1.25で削除され、gcepdパッケージ全体も削除されました。(#117055, @cyclinder)
  • feature gate DisableAcceleratorUsageMetricsPodSecurityはGAとなり、デフォルトで有効となっていた機能はv1.28で削除されました。(#114068, @cyclinder)

所感

Kubernetes v1.28のSIG Stoargeでは RetroactiveDefaultStorageClassとnon-graceful ノードシャットダウンがGAとなりました。
1つ目のRetroactiveDefaultStorageClassは、PVCにてstorageClassNameを省略した際に利用されるデフォルトのStorageClassに関する機能です。
Helmなどでセットアップされるステートフルアプリケーションでは、ユーザがどのStorageClassを利用するのか不明なため、storageClassNameが指定されていないことが多くあります。
そのため、values.yamlなどでstorageClassNameを指定してあげる必要がありました。
この指定を忘れると、RetroactiveDefaultStorageClassが有効でないKubernetes(v1.27以前)の場合、ステートフルアプリケーションを一度削除した後、再度セットアップする必要がありました(PVCを一度削除する必要がありました)。
今回Kubernetes v1.28でRetroactiveDefaultStorageClassが有効になったため、このPVCの削除が不要となり、後からStorageClassのデフォルト設定を行えば、PVが作成されPVCとバインドされるようになります。

2つ目のnon-graceful ノードシャットダウンは、異常状態となったノードから強制にボリュームをデタッチする機能です。
これまで、異常状態になったノードからボリュームを外すのは、ノードの状態次第ではノードにログインし強制的にデタッチするなど非常に手間のかかる作業でした。
今回Kubernetes v1.28のnon-graceful ノードシャットダウンにより、この復旧作業が少し楽に行えるようになりました。

Kubernetes v1.28 SIG Storage関連では大きな機能追加はありませんが、上記紹介した2つの機能のようにユーザビリティとメンテナンス性が向上しています。
目立つような機能ではありませんが、いざという時に役に立つ機能らだと思いますので、いざという時にこれらの機能を思い出してもらえれば幸いです。

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?