Kube Contexts:
- 在前面第17篇課程就有提到過kubeconfig file
- 也就是我們透過kubectl預設使用路徑檔案:$HOME/.kube/config
- 來進行與指定的K8s Cluster的API Server溝通
- 再到第42篇也有更換過特別製作給User使用的kubeconfig file
- 並且我們也可以透過以下指令option來指定要使用的kubeconfig file:
kubectl --kubeconfig {kubeconfig file的絕對或相對路徑}
- 並可以透過記載了不同K8s Cluster的API Server的kubeconfig file已達成
- 與不同K8s Cluster的API Server溝通的目的
- 但是這會非常費工,尤其若是K8s Cluster如果有10座
- 那不就要有10份的kubeconfig file...,然後每次都要"--kubeconfig"
- 所以接下來要與多座K8s Cluster溝通,則要改用 — Contexts
- 亦即N座的K8s Cluster,僅僅透過一份kubeconfig file來溝通
- 但是要在這僅僅一份kubeconfig file內針對不同座Cluster定義"Contexts"
- 即可達成切換不同座K8s Cluster的API Server的溝通
何謂Context?
- 首先拿到~/.kube/config內容:
- 我順便備份一下:
- 複製貼到VScode的內容如下:
- 接下來細講上述檔案內容:
- 至於怎麼建立新的User,在過去建立Service Account也有示範過(第44篇)
- 另外就是透過kubectl指令來完成
- 透過以下指令來查詢相關建立User的有關指令,執行:
kubectl config --help
Current-Context:
- 假設考量以下狀況:
- 當執行到kubectl指令,例如如下:
kubectl apply deployment.yaml
- 則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這座Cluster的context
- 之後只要切換到該context
- 就能用my-script身分執行指令到development這座Cluster
- 上述動作也可以透過kubectl config指令完成
NameSpaces in Contexts:
- 另一個與kubectl config有關的是 — Namespaces
- 預設上使用的NameSpace是"default"
- 一般情況下,我們會在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!!如下
- 上述指令的執行效果其實就是指令幫忙異動到~/.kube/config內容:
我自己另外查到
可以直接顯示config內當前current-context指定的nameSpace指令:
kubectl config view --minify --output 'jsonpath={..namespace}'; echo
- 另外當然也可以不透過指令來切換不同的nameSpace
- 就是直接改config檔也能做到
以上針對若有多座K8s Cluster乃至於不同nameSpace的kubectl指令操作
就有更方便的使用方便的方式!!