添加 Windows 工作节点

特性状态: Kubernetes v1.18 [beta]

本页介绍如何将 Linux 工作节点添加到 kubeadm 集群。

准备开始

  • 一个正在运行的 Windows Server 2022 (或更高版本)实例,且具备管理权限。
  • 一个正在运行的、由 kubeadm init 命令创建的集群,且集群的创建遵循 使用 kubeadm 创建集群 文档中所给的步骤。

添加 Windows 工作节点

说明:

为了方便将 Windows 工作节点添加到集群,下面会用到代码仓库 https://sigs.k8s.io/sig-windows-tools 里的 PowerShell 脚本。

对每台机器执行以下操作:

  1. 在机器上打开一个 PowerShell 会话。
  2. 确保你是管理员或具有特权的用户。

然后继续执行下面的步骤。

安装 Containerd

说明: 本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循CNCF 网站指南,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读内容指南

要安装 Containerd,首先运行以下命令:

  1. curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/hostprocess/Install-Containerd.ps1

然后运行以下命令,但要首先将 CONTAINERD_VERSION 替换为 Containerd 仓库 中的最新发布版本。 版本号不能带有前缀 v 。例如,使用 1.7.22 而不是 v1.7.22

  1. .\Install-Containerd.ps1 -ContainerDVersion CONTAINERD_VERSION
  • 根据需要调整 Install-Containerd.ps1 的所有其他参数,例如 netAdapterName
  • 如果你的机器不支持 Hyper-V,且无法托管 Hyper-V 的隔离容器, 请设置 skipHypervisorSupportCheck
  • 如果你要更改 Install-Containerd.ps1 中的可选参数 CNIBinPath 和/或 CNIConfigPath,则需要配置已安装的 Windows CNI 插件,使之与这里的值匹配。

安装 kubeadm 和 kubelet

运行以下命令安装 kubeadm 和 kubelet:

  1. curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/hostprocess/PrepareNode.ps1
  2. .\PrepareNode.ps1 -KubernetesVersion v1.32
  • 根据需要调整 PrepareNode.ps1 中的参数 KubernetesVersion

运行 kubeadm join

运行 kubeadm init 所输出的命令。例如:

  1. kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>

kubeadm join 的附加信息

说明:

要为 <control-plane-host>:<control-plane-port> 指定一个 IPv6 元组, IPv6 地址必须用方括号括起来,例如:[2001:db8::101]:2073

如果你没有令牌,可以在控制平面节点上运行以下命令来获取:

  1. # 在控制平面节点上运行此命令
  2. sudo kubeadm token list

命令输出同以下内容类似:

  1. TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
  2. 8ewj1p.9r9hcjoqgajrj4gi 23h 2018-06-12T02:51:28Z authentication, The default bootstrap system:
  3. signing token generated by bootstrappers:
  4. 'kubeadm init'. kubeadm:
  5. default-node-token

默认情况下,节点加入令牌会在 24 小时后过期。当前令牌过期后,如果想把节点加入集群, 可以在控制平面节点上运行以下命令来创建新令牌:

  1. # 在控制平面节点上运行此命令
  2. sudo kubeadm token create

命令输出同以下内容类似:

  1. 5didvk.d09sbcov8ph2amjw

如果你没有 --discovery-token-ca-cert-hash 的具体值,可以在控制平面节点上运行以下命令来获取:

  1. sudo cat /etc/kubernetes/pki/ca.crt | openssl x509 -pubkey | openssl rsa -pubin -outform der 2>/dev/null | \
  2. openssl dgst -sha256 -hex | sed 's/^.* //'

命令输出同以下内容类似:

  1. 8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78

kubeadm join 命令的输出应该同以下内容类似:

  1. [preflight] Running pre-flight checks
  2. ... (log output of join workflow) ...
  3. Node join complete:
  4. * Certificate signing request sent to control-plane and response
  5. received.
  6. * Kubelet informed of new secure connection details.
  7. Run 'kubectl get nodes' on control-plane to see this machine join.

几秒钟后,你应该在 kubectl get nodes 的输出中看到该节点。 (例如,可以在控制平面节点上运行 kubectl)。

网络配置

在混合了 Linux 和 Windows 节点的集群中,CNI 设置所需的步骤不仅仅是对清单文件运行 kubectl apply。此外,运行在控制平面节点上的 CNI 插件必须能够支持在 Windows 工作节点上 运行的 CNI 插件。

说明: 本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循CNCF 网站指南,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读内容指南

目前只有少数 CNI 插件支持 Windows。以下是它们各自的设置说明:

在 Windows 上安装 kubectl (可选)

参见 在 Windows 上安装和设置 kubectl

接下来

参见如何 添加 Linux 工作节点