前言
隨着微服務和容器化的深入人心,以及kubernetes已經成爲容器編排領域的事實標準,越來越多的公司將自己的服務遷移到kubernetes集羣中。而隨着kubernetes集羣的增加,集羣管理的問題就凸顯出來,不同的環境存在不同的集羣,不同的業務線不同的集羣,甚至有些開發人員都有自己的集羣。誠然,如果集羣是使用公有云如阿里雲或華爲雲的容器服務,可以登錄其控制檯進行集羣管理;或者使用rancher這用的多集羣管理工具進行統一的管理。但是在想操作
istio
特有的容器資源,或者想使用istioctl
的時候,或者像我一樣就是想使用kubectl
命令的同學,這個時候多集羣的切換就顯的十分重要了。
簡介
kubectl
命令行工具通過kubeconfig
文件的配置來選擇集羣以及集羣的API Server通信的所有信息。kubeconfig
用來保存關於集羣,用戶,名稱空間和身份驗證機制的信息。默認情況下kubectl
使用的配置文件名稱是在$HOME/.kube
目錄下的config
文件,可以通過設置環境變量KUBECONFIG或者--kubeconfig指定其他的配置文件。詳情可看官方文檔https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/
原理
使用kubeconfig
文件,您可以組織您的羣集,用戶和名稱空間。 還可以定義上下文以快速輕鬆地在羣集和名稱空間之間切換。
上下文(Context)
kubeconfig
文件中的上下文元素用於以方便的名稱對訪問參數進行分組。 每個上下文有三個參數:集羣,命名空間和用戶。 默認情況下,kubectl命令行工具使用當前上下文中的參數與集羣進行通信。可以使用下面的命令設置上下文:
kubectl config use-context
配置內容
kubectl config view
- 如果設置了
--kubeconfig
標誌,則只使用指定的文件。該標誌只允許有一個實例。 - 如果環境變量
KUBECONFIG
存在,那麼就使用該環境變量KUBECONFIG
裏面的值,如果不存在該環境變量KUBECONFIG
,那麼默認就是使用$HOME/.kube/config
文件。
kubeconfig
內容
從下面kubeconfig文件的配置來看集羣、用戶、上下文、當前上下文的關係就比較明顯了。
apiVersion: v1
kind: Config
preferences: {}
clusters:
- cluster:
name: {cluster-name}
users:
- name: {user-name}
contexts:
- context:
cluster: {cluster-name}
user: {user-name}
name: {context-name}
current-context: {context-name}
爲何要自動合併
在日常的工作中,如果我們需要操作多個集羣,會得到多個kubeconfig配置文件。一般的kubeconfig文件都是yaml格式的,但是也有少部分的集羣kubeconfig時已json文件的形式給出的(比如華爲雲的=。=),比如我們公司再阿里雲、華爲雲和自建環境上均存在kubernetes集羣,平時操作要在多集羣之間切換,這也就催生了我寫這個工具(其實就是一個腳本)的動機。
自動合併生成kubeconfig
衆所周知,yaml是一種直觀的能夠被電腦識別的數據序列化格式,是一個可讀性高並且容易被人類閱讀的語言和json相比(沒有格式化之前)可讀性更強。而我這個工具並不是很關心kubeconfig的格式,只要將想要合併的kubeconfig放入指定文件即可。
GitHub:https://github.com/sunny0826/mergeKubeConfig
適用環境
- 需要在終端使用命令行管理多集羣
- kubernetes集羣中安裝了istio,需要使用
istioctl
命令,但是集羣節點並沒有安裝istioctl
,需要在本地終端操作 - 不願頻繁編輯.kube目錄中的config文件的同學
準備工作
- Python環境:2.7或者3均可
- 需要依賴包:
PyYAML
開始使用
-
安裝依賴:
pip install PyYAML
-
運行腳本
- 默認運行方式,kubeconfig文件放入
configfile
文件,注意刪掉作爲示例的兩個文件
python merge.py
- 自定義kubeconfig文件目錄
python merge.py -d {custom-dir}
- 默認運行方式,kubeconfig文件放入
運行後操作
- 將生成的config文件放入.kube目錄中
cp config ~/.kube
- 查看所有的可使用的kubernetes集羣角色
kubectl config get-contexts
- 更多關於kubernetes配置文件操作
kubectl config --help
- 切換kubernetes配置
kubectl config use-context {your-contexts}
結語
在使用kubernetes初期,在多集羣之間我一直是頻繁的切換.kube/config
文件來達到切換操作集羣的目的。這也導致了我的.kube
目錄中存在這多個類似於al_test_config.bak
、al_prod_config.bak
、hw_test_config.bak
的文件,本地環境已經自建環境,在集羣切換的時候十分頭疼。而後來使用--kubeconfig
來進行切換集羣,雖然比之前的方法要方便很多,但是並不十分優雅。這個簡單的小工具一舉解決了我的文件,對於我這個kubectl
重度依賴者來說十分重要。