微信公众号:运维开发故事,作者:double冬
在使用kubectl *** 作kubernetes集群的过程中,可能会遇到需要 *** 作不同集群的问题,例如本地的minikube集群和线上的部署集群,或是线上的测试集群和线上的部署集群,如果集群之间切换不频繁,也可以使用笨办法,比如准备多个config文件在/.kube文件夹下,要切换的时候就改config的名字,或者使用别名,不过对于需要频繁切换 *** 作集群的人来说,这个方法显然太麻烦了,当然也不够cool。
当然,k8s是非常完善的集群解决方案,肯定是考虑到了这个问题的,这里就用到了k8s的config文件的context(上下文)了。
https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/#define-clusters-users-and-contexts
这里就不详细说以上这种方法了,我们来说说已经存在了两个集群的config文件时如何简单的生成context,当然,在上述文档的后半部分,也有我要说明的这些,也可以去看英文原文,我这里是因为遇到了一个坑,所以详细解释一下。
首先说方法,我们都知道kubectl如果没有设置config相关位置的环境变量,那么其会默认去一个地方寻找,对于Mac来说,就是
$HOME/.kube/config
那么坑在哪里呢,由于两个集群的配置文件可能是管理员只分配给你自己使用的,那么用户名就可能是相同的,在用户名相同的情况下,如果集群的连接启用了TLS验证,那么kubectl自己融合的config文件就会使用相同的client-certificate-data和client-key-data,如果两个集群在同一服务商的同一片网络下还好,可是如果是在不同的网络下,那么就会出现只能连接上其中一个,而另一个集群无法连接的情况,这种时候,我的解决办法是修改用户名,但要注意,在config里的context下,可以看到user和name两个字段,我们要修改的是user字段,这里只是一个名称,不影响集群侧的用户验证,修改完user字段,记得翻到users字段下,那里面有一个name,这个name的值应该和刚刚修改之前的user字段中的值一样,把这里也修改成同样的新值,保存,重新配置环境变量使之生效,这时候就可以使用了,下面我写了一个多集群合并的例子,大家去查询需要管理的集群中master节点~/.kube/config中的几段数据拷贝出来即可,组成一个合并到一起的config文件,便于后面用kubectx工具进行切换
apiVersion: v1 kind: Config preferences: {} clusters: - cluster: server: https://xxxxx:6443 certificate-authority-data: xxxxx name: cluster1 #第一个集群名称 - cluster: server: https://xxxxx:6443 certificate-authority-data: xxxxx name: cluster2 #第二集群名称 contexts: - context: cluster: cluster1 #第一个集群名称 user: user1 #第一个集群用户 name: cluster1 #第一个集群名称 - context: cluster: cluster2 #第二集群名称 user: user2 #第二个集群用户 name: cluster2 #第二集群名称 users: - name: user1 #第一个集群context中的user user: client-certificate-data: xxxxxxxxxxx client-key-data: xxxxxxxxxxxxxxxxxxx - name: user2 #第二个集群context中的user user: client-certificate-data: xxxxxxxxxxx client-key-data: xxxxxxxxxxxxxxxxxxx
上面的集群名字和用户名字,只要需要clusters,contexts,users中的是对应的同一个集群即可,可以任意添加多个,自定义名称,只要用户名和集群名不重复即可
至于官方提供的切换集群的方法,在上述文档中也能找到,这里也不在赘述,这里主要介绍一个第三方工具来帮我们更快捷的做这个事:
kubectx
github上开源了这个第三方工具,克隆下来就会有两个可执行文件,kubectx,kubens分别是用来切换选择集群和切换选择集群中的命名空间
➜ [/Users/mac] git clone https://github.com/ahmetb/kubectx ➜ [/Users/mac] cd kubectx ➜ [/Users/mac/kubectx] git:(master) ll total 144 -rw-r--r-- 1 mac staff 968B 6 20 00:48 CONTRIBUTING.md -rw-r--r-- 1 mac staff 11K 6 20 00:48 LICENSE -rw-r--r-- 1 mac staff 9.7K 6 20 00:48 README.md drwxr-xr-x 4 mac staff 128B 6 20 00:48 cmd drwxr-xr-x 8 mac staff 256B 6 20 00:48 completion -rw-r--r-- 1 mac staff 765B 6 20 00:48 go.mod -rw-r--r-- 1 mac staff 22K 6 20 00:48 go.sum drwxr-xr-x 5 mac staff 160B 6 20 00:48 img drwxr-xr-x 7 mac staff 224B 6 20 00:48 internal -rwxr-xr-x 1 mac staff 5.9K 6 20 00:48 kubectx -rwxr-xr-x 1 mac staff 5.4K 6 20 00:48 kubens drwxr-xr-x 7 mac staff 224B 6 20 00:48 test ➜ [/Users/mac/kubectx] git:(master) cp kubectx/kube* /usr/local/bin/ ➜ [/Users/mac/kubectx] git:(master) chmod +x /usr/local/bin/kube* ➜ [/Users/mac/kubectx] git:(master) mv /usr/local/bin/kubectx /usr/local/bin/kbx ➜ [/Users/mac/kubectx] git:(master) mv /usr/local/bin/kubens /usr/local/bin/kbs
2 使用kubectx快速切换context注意,这里对下载下来的二进制进行重命名主要是为了避免kubectx这个工具会影响对kubectl的自动补全,
在完成了上述模版对config文件自动融合之后,拷贝到管理机的~/.kube/目录,使用这个工具就可以快速的切换不同的 *** 作集群,同时这个工具还支持bash/zsh的tab自动补全,以及fzf这个快速选择工具,可以说从此以后切换集群就可以如丝般顺滑了
2.1 基本使用➜ [/Users/mac] kbx -h USAGE: kubectx : list the contexts kubectx: switch to context kubectx - : switch to the previous context kubectx -c, --current : show the current context name kubectx = : rename context to kubectx =. : rename current-context to kubectx -d [ ] : delete context ('.' for current-context) (this command won't delete the user/cluster entry that is used by the context) kubectx -u, --unset : unset the current context kubectx -h,--help : show this message
kubectx : 列出目前所有的context
kubectx : 切换到对应的context
kubectx - : 切换到上一次的context
kubectx = : 给context命名一个新名字
kubectx =. : 给当前context命名一个新名字
### 2.2 列出全部context
➜ [/Users/mac] kbx
cluster1
cluster2
### 2.3 切换到指定context
➜ [/Users/mac] kbx cluster1
Switched to context “cluster1”.
查看cluster-info kbx cluster-info 结果示例 Kubernetes master is running at https://10.0.2.15:6443 KubeDNS is running at https://10.0.2.15:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. ``` ### 2.4 切换到上一次的context ``` ➜ [/Users/mac] kbx cluster1 Switched to context "cluster1". ➜ [/Users/mac] kbx cluster2 Switched to context "cluster2". ➜ [/Users/mac] kbx - Switched to context "cluster1". ``` 3 使用kubens快速切换namespace ----------------------- ### 3. 1 参数说明 ``` ➜ [/Users/mac] kbs -h USAGE: kubens : list the namespaces in the current context kubens: change the active namespace of current context kubens - : switch to the previous namespace in this context kubens -c, --current : show the current namespace kubens -h,--help : show this message ``` ### 3.2 列出全部namespace ``` ➜ [/Users/mac] kbs default kube-public kube-system ``` ### 3.3 切换到指定namespace ``` kbs kube-system 结果示例 Context "cluster1" modified. Active namespace is "kube-system". 接下来,可以过以下命令在最近使用过的2个namespace快速切换。 kubens - ``` > 特别注意⚠️,特别注意,特别注意:同一个管理机上管理多个集群是方便,但是需要注意多个集群的管理员的安全问题,也可以参考官方文档,自己去创建一个不同权限的上下文 https://blog.csdn.net/qq_21816375/article/details/80305851?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/#define-clusters-users-and-contexts **公众号:运维开发故事** **github:https://github.com/orgs/sunsharing-note/dashboard** **爱生活,爱运维** 如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈。您的支持和鼓励是我最大的动力。喜欢就请关注我吧~ ![图片](https://img-blog.csdnimg.cn/img_convert/83cb1dba5b157ccc76a69e84c949abe6.png) 扫码二维码 关注我,不定期维护优质内容 **温馨提示** 如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。 ........................
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)