Kubernetes v1.18 [beta]本页介绍如何将 Linux 工作节点添加到 kubeadm 集群。
kubeadm init 命令创建的集群,且集群的创建遵循
使用 kubeadm 创建集群
文档中所给的步骤。为了方便将 Windows 工作节点添加到集群,下面会用到代码仓库 https://sigs.k8s.io/sig-windows-tools 里的 PowerShell 脚本。
对每台机器执行以下操作:
然后继续执行下面的步骤。
要安装 Containerd,首先运行以下命令:
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:
.\Install-Containerd.ps1 -ContainerDVersion CONTAINERD_VERSION
Install-Containerd.ps1 的所有其他参数,例如 netAdapterName。skipHypervisorSupportCheck。Install-Containerd.ps1 中的可选参数 CNIBinPath 和/或
CNIConfigPath,则需要配置已安装的 Windows CNI 插件,使之与这里的值匹配。运行以下命令安装 kubeadm 和 kubelet:
curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/hostprocess/PrepareNode.ps1
.\PrepareNode.ps1 -KubernetesVersion v1.35.0
PrepareNode.ps1 中的参数 KubernetesVersion。kubeadm join运行 kubeadm init 所输出的命令。例如:
kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>
要为 <control-plane-host>:<control-plane-port> 指定一个 IPv6 元组,
IPv6 地址必须用方括号括起来,例如:[2001:db8::101]:2073。
如果你没有令牌,可以在控制平面节点上运行以下命令来获取:
# 在控制平面节点上运行此命令
sudo kubeadm token list
命令输出同以下内容类似:
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 小时后过期。当前令牌过期后,如果想把节点加入集群, 可以在控制平面节点上运行以下命令来创建新令牌:
# 在控制平面节点上运行此命令
sudo kubeadm token create
命令输出同以下内容类似:
5didvk.d09sbcov8ph2amjw
如果你没有 --discovery-token-ca-cert-hash 的具体值,可以在控制平面节点上运行以下命令来获取:
sudo cat /etc/kubernetes/pki/ca.crt | openssl x509 -pubkey | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
命令输出同以下内容类似:
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)。
在混合了 Linux 和 Windows 节点的集群中,CNI 设置所需的步骤不仅仅是对清单文件运行
kubectl apply。此外,运行在控制平面节点上的 CNI 插件必须能够支持在 Windows 工作节点上
运行的 CNI 插件。
目前只有少数 CNI 插件支持 Windows。以下是它们各自的设置说明:
参见如何 添加 Linux 工作节点。