helmでのstatefulsetsの更新をうまくやるワークアラウンド

December 25, 2018

helmの設定を書き換えようとしてもそれがstsやpoddisruptionbudgets.policy、job等についての変更の場合、うまく更新できず困っていたのですが...。

そういう場合は、実podは残しつつstsやpoddisruptionbudgets.policy等の設定のみを消すことで helm upgrade が叩けるようです。 kubectlでのマニュアルオペレーションでなくhelmベースでの管理を継続できるのが主なメリットです。

helmの状況

Issueはあがっていて2.9で一度解決した?ようにみえるのですが、手元の環境も含め2.11時点ではうまくFixされていないようです。

なおこのやり方はGCPのジョブの更新についてのドキュメントにも言及されている方法なので、一定の安心感があります。

コマンド例

やり方ですが、一旦、

$ kubectl delete sts $NAME --cascade=false
$ kubectl delete poddisruptionbudgets.policy $NAME --cascade=false

などと --cascade=false を付けつつdeleteしてあげると、その後 helm upgrade --recreate-pods で更新できるようになります。

リファレンス

追記

v1.21 から cascade オプションの指定方法が変わりました。 本記事の要望を満たす場合 --cascade=orphan を使用します。

  • https://kubernetes.io/ja/docs/tasks/run-application/delete-stateful-set/


Recent blog posts



(c) Copyright 2023 Kotaro Yoshimatsu