前言

    kubectl config支持通过配置文件管理多个集群, 将集群、用户和上下文定义在一个或多个配置文件中之后,用户可以使用 kubectl config use-context 命令快速地在集群之间进行切换。

    如何使用配置文件来配置对多个集群的访问,要怎么配置呢?我们用一个案例来详细看看。

常用命令:

命令 作用
kubectl config get-contexts 获取当前客户端支持的上下文配置
kubectl config use-context <要切换的目标上下文> 切换客户端当前设置的上下文

案例

假设我们现在有测试和生产两个k8s集群:

  • test:开发测试使用的环境
  • prod:生产正式使用的环境

效果:通过kubectl配置两套集群的上下文,然后可以通过切换上下文,去连接不同的集群。如:切换到prod后,后续所有kubectl命令发送到prod集群,切换到test,则发送到test集群。

如何配置多集群访问

1,在 $HOME/.kube 目录下创建多个环境的配置文件,如:config-testconfig-prod,然后将集群对应的连接信息,配置到对应的config文件中

1
注:不知道怎么找到 $HOME/.kube 目录? 或许你可以直接在命令终端执行:open $HOME/.kube

2,修改对应环境的config文件,统一集群、上下文、当前上下、用户名称,以方便后面管理

  • 修改config-test连接信息,将名称统一为:k8s-test,如:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    apiVersion: v1
    clusters:
    - cluster:
    server: https://47.103.114.16:6443
    certificate-authority-data: xxxxx省略xxxx
    name: k8s-test # 修改的内容
    contexts:
    - context:
    cluster: k8s-test # 修改的内容
    user: k8s-test # 修改的内容
    name: k8s-test # 修改的内容
    current-context: k8s-test # 修改的内容
    kind: Config
    preferences: {}
    users:
    - name: k8s-test # 修改的内容
    user:
    client-certificate-data: xxxxx省略xxxx
    client-key-data: LS0
  • 修改config-prod连接信息,将名称统一为:k8s-prod,如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
clusters:
- cluster:
server: https://47.103.114.16:6443
certificate-authority-data: xxxxx省略xxxx
name: k8s-prod # 修改的内容
contexts:
- context:
cluster: k8s-prod # 修改的内容
user: k8s-prod # 修改的内容
name: k8s-prod # 修改的内容
current-context: k8s-prod # 修改的内容
kind: Config
preferences: {}
users:
- name: k8s-prod # 修改的内容
user:
client-certificate-data: xxxxx省略xxxx
client-key-data: LS0

3,执行命令将config-prodconfig-test的配置合并到$HOME/.kube/config

1
KUBECONFIG=config-prod:config-test kubectl config view --flatten > $HOME/.kube/config

执行完成后,可以通过cat $HOME/.kube/config查看,此时应该已经合并完成了。

4,获取当前客户端支持的上下文配置

1
kubectl config get-contexts

输出:

1
2
3
CURRENT   NAME       CLUSTER    AUTHINFO   NAMESPACE
k8s-prod k8s-prod k8s-prod
* k8s-test k8s-test k8s-test

注:CURRENT下,带*的就是当前使用的上下文,比如现在,就表示目前连接的是k8s-test环境

5,切换客户端当前设置的上下文,比如我们切换到k8s-prod环境

1
kubectl config use-context k8s-prod

输出:

1
Switched to context "k8s-prod".

官方文档:配置多集群访问