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

时间:2016-11-06 08:18:23

标签: kubernetes kubectl

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

kubectl --kubeconfig ./admin.conf get nodes

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

kubectl get nodes

8 个答案:

答案 0 :(得分:26)

以下是有关如何配置kubectl

的官方文档

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

您有几个选项,特别是针对此问题,您只需将admin.conf复制到~/.kube/config

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:4)

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

export KUBECONFIG=/path/to/admin.conf

答案 3 :(得分:2)

kubectl使用~/.kube/config作为默认配置文件。因此,您可以将admin.conf复制一遍。

答案 4 :(得分:2)

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

然后在.bashrc.bash_profile中,我进行以下导出:

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

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

答案 5 :(得分:1)

  

在回答非常扎实和有益的内容之前,我将尝试添加   我的2分钱在这里

配置kubeconfig文件以了解其优先级

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

  1. 使用--kubeconfig标志(如果已指定)
  2. 使用KUBECONFIG环境变量(如果已指定)
  3. 使用$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标志则允许我们保留未编辑的凭据。

以您为例

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

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

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

答案 6 :(得分:1)

因为目前没有内置的 kubectl config merge 命令(按照 this),您可以将此函数添加到您的 .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 函数基于此 post 处的 @MichaelSp 回答)。

答案 7 :(得分:0)

Kubernetes 在 $KUBECONFIG 中保留搜索配置文件的路径

如果您想在现有 KUBECONFIG 之上添加 one more config path 而不会覆盖它(并保持 ~/.kube/config 作为默认搜索路径)。

每次要在 KUBECONFIG 路径中添加 conf 文件时只需运行以下代码

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

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

kubectl config get-contexts

然后选择你要使用的

kubectl config use-context <context-name>