diff --git a/content/zh/docs/reference/setup-tools/kubeadm/_index.md b/content/zh/docs/reference/setup-tools/kubeadm/_index.md index 60204dfa6dc0a..7b8c2ac158e2a 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/_index.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/_index.md @@ -13,19 +13,23 @@ card: -Kubeadm 是一个提供了 `kubeadm init` 和 `kubeadm join` 的工具,作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。 +Kubeadm 是一个提供了 `kubeadm init` 和 `kubeadm join` 的工具, +作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。 -kubeadm 通过执行必要的操作来启动和运行最小可用集群。按照设计,它只关注启动引导,而非配置机器。同样的,安装各种 “锦上添花” 的扩展,例如 Kubernetes Dashboard, -监控方案,以及特定云平台的扩展,都不在讨论范围内。 +kubeadm 通过执行必要的操作来启动和运行最小可用集群。 +按照设计,它只关注启动引导,而非配置机器。同样的, +安装各种 “锦上添花” 的扩展,例如 Kubernetes Dashboard、 +监控方案、以及特定云平台的扩展,都不在讨论范围内。 -相反,我们希望在 kubeadm 之上构建更高级别以及更加合规的工具,理想情况下,使用 kubeadm 作为所有部署工作的基准将会更加易于创建一致性集群。 +相反,我们希望在 kubeadm 之上构建更高级别以及更加合规的工具, +理想情况下,使用 kubeadm 作为所有部署工作的基准将会更加易于创建一致性集群。 -要安装 kubeadm, 请查阅[安装指南](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/). +--> +要安装 kubeadm, 请查阅 +[安装指南](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/). ## {{% heading "whatsnext" %}} @@ -46,14 +51,30 @@ To install kubeadm, see the [installation guide](/docs/setup/production-environm * [kubeadm config](/docs/reference/setup-tools/kubeadm/kubeadm-config) if you initialized your cluster using kubeadm v1.7.x or lower, to configure your cluster for `kubeadm upgrade` * [kubeadm token](/docs/reference/setup-tools/kubeadm/kubeadm-token) to manage tokens for `kubeadm join` * [kubeadm reset](/docs/reference/setup-tools/kubeadm/kubeadm-reset) to revert any changes made to this host by `kubeadm init` or `kubeadm join` +* [kubeadm certs](/docs/reference/setup-tools/kubeadm/kubeadm-certs) to manage Kubernetes certificates +* [kubeadm kubeconfig](/docs/reference/setup-tools/kubeadm/kubeadm-kubeconfig) to manage kubeconfig files * [kubeadm version](/docs/reference/setup-tools/kubeadm/kubeadm-version) to print the kubeadm version * [kubeadm alpha](/docs/reference/setup-tools/kubeadm/kubeadm-alpha) to preview a set of features made available for gathering feedback from the community --> -* [kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init) 用于搭建控制平面节点 -* [kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join) 用于搭建工作节点并将其加入到集群中 -* [kubeadm upgrade](/zh/docs/reference/setup-tools/kubeadm/kubeadm-upgrade) 用于升级 Kubernetes 集群到新版本 -* [kubeadm config](/zh/docs/reference/setup-tools/kubeadm/kubeadm-config) 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 `kubeadm upgrade` 来配置你的集群 -* [kubeadm token](/zh/docs/reference/setup-tools/kubeadm/kubeadm-token) 用于管理 `kubeadm join` 使用的令牌 -* [kubeadm reset](/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset) 用于恢复通过 `kubeadm init` 或者 `kubeadm join` 命令对节点进行的任何变更 -* [kubeadm version](/zh/docs/reference/setup-tools/kubeadm/kubeadm-version) 用于打印 kubeadm 的版本信息 -* [kubeadm alpha](/zh/docs/reference/setup-tools/kubeadm/kubeadm-alpha) 用于预览一组可用于收集社区反馈的特性 +* [kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init) + 用于搭建控制平面节点 +* [kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join) + 用于搭建工作节点并将其加入到集群中 +* [kubeadm upgrade](/zh/docs/reference/setup-tools/kubeadm/kubeadm-upgrade) + 用于升级 Kubernetes 集群到新版本 +* [kubeadm config](/zh/docs/reference/setup-tools/kubeadm/kubeadm-config) + 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 + `kubeadm upgrade` 来配置你的集群 +* [kubeadm token](/zh/docs/reference/setup-tools/kubeadm/kubeadm-token) + 用于管理 `kubeadm join` 使用的令牌 +* [kubeadm reset](/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset) + 用于恢复通过 `kubeadm init` 或者 `kubeadm join` 命令对节点进行的任何变更 +* [kubeadm certs](/docs/reference/setup-tools/kubeadm/kubeadm-certs) + 用于管理 Kubernetes 证书 +* [kubeadm kubeconfig](/docs/reference/setup-tools/kubeadm/kubeadm-kubeconfig) + 用于管理 kubeconfig 文件 +* [kubeadm version](/zh/docs/reference/setup-tools/kubeadm/kubeadm-version) + 用于打印 kubeadm 的版本信息 +* [kubeadm alpha](/zh/docs/reference/setup-tools/kubeadm/kubeadm-alpha) + 用于预览一组可用于收集社区反馈的特性 + diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md index a0ef1a5e1a2aa..9132e3a04ba5c 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md @@ -1,17 +1,30 @@ + +打印配置 + ### 概要 - -此命令显示所提供子命令的配置。 -有关详细信息,请参阅:https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2 +此命令打印子命令所提供的配置信息。 +相关细节可参阅 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2 ``` kubeadm config print [flags] @@ -20,7 +33,6 @@ kubeadm config print [flags] - ### 选项 @@ -34,22 +46,17 @@ kubeadm config print [flags] - +
-h, --help
- -print 操作的帮助命令 -

print 命令的帮助信息

- - -### 从父命令继承的选项 +### 从父命令继承而来的选项 @@ -59,33 +66,23 @@ print 操作的帮助命令 - + - + + - + +
- ---kubeconfig string     默认值:"/etc/kubernetes/admin.conf" ---kubeconfig string     默认值:"/etc/kubernetes/admin.conf"
- -用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。 -

与集群通信时使用的 kubeconfig 文件。如此标志未设置,将在一组标准位置中搜索现有的kubeconfig 文件。

--rootfs string
- -[实验] 到 '真实' 主机根文件系统的路径。 -

[试验性] 指向“真实”宿主根文件系统的路径。

+ + + 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 3c1425bfc1ed2..363335f25cfe3 100644 --- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md +++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md @@ -10,8 +10,8 @@ During `kubeadm init`, kubeadm uploads the `ClusterConfiguration` object to your in a ConfigMap called `kubeadm-config` in the `kube-system` namespace. This configuration is then read during `kubeadm join`, `kubeadm reset` and `kubeadm upgrade`. To view this ConfigMap call `kubeadm config view`. --> -在 `kubeadm init` 执行期间,kubeadm 将 `ClusterConfiguration` 对象上传到你的集群的 `kube-system` 名字空间下 -名为 `kubeadm-config` 的 ConfigMap 对象中。 +在 `kubeadm init` 执行期间,kubeadm 将 `ClusterConfiguration` 对象上传 +到你的集群的 `kube-system` 名字空间下名为 `kubeadm-config` 的 ConfigMap 对象中。 然后在 `kubeadm join`、`kubeadm reset` 和 `kubeadm upgrade` 执行期间读取此配置。 要查看此 ConfigMap,请调用 `kubeadm config view`。 @@ -29,22 +29,34 @@ convert your old configuration files to a newer version. `kubeadm config images For more information navigate to [Using kubeadm init with a configuration file](/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file) or [Using kubeadm join with a configuration file](/docs/reference/setup-tools/kubeadm/kubeadm-join/#config-file). +--> +更多信息请浏览[使用带配置文件的 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/) +了解详细信息。 + + -更多信息请浏览[使用带配置文件的 kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file) -或[使用带配置文件的 kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/#config-file). - 在 Kubernetes v1.13.0 及更高版本中,要列出/拉取 kube-dns 镜像而不是 CoreDNS 镜像, -必须使用[这里](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon)所描述的 `--config` 方法。 - - +必须使用[这里](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon) +所描述的 `--config` 方法。 ## kubeadm config upload from-file {#cmd-config-from-file} +## kubeadm config print{#cmd-config-view} +{{< include "generated/kubeadm_config_print.md" >}} + ## kubeadm config print init-defaults {#cmd-config-print-init-defaults} {{< include "generated/kubeadm_config_print_init-defaults.md" >}} @@ -60,15 +72,13 @@ has to be used. ## kubeadm config images pull {#cmd-config-images-pull} {{< include "generated/kubeadm_config_images_pull.md" >}} - - ## {{% heading "whatsnext" %}} - -* [kubeadm upgrade](/zh/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/) 将 Kubernetes 集群升级到更新版本 [kubeadm upgrade] +* [kubeadm upgrade](/zh/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/) + 将 Kubernetes 集群升级到更新版本 [kubeadm upgrade] diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md index 4a2006bfa50fc..ab0372b1a925f 100644 --- a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md +++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md @@ -61,10 +61,9 @@ and kubeadm will use this CA for signing the rest of the certificates. `/etc/kubernetes/pki/ca.key` 中,而 kubeadm 将使用此 CA 对其余证书进行签名。 -否则, kubeadm 将独立运行 controller-manager,附加一个 `--controllers=csrsigner` 的参数,并且指明 CA 证书和密钥。 +否则, kubeadm 将独立运行 controller-manager,附加一个 +`--controllers=csrsigner` 的参数,并且指明 CA 证书和密钥。 -[PKI证书和要求](/zh/docs/setup/best-practices/certificates/)包括集群使用外部CA的设置指南。 - - -[PKI 证书和要求](/zh/docs/setup/best-practices/certificates/)包括关于用外部 CA 设置集群的指南。 +[PKI 证书和要求](/zh/docs/setup/best-practices/certificates/)包括集群使用外部 CA 的设置指南。 +## 启用已签名的 kubelet 服务证书 {#kubelet-serving-certs} + +默认情况下,kubeadm 所部署的 kubelet 服务证书是自签名(Self-Signed))。 +这意味着从 [metrics-server](https://github.com/kubernetes-sigs/metrics-server) +这类外部服务发起向 kubelet 的链接时无法使用 TLS 来完成保护。 + +要在新的 kubeadm 集群中配置 kubelet 以使用被正确签名的服务证书, +你必须向 `kubeadm init` 传递如下最小配置数据: + +```yaml +apiVersion: kubeadm.k8s.io/v1beta2 +kind: ClusterConfiguration +--- +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +serverTLSBootstrap: true +``` + + +如果你已经创建了集群,你必须通过执行下面的操作来完成适配: + +- 找到 `kube-system` 名字空间中名为 `kubelet-config-{{< skew latestVersion >}}` + 的 ConfigMap 并编辑之。 + 在该 ConfigMap 中,`config` 键下面有一个 + [KubeletConfiguration](/zh/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration) + 文档作为其取值。编辑该 KubeletConfiguration 文档以设置 + `serverTLSBootstrap: true`。 +- 在每个节点上,在 `/var/lib/kubelet/config.yaml` 文件中添加 + `serverTLSBootstrap: true` 字段,并使用 `systemctl restart kubelet` + 来重启 kubelet。 + + +字段 `serverTLSBootstrap` 将允许启动引导 kubelet 的服务证书,方式 +是从 `certificates.k8s.io` API 处读取。这种方式的一种局限在于这些 +证书的 CSR(证书签名请求)不能被 kube-controller-manager 中默认的 +签名组件 +[`kubernetes.io/kubelet-serving`](/zh/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers) +批准。需要用户或者第三方控制器来执行此操作。 + +可以使用下面的命令来查看 CSR: + +```shell +kubectl get csr +``` + +```none +NAME AGE SIGNERNAME REQUESTOR CONDITION +csr-9wvgt 112s kubernetes.io/kubelet-serving system:node:worker-1 Pending +csr-lz97v 1m58s kubernetes.io/kubelet-serving system:node:control-plane-1 Pending +``` + + +你可以执行下面的操作来批准这些请求: + +```shell +kubectl certificate approve +``` + + +默认情况下,这些服务证书上会在一年后过期。 +kubeadm 将 `KubeletConfiguration` 的 `rotateCertificates` 字段设置为 +`true`;这意味着证书快要过期时,会生成一组针对服务证书的新的 CSR,而 +这些 CSR 也要被批准才能完成证书轮换。 +要进一步了解这里的细节,可参阅 +[证书轮换](/zh/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#certificate-rotation) +文档。 + + +如果你在寻找一种能够自动批准这些 CSR 的解决方案,建议你与你的云提供商 +联系,询问他们是否有 CSR 签名组件,用来以带外(out-of-band)的方式检查 +节点的标识符。 + +{{% thirdparty-content %}} + + +也可以使用第三方定制的控制器: + +- [kubelet-rubber-stamp](https://github.com/kontena/kubelet-rubber-stamp) + +除非既能够验证 CSR 中的 CommonName,也能检查请求的 IP 和域名, +这类控制器还算不得安全的机制。 +只有完成彻底的检查,才有可能避免有恶意的、能够访问 kubelet 客户端证书的第三方 +为任何 IP 或域名请求服务证书。 + diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md index c90700aec1770..81623a6b4c328 100644 --- a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md +++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md @@ -585,10 +585,10 @@ and post-upgrade manifest file for a certain component, a backup file for it wil - Makes sure the control plane images are available or available to pull to the machine. - Generates replacements and/or uses user supplied overwrites if component configs require version upgrades. - Upgrades the control plane components or rollbacks if any of them fails to come up. -- Applies the new `kube-dns` and `kube-proxy` manifests and makes sure that all necessary RBAC rules are created. +- Applies the new `CoreDNS` and `kube-proxy` manifests and makes sure that all necessary RBAC rules are created. - Creates new certificate and key files of the API server and backs up old files if they're about to expire in 180 days. --> -## 工作原理 +## 工作原理 {#how-it-works} `kubeadm upgrade apply` 做了以下工作: @@ -600,7 +600,7 @@ and post-upgrade manifest file for a certain component, a backup file for it wil - 确保控制面的镜像是可用的或可拉取到服务器上。 - 如果组件配置要求版本升级,则生成替代配置与/或使用用户提供的覆盖版本配置。 - 升级控制面组件或回滚(如果其中任何一个组件无法启动)。 -- 应用新的 `kube-dns` 和 `kube-proxy` 清单,并强制创建所有必需的 RBAC 规则。 +- 应用新的 `CoreDNS` 和 `kube-proxy` 清单,并强制创建所有必需的 RBAC 规则。 - 如果旧文件在 180 天后过期,将创建 API 服务器的新证书和密钥文件并备份旧文件。