通过context管理多集群kubeconfig

本文展示如何使用配置文件来配置对多个集群的访问。 在将集群、用户和上下文定义在一个或多个配置文件中之后,用户可以使用kubectl config use-context命令快速地在集群之间进行切换。

准备2个集群的kubeconfig

这里我们准备了2个集群的kubeconfig,分别是腾讯云的tke和eks集群。

1
2
3
[kubeconfig@nwx-gr-node1 .kube]$ ll
-rw-rw-r-- 1 kubeconfig kubeconfig 5630 Feb 15 19:06 eks.config
-rw-rw-r-- 1 kubeconfig kubeconfig 5620 Feb 15 19:06 tke.config

合并kubeconfig

合并2个集群的kubeconfig到$HOME/.kube/config这个文件,这里kubectl config不指定配置文件,就会默认读取这个文件。

1
2
3
4
5
6
7
[kubeconfig@nwx-gr-node1 .kube]$ KUBECONFIG=new-config1:new-config2  kubectl config view --flatten > $HOME/.kube/config
[kubeconfig@nwx-gr-node1 .kube]$ ll
total 28
drwxr-x--- 4 kubeconfig kubeconfig 4096 Feb 15 19:19 cache
-rw-rw-r-- 1 kubeconfig kubeconfig 7208 Feb 15 19:19 config
-rw-rw-r-- 1 kubeconfig kubeconfig 5630 Feb 15 19:06 eks.config
-rw-rw-r-- 1 kubeconfig kubeconfig 5620 Feb 15 19:06 tke.config

查看上下文

这里可以分别查看上下文、集群和用户

1
2
3
4
5
6
7
8
9
10
11
[kubeconfig@nwx-gr-node1 .kube]$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* cls-123456-100011007xxx -context-default cls-123456 100011007xxx
cls-456789-100011007xxx -context-default cls-456789 100011007xxx
[kubeconfig@nwx-gr-node1 .kube]$ kubectl config get-clusters
NAME
cls-123456
cls-456789
[kubeconfig@nwx-gr-node1 .kube]$ kubectl config get-users
NAME
100011007xxx

如果要查看当前上下文可以用这个命令

1
2
[kubeconfig@nwx-gr-node1 .kube]$ kubectl config current-context
cls-123456-100011007xxx -context-default

设置上下文

这里我们可以给集群设置默认的命名空间,这样切换的集群,执行kubectl操作就不需要再-n指定命名空间了

1
2
3
4
5
[kubeconfig@nwx-gr-node1 .kube]$ kubectl config set-context cls-123456-100011007xxx-context-default --namespace=kube-system
[kubeconfig@nwx-gr-node1 .kube]$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* cls-123456-100011007xxx -context-default cls-123456 100011007xxx kube-system
cls-456789-100011007xxx -context-default cls-456789 100011007xxx

这里还可以设置cluster,具体可以参考案例说明。

1
2
3
4
5
6
7
8
9
10
11
12
Examples:
# Set only the server field on the e2e cluster entry without touching other values.
kubectl config set-cluster e2e --server=https://1.2.3.4

# Embed certificate authority data for the e2e cluster entry
kubectl config set-cluster e2e --embed-certs --certificate-authority=~/.kube/e2e/kubernetes.ca.crt

# Disable cert checking for the dev cluster entry
kubectl config set-cluster e2e --insecure-skip-tls-verify=true

# Set custom TLS server name to use for validation for the e2e cluster entry
kubectl config set-cluster e2e --tls-server-name=my-cluster-name

切换上下文

这里我们切换上下文,只需要指定对应的context name进行切换即可。

1
[kubeconfig@nwx-gr-node1 .kube]$ kubectl config use-context cls-123456-100011007xxx -context-default

查看合并后的kubeconfig

1
[kubeconfig@nwx-gr-node1 .kube]$ kubectl config view

删除操作

  • 要删除用户,可以运行 kubectl config unset users.
  • 要删除集群,可以运行 kubectl config unset clusters.
  • 要删除上下文,可以运行 kubectl config unset contexts.

如果要从config文件删除可以用下面命令

  • 删除上下文,kubectl config delete-context minikube
  • 删除集群,kubectl config delete-cluster minikube
  • 删除用户,kubectl config delete-user minikube

通过context管理多集群kubeconfig
https://www.niewx.cn/2022/02/15/2022-02-15-Manage-multi-cluster-kubeconfig-through-context/
作者
VashonNie
发布于
2022年2月15日
许可协议