K8S 實用工具之一 - 如何合併多個 kubeconfig?

東風微鳴發表於2023-03-03

開篇

? 引言

  • 磨刀不誤砍柴工
  • 工欲善其事必先利其器

K8S 叢集規模,有的公司傾向於少量大規模 K8S 叢集,也有的公司會傾向於大量小規模的 K8S 叢集。

如果是第二種情況,是否有一個簡單的 kubectl 命令來獲取一個 kubeconfig 檔案並將其合併到 ~/.kube/config 檔案作為一個額外的上 context?

? 提示

Kubeconfig 檔案會包含 Kubernetes 叢集的以下資訊:

  • 叢集
  • 上下文(context)
  • 使用者

有以下解決方案:

解決方案

方案一:KUBECONFIG 環境變數指向多個檔案

透過在 KUBECONFIG 環境變數中指定多個檔案,可以臨時將 KUBECONFIG 檔案組合在一起,並在 kubectl 中使用。

如下,那麼是在 kubeconfig 是在記憶體中做的合併:

export KUBECONFIG=~/.kube/config:~/anotherconfig 

方案二:flatten

直接如下:

export KUBECONFIG=~/.kube/config:~/anotherconfig 
kubectl config view --flatten

如果需要,還可以管道輸出到另外一個新檔案。

  • --flatten:將生成的 kubeconfig 檔案扁平化為自包含的輸出(用於建立可移植的
    kubeconfig 檔案)

方案三:kubectl 外掛 konfig

kubectl 有個 krew 外掛包管理器,可以透過 krew 安裝 konfig 實用外掛來管理 kubeconfig。

實用工具:krew

什麼是 krew:

Krew 是 kubectl 命令列工具的外掛管理器。

Krew 可以幫助你:

  • 發現 kubectl 外掛
  • 將它們安裝到您的機器上
  • 並保持安裝的外掛是最新的

目前在 krew 上有 164個 kubectl 外掛

Krew 可以在所有主要平臺上工作,比如 macOS、Linux和Windows。

Krew 還可以幫助 kubectl 外掛開發者: 你可以很容易地在多個平臺上打包和釋出你的外掛,並且可以透過 krew 集中的外掛庫來發現它們。

安裝

Krew 本身是一款透過 Krew 安裝和更新的 kubectl 外掛(是的,krew 自託管)。

Bash 或 ZSH shell 安裝:

  1. 如果需要用代理,請先配置 proxy,操作指南:Advanced Configuration · Krew

  2. 確認已安裝 git

  3. 下載並安裝 krew:

    (
      set -x; cd "$(mktemp -d)" &&
      OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
      ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
      KREW="krew-${OS}_${ARCH}" &&
      curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
      tar zxvf "${KREW}.tar.gz" &&
      ./"${KREW}" install krew
    )
    
  4. 新增 krewPATH: export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH" 並重啟 shell

  5. 執行 kubectl krew 來驗證

  6. 要看完整的外掛列表,執行:kubectl krew search

實用工具:konfig

安裝:kubectl krew install konfig

krew 外掛 konfig 可以幫助你管理 ~/.kube/config

使用 konfig 外掛的語法如下:

kubectl konfig import -s new.yaml

總結

今天分享了 2 個實用外掛:

  1. krewkubectl 外掛管理器
  2. konfig:kubeconfig 配置管理外掛

???

三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.

相關文章