k8sでクラスタの誤操作を防ぐラッパーをリリースしました(Check the cluster with kubectl)

解決したい課題

僕は現在GMOペパボの技術基盤チームに所属しており、ペパボの商材であるロリポップやColormeなどで動作する基盤の開発に携わっています。昨今はもっぱらk8sを触っているのですが、その際に起こりうるオペミスは意図していないClusterやNamespaceへの操作が考えられます。下記のようなオペミスをして、意図しないNamespaceのポッドを全消ししたなんて経験、皆さんありますよね????

$ kubectl delete pod --all   

これを解決するために、kubectl コマンドのラッパー(1.12移行ではプラグインとしても機能)を開発しました。

使い方

僕は下記のように利用しています。

まずコマンドが長いのでaliasに登録します。これは実際には .zshrc に書いています。

$ alias kc='kubectl-cluster-caution'

次に、作業するリポジトリで下記を実行してください。これを実行すると、現在のk8sコンテキスト、Namespaceをリポジトリトップの .kubectl-cluster-caution ファイルに出力します。このファイルを元に、現在のコンテキストを突合します。

$ kc --add-context

この操作のあとに例えばクラスタを変更して、k8sコマンドを実行してみます。

$ kc config use-context other.example.com
Switched to context "other.example.com".
$ kc get pod
Repository configuration is different from cluster or namespace.
Do you want to continue?(Y/n) (yes/no) [yes]: 

このように定義された情報と異なる場合は、yes/noの確認が入るので、一回気づくチャンスが増えます。

導入方法

brewを提供しています。

$ brew tap pyama86/ptools   
$ brew install cluster-caution

最後に

今後、k8sの導入が進んでくると、僕のような働き方じゃなくても、起こり得るオペミスだと思うのでぜひ導入していただき、皆さんの運用に貢献できたら大変嬉しいです。