背景:
我们通过会有多个k8s集群,例如集群(cn-k8s)和集群(jp-k8s),那个就需要有一台服务器可以同时访问两个集群,方式:将2个集群的config信息存放到一个文件中,通过使用 kubectl config use-context context_name 来访问集群。简而言之,通过设置context来让kubectl访问不同的k8s集群。
步骤1:准备多个集群的config文件
注意:若集群的user和name的值相同,需要更改为不一致的值才可以。不然会报错:error: You must be logged in to the server (Unauthorized)
假如已经准备好2个集群的配置文件,分别为 $HOME/.kube/config1 和 $HOME/.kube/config2
#集群1的config文件
[root@k8s-master1-60 ~]# cat .kube/config1
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: xxxxxx
server: https://172.30.42.68:8443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: xxxxxx
client-key-data: xxxxxx
#集群2的config文件
[root@k8s-master1-60 ~]# cat .kube/config2
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: xxxxxx
server: https://172.30.42.5:6443
name: cluster.local
contexts:
- context:
cluster: kubernetes-admin
user: kubernetes-admin
name: kubernetes-admin@cluster.local
current-context: kubernetes-admin@cluster.local
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: xxxxxx
client-key-data: xxxxxx步骤2:合并config文件
[root@k8s-master1-60 ~]# export KUBECONFIG=~/.kube/config1:~/.kube/config2
[root@k8s-master1-60 ~]# kubectl config view --flatten > /root/.kube/config
测试:
#查看配置
[root@k8s-master1-60 ~]# kubectl config view
#查看当前的上下文 看*号进行辨别
[root@k8s-master1-60 ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
kubernetes-admin@cluster.local cluster.local kubernetes-admin-hz
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
#或者使用以下这条命令
[root@k8s-master1-60 ~]# kubectl config current-context
kubernetes-admin@kubernetes
[root@k8s-master1-60 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master1-60 Ready <none> 42d v1.30.2
k8s-master2-61 Ready <none> 42d v1.30.2
k8s-master3-62 Ready <none> 42d v1.30.2
k8s-work1-63 Ready <none> 42d v1.30.2
k8s-work2-64 Ready <none> 42d v1.30.2
#切换集群上下文
[root@k8s-master1-60 ~]# kubectl config use-context kubernetes-admin@cluster.local
Switched to context "kubernetes-admin@cluster.local".
[root@k8s-master1-60 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready,SchedulingDisabled control-plane,master 315d v1.22.12
node01 Ready worker 315d v1.22.12
node02 Ready worker 315d v1.22.12
node03 Ready worker 315d v1.22.12
node04 Ready worker 315d v1.22.12
node05 Ready worker 315d v1.22.12
node06 Ready worker 315d v1.22.12
node07 Ready worker 315d v1.22.12
# 查看当前使用的集群
# 修改当前使用的集群