kubernetes - 如何使用 kubectl 工具(以有状态/本地方式)同时管理来自不同目录的多个集群?
问题描述
有没有办法可以在“会话”中运行 kubectl,以便它从本地目录而不是从本地目录获取 kubeconfig ~/.kubeconfig
?
示例用例
鉴于问题的抽象性质,值得描述为什么这在示例中可能很有价值。如果有人有一个应用程序,称之为“a”,并且他们有 4 个 kubernetes 集群,每个集群都运行 a,他们可能有一个简单的脚本,该脚本kubectl
在每个集群中执行一些操作来冒烟测试 A 的新部署,例如,他们可能想要部署该应用程序,并查看之后在每个集群中自动扩展了多少个它的副本。
示例解决方案
就像在 git 中一样,也许可以将“如果你能找到一个本地 kubeconfig 文件”作为 git 风格的全局设置:
kubectl global set-precedence local-kubectl
然后,在一个终端中:
cd firstcluster
cat << EOF > kubeconfig
firstcluster
...
EOF
kubectl get pods
p4
然后,在另一个终端:
cd secondcluster/
cat << EOF > kubeconfig
secondcluster
...
EOF
kubectl get pods
p1
p2
p3
因此,完全相同的 kubectl 命令(无需设置上下文)实际上针对新集群运行,具体取决于您所在的目录。
解决方案的一些想法
我对此的一个想法是编写一个 kubectl-context 插件,它以某种方式使 kubectl 总是检查本地 kubeconfig,如果可以的话,在运行之前将上下文设置为全局配置中与目录名称匹配的上下文。
我的另一个想法是创建不同的用户,每个用户都有不同的 kubeconfig 主文件。
当然,使用 virtualenv 之类的东西,你也许可以做一些 kubeconfig 文件有自己不同价值的事情。
最后的想法
最终,我认为这里的目标是颠覆 ~/.kubeconfig 文件具有任何特定含义的想法,而是着眼于在同一台机器上可以使用许多 kubeconfig 文件的方式,但是,不仅仅是使用--kubeconfig
选项,而是,这样状态仍然以目录本地方式维护。
解决方案
AFAIK,配置文件位于~/.kube/config
而不是~/.kubeconfig
. 我想您正在查看对您的答案的意见,所以您给了我一个很棒的想法,关于创建,受AWS CLIkubevm
的启发,awsvm
用于管理多个 Chef 服务器和管理多个 Ruby 版本。chefvm
rvm
所以,本质上,你可以有一个kubevm
在不同配置之间切换的~/.kube
设置。您可以像这样使用 CLI:
# Use a specific config
kubevm use {YOUR_KUBE_CONFIG|default}
# or
kubevm YOUR_KUBE_CONFIG
# Set your default config
kubevm default YOUR_KUBE_CONFIG
# List your configurations, including current and default
kubevm list
# Create a new config
kubevm create YOUR_KUBE_CONFIG
# Delete a config
kubevm delete YOUR_KUBE_CONFIG
# Copy a config
kubevm copy SRC_CONFIG DEST_CONFIG
# Rename a config
kubevm rename OLD_CONFIG NEW_CONFIG
# Open a config directory in $EDITOR
kubevm edit YOUR_KUBE_CONFIG
# Update kubevm to the latest
kubevm update
让我知道它是否有用!
推荐阅读
- reactjs - mobx 发生变化时如何调用子组件的暴露方法?
- python - 如何跨数据框的列使用 pd.cut()?
- hibernate - 使用 JPA 方法通过单个查询插入多条记录
- vba - VBa清除Word文档中的所有activex复选框
- c - 为什么 clang 无法展开循环(即 gcc 展开)?
- angular - 无法以角度循环遍历对象的对象
- python - 通过套接字从 C++ 服务器向 Python 客户端发送数据时出现问题
- shell - 使用 sed 在一行中的其他单词和数字之间交换单词
- c# - 我可以将语言列表链接到单选按钮吗?
- php - 从open api导入数据并使用与mysql循环相结合的循环