我们需要使用 kubectl 命令管理多个 Kubernetes 集群,这需要使用 kubectl config Context 相关配置来实现。该章节将记录:如何使用 kubectl 命令来管理多个 Kubernetes 集群,以及相关问题的处理方法。
方法一、通过 TOKEN 管理
适用场景:在这种情况下,管理员负责管理集群,并分发 TOKEN 给我们,我们通过 TOKEN 管理集群。
操作分为四步,为了记忆能够这样理解:
1)添加 Cluster 信息;
2)添加访问 Cluster 所使用的 TOKEN 信息;
3)创建 Context 以将 TOKEN 与 Cluster 进行绑定(关联);
4)切换到 Context 以使用该 Context 来访问集群;
详细操作过程如下:
# kubectl config set-cluster "example-k8s-staging" --insecure-skip-tls-verify=true --server=https://k8scp-endpoint.example.xyz:6443 # kubectl config set-credentials "example-k8s-staging-admin-token" --token='eyJhbGciOiJSUzI1NiIsIm...' # kubectl config set-context "example-k8s-staging-ctx" --cluster="example-k8s-staging" --user="example-k8s-staging-admin-token" # kubectl config use-context "example-k8s-staging-ctx"
补充说明:
1)选项 –token 所使用的 token 参数应该向集群管理员索取(参考 Using RBAC Authorization 笔记,以了解创建 TOKEN 的方法)
2)–insecure-skip-tls-verify=true:鉴于我们集群是自签名证书,所以应该使用 –certificate-authority 指定 CA 信息,但我们使用该选项偷懒;
方法二、合并 .kube/config 文件
我们部署多套 Kubernetes 集群,所以有多个集群的 .kube/config 配置文件,而我们希望合并这些配置文件。
# 第一步:被合并的多个 config 文件的 name 字段不能相同,否则仅能保留其中某个配置 # 因此,我们使用如下脚本进行修改: sed -i -E 's/kubernetes-admin/kubernetes-admin-foo/' config-foo sed -i -E 's/kubernetes$/kubernetes-foo/' config-foo # 第二步、使用 kubectl 命令: KUBECONFIG=~/.kube/config:/path/to/config-foo kubectl config view --flatten > .kube/config-merged
如上第二步,我们还能够使用 kubectl konfig merge 命令来合并配置文件:
1)安装 krew 插件:详细参考 krew 文档;
2)安装 konfig 插件:kubectl krew install config
3)导入:kubectl konfig import -s new.yaml
4)或者,合并:kubectl konfig merge ./config1 ./config2
方法三、使用 –kubeconfig 选项
kubectl get pods --kubeconfig=file1
参考文献
Configure Access to Multiple Clusters | Kubernetes
ssl – kubectl unable to connect to server: x509: certificate signed by unknown authority – Stack Overflow
kubernetes – How to merge kubectl config file with ~/.kube/config? – Stack Overflow
Mastering the KUBECONFIG file
python – How to combine a prefix to output of ls in bash? – Stack Overflow
How to Join Multiple Lines Into One | Baeldung on Linux
Trick #7 – Merge All The KUBECONFIGs!