From 4c52949427ed423ef29c474e0380fc056fc0d3b1 Mon Sep 17 00:00:00 2001 From: huangminjie Date: Mon, 23 May 2022 21:04:48 +0800 Subject: [PATCH] [zh] sync v1.24 kubeadm-24 --- .../kubeadm/implementation-details.md | 32 +-- .../setup-tools/kubeadm/kubeadm-config.md | 64 ++--- .../setup-tools/kubeadm/kubeadm-init.md | 224 ++++++++++++++---- 3 files changed, 229 insertions(+), 91 deletions(-) diff --git a/content/zh/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/zh/docs/reference/setup-tools/kubeadm/implementation-details.md index e303eebfe1..b7bbfd8d04 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/implementation-details.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/implementation-details.md @@ -166,13 +166,8 @@ Kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并 - Kubernetes system requirements: - if running on linux: - [error] if Kernel is older than the minimum required version - - [error] if required cgroups subsystem aren't in set up - - if using docker: - - [warning/error] if Docker service does not exist, if it is disabled, if it is not active. - - [error] if Docker endpoint does not exist or does not work - - [warning] if docker version is not in the list of validated docker versions - - If using other cri engine: - - [error] if crictl socket does not answer + - [error] if required cgroups subsystem aren't set up +- [error] if the CRI endpoint does not answer --> - [警告] 如果要使用的 Kubernetes 版本(由 `--kubernetes-version` 标志指定)比 kubeadm CLI 版本至少高一个小版本。 @@ -180,12 +175,7 @@ Kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并 - 如果在 linux上运行: - [错误] 如果内核早于最低要求的版本 - [错误] 如果未设置所需的 cgroups 子系统 - - 如果使用 docker: - - [警告/错误] 如果 Docker 服务不存在、被禁用或未激活。 - - [错误] 如果 Docker 端点不存在或不起作用 - - [警告] 如果 docker 版本不在经过验证的 docker 版本列表中 - - 如果使用其他 cri 引擎: - - [错误] 如果 crictl 套接字未应答 +- [错误] 如果 CRI 端点未应答 -- 给节点打上 `node-role.kubernetes.io/master=""` 标签,标记其为控制平面 -- 给节点打上 `node-role.kubernetes.io/master:NoSchedule` 污点 +- 给节点打上 `node-role.kubernetes.io/control-plane=""` 标签,标记其为控制平面 +- 给节点打上 `node-role.kubernetes.io/master:NoSchedule` 和 `node-role.kubernetes.io/control-plane:NoSchedule` 污点 请注意: +1. `node-role.kubernetes.io/master` 污点是已废弃的,将会在 kubeadm 1.25 版本中移除 1. 可以使用 [`kubeadm init phase mark-control-plane`](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) 命令单独触发控制平面标记 @@ -1026,14 +1018,12 @@ cluster startup problems. 1. `kubeadm join` 预检基本上是 `kubeadm init` 预检的一个子集 -2. 从 1.9 开始,kubeadm 为 CRI 通用的功能提供了更好的支持;在这种情况下, - Docker 特定的控制参数将跳过或替换为 crictl 中与之相似的控制参数。 +2. 从 1.24 开始,kubeadm 使用 crictl 与所有已知的 CRI 端点进行通信。 3. 从 1.9 开始,kubeadm 支持加入在 Windows 上运行的节点;在这种情况下, 将跳过 Linux 特定的控制参数。 4. 在任何情况下,用户都可以通过 `--ignore-preflight-errors` 选项跳过 diff --git a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md index 363335f25c..8c82949cb8 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md @@ -8,53 +8,59 @@ weight: 50 在 `kubeadm init` 执行期间,kubeadm 将 `ClusterConfiguration` 对象上传 到你的集群的 `kube-system` 名字空间下名为 `kubeadm-config` 的 ConfigMap 对象中。 然后在 `kubeadm join`、`kubeadm reset` 和 `kubeadm upgrade` 执行期间读取此配置。 -要查看此 ConfigMap,请调用 `kubeadm config view`。 -你可以使用 `kubeadm config print` 命令打印默认配置, -并使用 `kubeadm config migrate` 命令将旧版本的配置转化成新版本。 -`kubeadm config images list` 和 `kubeadm config images pull` -命令可以用来列出并拉取 kubeadm 所需的镜像。 +你可以使用 `kubeadm config print` 命令打印默认静态配置, +kubeadm 运行 `kubeadm init` and `kubeadm join` 时将使用此配置。 + + +{{< note >}} +此命令的输出旨在作为示例。你必须手动编辑此命令的输出来适配你的设置。 +删除你不确定的字段,kubeadm 将通过检查主机来尝试在运行时给它们设默认值。 +{{< /note >}} -更多信息请浏览[使用带配置文件的 kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file) -或[使用带配置文件的 kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/#config-file). +更多有关 `init` 和 `join` 的信息请浏览[使用带配置文件的 kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file) +或[使用带配置文件的 kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/#config-file)。 -你也可以在使用 `kubeadm init` 命令时配置若干 kubelet 配置选项。 -这些选项对于集群中所有节点而言都是相同的。 -参阅[使用 kubeadm 来配置集群中的各个 kubelet](/zh/docs/setup/production-environment/tools/kubeadm/kubelet-integration/) -了解详细信息。 - - -在 Kubernetes v1.13.0 及更高版本中,要列出/拉取 kube-dns 镜像而不是 CoreDNS 镜像, -必须使用[这里](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon) -所描述的 `--config` 方法。 +你可以使用 `kubeadm config migrate` 来转换旧配置文件, +把其中已弃用的 API 版本更新为受支持的 API 版本。 + + +`kubeadm config images list` 和 `kubeadm config images pull` 可以用来列出和拉取 kubeadm 所需的镜像。 -## kubeadm config upload from-file {#cmd-config-from-file} - -## kubeadm config print{#cmd-config-view} +## kubeadm config print {#cmd-config-print} {{< include "generated/kubeadm_config_print.md" >}} ## kubeadm config print init-defaults {#cmd-config-print-init-defaults} diff --git a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md index 6914bdee27..0946e9672e 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md @@ -207,6 +207,13 @@ What this example would do is write the manifest files for the control plane and 这允许你修改文件,然后使用 `--skip-phases` 跳过这些阶段。 通过调用最后一个命令,你将使用自定义清单文件创建一个控制平面节点。 +{{< feature-state for_k8s_version="v1.22" state="beta" >}} + + +或者,你可以使用 `InitConfiguration` 下的 `skipPhases` 字段。 + @@ -239,8 +246,8 @@ The default configuration can be printed out using the If your configuration is not using the latest version it is **recommended** that you migrate using the [kubeadm config migrate](/docs/reference/setup-tools/kubeadm/kubeadm-config/) command. -For more information on the fields and usage of the configuration you can navigate to our API reference -page and pick a version from [the list](https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#section-directories). +For more information on the fields and usage of the configuration you can navigate to our +[API reference page](/docs/reference/config-api/kubeadm-config.v1beta3/). --> 可以使用 [kubeadm config print](/zh/docs/reference/setup-tools/kubeadm/kubeadm-config/) 命令打印出默认配置。 @@ -249,10 +256,119 @@ page and pick a version from [the list](https://pkg.go.dev/k8s.io/kubernetes/cmd **推荐**使用 [kubeadm config migrate](/zh/docs/reference/setup-tools/kubeadm/kubeadm-config/) 命令进行迁移。 -有关配置的字段和用法的更多信息, -你可以访问 API 参考页面并从 -[列表](https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#section-directories) -中选择一个版本。 +关于配置的字段和用法的更多信息,你可以访问 [API 参考页面](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)。 + + +### 使用 kubeadm init 时设置特性门控 {#feature-gates} + + +Kubeadm 支持一组独有的特性门控,只能在 `kubeadm init` 创建集群期间使用。 +这些特性可以控制集群的行为。特性门控会在毕业到 GA 后被移除。 + + +你可以使用 `--feature-gates` 标志来为 `kubeadm init` 设置特性门控, +或者你可以在用 `--config` 传递[配置文件](/zh/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-ClusterConfiguration) +时添加条目到 `featureGates` 字段中去。 + + +直接传递 [Kubernetes 核心组件的特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates)给 kubeadm 是不支持的。 +相反,可以通过[使用 kubeadm API 的自定义组件](/zh/docs/setup/production-environment/tools/kubeadm/control-plane-flags/)来传递。 + + +特性门控的列表: + +{{< table caption="kubeadm feature gates" >}} +特性 | 默认值 | Alpha | Beta +:-------|:--------|:------|:----- +`PublicKeysECDSA` | `false` | 1.19 | - +`RootlessControlPlane` | `false` | 1.22 | - +`UnversionedKubeletConfigMap` | `true` | 1.22 | 1.23 +{{< /table >}} + + +{{< note >}} +一旦特性门控变成了 GA,那它将会从这个列表中移除,因为它的值会被默认锁定为 `true` 。 +{{< /note >}} + + +特性门控的描述: + + +`PublicKeysECDSA` +: 可用于创建集群时使用 ECDSA 证书而不是默认 RSA 算法。 +支持用 `kubeadm certs renew` 更新现有 ECDSA 证书, +但你不能在集群运行期间或升级期间切换 RSA 和 ECDSA 算法。 + + +`RootlessControlPlane` +: 设置此标志来配置 kubeadm 所部署的控制平面组件中的静态 Pod 容器 +`kube-apiserver`、`kube-controller-manager`、`kube-scheduler` 和 `etcd` 以非 root 用户身份运行。 +如果未设置该标志,则这些组件以 root 身份运行。 +你可以在升级到更新版本的 Kubernetes 之前更改此特性门控的值。 + + +`UnversionedKubeletConfigMap` +: 此标志控制 kubeadm 存储 kubelet 配置数据的 {{}} 的名称。 +在未指定此标志或设置为 `true` 的情况下,此 ConfigMap 被命名为 `kubelet-config`。 +如果将此标志设置为 `false`,则此 ConfigMap 的名称会包括 Kubernetes 的主要版本和次要版本(例如:`kubelet-config-{{< skew currentVersion >}}`)。 +Kubeadm 会确保用于读写 ConfigMap 的 RBAC 规则适合你设置的值。 +当 kubeadm 写入此 ConfigMap 时(在 `kubeadm init` 或 `kubeadm upgrade apply` 期间), +kubeadm 根据 `UnversionedKubeletConfigMap` 的设置值来执行操作。 +当读取此 ConfigMap 时(在 `kubeadm join`、`kubeadm reset`、`kubeadm upgrade ...` 期间), +kubeadm 尝试首先使用无版本(后缀)的 ConfigMap 名称; +如果不成功,kubeadm 将回退到使用该 ConfigMap 的旧(带版本号的)名称。 + + +{{< note >}} +设置 `UnversionedKubeletConfigMap` 为 `false` 是被支持的特性,但该特性**已被弃用**。 +{{< /note >}} + + + +### 在没有互联网连接的情况下运行 kubeadm {#without-internet-connection} + + +要在没有互联网连接的情况下运行 kubeadm,你必须提前拉取所需的控制平面镜像。 + + +你可以使用 `kubeadm config images` 子命令列出并拉取镜像: + +```shell +kubeadm config images list +kubeadm config images pull +``` + + +你可以通过 `--config` 把 [kubeadm 配置文件](#config-file) 传递给上述命令来控制 `kubernetesVersion` 和 `imageRepository` 字段。 + + +kubeadm 需要的所有默认 `k8s.gcr.io` 镜像都支持多种硬件体系结构。 + @@ -306,23 +453,44 @@ You can override this behavior by using [kubeadm with a configuration file](#con 允许的自定义功能有: +* 提供影响镜像版本的 `kubernetesVersion`。 * 使用其他的 `imageRepository` 来代替 `k8s.gcr.io`。 -* 将 `useHyperKubeImage` 设置为 `true`,使用 HyperKube 镜像。 -* 为 etcd 或 DNS 附件提供特定的 `imageRepository` 和 `imageTag`。 +* 为 etcd 或 CoreDNS 提供特定的 `imageRepository` 和 `imageTag`。 - -请注意配置文件中的配置项 `kubernetesVersion` 或者命令行参数 `--kubernetes-version` -会影响到镜像的版本。 +由于向后兼容的原因,`imageRepository` 可能会有所不同。 +例如,某镜像的子路径可能是 `k8s.gcr.io/subpath/image`, +但使用自定义仓库时默认为 `my.customrepository.io/image`。 + + +确保将镜像推送到 kubeadm 可以使用的自定义仓库的路径中,你必须: + + +* 使用 `kubeadm config images {list|pull}` 从 `k8s.gcr.io` 的默认路径中拉取镜像。 +* 将镜像推送到 `kubeadm config images list --config=config.yaml` 的路径, +其中 `config.yaml` 包含自定义的 `imageRepository` 和/或用于 etcd 和 CoreDNS 的 `imageTag`。 +* 将相同的 `config.yaml` 传递给 `kubeadm init`。 + -### 在没有互联网连接的情况下运行 kubeadm - - -要在没有互联网连接的情况下运行 kubeadm,你必须提前拉取所需的控制平面镜像。 - - -你可以使用 `kubeadm config images` 子命令列出并拉取镜像: - -```shell -kubeadm config images list -kubeadm config images pull -``` - - -kubeadm 需要的所有镜像,例如 `k8s.gcr.io/kube-*`、`k8s.gcr.io/etcd` 和 `k8s.gcr.io/pause` -都支持多种架构。 -