本文最后更新于 373 天前,其中的信息可能已经有所发展或是发生改变
想要在一台终端控制多个k8s集群,会需要多个kubeconfig文件。kubectl命令会在默认路径 $HOME/.kube 下找 config 作为kubeconfig来访问Kubernetes集群,所以需要将多个文件合并到一个用来控制多个集群
合并
1、先备份现有的config文件
~/.kube cp ~/.kube/config ~/.kube/config.bak
2、设置kubeconfig环境变量
- 通过此环境变量来指定多个kubeconfig,如下:(确保
clusters
,contexts
, 和users
部分没有内容重复)
export KUBECONFIG=~/.kube/ack-prod-config:~/.kube/ack-test-config
# 如果当前目录有多个kubeconfig文件,可以用如下命令快速设置:
export KUBECONFIG=~/.kube/config:$(find . -type f | tr '\n' ':')
3、通过kbuectl命令合并多个kubeconfig到一个文件
kubectl config view --flatten > all-config
# 将合并后的文件重命名为config
mv all-config ~/.kube/config
4、验证
kubectl config get-contexts
- 切换集群
一个完整的配置文件包含这些
clusters 集群
contexts 上下文
users 用户
❯ kubectl config use-context kubernetes-admin@kubernetes
Switched to context “kubernetes-admin@kubernetes”.
切换集群
- 把kubecluster设置可执行,并且放在/usr/bin下面
chmod +x kubecluster
mv kubecluster /usr/local/bin
#!/bin/bash
# 函数:显示当前集群
function show_current_cluster {
current_context=$(kubectl config current-context)
echo "当前集群: $current_context"
}
# 函数:列出所有集群并赋予数字编号
function list_clusters {
echo "可切换的Kubernetes集群:"
kubectl config get-contexts --no-headers | awk '$1 != "*" {print NR ")\t" $1 "\t" $3}'
}
# 显示当前集群
show_current_cluster
# 显示所有可用集群
list_clusters
# 提示用户输入
echo "输入您想要切换到的集群的编号,或"no"退出:"
read input
# 检查用户输入是否为 'no'
if [ "$input" = "no" ]; then
echo "退出脚本"
exit 0
fi
# 获取用户选择的集群名称
context=$(kubectl config get-contexts --no-headers | awk -v row=$input 'NR==row {print $1}')
# 检查是否得到有效的集群名称
if [ -z "$context" ]; then
echo "选择无效"
exit 1
fi
# 切换到用户选择的集群
if kubectl config use-context "$context"; then
echo "成功切换到上下文: $context"
else
echo "无法切换到上下文: $context"
fi