合併多個 Kubernetes Cluster 設定檔與切換小記
OS: openSUSE Leap 15
Kubernetes: 1.10.5 AKS in Azure / 1.13.1 in DigitalOcean
首先真的還是要說, 讀書會惠我良多
之前有注意到 Digital Ocean 也出了 Kubernetes 服務
- DigitalOcean Kubernetes 官方網站
本來想說啟用個 DigitalOcean Kubernetes 來試試看
但不用等到自己啟用 DigitalOcean Kubernetes Cluster, 讀書會的成員就分享一下相關的 yaml 給我們進行相關測試
之前因為是使用 AKS 來測試, 所以取得 credential 之後就會存放到 ~/.kube/config
首先下載成員提供的 DigitalOcean 的 kubeconfig.yaml 檔案
我的作法是先將原來的 ~/.kube/config 更名為 ~/.kube/config.bak
至少之後還有機會救回來 :)
將 kubeconfig.yaml 更名並移動到 ~/.kube/config ,
進行相關測試
> kubectl get node
NAME STATUS ROLES AGE VERSION
nostalgic-wescoff-8xe5 Ready <none> 8h v1.13.1
接下來的問題就是, 我要如何切換兩個 Kubernetes Cluster?
一開始我的做法是用土砲的方式
- 將設定檔存成 config.azure 與 config.do
- 然後將設定檔使用 cp 的方式蓋過去
確認這樣沒有問題, 接下來動腦筋把兩個設定合併
有看到官方的一個類似文件 Configure Access to Multiple Clusters (註一), 但是我覺得太繞口
所以我先觀察 config.azure 與 config.do 的內容, 都包含
- apiVersion
- clusters
- contexts
- current-context
- kind
- preferences
- users
所以就使用 vi 手工編輯, 將兩份 config 合併成為一份
使用 kubectl config view 觀察一下
> kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://6aec6937-01a9-4438-8efb-0aee209c9caa.k8s.ondigitalocean.com
name: do-sfo2-hdns4-digitalocean
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://sakana-579253af.hcp.japaneast.azmk8s.io:443
name: myAKScluster20180816
contexts:
- context:
cluster: do-sfo2-hdns4-digitalocean
user: do-sfo2-hdns4-digitalocean-admin
name: do-sfo2-hdns4-digitalocean
- context:
cluster: myAKScluster20180816
user: clusterUser_sakanaK8s_myAKScluster20180816
name: myAKScluster20180816
current-context: do-sfo2-hdns4-digitalocean
kind: Config
preferences: {}
users:
- name: clusterUser_sakanaK8s_myAKScluster20180816
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: 832fdbe46b401b1cb353c23c4fae7348
- name: do-sfo2-hdns4-digitalocean-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
目前是使用 DigitalOcean 的 cluster
> kubectl get nodes
NAME STATUS ROLES AGE VERSION
nostalgic-wescoff-8xe5 Ready <none> 9h v1.13.1
使用 kubectl config use-context 切換 cluster
> kubectl config use-context myAKScluster20180816
Switched to context "myAKScluster20180816".
再次觀察
> kubectl get nodes
NAME STATUS ROLES VERSION
aks-agentpool-40577543-0 Ready agent v1.10.5
果然可以進行切換
接下來就是要思考, 如何簡單的合併兩個設定檔案
到CNTUG 上面求教, 得到方法, 特別感謝 @Hwchiu 與 @MingHsieh
之前有看到 stackoverflow 有人提出使用 $KUBECONFIG 加上 kubectl config view --flatten 可是我沒有成功, 經 @MingHsieh 與 @Hwchiu 指點才發現
- 網頁上面的 KUBECONFIG 沒有使用 export, 所以 kubectl config view 沒有抓到 $KUBECONFIG, 導致匯出的時候是空的
所以得到的簡單作法是
將所有 config 透過 export 定義 KUBECONFIG ( 請將路徑換成自己 cluster 檔案 )
> export KUBECONFIG=~/.kube/config.do:~/.kube/config.azure
確認相關資訊
>echo $KUBECONFIG
/home/sakana/.kube/config.do:/home/sakana/.kube/config.azure
使用 kubectl config 指令合併兩個檔案
> kubectl config view --flatten > mergedkub
將 mergedkub 檔案更名並複製到 ~/.kube/config
進行測試
> kubectl get nodes
NAME STATUS ROLES VERSION
aks-agentpool-40577543-0 Ready agent v1.10.5
另外今天也做了另外一個實驗
兩個 Cluster 原本都是 current-context, 那合併之後誰是 current-context 呢?
- 答案是 KUBECONFIG 變數路徑的第一個 config :)
今天又學了一招 :)
~ enjoy it
Reference:
沒有留言:
張貼留言