kubectl コマンドを使うとき異なる Kubernetes 環境を切り替えるには

前回、複数のプライベート Docker レジストリを切り替えて使う方法を紹介した。

今回は Kubernetes における環境切り替えの方法。

Kubernetes の設定ファイルは、デフォルトでは ~/.kube/config というパスに配置される。特に環境変数での設定などがなければ、このファイルの存在をチェックして kubectl コマンドが動作する。

~/.kube/config ファイルの中身は YAML 形式だ。環境変数 KUBECONFIG に複数の config ファイルのパスを渡してやることで、複数の環境にアクセスできるようになる。その際は、kubectl コマンドに --context オプションを必ず渡して、どの環境に対する操作なのかを明示する必要がある。

コレが一番正しいのかもしれないが、--context オプションを書くのが面倒なので、違う方法を考えてみた。


まず、デフォルトで配置される ~/.kube/config というファイルは、リネームして配置しておかないようにする。そうすると、シェルを起動した時にいきなり kubectl を叩いても、どこにも繋がらない状態になる。

各環境の設定ファイルは、~/.kube/config-dev とか ~/.kube/config-prd といった別名を付けて配置しておく。

で、特定の環境に繋ぎたい場合に備えて、以下のようなエイリアスを用意しておく。

# 開発環境…みたいなテイ
alias kubectl-dev='export KUBECONFIG="$HOME/.kube/config-dev"'
# 本番環境…みたいなテイ
alias kubectl-prd='export KUBECONFIG="$HOME/.kube/config-prd"'

見れば分かるが、ただ環境変数 KUBECONFIG を書き換えているだけ。操作したい環境に合わせて、事前に kubectl-dev とか kubectl-prd とかを叩いてから、kubectl get pod とかを呼ぶようにする。

シェルに入った時にデフォルトで参照されるファイルを置いておかなければ、「開発環境だと思ってウッカリ本番環境を触ってしまった」とか「本番環境を操作しないといけないのにずっと開発環境をいじっていた」といったオペミスを防ぎやすいかな、という狙い。個人的にはこの「安全策」が性に合っている。