【问题标题】:Kubernetes: specify cluster context in apply commandKubernetes:在应用命令中指定集群上下文
【发布时间】:2020-08-26 21:49:45
【问题描述】:

我有多个 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

我阅读了config for multiple clusters 上的文档,我能找到的唯一方法是将特定集群的配置复制/粘贴到自定义配置文件中,并使用--kubeconfig 上的--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 中的一个字段,它可以让您指定(或限制)部署到特定上下文/cluster name,但我已经阅读了很多相关文档,但找不到任何此类选项。

有更好的方法吗?

【问题讨论】:

    标签: kubernetes config


    【解决方案1】:

    好像有--context=... 选项。

    kubectl options
    
    The following options can be passed to any command:
    ...
          --context='': The name of the kubeconfig context to use
    

    至少在v1.18.6版本中

    【讨论】:

      【解决方案2】:

      kubectl 采用 --context 选项:

      kubectl --context cluster-1-context apply -f ./deploy-to-cluster-1.yml
      

      无法在资源 YAML 文件中指定或强制执行此操作;还是有可能发生事故的。

      如果您有多个.kube/config 文件,您也可以set the $KUBECONFIG environment variable 指向其中一个。标准的 Kubernetes SDK 都理解这一点,因此几乎所有工具都应该支持它。

      export KUBECONFIG=./cluster-1-config.yml
      kubectly apply -f ./deploy-to-cluster-1.yml
      

      (如果选择我更喜欢这种方法,因为环境变量是 shell-local 但kubectl config current-context 会影响我所有打开的终端窗口。配置.kube/config 文件的标准工具往往默认为单个共享全局但是,将其分开可能有点棘手。)

      【讨论】:

        【解决方案3】:

        有没有更好的方法来做到这一点?

        您可以使用kubectx 工具以比 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".
        

        正如今天所指出的那样,无法将上下文指定为部署 yaml 的一部分。您可以为此在 kubernetes GitHub 存储库中提交功能请求。

        【讨论】:

        • 谢谢,很高兴了解kubectx,但kubectl config use-context 的语法不是问题,而是它的状态性质。我需要在 apply 命令中内联定义的上下文 - 它必须是原子的。
        猜你喜欢
        • 1970-01-01
        • 2019-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        • 2021-01-02
        • 1970-01-01
        相关资源
        最近更新 更多