Kubernetes:在apply命令中指定集群上下文
我有多个kubernetes集群,并希望确保当我Kubernetes:在apply命令中指定集群上下文,kubernetes,config,Kubernetes,Config,我有多个kubernetes集群,并希望确保当我kubectl应用部署时,我的目标是正确的集群 我在根/.kube/config文件的上下文中配置了所有集群,但我不想依赖于在运行每个apply命令之前将当前上下文有状态地切换到正确的上下文 kubectl apply ./deploy-to-cluster-1.yml --kubeconfig ./config-cluster-1 kubectl apply ./deploy-to-cluster-2.yml --kubeconfig ./con
kubectl应用部署时,我的目标是正确的集群
我在根/.kube/config
文件的上下文中配置了所有集群,但我不想依赖于在运行每个apply
命令之前将当前上下文有状态地切换到正确的上下文
kubectl apply ./deploy-to-cluster-1.yml --kubeconfig ./config-cluster-1
kubectl apply ./deploy-to-cluster-2.yml --kubeconfig ./config-cluster-2
i、 这是不令人满意的
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
我在上阅读了文档,我能找到的唯一方法是将特定集群的配置复制/粘贴到自定义配置文件中,并使用apply
命令上的--kubeconfig
选项指定该配置
kubectl apply ./deploy-to-cluster-1.yml --kubeconfig ./config-cluster-1
kubectl apply ./deploy-to-cluster-2.yml --kubeconfig ./config-cluster-2
这是可行的,但看起来确实很麻烦
对于这种常见的需求,我希望在apply
上有一个简单的选项,或者甚至在部署yml
中有一个字段,允许您指定(或限制)部署到特定的上下文/集群名称,但我已经阅读了大量相关文档,找不到任何这样的选项
有更好的方法吗?
有更好的方法吗
您可以使用该工具以比kubectl更容易的方式在上下文之间来回切换
USAGE:
kubectx : list the contexts
kubectx <NAME> : switch to context <NAME>
kubectx - : switch to the previous context
kubectx -c, --current : show the current context name
kubectx <NEW_NAME>=<NAME> : rename context <NAME> to <NEW_NAME>
kubectx <NEW_NAME>=. : rename current-context to <NEW_NAME>
kubectx -d <NAME> : delete context <NAME> ('.' for current-context)
(this command won't delete the user/cluster entry
that is used by the context)
kubectx -u, --unset : unset the current context
$ kubectx minikube
Switched to context "minikube".
$ kubectx -
Switched to context "oregon".
$ kubectx -
Switched to context "minikube".
$ kubectx dublin=gke_ahmetb_europe-west1-b_dublin
Context "dublin" set.
Aliased "gke_ahmetb_europe-west1-b_dublin" as "dublin".
用法:
列出上下文
kubectx:切换到上下文
kubectx-:切换到上一个上下文
kubectx-c,--current:显示当前上下文名称
kubectx=:将上下文重命名为
kubectx=:将当前上下文重命名为
kubectx-d:删除上下文('.'表示当前上下文)
(此命令不会删除用户/群集条目
(由上下文使用)
kubectx-u,--unset:取消设置当前上下文
$kubectx minikube
切换到上下文“minikube”。
$kubectx-
切换到上下文“俄勒冈州”。
$kubectx-
切换到上下文“minikube”。
$kubectx dublin=gke_ahmetb_europe-west1-b_dublin
上下文“都柏林”集。
别名“gke_ahmetb_europe-west1-b_dublin”为“dublin”。
正如今天所强调的,没有办法将上下文指定为部署yaml的一部分。您可以在kubernetes GitHub repo中为此提交功能请求。似乎有--context=…
选项
kubectl options
The following options can be passed to any command:
...
--context='': The name of the kubeconfig context to use
至少在版本v1.18.6
中采用了--context
选项:
kubectl--context cluster-1-context apply-f./deploy-to-cluster-1.yml
无法在资源YAML文件中指定或强制执行此操作;仍然有可能发生事故
如果您有多个.kube/config
文件,也可以指向其中一个。标准Kubernetes SDK可以理解这一点,因此几乎所有工具都应该支持它
export KUBECONFIG=。/cluster-1-config.yml
kubectly apply-f./deploy-to-cluster-1.yml
(考虑到选择,我更喜欢这种方法,因为环境变量是shell本地变量,但kubectl config current context
将影响我所有打开的终端窗口。配置.kube/config
文件的标准工具倾向于默认为单个共享全局文件,不过,将其分开可能有点困难。)谢谢,很高兴了解kubectx
,但是kubectl config use context
的语法不是问题,而是它的状态特性。我需要在apply
命令中内联定义的上下文-它需要是原子的。