kubectl多集群管理

大部分情况我们不只一个k8s集群,这个时候我们需要快速的在各个集群之间进行切换。且省去每次都要申明namespace

使用kubectx

kubectx是个可以快速的切换集群且能设置namespace的官方地址

安装
brew install kubectx

为了能够使用模糊推查找荐安装fzf

使用
  • kubectx 可以看到所有环境,通过模糊查找可快速选择集群
  • kubens 可以看到当前环境所有的namespace,可以快速选择NS,选择NS之后执行的命令就是在当前NS中执行了,比如执行kubectl get pods 显示的就是当前NS所有的pod,不需要加上-n xxxx

多集群的管理

kubectx 所有解决了多个环境和命名空间的问题,但是没能解决快速添加集群
利用kubectl的环境变量拿到所有的环境然后通过kubectl config view --raw合并成为一个config文件,脚本如下:

#! /bin/bash
# 合并$HOME/.kube/configs目录下的文件到$HOME/.kube/config
# 配合kubectx工具进行环境切换

CONFIGPATH=$HOME/.kube/configs

FILEPATH=

for C in `ls $CONFIGPATH/*yaml`;do
    echo "找到配置文件:"$C
    FILEPATH=$FILEPATH$C:
done

export KUBECONFIG=$FILEPATH

kubectl config view --raw > $HOME/.kube/config

unset KUBECONFIG
  • 添加集群就只需要把集群的config文件保存到$HOME/.kube/configs下,名字为xxx.yaml,然后执行脚本,删除同理只需要将该集群的yaml文件从$HOME/.kube/configs中移除在执行脚本

  • 该方案有个问题就是如果集群中所有的名字一样就无法区分,随意随后开发了一个脚本使用链接kubeconfig到~/config来切换,参考https://github.com/NatureLR/kubectl-cc