diff --git a/content/zh-cn/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md b/content/zh-cn/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md new file mode 100644 index 0000000000..9bc57db00c --- /dev/null +++ b/content/zh-cn/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md @@ -0,0 +1,283 @@ +--- +title: 添加 Windows 工作节点 +content_type: task +weight: 11 +--- + + + + +{{< feature-state for_k8s_version="v1.18" state="beta" >}} + + +本页介绍如何将 Linux 工作节点添加到 kubeadm 集群。 + +## {{% heading "prerequisites" %}} + + +* 一个正在运行的 [Windows Server 2022](https://www.microsoft.com/cloud-platform/windows-server-pricing) + (或更高版本)实例,且具备管理权限。 +* 一个正在运行的、由 `kubeadm init` 命令创建的集群,且集群的创建遵循 + [使用 kubeadm 创建集群](/zh-cn/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/) + 文档中所给的步骤。 + + + + +## 添加 Windows 工作节点 {#adding-windows-worker-nodes} + +{{< note >}} + +为了方便将 Windows 工作节点添加到集群,下面会用到代码仓库 +https://sigs.k8s.io/sig-windows-tools 里的 PowerShell 脚本。 +{{< /note >}} + + +对每台机器执行以下操作: + +1. 在机器上打开一个 PowerShell 会话。 +1. 确保你是管理员或具有特权的用户。 + +然后继续执行下面的步骤。 + +### 安装 Containerd {#install-containerd} + +{{% thirdparty-content %}} + + +要安装 Containerd,首先运行以下命令: + + ```PowerShell + curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/hostprocess/Install-Containerd.ps1 + `````` + + +然后运行以下命令,但要首先将 `CONTAINERD_VERSION` 替换为 +[Containerd 仓库](https://github.com/containerd/containerd/releases) 中的最新发布版本。 +版本号不能带有前缀 `v` 。例如,使用 `1.7.22` 而不是 `v1.7.22`: + + ```PowerShell + .\Install-Containerd.ps1 -ContainerDVersion CONTAINERD_VERSION + ``` + + +* 根据需要调整 `Install-Containerd.ps1` 的所有其他参数,例如 `netAdapterName`。 +* 如果你的机器不支持 Hyper-V,且无法托管 Hyper-V 的隔离容器, + 请设置 `skipHypervisorSupportCheck`。 +* 如果你要更改 `Install-Containerd.ps1` 中的可选参数 `CNIBinPath` 和/或 + `CNIConfigPath`,则需要配置已安装的 Windows CNI 插件,使之与这里的值匹配。 + + +### 安装 kubeadm 和 kubelet {#install-kubeadm-and-kubelet} + +运行以下命令安装 kubeadm 和 kubelet: + + ```PowerShell + curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/hostprocess/PrepareNode.ps1 + .\PrepareNode.ps1 -KubernetesVersion v{{< skew currentVersion >}} + ``` + + +* 根据需要调整 `PrepareNode.ps1` 中的参数 `KubernetesVersion`。 + +### 运行 `kubeadm join` {#run-kubeadm-join} + +运行 `kubeadm init` 所输出的命令。例如: + + ```bash + kubeadm join --token : --discovery-token-ca-cert-hash sha256: + ``` + + +#### kubeadm join 的附加信息 {#additional-information-about-kubeadm-join} + +{{< note >}} + +要为 `:` 指定一个 IPv6 元组, +IPv6 地址必须用方括号括起来,例如:`[2001:db8::101]:2073`。 +{{< /note >}} + + +如果你没有令牌,可以在控制平面节点上运行以下命令来获取: + + +```bash +# 在控制平面节点上运行此命令 +sudo kubeadm token list +``` + + +命令输出同以下内容类似: + +```console +TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS +8ewj1p.9r9hcjoqgajrj4gi 23h 2018-06-12T02:51:28Z authentication, The default bootstrap system: + signing token generated by bootstrappers: + 'kubeadm init'. kubeadm: + default-node-token +``` + + +默认情况下,节点加入令牌会在 24 小时后过期。当前令牌过期后,如果想把节点加入集群, +可以在控制平面节点上运行以下命令来创建新令牌: + + +```bash +# 在控制平面节点上运行此命令 +sudo kubeadm token create +``` + + +命令输出同以下内容类似: + +```console +5didvk.d09sbcov8ph2amjw +``` + + +如果你没有 `--discovery-token-ca-cert-hash` 的具体值,可以在控制平面节点上运行以下命令来获取: + +```bash +sudo cat /etc/kubernetes/pki/ca.crt | openssl x509 -pubkey | openssl rsa -pubin -outform der 2>/dev/null | \ + openssl dgst -sha256 -hex | sed 's/^.* //' +``` + + +命令输出同以下内容类似: + +```console +8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78 +``` + + +`kubeadm join` 命令的输出应该同以下内容类似: + +``` +[preflight] Running pre-flight checks + +... (log output of join workflow) ... + +Node join complete: +* Certificate signing request sent to control-plane and response + received. +* Kubelet informed of new secure connection details. + +Run 'kubectl get nodes' on control-plane to see this machine join. +``` + + +几秒钟后,你应该在 `kubectl get nodes` 的输出中看到该节点。 +(例如,可以在控制平面节点上运行 `kubectl`)。 + +### 网络配置 {#network-configuration} + +在混合了 Linux 和 Windows 节点的集群中,CNI 设置所需的步骤不仅仅是对清单文件运行 +`kubectl apply`。此外,运行在控制平面节点上的 CNI 插件必须能够支持在 Windows 工作节点上 +运行的 CNI 插件。 + +{{% thirdparty-content %}} + + +目前只有少数 CNI 插件支持 Windows。以下是它们各自的设置说明: +* [Flannel](https://sigs.k8s.io/sig-windows-tools/guides/flannel.md) +* [Calico](https://docs.tigera.io/calico/latest/getting-started/kubernetes/windows-calico/) + +### 在 Windows 上安装 kubectl (可选) {#install-kubectl} + +参见 [在 Windows 上安装和设置 kubectl](/zh-cn/docs/tasks/tools/install-kubectl-windows/)。 + +## {{% heading "whatsnext" %}} + + +参见如何 [添加 Linux 工作节点](/zh-cn/docs/tasks/administer-cluster/kubeadm/adding-linux-nodes/)。