解決したい課題
僕は現在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の導入が進んでくると、僕のような働き方じゃなくても、起こり得るオペミスだと思うのでぜひ導入していただき、皆さんの運用に貢献できたら大変嬉しいです。