如何使用.conf文件中的集群信息配置kubectl?

Ass*_*lov 39 kubernetes kubectl

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

kubectl --kubeconfig ./admin.conf get nodes
Run Code Online (Sandbox Code Playgroud)

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

kubectl get nodes
Run Code Online (Sandbox Code Playgroud)

Gle*_*eeb 35

以下是有关如何配置kubectl的官方文档

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

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

  • 而不是覆盖.kube/config中已有的任何数据,你可以`导出KUBECONFIG = path/to/admin.conf` (20认同)
  • 有没有办法使用/加载多个配置文件并让它们显示在 `kubectl config get-contexts` 中,并且仍然允许使用 `kubectl config use-context <context-name>` 更改上下文? (2认同)
  • 确保配置文件名为 **config** 且没有扩展名。config.conf 或 config.yaml 不起作用 (2认同)

sta*_*eep 13

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

export KUBECONFIG=/path/to/admin.conf
Run Code Online (Sandbox Code Playgroud)

  • @AlexanderMills 一个文件可以处理多个上下文。 (2认同)

Exe*_*ero 12

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

配置kubeconfig文件知道其优先级

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

  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
Run Code Online (Sandbox Code Playgroud)

注意:--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
Run Code Online (Sandbox Code Playgroud)

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

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


Jef*_*ley 11

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

alias k8='kubectl'
alias k8prd='kubectl --kubeconfig ~/.kube/config_prd.conf'
Run Code Online (Sandbox Code Playgroud)

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


Mir*_*c21 6

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

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

export KUBECONFIG=.kubeconfig:$HOME/.kube/config
Run Code Online (Sandbox Code Playgroud)

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


SeM*_*eKh 5

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