Kubernetes:在应用命令中指定集群上下文

dav*_*wil 2 config kubernetes

我有多个 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,它允许您指定(或限制)部署到特定的上下文/集群名称,但我已经阅读通过大量相关文档并找不到任何此类选项。

有一个更好的方法吗?

Dav*_*aze 9

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不过,配置文件的标准工具往往默认为单个共享全局文件,并且将其分开可以有点棘手。)


rko*_*egi 6

好像有--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