[超小ネタ]direnvを使ってkubectlとkubeconfigをプロジェクト(ディレクトリ)毎に切り替える
はじめに
おはようございます、加藤です。複数のKubernetes環境を管理しているとバージョン毎にkubectlを切り替えるが必要になる場合があり面倒だったりしませんか? また、kubeconfigのcontextはkubectxで切り替えられるけど、そもそも単一ファイルで管理するのが不安だったりしませんか? Kubernetesとその周辺ツールでもっといい方法があるかもしれませんが、私はdirenvで対応しているのでその方法をご紹介ます。
前提
- direnvがインストール済みであること
紹介
この方法を使うには、プロジェクト毎に専用のディレクトリが存在し、そのディレクトリに移動してから作業を行うことが必須になります。
kubectl
まず、kubectlのバイナリを任意のディレクトリに保存し実行権限を付与しておきます。私は下記の様に AWS or GCP とバージョン毎に配置しています。
tree ~/bin/kubectl/ /Users/$USER/bin/kubectl/ ├── aws │ ├── v1.10.3 │ │ └── kubectl │ └── v1.11.5 │ └── kubectl └── gcp └── v1.12.0 └── kubectl
後は、.envrc
で以下の様に定義します。(GKE v1.12.0の場合)
PATH_add ~/bin/kubectl/gcp/v1.12.0
設定が完了したら、which
コマンドで意図したバイナリが実行されているか確認しましょう。
$ direnv allow $ which kubectl /Users/$USER/bin/kubectl/gcp/v1.12.0/kubectl $ kubectl version --client Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.0", GitCommit:"0ed33881dc4355495f623c6f22e7dd0b7632b7c0", GitTreeState:"clean", BuildDate:"2018-09-27T17:05:32Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"darwin/amd64"}
kubeconfig
kubeconfigを作業ディレクトリ配下に作成するようにします。
export KUBECONFIG="$(pwd)/.kube/config"
$(pwd)
を使用して絶対パスにしているのは、サブディレクトリに移動した際にも参照が可能にする為です。
これでkubectlなどが$(pwd)/.kube/config
を参照してくれる様になります。
また事前にこの設定を行って置くと...
$ aws eks update-kubeconfig --name cluster_name $ gcloud container clusters get-credentials cluster_name
これらのコマンドも$(pwd)/.kube/config
にconfigを出力してくれます!!
まとめ
export KUBECONFIG="$(pwd)/.kube/config" PATH_add ~/bin/kubectl/gcp/v1.12.0
また、EKSを使っている方は下記のブログもおすすめです。
[超小ネタ] Amazon Elastic Container Service for Kubernetes(EKS)でkubectlする際に毎回MFAを求められて面倒なのを回避する
あとがき
超小ネタですが、誰かの為になれば幸いです。