当前位置: 首页 > 知识库问答 >
问题:

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

巫马瀚漠
2023-03-14

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

环境变量$kubeconfig似乎可以引用这些配置文件的多个位置,内置默认值为~/.kube/config(这是minikube创建的)。

如果我希望能够使用kubectl调用多个集群的命令,我是否应该将相关的配置文件下载到一个新的位置(例如,下载到~/gcloud/config,将kubeconfig环境变量设置为引用这两个位置?

还是在调用kubectl为集群指定配置时只显式使用--KubECONFIG选项更好?

我不确定是否有更好的合并配置文件的方法,而是使用kubectl config set-contextkubectl config set-cluster命令。Kubernetes关于“Configure Access to Multiple clusters”的文档似乎暗示了使用--kubeconfig以及这些kubectl config命令的不同方法。

简而言之,与多个单独的kubernetes集群交互的最佳方式是什么?

共有1个答案

田鹤轩
2023-03-14

如果我希望能够使用kubectl对多个集群调用命令,我是否应该将相关的配置文件下载到一个新的位置(例如在~/gcloud/config中,设置kubeconfig环境变量以引用这两个位置?

还是在调用kubectl为集群指定配置时,只显式地使用--kubeconfig选项更好?

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

>

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

    但是,当涉及自动化和部署(使用Jenkins、Spinnaker或Helm等工具)时,使用单独的kubeconfig文件可能是个好主意。混合方法可以根据服务层的划分合并kubeconfig文件->使用文件划分开发环境(dev、qa、stg、prod)集群或团队->企业中的角色和职责(teamA、teamB、…、teamN)也可以在良好的替代方案中理解。

    对于多集群合并的kubeconfig文件场景,请考虑kubectx+kubens,这是用于kubectlt的非常强大的工具,允许您查看当前上下文(集群)和名称空间,并在它们之间进行切换。

    简而言之,与多个单独的kubernetes集群交互的最佳方式是什么?

    >

  • 应该考虑项目最重要的因素来分析权衡。拥有一个合并的kubeconfig文件似乎更简单,如果您将其与~/.kube/config合并(默认情况下由kubectl使用),并且只需使用--context kubectl标志在集群/命名空间之间切换,就会更简单。另一方面,如果必须限制kubeconfig的范围,那么将它们隔离并使用--kubeconfig=file1听起来是最好的方法。

    可能并不是每种情况和场景都有最佳的方法,了解如何配置kubeconfig文件知道它的优先级会有所帮助。

    在本文->https://www.nrmitchi.com/2019/01/managing-kubeconfig-files/中,您将找到一个补充的宝贵意见:

    >

  • 在一个文件中包含您可能需要的所有上下文是很好的,但维护起来很困难,而且很少出现默认情况。为您提供访问凭据的多个工具将提供一个新的kubeconfig以供使用。虽然您可以将配置合并到~/.kube/config中,但这是手动的,并且使得删除上下文变得更加困难(必须显式删除上下文、集群和用户)。在Kubernetes的追踪中有一个未解决的问题。但是,通过将每个提供的配置文件分开,并加载所有配置文件,删除就容易多了(只需删除文件)。对我来说,这似乎是一个更容易管理的方法。

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

    如果您正在使用kubectl,下面是在确定使用哪个kubeconfig文件时生效的首选项。

    1. 如果指定,请使用--Kubeconfig标志
    2. 如果指定,请使用kubeconfig环境变量
    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 Container Service)或AWS EKS(Rastic Container Service for K8s)或GKE(Google Container Engine)集群上下文以分离文件,并将kubeconfigenv var设置为引用两个文件位置。

    例如,当您通过gcloud命令创建GKE集群(或检索其凭据)时,它通常会修改默认的~/.kube/config文件。但是,您可以为GCloud设置$KUBECONFIG以将群集凭据保存到文件:

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

    然后,正如我们前面提到的,一次使用多个kubeconfigs对于同时处理多个上下文非常有用。

    为此,您需要一个“合并”的kubeconfig文件。在下面的“合并kubeconfig文件”一节中,我们解释了如何将kubeconfig合并到单个文件中,但也可以在内存中合并它们。

    通过在kubeconfig环境变量中指定多个文件,可以临时将kubeconfig文件缝合在一起,并在kubectl中全部使用。

    #
    # 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文件是结构化的YAML文件,您不能仅仅追加它们来获得一个大的kubeconfig文件,但是Kubectl可以帮助您合并这些文件:

    #
    # 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
    
    • 参考文章1:https://ahmet.im/blog/mastering-kubeconfig/
    • 参考文章2:https://github.com/kubernetes/kubernetes/issues/46381

  •  类似资料:
    • 我正在研究Flink 1.9.1的docker/k8s部署可能性。 我看完了[1][2][3][4]。 目前,我们确实认为,我们将尝试采用工作集群方法,尽管我们想知道社区的这一趋势是什么?我们不希望每个Flink集群部署多个作业。 不管怎样,我想知道一些事情: > 在这两种情况下,Flink的UI都显示每个任务管理器有4个CPU。 如果使用作业群集,如何重新提交作业。我指的是这个用例。你可能会说我

    • 我有Kubernetes在两种不同的环境中工作良好,即在我的本地环境(运行minikube的MacBook)和谷歌的容器引擎(GCE,谷歌云上的Kubernetes)。我使用MacBook/local环境开发和测试我的YAML文件,完成后,在GCE上试用。 目前,我需要单独处理每个环境:我需要在本地环境中编辑YAML文件,准备好后,(git)将它们克隆到GCE环境中,然后使用/部署它们。这是一个有

    • Kubernetes 集群架构 etcd 集群 从 https://discovery.etcd.io/new?size=3 获取 token 后,把 https://kubernetes.io/docs/admin/high-availability/etcd.yaml 放到每台机器的 /etc/kubernetes/manifests/etcd.yaml,并替换掉 ${DISCOVERY_TO

    • 请确保您已经获取了有效的证书文件。HAproxy所需证书文件格式比较特殊,要求为pem格式,且同时包含证书和与之匹配的私钥,可使用以下命令使之合并: ``` cat demo.crt demo.key > demo.pem ``` 修改 HAproxy 配置文件 配置示例:/etc/haproxy/haproxy.cfg (假设用于健康状态检测的端口为12345) global log 1

    • 本章介绍 kubectl 的安装方法。 OSX 可以使用 Homebrew 或者 curl 下载 kubectl: brew install kubectl 或者 curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes