kubectl 配置對多集羣的訪問

配置對多集羣的訪問

本文展現如何使用配置文件來配置對多個集羣的訪問。 在將集羣、用戶和上下文定義在一個或多個配置文件中以後,用戶可使用 kubectl config use-context 命令快速地在集羣之間進行切換。前端

注意: 用於配置集羣訪問的文件有時被稱爲 kubeconfig 文件。 這是一種引用配置文件的通用方式,並不意味着存在一個名爲 kubeconfig 的文件。git

Before you begingithub

須要安裝 kubectl 命令行工具。api

定義集羣、用戶和上下文

假設用戶有兩個集羣,一個用於正式開發工做(development),一個用於其它臨時用途(scratch)。 在 development 集羣中,前端開發者在名爲 frontend 的命名空間下工做, 存儲開發者在名爲 storage 的命名空間下工做。 在 scratch 集羣中, 開發人員可能在默認命名空間下工做,也可能視狀況建立附加的命名空間。 訪問開發集羣須要經過證書進行認證。 訪問其它臨時用途的集羣須要經過用戶名和密碼進行認證。框架

建立名爲 config-exercise 的目錄。 在 config-exercise 目錄中,建立名爲 config-demo 的文件,其內容爲:frontend

apiVersion: v1
kind: Config
preferences: {}

clusters:
- cluster:
  name: development
- cluster:
  name: scratch

users:
- name: developer
- name: experimenter

contexts:
- context:
  name: dev-frontend
- context:
  name: dev-storage
- context:
  name: exp-scratch

配置文件描述了集羣、用戶名和上下文。 config-demo 文件中含有描述兩個集羣、兩個用戶和三個上下文的框架。工具

進入 config-exercise 目錄。 輸入如下命令,將羣集詳細信息添加到配置文件中:spa

kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
kubectl config --kubeconfig=config-demo set-cluster scratch --server=https://5.6.7.8 --insecure-skip-tls-verify

將用戶詳細信息添加到配置文件中:命令行

kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile
kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password

將上下文詳細信息添加到配置文件中:code

kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development --namespace=frontend --user=developer
kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development --namespace=storage --user=developer
kubectl config --kubeconfig=config-demo set-context exp-scratch --cluster=scratch --namespace=default --user=experimenter

打開 config-demo 文件查看添加的詳細信息。 也可使用 config view 命令進行查看:

kubectl config --kubeconfig=config-demo view

輸出展現了兩個集羣、兩個用戶和三個上下文:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: fake-ca-file
    server: https://1.2.3.4
  name: development
- cluster:
    insecure-skip-tls-verify: true
    server: https://5.6.7.8
  name: scratch
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: scratch
    namespace: default
    user: experimenter
  name: exp-scratch
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file
- name: experimenter
  user:
    password: some-password
    username: exp

每一個上下文包含三部分(集羣、用戶和命名空間),例如, dev-frontend 上下文代表:使用 developer 用戶的憑證來訪問 development 集羣的 frontend 命名空間。

設置當前上下文:

kubectl config --kubeconfig=config-demo use-context dev-frontend

如今當輸入 kubectl 命令時,相應動做會應用於 dev-frontend 上下文中所列的集羣和命名空間,同時,命令會使用 dev-frontend 上下文中所列用戶的憑證。

使用 --minify 參數,來查看與當前上下文相關聯的配置信息。

kubectl config --kubeconfig=config-demo view --minify

輸出結果展現了 dev-frontend 上下文相關的配置信息:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: fake-ca-file
    server: https://1.2.3.4
  name: development
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
current-context: dev-frontend
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file

如今假設用戶但願在其它臨時用途集羣中工做一段時間。

將當前上下文更改成 exp-scratch

kubectl config --kubeconfig=config-demo use-context exp-scratch

如今用戶 kubectl 下達的任何命令都將應用於 scratch 集羣的默認命名空間。 同時,命令會使用 exp-scratch 上下文中所列用戶的憑證。

查看更新後的當前上下文 exp-scratch 相關的配置:

kubectl config --kubeconfig=config-demo view --minify

最後,假設用戶但願在 development 集羣中的 storage 命名空間下工做一段時間。

將當前上下文更改成 dev-storage

kubectl config --kubeconfig=config-demo use-context dev-storage

查看更新後的當前上下文 dev-storage 相關的配置:

kubectl config --kubeconfig=config-demo view --minify

建立第二個配置文件

在 config-exercise 目錄中,建立名爲 config-demo-2 的文件,其中包含如下內容:

apiVersion: v1
kind: Config
preferences: {}

contexts:
- context:
    cluster: development
    namespace: ramp
    user: developer
  name: dev-ramp-up

上述配置文件定義了一個新的上下文,名爲 dev-ramp-up

設置 KUBECONFIG 環境變量

查看是否有名爲 KUBECONFIG 的環境變量。 若有,保存 KUBECONFIG 環境變量當前的值,以便稍後恢復。 例如,在 Linux 中:

export  KUBECONFIG_SAVED=$KUBECONFIG

KUBECONFIG 環境變量是配置文件路徑的列表,該列表在 Linux 和 Mac 中以冒號分隔,在 Windows 中以分號分隔。 若是有 KUBECONFIG 環境變量,請熟悉列表中的配置文件。

臨時添加兩條路徑到 KUBECONFIG 環境變量中。 例如,在 Linux 中:

export  KUBECONFIG=$KUBECONFIG:config-demo:config-demo-2

在 config-exercise 目錄中輸入如下命令:

kubectl config view

輸出展現了 KUBECONFIG 環境變量中所列舉的全部文件合併後的信息。 特別地, 注意合併信息中包含來自 config-demo-2 文件的 dev-ramp-up 上下文和來自 config-demo 文件的三個上下文:

contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: ramp
    user: developer
  name: dev-ramp-up
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: scratch
    namespace: default
    user: experimenter
  name: exp-scratch

更多關於 kubeconfig 文件如何合併的信息,請參考 使用 kubeconfig 文件組織集羣訪問

探索 $HOME/.kube 目錄

若是用戶已經擁有一個集羣,可使用 kubectl 與集羣進行交互。 那麼極可能在 $HOME/.kube 目錄下有一個名爲 config 的文件。

進入 $HOME/.kube 目錄, 看看那裏有什麼文件。 一般會有一個名爲 config 的文件,目錄中可能還有其餘配置文件。 請簡單地熟悉這些文件的內容。

將 $HOME/.kube/config 追加到 KUBECONFIG 環境變量中

若是有 $HOME/.kube/config 文件,而且還未列在 KUBECONFIG 環境變量中, 那麼如今將它追加到 KUBECONFIG 環境變量中。 例如,在 Linux 中:

export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config

在配置練習目錄中輸入如下命令,來查看當前 KUBECONFIG 環境變量中列舉的全部文件合併後的配置信息:

kubectl config view

清理

將 KUBECONFIG 環境變量還原爲原始值。 例如,在 Linux 中:

export KUBECONFIG=$KUBECONFIG_SAVED
相關文章
相關標籤/搜索