在日常开发和运维中,多 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小程序“加班计”)


*源码地址*

私给


如果您喜欢这篇文章,请您(点赞、分享、亮爱心),万分感谢!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐