每日一Go-77、多 K8s 集群如何高效切换?一篇讲透 KubeConfig / Context / 多环境管理
在日常开发和运维中,多 Kubernetes 集群几乎是标配:本地有 Kind 集群,云端有 阿里云 ACK,机房里还有 IDC 自建集群。
如果你还在靠「不停改 ~/.kube/config」来切换集群,那一定会踩坑。这篇文章我们就来系统讲清楚:多 K8s 集群如何优雅、高效、安全地管理和切换。
一、KubeConfig 天生支持多集群
很多人不知道,其实 KubeConfig 从设计之初就支持多集群。
核心概念只有一个:Context。
-
一个
~/.kube/config -
可以管理 N 个集群
-
本质就是在
clusters / users / contexts之间做切换
👉 切换集群 ≠ 覆盖配置,而是切换 context
二、方式一:合并阿里云KubeConfig/IDC的KubeConfig
1. 假设你现在有两个文件
本地原来就有:
~/.kube/config
阿里云下载的:
~/.kube/config-ack-prod
2. 合并KubeConfig配置
KUBECONFIG=$HOME/.kube/config:$HOME/.kube/config-ack-prod \ coding-jun@localhost
kubectl config view --merge --flatten > /tmp/config
然后覆盖原来的config
mv /tmp/config $HOME/.kube/config
这个操作做了什么?
-
合并所有:
-
clusters -
users -
contexts -
不会丢失原有集群
-
context 名称自动保留
-
最终只维护一个
~/.kube/config
3. 验证合并是否成功
kubectl config get-contexts
如果能看到本地 + ACK 的 context,说明成功

三、如何在多个集群之间切换?
1. 查看所有 context
kubectl config get-contexts
2. 切换到阿里云 ack
kubectl config use-context kubernetes-admin-c606e21cd579748e28bb076e05e29d2f4
成功后提示
Switched to context "kubernetes-admin-c606e21cd579748e28bb076e05e29d2f4".
3. 验证当前集群
kubectl cluster-info
kubectl get nodes

四、方式二:多文件 + 环境变量(运维强烈推荐)
如果你不想合并文件,比如多环境 / 多云 / 多账号场景,这种方式非常干净。
1. 目录结构
~/.kube/
├── config # 本地集群
├── config-ack-prod # 阿里云生产
├── config-idc # idc机房集群
2. 临时使用某个集群
export KUBECONFIG=~/.kube/config-ack-prod
kubectl get nodes
3. 同时加载多个
export KUBECONFIG=~/.kube/config:~/.kube/config-ack-prod
kubectl config get-contexts
4. 优点
-
不污染主 config
-
非常适合多云 / 多环境
-
运维 / SRE 使用
五、IDC机房的k8s如何生成KubeConfig?
如果是 IDC 自建 Kubernetes,通常需要自己生成 kubeconfig。
以下步骤在 k8s-master 节点执行。
1. 生成客户端证书(在master上)
openssl genrsa -out user1.key 2048
openssl req -new -key user1.key -out user1.csr -subj "/CN=user1/O=dev"
2. 用K8s CA签发
openssl x509 -req -in user1.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out user1.crt -days 365
3. 添加集群角色权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: user1-view
subjects:
- kind: User
name: user1
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
kubectl apply -f rbac.yaml
4. 生成kubeconfig
kubectl config set-cluster idc \
--server=https://k8s-api.idc.example.com:6443 \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--kubeconfig=user.kubeconfig
kubectl config set-credentials user1 \
--client-certificate=user1.crt \
--client-key=user1.key \
--embed-certs=true \
--kubeconfig=user.kubeconfig
kubectl config set-context user1@idc \
--cluster=idc \
--user=user1 \
--kubeconfig=user.kubeconfig
kubectl config use-context user1@idc --kubeconfig=user.kubeconfig
5. 下载生成的user.kubeconfig到本地
~/.kube/config-idc
6. 合并到~/.kube/config
参考上面的方式一和方式二
六、总结
KubeConfig 是“多集群配置文件”,靠 context 切换,而不是覆盖。
-
一个 kubeconfig,可以管理 N 个集群
-
推荐:
-
开发:方式一(合并)
-
运维 / 多环境:方式二(多文件 + env)
-
掌握 context,K8s 多集群不再混乱
友情链接:加班费计算器(vx小程序“加班计”)
*源码地址*
私给
如果您喜欢这篇文章,请您(点赞、分享、亮爱心),万分感谢!
更多推荐




所有评论(0)