我有多个 kubernetes 集群,并希望确保在我kubectl apply进行部署时,我的目标是正确的集群。
我在根/.kube/config文件的上下文中配置了所有集群,但我不想依赖于在运行每个apply命令之前将当前上下文有状态地切换到正确的上下文。
即这并不令人满意
kubectl config use-context cluster-1-context
kubectl apply ./deploy-to-cluster-1.yml
kubectl config use-context cluster-2-context
kubectl apply ./deploy-to-cluster-2.yml
Run Code Online (Sandbox Code Playgroud)
我阅读了多个集群的配置文档,我能找到的唯一方法是将特定集群的配置复制/粘贴到自定义配置文件中,并使用命令中的--kubeconfig选项指定该文件apply。
kubectl apply ./deploy-to-cluster-1.yml --kubeconfig ./config-cluster-1
kubectl apply ./deploy-to-cluster-2.yml --kubeconfig ./config-cluster-2
Run Code Online (Sandbox Code Playgroud)
这行得通,但看起来真的很麻烦。
对于这样一个常见的需求,我希望只有一个简单的选项apply,或者甚至是部署中的一个字段yml,它允许您指定(或限制)部署到特定的上下文/集群名称,但我已经阅读通过大量相关文档并找不到任何此类选项。
有一个更好的方法吗?
kubectl采取一个--context选项:
kubectl --context cluster-1-context apply -f ./deploy-to-cluster-1.yml
Run Code Online (Sandbox Code Playgroud)
无法在资源 YAML 文件中指定或强制执行此操作;仍然有可能发生事故。
如果您有多个.kube/config文件,您还可以将环境变量设置$KUBECONFIG为指向其中之一。标准 Kubernetes SDK 可以理解这一点,因此几乎所有工具都应该支持它。
export KUBECONFIG=./cluster-1-config.yml
kubectly apply -f ./deploy-to-cluster-1.yml
Run Code Online (Sandbox Code Playgroud)
(考虑到选择,我更喜欢这种方法,因为环境变量是 shell 本地的,但kubectl config current-context会影响我所有打开的终端窗口。.kube/config不过,配置文件的标准工具往往默认为单个共享全局文件,并且将其分开可以有点棘手。)
好像有--context=...选择。
kubectl options
The following options can be passed to any command:
...
--context='': The name of the kubeconfig context to use
Run Code Online (Sandbox Code Playgroud)
至少在版本中 v1.18.6
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |