自動合併Kubeconfig,實現多k8s集羣切換

前言

隨着微服務和容器化的深入人心,以及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
  1. 如果設置了--kubeconfig標誌,則只使用指定的文件。該標誌只允許有一個實例。
  2. 如果環境變量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}            

運行後操作

  • 將生成的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.bakal_prod_config.bakhw_test_config.bak的文件,本地環境已經自建環境,在集羣切換的時候十分頭疼。而後來使用--kubeconfig來進行切換集羣,雖然比之前的方法要方便很多,但是並不十分優雅。這個簡單的小工具一舉解決了我的文件,對於我這個kubectl重度依賴者來說十分重要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章