つばくろぐ @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

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

教訓

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

Swift愛好会 vol.31 で談義した #love_swift

Swift 愛好会 vol.31 に参加して、もくもく作業をしたあとに、「プライベート開発を継続する技術」というタイトルで談義発表しました。

love-swift.connpass.com

七島さんのツイートにもありましたが、何かを決意してやり続ける、ということを成し遂げるには、共通するメタな何かかがあるのだなぁということを感じましたまる。

開発支援ツールを導入・運用したときのつらみをまとめた

お仕事で開発支援ツール(チャット、チケット管理、Wikiなど)を複数のプロジェクトへ導入・運用してるのだけど、いろいろなアンチパターンや問題にぶつかったので、その経験を勉強会用にまとめました。

どこかで発表しようかと思ってたのですが、機会を逃してお蔵入りしそうになっていたので、せっかくなのでインターネッツに公開しました。

あるあるネタだと思うので共感される方も多いかと。

資料でも触れてますが、カイゼンジャーニーがエモすぎて涙がちょちょぎれました。みんなも読もう。

カイゼン・ジャーニー たった1人からはじめて、「越境」するチームをつくるまで

カイゼン・ジャーニー たった1人からはじめて、「越境」するチームをつくるまで