単純な Tips のメモ。
今私は複数のクラスタを切り替えたいと思っている。だから、二つの config ファイルを1つにマージしたい。
configのデフォルト
~/.kube/conf
になる。このコンフィグファイルの構造は下記の通り。大きく分けて、clusters
, contexts
, users
に分かれていてそれぞれ複数登録できるようになっている。
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: YOUR_CERTIFICATE_AUTHORITY_DATA
server: https://sacluster-aksresource-757738-55889d33.hcp.eastus.azmk8s.io:443
name: sacluster
contexts:
- context:
cluster: sacluster
user: clusterUser_AKSresource_sacluster
name: sacluster
current-context: sacluster
kind: Config
preferences: {}
users:
- name: clusterUser_AKSresource_sacluster
user:
client-certificate-data: YOUR_CLIENT_CERTIFICATE
client-key-data: YOUR_CLIENT_KEY_DATA
token: YOUR_TOKEN
az aks/acs get-credential
az acs kubernetes get-credentials
コマンド、もしくは、az aks get-credentialsコマンドは、マスターノードに接続して、/home/azureuser/.kube/conf を取ってきて、ローカルの、~/.kube/conf
に入れてくれる。既存のものがあるとマージしてくれる。
kubectl config
kubectl config
コマンドを使うと、これらの設定ファイルをそうさできる。例えば
$ kubectl config current-context
sacluster
このコマンドで現在選択されているクラスターが選択できる。既存のなくなったクラスターの情報を消したいときは
$ kubectl config delete-cluster YOUR_CLUSTER_NAME
$ kubectl config delete-context YOUR_CULSTER_NAME
残念ながら users
のセクションは削除できなさげだったので、手動で実施した。実際にクラスタを作るときは、ユーザは意識していなかったが、acs-engine / aks だと、certificate ベースのものになっている様子だ。
この辺りのは
2つの config ファイルのマージ
Stack Overflow にバッチリのやつがあった。one line kubectl command to merge config file with ~/.kube/config?
KUBECONFIG=~/.kube/config:~/config kubectl config view --flatten
KUBECONFIG には、複数のコンフィグファイルをかける。それに対してkubectl config view
でその内容を表示して、--flatten
オプションで、全ての内容を表示する。すると、config ファイルと同じものになるという仕組みだ。やってみよう。今回は、ACS と AKS の config をマージする。
$ scp azureuser@sasbrk.japaneast.cloudapp.azure.com:/home/azureuser/.kube/config .
で、config を取得する。acs-engine で作成したものなので、az acs get-credentials
は使えない。
概要を出してみよう。AKS, ACS のが興味深い。
$ KUBECONFIG=~/.kube/config:./config kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://sacluster-aksresource-757738-55889d33.hcp.eastus.azmk8s.io:443
name: sacluster
- cluster:
certificate-authority-data: REDACTED
server: https://sasbrk.japaneast.cloudapp.azure.com
name: sasbrk
contexts:
- context:
cluster: sacluster
user: clusterUser_AKSresource_sacluster
name: sacluster
- context:
cluster: sasbrk
user: sasbrk-admin
name: sasbrk
current-context: sacluster
kind: Config
preferences: {}
users:
- name: clusterUser_AKSresource_sacluster
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: YOUR_TOKEN_INFO
- name: sasbrk-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
ついにマージする。
$ KUBECONFIG=~/.kube/config:./config kubectl config view --flatten > newconfig
$ mv ~/.kube/config ~/.kube/config_bak
$ cp newconfig ~/.kube/config
動作確認する。
$ kubectl cluster-info
Kubernetes master is running at https://sacluster-aksresource-757738-55889d33.hcp.eastus.azmk8s.io:443
:
$ kubectl config use-context sasbrk
Switched to context "sasbrk".
$ kubectl cluster-info
Kubernetes master is running at https://sasbrk.japaneast.cloudapp.azure.com
:
うむ。いい感じ。