kubernetes多叢集管理——kubecm
Kubernetes 生態在很多企業廣泛應用的當下,相信很多運維和開發人員都會同時管理和維護多個 Kubernetes 叢集,比如:開發環境、測試環境、預釋出環境、生產環境等等。
為了方便管理多個環境的叢集,通常都是在本地環境通過 Kubernetes 的客戶端工具 kubectl 來管理多個 Kubernetes 叢集的。這時你就需要用到各個叢集的 kubeconfig 檔案,你是不是首先想到的就是手動將多個 kubeconfig 配置檔案合併為一個,然後通過 kubectx 或 kubie 這樣的工具來快速切換上下文環境(context)來達到多叢集環境的管理呢?雖然手動合併 kubeconfig 配置檔案的方法是可行的,但是叢集環境較多時或者叢集環境經常變更時,這樣的方法就顯得很麻煩了。
1)官網提供的解決方法
官方目前提供了配置環境變數和通過命令列引數顯示指定兩種方法來解決這個問題。
(1)配置環境變數指定多個叢集的kubeconfig檔案
export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config:$HOME/.kube/mike-local-kubernetes.yaml:$HOME/.kube/dev-kubernetes.yaml:$HOME/.kube/test-kubernetes.yaml:$HOME/.kube/prod-kubernetes.yaml:$HOME/.kube/okteto-kube.yaml # 配置 Kubernetes 多叢集,注意使用 : 隔開
(2)通過命令列引數顯示指定不同叢集的kubeconfig檔案
$ kubectl get pod --kubeconfig=$HOME/.kube/mike-local-kubernetes.yaml # 切換到本地叢集 $ kubectl get pod --kubeconfig=$HOME/.kube/dev-kubernetes.yaml # 切換到開發叢集 $ kubectl get pod --kubeconfig=$HOME/.kube/test-kubernetes.yaml # 切換到測試叢集 $ kubectl get pod --kubeconfig=$HOME/.kube/prod-kubernetes.yaml # 切換到生產叢集
雖然官方提供的方法,能實現多叢集管理。但是不斷來回切換 kubeconfig 配置檔案或者經常手動編輯環境變數來增減多個叢集的配置檔案,顯然還是比較麻煩的。
2)通過KubeCM工具實現多叢集 Kubeconfig 配置檔案管理
KubeCM 是一款使用 Go 語言開發的 KubeConfig 管理工具,功能非常的強大。它不但能實現多個 KubeConfig 檔案的自動合併,還能很方便的管理多個 Kubernetes 叢集環境,比如:增加、刪除、重新命名不同叢集環境等。
(1)安裝KubeCM
KubeCM 的安裝非常的簡單,你只需直接下載相應平臺的二進位制檔案解壓後就可使用了,完全就是開箱即用。
1)通過二進位制檔案安裝
# 根據你的實際情況,下載對應平臺二進位制檔案即可。
# Linux
$ curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v0.8.0/kubecm_0.8.0_Linux_x86_64.tar.gz
# macOS
$ curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v0.8.0/kubecm_0.8.0_Darwin_x86_64.tar.gz
# Windows
$ curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v0.8.0/kubecm_0.8.0_Windows_x86_64.tar.gz
下載完成後,解壓對應安裝包。
# Linux & macOS
$ tar -zxvf kubecm.tar.gz kubecm
$ sudo mv kubecm /usr/local/bin/
# Windows
# 你可以使用做任意一款壓縮軟體進行解壓並放到 $PATH 中
$ unzip kubecm.tar.gz
2)通過包管理器進行安裝
如果你使用的是 macOS,還可以使用 Homebrew 來進行一鍵安裝。
$ brew install sunny0826/tap/kubecm
2)使用KubeCM
為了方便演示,先建立一個 mike-kubeconfig 目錄並將多個叢集配置檔案複製到這裡。
$ mkdir mike-kubeconfig
$ cp *.yaml mike-kubeconfig/
$ ls mike-kubeconfig
dev-kubernetes.yaml mike-local-kubernetes.yaml okteto-kube.yaml
注意:這裡的 Kubeconfig 配置檔案都是以 .yaml 結尾的,這是為了方便 Kubie 這個工具進行多叢集切換。你只需按自己環境的規則管理 Kubeconfig 檔案即可。
(1)使用KubeCM完成自動合併
# 將指定目錄中的所有 kubeconfig 配置檔案合併為一個
$ kubecm merge -f mike-kubeconfig
Loading kubeconfig file: [mike-kubeconfig/dev-kubernetes.yaml mike-kubeconfig/mike-local-kubernetes.yaml mike-kubeconfig/okteto-kube.yaml]
Context Add: dev-kubernetes
Context Add: mike-local-kubernetes
Context Add: okteto-kube
# 將指定目錄中的所有 kubeconfig 配置檔案合併為一個並且覆蓋預設的 Kubeconfig 配置檔案
$ kubecm merge -f mike-kubeconfig -c
注意:是否使用 -c 引數的區別是:-c 引數生成的合併後文件名為 .kube/config,而不使用 -c 引數生成的合併後的檔名為 .kube/config.yaml。
(2)使用KubeCM快速增加一個叢集配置
$ kubecm add -f mike-local-kubernetes.yaml
# 使用 KubeCM 快速增加一個叢集配置檔案
$ kubecm add -f mike-local-kubernetes.yaml -n test
# 使用 KubeCM 快速增加一個叢集配置檔案並指定預設名稱空間
(3)使用KubeCM快速刪除一個叢集配置
$ kubecm delete # 互動式刪除
$ kubecm delete mike-local-kubernetes # 刪除指定的context(叢集)
(4)使用KubeCM快速重新命名一個叢集配置
$ kubecm rename # 互動式重新命名
$ kubecm rename -o dev -n test # 將 dev 重新命名為 test
$ kubecm rename -n dev -c # 將當前上下文重新命名為 dev
KubeCM 不僅提供了命令列模式,它還提供更加人性化的互動模式。話不多說,直接看圖:
1)切換當前叢集名稱空間
2)使用KubeCM快速切換到不同叢集環境
3)檢視kubecm管理的叢集詳細資訊
參考文件:
1)自動合併Kubeconfig,實現多k8s叢集切換
2)太讚了,這個神器竟然能分分鐘將多個 kubeconfig 合併成一個!