# 配置Kubectl
参考文档: Kubernetes文档 Organizing Cluster Access Using kubeconfig Files (opens new window)、Configure Access to Multiple Clusters (opens new window)
kubectl
命令行工具从配置文件kubeconfig中查找用于调用 API Server 接口的信息:
- 集群 cluster
- 用户 user
- 名称空间 namespace
- 认证机制 authentication mechanism
kubeconfig 并不是一个文件的名字,而是 kubectl 配置文件的统称
默认情况下,kubectl
读取 $HOME/.kube/config
作为配置文件。您可以通过两种方式为 kubectl
指定配置文件:
- 环境变量
KUBECONFIG
- 命令行参数
--kubeconfig
可以在一个或多个kubeconfig文件中配置多个集群的访问信息,并使用 kubectl config use-context
命令切换要访问哪个集群。本文描述了如何配置 kubectl 以访问多个集群。
TIP
kubectl的版本号必须大于等于集群的版本号,执行命令 kubectl version
可查看 kubectl 版本
# KUBECONFIG环境变量
可以在 KUBECONFIG
环境变量中配置多个 kubeconfig 文件:
- 在 Linux 和 MAC 中,使用英文冒号
:
分隔 - 在 Windows 中,使用英文分号
;
分隔
当 KUBECONFIG
指定了多个 kubeconfig 文件时,kubectl会自动合并所有文件中的配置内容。您可以将每个集群的访问信息存储到一个文件中,并将该文件加入到 KUBECONFIG
环境变量中。
KUBECONFIG
环境变量并不是必须配置的,如果该环境变量不存在, kubectl 将使用默认位置的 kubeconfig 文件,即 $HOME/.kube/config
。
# kubeconfig文件的合并
前面提到,kubectl会自动合并 KUBECONFIG
指定的多个文件,执行以下指令,可以查看最终生效的结果:
kubectl config view
合并时的规则如下:
- 如果执行 kubectl 指令时,指定了
--kubeconfig
参数,则只使用该参数指定的 kubeconfig 文件,不会进行合并 - 否则,在指定了环境变量
KUBECONFIG
的情况下,该环境变量中的所有文件将被合并使用:- 对于不能正常解析的文件,提示错误信息
- 当执行
kubectl config use-context
指令后,在第一个文件中保存current-context
字段 - 合并过程忽略冲突。例如:如果多个文件中都定义了
red-user
,将只使用列表中第一个定义了red-user
的内容,所有后面定义的red-user
都将被忽略
- 如果既没指定
--kubeconfig
参数,又没指定KUBECONFIG
环境变量,则使用默认的配置文件$HOME/.kube/config
,此时也无需合并
# 切换当前访问的集群
当您通过 KUBECONFIG
环境变量指定了多个集群的访问配置文件时,执行 kubectl config view
指令,输出结果如下所示:
- 其中
contexts
字段包含了多个访问集群的上下文
,每个上下文指定了一个name
,并指定了该上下文
要访问的集群名称cluster
,集群中的名称空间namespace
,使用哪个用户去访问user
。 current-context
字段指定了当前生效的上下文
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: ramp
user: developer
name: dev-ramp-up
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: scratch
namespace: default
user: experimenter
name: exp-scratch
current-context: dev-frontend
kind: Config
users:
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
执行 kubectl config get-contexts
命令,可以查看可用的 上下文
列表,其中第一列带 *
的为当前使用的 上下文
,输出如下所示:
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
dev-frontend development developer frontend
* dev-ramp-up development developer ramp
dev-storage development developer storage
exp-scratch scratch experimenter default
2
3
4
5
执行 kubectl config use-context dev-storage
命令,可以切换到另外一个 上下文