From 2e02c04092daf5ca1f053c5af9e7d63df8bf2424 Mon Sep 17 00:00:00 2001 From: "huanqing.shao" Date: Fri, 11 Oct 2019 09:24:35 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=BD=AEkubectl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vuepress/config.js | 2 +- install/config-kubectl.md | 74 +++++++++++++++++++++++++++-- learning/k8s-advanced/ts/cluster.md | 2 +- 3 files changed, 73 insertions(+), 5 deletions(-) diff --git a/.vuepress/config.js b/.vuepress/config.js index 607b9ee..b41a9f1 100644 --- a/.vuepress/config.js +++ b/.vuepress/config.js @@ -201,7 +201,7 @@ module.exports = { collapsable: false, children: [ 'install-kubectl', - // 'config-kubectl', + 'config-kubectl', 'install-k8s-dashboard', 'install-dashboard', 'install-dashboard-upgrade' diff --git a/install/config-kubectl.md b/install/config-kubectl.md index 83660c3..724d031 100644 --- a/install/config-kubectl.md +++ b/install/config-kubectl.md @@ -28,8 +28,76 @@ meta: kubectl的版本号必须大于等于集群的版本号,执行命令 `kubectl version` 可查看 kubectl 版本 ::: -## 创建配置文件 +## KUBECONFIG环境变量 -## 创建第二个配置文件 +可以在 `KUBECONFIG` 环境变量中配置多个 kubeconfig 文件: +* 在 Linux 和 MAC 中,使用英文冒号 `:` 分隔 +* 在 Windows 中,使用英文分号 `;` 分隔 -## 设置KUBECONFIG环境变量 +当 `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` 命令,可以切换到另外一个 `上下文` diff --git a/learning/k8s-advanced/ts/cluster.md b/learning/k8s-advanced/ts/cluster.md index 5d6154a..5de791f 100644 --- a/learning/k8s-advanced/ts/cluster.md +++ b/learning/k8s-advanced/ts/cluster.md @@ -4,7 +4,7 @@ layout: LearningLayout description: Kubernetes教程_本文档可帮助您诊断部署到Kubernetes中的应用程序所出现的问题。如果仍然解决不了,请加本文末尾的QQ群答疑。 meta: - name: keywords - content: Kubernetes教程,K8S教程,诊断应用程序,问题诊断 + content: Kubernetes教程,K8S教程,集群故障,问题诊断 --- # 诊断集群问题