我们日常开发中会不可避免的使用到多个 Kubernetes 集群,一般比较传统的做法,我们会使用 ssh 远程到集群节点主机上,然后再进行 kubectl 相关命令的操作,这样做也没什么问题,但是当集群数增多以后,就会发现切换集群的操作略显麻烦,且无法管理,于是就有了一个需求,怎样能够更加优雅的组织管理这些不同的集群接入场景?
在了解 kubectl config 提供的功能时发现,它本身就能够清晰的组织管理不同集群的上下文,且能够无缝切换集群环境。
在这篇文章中,我将介绍如何使用 kubectl config 组织管理日常工作中的四个不同的集群环境。
我们先列出需要组织管理的集群列表:
docker for desktop
: 本地 Docker Desktop 提供的 k8s 单节点环境work-test
: k8s 多节点测试环境work-dev
: k8s 多节点开发环境work-prod
: k8s 多节点生产环境
首先,当你本地成功安装了 kubectl,会存在一个 ~/.kube/
的目录,该目录用于存放所有集群的配置文件;
由于我本地安装了 Docker Desktop Kubernetes 环境,
所以现在可以通过 vim ~/.kube/config
查看一下本地 k8s 单节点配置信息:
1 | apiVersion: v1 |
从该配置能够看出,一个完整的集群配置至少要包含三个要素:
- clusters 集群
- contexts 上下文
- users 用户
接下来,我们需要分别将 work-test
、work-dev
、work-prod
三个环境中的配置添加到本地;
通常 Kubernetes 集群在安装时会生成一个管理配置文件,该配置文件位于每个集群的主节点上,具体目录:
1 | /etc/kubernetes/admin.conf |
了解到了这一点,我们就可以使用 scp 命令将各个集群主节点中的配置拷贝到本地 .kube 目录中了:
1 | # copy the Kubernetes admin config for work test |
将如上命令中 SERV_MASTER_TEST
、SERV_MASTER_DEV
、SERV_MASTER_PROD
分别替换为对应集群主节点 IP;
注:配置文件中包含敏感信息,请妥善保管!
现在,我们已经完成了配置的拷贝,但是为了便于管理,我们需要对这些配置中的命名进行修改规范;
我们要修改这三个配置文件,并着重关注三大要素:集群、上下文、用户;
以 work-dev 为例:
1. 集群 clusters
1 | # 修改集群名称 |
2. 用户 users
1 | # 修改用户名称 |
3. 上下文 contexts
1 | # 更新上下文名称,关联对应用户及集群 |
三个配置文件都修改完成后,我们需要将这些配置全部加载到 kube config 中;
具体这里将会使用到名为 KUBECONFIG 的环境变量,该环境变量用于保存以冒号分隔的配置文件路径列表;
kubectl config 将通过 KUBECONFIG 环境变量加载并组合所有的集群配置信息;
我们可以将 KUBECONFIG 环境变量配置添加到 .bash_profile 或 .zshrc 当中:
1 | export KUBECONFIG=$HOME/.kube/config-work-test:$HOME/.kube/config-work-dev:$HOME/.kube/config-work-prod:$HOME/.kube/config |
设置完后,执行命令以使配置生效:1
2
3$ source ~/.bash_profile
# 或者
$ source ~/.zshrc
也可以打开一个新终端,验证环境变量是否生效:1
$ echo $KUBECONFIG
至此,kubectl config 集群配置已经完成;
让我们验证一下!
1. 获取所有的集群上下文列表:
1 | $ kubectl config get-contexts |
2. 获取展示当前的上下文:
1 | $ kubectl config current-context |
3. 将当前上下文设置为开发环境:
1 | $ kubectl config use-context work-dev |
此时,即可使用 kubectl get nodes
等命令验证一下是否已切换到对应集群环境。
4. 更多的 kubectl config 命令见帮助信息:
1 | current-context 显示 current_context |