Kubernetes CKA課程筆記 75

Manager Multiple Clusters With Kube Context

ZONGRU Li
7 min readDec 5, 2021

前面學習過程已經大致掌握單一個K8s Cluster的使用與管理

但是考量到公司企業真實場景下,一定會有多座的K8s Cluster:

試想當使用自己個人電腦,想透過kubectl工具來管理不同座的K8s Cluster

到底kubectl工具要如何切換不同座的K8s Cluster?

Kube Contexts:

  • 在前面第17篇課程就有提到過kubeconfig file
  • 也就是我們透過kubectl預設使用路徑檔案:$HOME/.kube/config
  • 來進行與指定的K8s ClusterAPI Server溝通
  • 再到第42篇也有更換過特別製作給User使用的kubeconfig file
  • 並且我們也可以透過以下指令option來指定要使用的kubeconfig file:
kubectl --kubeconfig {kubeconfig file的絕對或相對路徑}
  • 並可以透過記載了不同K8s ClusterAPI Serverkubeconfig file已達成
  • 與不同K8s ClusterAPI Server溝通的目的
  • 但是這會非常費工,尤其若是K8s Cluster如果有10座
  • 那不就要有10份kubeconfig file...,然後每次都要"--kubeconfig"
  • 所以接下來要與多座K8s Cluster溝通,則要改用 — Contexts
  • 亦即N座的K8s Cluster,僅僅透過一份kubeconfig file來溝通
  • 但是要在這僅僅一份kubeconfig file內針對不同座Cluster定義"Contexts"
  • 即可達成切換不同座K8s ClusterAPI Server的溝通

何謂Context?

  • 首先拿到~/.kube/config內容:
  • 我順便備份一下:
備份這個剛升級1.22版的
  • 複製貼到VScode的內容如下:
  • 接下來細講上述檔案內容:
該檔案內可以定義多座cluster資訊,也可以多個使用者資訊
context實際組合了哪一位User與哪一座Cluster溝通!
  • 至於怎麼建立新的User,在過去建立Service Account也有示範過(第44篇)
  • 另外就是透過kubectl指令來完成
  • 透過以下指令來查詢相關建立User的有關指令,執行:
kubectl config --help

Current-Context:

  • 假設考量以下狀況:
  • 當執行到kubectl指令,例如如下:
kubectl apply deployment.yaml
  • kubectl如何知道當前到底使用到哪一個context內容,則定義在:
定義在這一行,來指定到當前kubectl指令使用哪一個context
  • 所以要指定使用到不同的的context內容
  • 總不能一直跑到~/.kube/config去改
  • 這時候可以利用以下指令來直接切換:
  • 也就是如下指令,來達成當下的context切換,執行:
kubectl config use-context {CONTEXT_NAME}
  • 但是使用上可能會先執行查詢目前定義了那些contexts?,執行:
kubectl config get-contexts
  • 當然還有確認當前使用的current-context確認指令,執行:
kubectl config current-context

新增Context:

  • 如上概念,假設今天同一座(如上假裝的K8s Cluster — development)
  • 上面想跑跑script等等,希望不是透過dev-admin這個User
  • 我們可以很簡單的透過kubectl指令或是直接編輯config檔以下內容:
  • 接著建立一個使用這個身分連接到development這座Clustercontext
  • 之後只要切換到該context
  • 就能用my-script身分執行指令到development這座Cluster
  • 上述動作也可以透過kubectl config指令完成

NameSpaces in Contexts:

  • 另一個與kubectl config有關的是 — Namespaces
  • 預設上使用的NameSpace"default"
  • 一般情況下,我們會在Cluster內定義多個NameSpaces來使用:
一座Cluster內可能針對用途,而有多個NameSpaces切分
  • 總不能每次執行kubectl指令時,都要很麻煩的加入如下sub-cmd:
kubectl --namespace=my-app {...}
  • 所以就要切換default到別的namespace
  • 可以透過如下指令來達成切換namespace,執行:
kubectl config set-context --current --namespace=kube-system
  • 其中上面指令的current指的就是當前的context
  • i.e.我只切換當前context內的nameSpace!!如下
執行切換namespace
  • 上述指令的執行效果其實就是指令幫忙異動到~/.kube/config內容:
沒寫就是用預設default這個nameSpace,也就是直接改檔填入這行也可以指定nameSpace!

我自己另外查到

可以直接顯示config當前current-context指定的nameSpace指令:

kubectl config view --minify --output 'jsonpath={..namespace}'; echo
查找出目前current-context是指定到哪一個nameSpace
  • 另外當然也可以不透過指令來切換不同的nameSpace
  • 就是直接改config檔也能做到

以上針對若有多座K8s Cluster乃至於不同nameSpacekubectl指令操作

就有更方便的使用方便的方式!!

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet