106 lines
4.7 KiB
Markdown
106 lines
4.7 KiB
Markdown
---
|
||
vssueId: 115
|
||
description: Kubernete安装文档_kubectl命令行工具从一个配置文件中查找用于调用APIServer接口的信息_可以在一个或多个文件中配置多个集群的访问信息_并在kubectl中切换不同的集群访问
|
||
meta:
|
||
- name: keywords
|
||
content: kubectl,kubectl配置,kubectl访问多个集群
|
||
---
|
||
|
||
# 配置Kubectl
|
||
|
||
<AdSenseTitle/>
|
||
|
||
> 参考文档: Kubernetes文档 [Organizing Cluster Access Using kubeconfig Files](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)、[Configure Access to Multiple Clusters](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
|
||
|
||
`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` 指定的多个文件,执行以下指令,可以查看最终生效的结果:
|
||
|
||
``` sh
|
||
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` 字段指定了当前生效的 `上下文`
|
||
|
||
|
||
``` yaml {6,11,21,22}
|
||
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:
|
||
...
|
||
```
|
||
|
||
执行 `kubectl config get-contexts` 命令,可以查看可用的 `上下文` 列表,其中第一列带 `*` 的为当前使用的 `上下文`,输出如下所示:
|
||
|
||
``` {3}
|
||
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
|
||
```
|
||
|
||
执行 `kubectl config use-context dev-storage` 命令,可以切换到另外一个 `上下文`
|