代码之家  ›  专栏  ›  技术社区  ›  heckj

如何配置kubectl与minikube和已部署的集群进行交互?

  •  7
  • heckj  · 技术社区  · 7 年前

    当您使用minikube时,它会自动创建本地配置,因此可以随时使用。而且,根据对的参考,kubectl命令中似乎支持多个集群 kubectl config .

    在设置集群的文档中 a reference to copying the relevant files to your local machine SO Q&A about editing your .kube/config to leverage azure remotely 这涉及到编辑kube/config文件。

    看起来像是环境变量 $KUBECONFIG ~/.kube/config (这是minikube创造的)。

    ~/gcloud/config KUBECONFIG 引用两个位置的环境变量?

    --kubeconfig

    我不确定是否有更好的方法来合并配置文件,并利用 kubectl config set-context kubectl config set-cluster 而不是命令。Kubernetes的文件“ Configure Access to Multiple Clusters" 似乎意味着使用不同的方法 --库贝Config 还有这些 kubectl config 命令。

    简言之,与多个独立的库伯内特集群交互的最佳方式是什么?权衡是什么?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Exequiel Barrirero    5 年前

    kubectl 调用多个命令 集群,我应该下载相关的配置文件到一个新的 位置(例如进入 ~/gcloud/config KUBECONFIG

    或者在以下情况下显式使用--kubeconfig选项更好吗 调用kubectl来指定集群的配置?

    这可能取决于您认为更简单、更方便的方法,以及是否需要考虑安全和访问管理问题。

    • 根据我们的经验,融合了各种 kubeconfig 文件对于多集群操作非常有用,以便在一组集群(上下文和命名空间)上执行维护任务和事件管理,简化故障排除问题,基于比较K8s服务、POD、卷、命名空间、rs等的配置、清单、资源和状态的可能性。

    • 然而,当涉及自动化和部署(使用Jenkins、Spinnaker或Helm等工具)时,很可能需要单独的 库贝Config 文件可能是个好主意。可以合并混合方法 基于除法的文件 服务层 -&燃气轮机;使用文件划分开发环境(dev、qa、stg、prod)集群或 对于团队 -&燃气轮机;企业(teamA、teamB、teamN)中的角色和责任也可以在良好的备选方案中理解。

    • 对于多群集合并 考虑的文件场景 kubectx kubens ,这是非常强大的工具 kubectlt 这让您可以看到当前的上下文(集群)和命名空间,同样可以在它们之间切换。

    简言之,与多个独立用户交互的最佳方式是什么

    • 考虑到项目中最重要的因素,可能应该分析权衡。有一个合并的 文件似乎更简单,即使将其与 ~/.kube/config 默认情况下使用 --context kubectl 旗帜另一方面,如果限制 库贝Config 必须将其隔离并使用 --kubeconfig=file1

    • 对于每种情况和场景,可能都没有最好的方法,知道如何配置 库贝Config 不过,了解其优先级将有所帮助。

    • 在本文中-> https://www.nrmitchi.com/2019/01/managing-kubeconfig-files/ 你会发现一个互补且有价值的观点:

      • 为您提供访问凭据将提供新的 使用。而您可以将配置合并到 困难(必须明确删除上下文、集群和 issue 在Kubernetes追踪这一点。然而 将每个提供的配置文件分开,只需加载所有 对于它们,删除要容易得多(只需删除文件)。对我来说,这个 似乎是一种更易于管理的方法。

      • 我更喜欢将所有单独的配置文件保存在~/下。通过利用$KUBECONFIG环境变量选项的多路径特性,我们可以实现这一点。

    如果您正在使用 库贝克特 ,这是在确定 文件已使用。

    1. 使用 --kubeconfig
    2. 使用 库贝Config 环境变量(如果指定)
    3. $HOME/.kube/config

    有了它,您可以轻松地覆盖 根据使用的文件 库贝克特

    #
    # using --kubeconfig flag
    #
    kubectl get pods --kubeconfig=file1
    kubectl get pods --kubeconfig=file2
    
    #
    # or 
    # using `KUBECONFIG` environment variable
    #
    KUBECONFIG=file1 kubectl get pods
    KUBECONFIG=file2 kubectl get pods
    
    #
    # or 
    # merging your kubeconfig file w/ $HOME/.kube/config (w/ cp backup)
    #
    cp $HOME/.kube/config $HOME/.kube/config.backup.$(date +%Y-%m-%d.%H:%M:%S)
    KUBECONFIG= $HOME/.kube/config:file2:file3 kubectl config view --merge --flatten > \
    ~/.kube/merged_kubeconfig && mv ~/.kube/merged_kubeconfig ~/.kube/config
    kubectl get pods --context=cluster-1
    kubectl get pods --context=cluster-2
    

    这个 --minify 标志只允许我们提取有关该上下文的信息,并且 --flatten 标志允许我们保持凭据未经修改。


    您可以保存AKS(Azure容器服务)、AWS EKS(K8s的弹性容器服务)或GKE(谷歌容器引擎)群集上下文以分离文件并设置 env var引用两个文件位置。

    gcloud 命令,它通常会修改默认值 ~/.库贝/配置 文件但是,您可以设置 $KUBECONFIG G云 要将群集凭据保存到文件,请执行以下操作:

    KUBECONFIG=c1.yaml gcloud container clusters get-credentials "cluster-1"
    

    正如我们之前提到的 使用多个 kubeconfigs 同时处理多个上下文非常有用。

    为此,您需要一个合并的 库贝Config 文件在本节中 “合并kubeconfig文件” 到单个文件中,但您也可以将其合并 内存中 .

    通过在中指定多个文件 环境变量,可以临时缝合 库贝克特

    #
    # Kubeconfig in-memory merge
    #
    export KUBECONFIG=file1:file2
    kubectl get pods --context=cluster-1
    kubectl get pods --context=cluster-2
    
    #
    # For your example
    # merging your kubeconfig file w/ $HOME/.kube/config (w/ cp backup)
    #
    cp $HOME/.kube/config $HOME/.kube/config.backup.$(date +%Y-%m-%d.%H:%M:%S)
    KUBECONFIG= $HOME/.kube/config:file2: kubectl config view --merge --flatten > \
    ~/.kube/merged_kubeconfig && mv ~/.kube/merged_kubeconfig ~/.kube/config
    kubectl get pods --context=cluster-1
    kubectl get pods --context=cluster-2
    

    合并kubeconfig文件

    自从 库贝Config 文件,但是 可以帮助您合并这些文件:

    #
    # Merging your kubeconfig file w/ $HOME/.kube/config (w/ cp backup)
    #
    cp $HOME/.kube/config $HOME/.kube/config.backup.$(date +%Y-%m-%d.%H:%M:%S)
    KUBECONFIG=$HOME/.kube/config:file2:file3 kubectl config view --merge --flatten > \
    ~/.kube/merged_kubeconfig && mv ~/.kube/merged_kubeconfig ~/.kube/config
    kubectl get pods --context=cluster-1
    kubectl get pods --context=cluster-2
    
        2
  •  1
  •   mdaniel    7 年前

    我有一系列shell函数,可以归结为 kubectl --context=$CTX --namespace=$NS ,使我能够对每个shell[1]进行上下文分析。但如果你对这种方法很冷静,那么就不要自己动手, https://github.com/Comcast/k8sh 你可能会感兴趣。我只希望它是shell函数而不是子shell

    ~/.kube/config

    脚注1: 如果您还不知道,还可以通过以下方式更改终端窗口的标题: title() { printf '\033]0;%s\007' "$*"; }