Kubernetesでhelm deleteとhelmfile deleteを間違えて事故った話
はじめに
helmfile deleteで事故って死ぬかと思った😭
— maa takamii🐧 (@takamii228) July 3, 2018
で起きたことを懺悔としてまとめます。
前談
今のプロジェクトで運用しているKubernetesクラスターはAWS上にkopsで構築しています。
また各chartをパッケージマネージャであるhelmで管理していて、chartの定義をhelmfileで管理しています。
Releaseを再作成しようとして実行するコマンドを間違えた
今回とあるServiceに対してKubernetesのserviceとdeploymentのyamlをダッシュボードからいじった結果、helmfile sync
に失敗する状態になってしまったので、
helm経由でReleseを作り直そうとしました。
私はまだKubernetesやhelmの操作に慣れていなかったため、誤ってhelmfile delte
とhelm delete
コマンドを間違えてしまいました。
# 本来打つべきコマンド helm delete xxxxxx # 実際に打ったコマンド helmfile delete xxxxxx
helm
コマンドではリンクの通り、RELEASE_NAME
を指定することで特定のchartのみ削除することができます。
helm delete [flags] RELEASE_NAME [...]
helmfile delete xxxxx
を打ったあとに、以下の表示が出ました。
release aaaaa deleted release bbbbb deleted release ccccc deleted release ddddd deleted release eeeee deleted
あれ🙁?
Kubernetesで管理している各サービスにアクセスすると....
😨😨😨
😱😱😱😱😱😱
全部消えとるがなー!!
helmfileのREADME.mdを確認すると
delete delete charts from state file (helm delete)
ぜ、全部消えるんかい。。。
幸いにも作り直そうとしてるService意外にアタッチしていたPVCのpersistentVolumeReclaimPolicyをRetain
にしていたので、再度helmfile syncしてPVCをアタッチしなおすことで即座に復旧するとができました。
もしpersistentVolumeReclaimPolicyがデフォルトのDelete
だった場合は今まで設定したものが全部吹っ飛ぶことになっていたと思うと背筋が凍りました。
Issueを上げてもらった
あれっ、だめですか?消えるのはいいけど、誤操作対策で確認がほしいとかですかね
— Yusuke KUOKA (@mumoshu) July 3, 2018
helmfile deleteはhelm deleteの挙動に合わせてほしい派の人がいたので悩ましいですが、helmfile destroyで--purge相当かつprompt必要、--yesでpromptカットはありだと思いました!
— Yusuke KUOKA (@mumoshu) July 3, 2018
ありがとうございます。返信しました!
— Yusuke KUOKA (@mumoshu) July 3, 2018
私みたいな被害者が今後出ないことを切に祈ります 🙏
教訓
- 不慣れなコマンドはちゃんと確認してから実行するべし。