当您使用minikube时,它会自动创建本地配置,因此可以使用了。似乎基于对kubectl config的引用,kubectl命令中支持多个集群。
在用于建立集群的文档中,有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创建的)。
如果我希望能够使用kubectl调用多个集群的命令,是否应该将相关的配置文件下载到新位置(例如,下载到~/gcloud/config
中,设置KUBECONFIG
环境变量以引用这两个位置?
还是在调用kubectl为集群指定配置时仅显式使用--kubeconfig
选项更好?
我不确定是否有某种合并配置文件的方法会更好,并利用kubectl config set-context
或kubectl config set-cluster
命令代替。 Kubernetes上有关Configure Access to Multiple Clusters"的文档似乎暗示着使用--kubeconfig
和这些kubectl config
命令的另一种方式。
简而言之,与多个单独的kubernetes集群进行交互的最佳方法是什么?权衡是什么?
最佳答案
这可能取决于您发现的更简单,更方便的方法,以及是否需要考虑安全性和访问管理方面的问题。
kubeconfig
文件对于多集群操作非常有用,以便执行维护任务以及对一组集群(上下文和 namespace )进行事件管理,从而简化了基于比较配置, list 的故障排除问题。 ,K8s服务的资源和状态,容器,卷, namespace ,rs等。kubeconfig
文件可能是个好主意。混合方法可以根据服务层的分类来合并kubeconfig
文件->使用文件为团队->企业中的角色和职责(团队A ,teamB,…,teamN)也可以在其他很好的选择中理解。 kubeconfig
文件方案,请考虑kubectx + kubens,这是kubectlt
的非常强大的工具,可让您查看当前上下文(群集)和 namespace ,并可以在它们之间进行切换。 kubeconfig
文件似乎更简单,即使将其与~/.kube/config
合并以供kubectl
默认使用,并且仅在带有--context kubectl
标志的集群/命名空间之间切换也是如此。另一方面,如果必须限制kubeconfig
的范围,则将它们隔离并使用--kubeconfig=file1
听起来是最好的方法。 kubeconfig
文件(知道其优先级会有所帮助)。 很难维护,很少有默认情况。多种工具
为您提供访问凭证将为您提供新鲜的
使用的
kubeconfig
。虽然您可以将配置合并到一起~/.kube/config
,它是手动的,可以使删除上下文更多困难(必须显式删除上下文,集群和
用户)。 Kubernetes中有一个打开的issue对此进行跟踪。但是通过
保持每个提供的配置文件独立,并仅加载所有
它们,删除要容易得多(只需删除文件)。对我来说
似乎是一种更易于管理的方法。
如果您使用的是
kubectl
,则这是在使用哪个 kubeconfig 文件时生效的首选项。--kubeconfig
标志KUBECONFIG
环境变量(如果已指定$HOME/.kube/config
文件这样,您可以轻松覆盖每个
kubectl
命令使用的 kubeconfig 文件:#
# 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
标志允许我们保留未编辑的凭据。奖励(加分!)
一次使用多个kubeconfig
您可以将AKS(Azure容器服务)或AWS EKS(K8的弹性容器服务)或GKE(Google容器引擎)群集上下文保存到单独的文件中,并设置
KUBECONFIG
env var引用这两个文件位置。例如,当您通过
gcloud
命令创建GKE集群(或检索其凭据)时,通常会修改您的默认~/.kube/config
文件。但是,您可以将$KUBECONFIG
设置为gcloud
以将群集凭据保存到文件中:KUBECONFIG=c1.yaml gcloud container clusters get-credentials "cluster-1"
然后,就像我们前面提到的一样,一次使用多个
kubeconfigs
对于同时处理多个上下文可能非常有用。为此,您需要一个“合并的” kubeconfig 文件。在下面的“合并kubeconfig文件”一节中,我们说明了如何将 kubeconfigs 合并到一个文件中,但也可以在内存中合并它们。
通过在
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文件
由于 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