From 37add1c3183f8f25f9091f63cbb98e058dad26d3 Mon Sep 17 00:00:00 2001 From: song Date: Tue, 10 May 2022 16:28:26 +0800 Subject: [PATCH] [zh] sync tasks/administer-cluster/kubeadm/*.md Signed-off-by: song --- .../kubeadm/adding-windows-nodes.md | 145 +++++++++++------- .../kubeadm/kubeadm-certs.md | 99 ++++++++++-- 2 files changed, 179 insertions(+), 65 deletions(-) diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md b/content/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md index 377b5f3956..323dbd5cf0 100644 --- a/content/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md +++ b/content/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md @@ -25,7 +25,6 @@ You can use Kubernetes to run a mixture of Linux and Windows nodes, so you can m 混合使用运行于 Linux 上的 Pod 和运行于 Windows 上的 Pod。 本页面展示如何将 Windows 节点注册到你的集群。 - ## {{% heading "prerequisites" %}} {{< version-check >}} @@ -36,6 +35,7 @@ If you are using VXLAN/Overlay networking you must have also have [KB4489899](ht * A Linux-based Kubernetes kubeadm cluster in which you have access to the control plane (see [Creating a single control-plane cluster with kubeadm](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)). --> + * 获取 [Windows Server 2019 或更高版本的授权](https://www.microsoft.com/en-us/cloud-platform/windows-server-pricing) 以便配置托管 Windows 容器的 Windows 节点。 如果你在使用 VXLAN/覆盖(Overlay)联网设施,则你还必须安装 [KB4489899](https://support.microsoft.com/help/4489899)。 @@ -275,55 +275,12 @@ Windows 工作节点上具有提升的权限(Administrator)。 {{< /note >}} {{< tabs name="tab-windows-kubeadm-runtime-installation" >}} -{{% tab name="Docker EE" %}} - -#### 安装 Docker EE - -```powershell -Install-WindowsFeature -Name containers -``` - -安装 Docker -操作指南在 [Install Docker Engine - Enterprise on Windows Servers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server#install-docker)。 - - -#### 安装 wins、kubelet 和 kubeadm - - ```PowerShell - curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1 - .\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}} - ``` - - -#### 运行 `kubeadm` 添加节点 - - 当你在控制面主机上运行 `kubeadm init` 时,输出了一个命令。现在运行这个命令。 - 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行 - `kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。 - -{{% /tab %}} {{% tab name="CRI-containerD" %}} - #### 安装 containerD ```powershell @@ -335,16 +292,12 @@ curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/lates -要安装特定版本的 containerD,使用参数 -ContainerDVersion指定版本。 +要安装特定版本的 containerD,使用参数 -ContainerDVersion 指定版本。 ```powershell # Example .\Install-Containerd.ps1 -ContainerDVersion 1.4.1 ``` - -{{< /note >}} - -{{< note >}} @@ -360,12 +313,18 @@ If you're using a different interface rather than Ethernet (i.e. "Ethernet0 2") -#### 安装 wins,kubelet 和 kubeadm +#### 安装 wins、kubelet 和 kubeadm ```PowerShell curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1 .\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}} -ContainerRuntime containerD ``` + +从 [cri-tools](https://github.com/kubernetes-sigs/cri-tools) 项目安装 `crtctl`。 +`crictl` 是必需的,kubeadm 使用它与 CRI 端点通信。 #### 运行 `kubeadm` 添加节点 - 使用当你在控制面主机上运行 `kubeadm init` 时得到的命令。 - 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行 - `kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。 + 使用当你在控制面主机上运行 `kubeadm init` 时得到的命令。 + 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行 + `kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。 + +{{% /tab %}} + + +{{% tab name="Docker Engine" %}} + + + +#### 安装 Docker Engine + +安装 `Containers` 功能特性 + +```powershell +Install-WindowsFeature -Name containers +``` + + + +安装 Docker + +操作指南在 +[Install Docker Engine - Enterprise on Windows Servers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server#install-docker)。 + + + +[安装 cri-dockerd](https://github.com/Mirantis/cri-dockerd)。kubelet 可以通过 cri-dockerd +在 CRI 兼容的节点上与 Docker 通信。 + {{< note >}} -If using **CRI-containerD** add `--cri-socket "npipe:////./pipe/containerd-containerd"` to the kubeadm call + +Docker Engine 没有实现 [CRI](/zh/docs/concepts/architecture/cri/), +而 CRI 是容器运行时能够与 Kubernetes 一起工作的要求。 +出于这个原因,必须安装一个额外的服务 [cri-dockerd](https://github.com/Mirantis/cri-dockerd)。 +cri-dockerd 是一个基于原来的内置 Docker Engine 支持的项目, +而这一支持在 1.24 版本的 kubelet 中[已被移除](/zh/dockershim)。 {{< /note >}} + +从 [cri-tools](https://github.com/kubernetes-sigs/cri-tools) 项目安装 `crictl`。 +kubeadm 需要 `crictl` 才能与 CRI 端点通信。 + + +#### 安装 wins、kubelet 和 kubeadm + +```PowerShell +curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1 +.\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}} +``` + +#### 运行 `kubeadm` 添加节点 + +当你在控制面主机上运行 `kubeadm init` 时,输出了一个命令。现在运行这个命令。 +如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行 +`kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。 + {{% /tab %}} {{< /tabs >}} 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 a2c9194729..df303140ce 100644 --- a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md +++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md @@ -16,10 +16,13 @@ weight: 10 {{< feature-state for_k8s_version="v1.15" state="stable" >}} 由 [kubeadm](/zh/docs/reference/setup-tools/kubeadm/) 生成的客户端证书在 1 年后到期。 -本页说明如何使用 kubeadm 管理证书续订。 +本页说明如何使用 kubeadm 管理证书续订,同时也涵盖其他与 kubeadm 证书管理相关的说明。 ## {{% heading "prerequisites" %}} @@ -253,7 +256,7 @@ the Pod and the certificate renewal for the component can complete. 所以 kubectl 不能用来删除或重启他们。 要重启静态 Pod 你可以临时将清单文件从 `/etc/kubernetes/manifests/` 移除并等待 20 秒 (参考 [KubeletConfiguration 结构](/docs/reference/config-api/kubelet-config.v1beta1/) 中的`fileCheckFrequency` 值)。 -如果 Pod 不在清单目录里,kubelet将会终止它。 +如果 Pod 不在清单目录里,kubelet 将会终止它。 在另一个 `fileCheckFrequency` 周期之后你可以将文件移回去,为了组件可以完成 kubelet 将重新创建 Pod 和证书更新。 ### 设置一个签名者(Signer) -Kubernetes 证书颁发机构不是开箱即用。 -你可以配置外部签名者,例如 -[cert-manager](https://cert-manager.io/docs/configuration/ca/), +Kubernetes 证书颁发机构不是开箱即用。你可以配置外部签名者,例如 [cert-manager](https://cert-manager.io/docs/configuration/ca/), 也可以使用内置签名者。 内置签名者是 -[`kube-controller-manager`](/zh/docs/reference/command-line-tools-reference/kube-controller-manager/) -的一部分。 +[`kube-controller-manager`](/zh/docs/reference/command-line-tools-reference/kube-controller-manager/) 的一部分。 要激活内置签名者,请传递 `--cluster-signing-cert-file` 和 `--cluster-signing-key-file` 参数。 如果你正在创建一个新的集群,你可以使用 kubeadm 的 -[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/)。 +[配置文件](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)。 ```yaml apiVersion: kubeadm.k8s.io/v1beta3 @@ -570,3 +570,80 @@ CSRs requesting serving certificates for any IP or domain name. 只有完成彻底的检查,才有可能避免有恶意的、能够访问 kubelet 客户端证书的第三方 为任何 IP 或域名请求服务证书。 + +## 为其他用户生成 kubeconfig 文件 {#kubeconfig-additional-users} + + +在集群创建过程中,kubeadm 对 `admin.conf` 中的证书进行签名时,将其配置为 +`Subject: O = system:masters, CN = kubernetes-admin`。 +[`system:masters`](/zh/docs/reference/access-authn-authz/rbac/#user-facing-roles) +是一个例外的超级用户组,可以绕过鉴权层(例如 RBAC)。 +强烈建议不要将 `admin.conf` 文件与任何人共享。 + + +你要使用 [`kubeadm kubeconfig user`](/zh/docs/reference/setup-tools/kubeadm/kubeadm-kubeconfig) +命令为其他用户生成 kubeconfig 文件,这个命令支持命令行参数和 +[kubeadm 配置结构](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)。 +以上命令会将 kubeconfig 打印到终端上,也可以使用 `kubeadm kubeconfig user ... > somefile.conf` +输出到一个文件中。 + + +如下 kubeadm 可以 在`--config` 后加的配置文件示例: + +```yaml +# example.yaml +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration +# kubernetes 将作为 kubeconfig 中集群名称 +clusterName: "kubernetes" +# some-dns-address:6443 将作为集群 kubeconfig 文件中服务地址(IP 或者 DNS 名称) +controlPlaneEndpoint: "some-dns-address:6443" +# 从本地挂载集群的 CA 秘钥和 CA 证书 +certificatesDir: "/etc/kubernetes/pki" +``` + + +确保这些设置与所需的目标集群设置相匹配。可以使用以下命令查看现有集群的设置: + +```shell +kubectl get cm kubeadm-config -n kube-system -o=jsonpath="{.data.ClusterConfiguration}" +``` + + +以下示例将为在 `appdevs` 组的 `johndoe` 用户创建一个有效期为 24 小时的 kubeconfig 文件: + +```shell +kubeadm kubeconfig user --config example.yaml --org appdevs --client-name johndoe --validity-period 24h +``` + + +以下示例将为管理员创建一个有效期有一周的 kubeconfig 文件: + +```shell +kubeadm kubeconfig user --config example.yaml --client-name admin --validity-period 168h +``` \ No newline at end of file