星期二, 1月 15, 2019

合併多個 Kubernetes Cluster 設定檔與切換小記

合併多個 Kubernetes Cluster 設定檔與切換小記


OS: openSUSE Leap 15
Kubernetes: 1.10.5 AKS in Azure  / 1.13.1 in DigitalOcean


首先真的還是要說,  讀書會惠我良多
之前有注意到 Digital Ocean  也出了 Kubernetes 服務


讀書會期間都是使用 Micrsoft AKS 服務與 Play with K8S ( https://labs.play-with-k8s.com/ ) 來進行測試.
本來想說啟用個 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:

沒有留言: