67

我有一个 admin.conf 文件,其中包含有关集群的信息,因此以下命令可以正常工作:

kubectl --kubeconfig ./admin.conf get nodes

我如何configkubectl 在一个命令中将此文件中的集群、用户和身份验证作为默认值使用?我只看到单独的 set-cluster、set-credentials、set-context、use-context 等。我想在简单运行时获得相同的输出:

kubectl get nodes
4

9 回答 9

55

这里是关于如何配置 kubectl 的官方文档

http://kubernetes.io/docs/user-guide/kubeconfig-file/

你有几个选项,特别是这个问题,你可以复制你admin.conf~/.kube/config

于 2016-11-06T11:24:05.863 回答
34

我发现最好的方法是使用环境变量:

export KUBECONFIG=/path/to/admin.conf
于 2019-01-07T15:45:44.540 回答
30

我只是通过 .bashrc 将 kubectl 命令别名为我的开发和生产环境的单独命令

alias k8='kubectl'
alias k8prd='kubectl --kubeconfig ~/.kube/config_prd.conf'

我更喜欢这种方法,因为它需要我为每个命令定义环境。而使用环境变量可能会导致您在错误的环境中运行命令

于 2019-02-07T16:43:12.817 回答
17

在答案非常可靠和信息丰富之前,我将尝试在此处添加我的 2 美分

配置kubeconfig文件知道其优先级

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

  1. 使用--kubeconfig标志,如果指定
  2. 使用KUBECONFIG环境变量,如果指定
  3. 使用$HOME/.kube/config文件

有了这个,您可以轻松地覆盖您根据命令使用的kubeconfig文件kubectl

#
# 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标志允许我们保持凭据未编辑。

对于你的例子

kubectl get pods --kubeconfig=/path/to/admin.conf

#
# or:
#
KUBECONFIG=/path/to/admin.conf kubectl get pods

#
# or: 
#
cp $HOME/.kube/config $HOME/.kube/config.backup.$(date)
KUBECONFIG= $HOME/.kube/config:/path/to/admin.conf 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

尽管此优先级列表未在文档中正式指定,但在此处进行了编纂。如果您正在为 Kubernetes 开发客户端工具,您应该考虑使用cli-runtime库,它将为您的程序带来标准--kubeconfig标志和$KUBECONFIG检测。

参考文章: https ://ahmet.im/blog/mastering-kubeconfig/

于 2019-08-13T13:12:05.667 回答
8

kubectl用作~/.kube/config默认配置文件。所以你可以把你的复制admin.conf过来。

于 2016-11-06T11:07:43.110 回答
6

我将所有集群配置命名为.kubeconfig,它位于项目目录中。

然后在.bashrc.bash_profile我有以下出口:

export KUBECONFIG=.kubeconfig:$HOME/.kube/config

这样,当我在项目目录中时,kubectl将加载 local .kubeconfig. 希望有帮助

于 2019-06-10T21:12:41.343 回答
1

因为目前没有内置kubectl config merge命令(按照),您可以将此功能添加到您的.bashrc(或.zshrc):

function kmerge() {
  if [ $# -eq 0 ]
   then
     echo "Please pass the location of the kubeconfig you wish to merge"
  fi
  KUBECONFIG=~/.kube/config:$1 kubectl config view --flatten > ~/.kube/mergedkub && mv ~/.kube/mergedkub ~/.kube/config
}

然后你可以从终端运行

kmerge /path/to/admin.conf

并且配置文件将被合并到~/.kube/config.

您现在可以使用以下命令切换到新上下文:

kubectl config use-context <new-context-name>

或者,如果您使用的是kubectx(推荐),您可以运行:kubectx <new-context-name>.


(该kmerge功能基于@MichaelSp 在这篇文章中的回答)。

于 2021-01-20T08:46:45.547 回答
0

Kubernetes 将搜索配置文件的路径保存在$KUBECONFIG

如果您想在现有的 KUBECONFIG 之上再添加一个配置路径~/.kube/config而不覆盖它(并保留作为搜索的默认路径)。

每次你想向 KUBECONFIG 路径添加 conf 文件时,只需运行以下命令

export KUBECONFIG=${KUBECONFIG:-~/.kube/config}:/path/to/admin.conf

您可以通过列出可用的上下文来检查它是否有效

kubectl config get-contexts

然后选择你要使用的

kubectl config use-context <context-name>
于 2021-03-30T11:09:21.600 回答
0

正确管理您的配置文件,将其放在您的配置文件中,获取 .profile / .bash_profile

for kconfig in $HOME/.kube/config $(find $HOME/.kube/ -iname "*.config")
do
         if [ -f "$kconfig" ];then
                 export KUBECONFIG=$KUBECONFIG:$kconfig
         fi
 done

从 kubectl 切换上下文

于 2022-01-04T00:50:15.683 回答