つばくろぐ @takamii228

知は力なり

Kubernetesでhelm deleteとhelmfile deleteを間違えて事故った話

はじめに

で起きたことを懺悔としてまとめます。

前談

今のプロジェクトで運用しているKubernetesクラスターはAWS上にkopsで構築しています。

また各chartをパッケージマネージャであるhelmで管理していて、chartの定義をhelmfileで管理しています。

github.com

Releaseを再作成しようとして実行するコマンドを間違えた

今回とあるServiceに対してKubernetesのserviceとdeploymentのyamlダッシュボードからいじった結果、helmfile syncに失敗する状態になってしまったので、 helm経由でReleseを作り直そうとしました。

私はまだKubernetesやhelmの操作に慣れていなかったため、誤ってhelmfile deltehelm deleteコマンドを間違えてしまいました。

# 本来打つべきコマンド
helm delete xxxxxx

# 実際に打ったコマンド
helmfile delete xxxxxx

helmコマンドではリンクの通り、RELEASE_NAMEを指定することで特定のchartのみ削除することができます。

helm delete [flags] RELEASE_NAME [...]

docs.helm.sh

helmfile delete xxxxxを打ったあとに、以下の表示が出ました。

release aaaaa deleted
release bbbbb deleted
release ccccc deleted
release ddddd deleted
release eeeee deleted

あれ🙁?

Kubernetesで管理している各サービスにアクセスすると....

f:id:takamii228:20180703222139p:plain

😨😨😨

f:id:takamii228:20180703222139p:plain

😱😱😱😱😱😱

全部消えとるがなー!!

helmfileのREADME.mdを確認すると

delete delete charts from state file (helm delete)

ぜ、全部消えるんかい。。。

github.com

幸いにも作り直そうとしてるService意外にアタッチしていたPVCのpersistentVolumeReclaimPolicyをRetainにしていたので、再度helmfile syncしてPVCをアタッチしなおすことで即座に復旧するとができました。

もしpersistentVolumeReclaimPolicyがデフォルトのDeleteだった場合は今まで設定したものが全部吹っ飛ぶことになっていたと思うと背筋が凍りました。

Issueを上げてもらった

github.com

私みたいな被害者が今後出ないことを切に祈ります 🙏

教訓

  • 不慣れなコマンドはちゃんと確認してから実行するべし。