添加 Windows 节点

FEATURE STATE: Kubernetes v1.18 [beta]

你可以使用 Kubernetes 来混合运行 Linux 和 Windows 节点,这样你就可以 混合使用运行于 Linux 上的 Pod 和运行于 Windows 上的 Pod。 本页面展示如何将 Windows 节点注册到你的集群。

Before you begin

Your Kubernetes server must be at or later than version 1.17. To check the version, enter kubectl version.

Objectives

  • 将一个 Windows 节点注册到集群上
  • 配置网络,以便 Linux 和 Windows 上的 Pod 和 Service 之间能够相互通信。

开始行动:向你的集群添加一个 Windows 节点

联网配置

一旦你有了一个基于 Linux 的 Kubernetes 控制面节点,你就可以为其选择联网方案。 出于简单考虑,本指南展示如何使用 VXLAN 模式的 Flannel。

配置 Flannel

  1. 为 Flannel 准备 Kubernetes 的控制面

    在我们的集群中,建议对 Kubernetes 的控制面进行少许准备处理。 建议在使用 Flannel 时为 iptables 链启用桥接方式的 IPv4 流处理, 必须在所有 Linux 节点上执行如下命令:

    1. sudo sysctl net.bridge.bridge-nf-call-iptables=1
  2. 下载并配置 Linux 版本的 Flannel

    下载最新的 Flannel 清单文件:

    1. wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    修改 Flannel 清单中的 net-conf.json 部分,将 VNI 设置为 4096,并将 Port 设置为 4789。 结果看起来像下面这样:

    1. net-conf.json: |
    2. {
    3. "Network": "10.244.0.0/16",
    4. "Backend": {
    5. "Type": "vxlan",
    6. "VNI": 4096,
    7. "Port": 4789
    8. }
    9. }

    Note: 在 Linux 节点上 VNI 必须设置为 4096,端口必须设置为 4789,这样才能令其与 Windows 上的 Flannel 互操作。关于这些字段的详细说明,请参见 VXLAN 文档

    Note: 如要使用 L2Bridge/Host-gateway 模式,则可将 Type 值设置为 "host-gw",并忽略 VNIPort 的设置。

  3. 应用 Flannel 清单并验证

    首先应用 Flannel 配置:

    1. kubectl apply -f kube-flannel.yml

    几分钟之后,如果 Flannel Pod 网络被正确部署,你应该会看到所有 Pods 都处于运行中状态。

    1. kubectl get pods -n kube-system

    输出中应该包含处于运行中状态的 Linux Flannel DaemonSet:

    1. NAMESPACE NAME READY STATUS RESTARTS AGE
    2. ...
    3. kube-system kube-flannel-ds-54954 1/1 Running 0 1m
  4. 添加 Windows Flannel 和 kube-proxy DaemonSet

    现在你可以添加 Windows 兼容版本的 Flannel 和 kube-proxy。为了确保你能获得兼容 版本的 kube-proxy,你需要替换镜像中的标签。 下面的例子中展示的是针对 Kubernetes v1.23.6 版本的用法, 不过你应该根据你自己的集群部署调整其中的版本号。

    1. curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.23.6/g' | kubectl apply -f -
    2. kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml

    Note: 如果你在使用 host-gateway 模式,则应该使用 https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-host-gw.yml 这一清单。

    Note:

    如果你在 Windows 节点上使用的不是以太网(即,”Ethernet0 2”)接口,你需要 修改 flannel-host-gw.ymlflannel-overlay.yml 文件中的下面这行:

    1. wins cli process run --path /k/flannel/setup.exe --args "--mode=overlay --interface=Ethernet"

    在其中根据情况设置要使用的网络接口。

    1. # Example
    2. curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml | sed 's/Ethernet/Ethernet0 2/g' | kubectl apply -f -

加入 Windows 工作节点

Note:

Windows 节的所有代码片段都需要在 PowerShell 环境中执行,并且要求在 Windows 工作节点上具有提升的权限(Administrator)。

安装 Docker EE

  1. Install-WindowsFeature -Name containers

安装 Docker 操作指南在 Install Docker Engine - Enterprise on Windows Servers

安装 wins、kubelet 和 kubeadm

  1. curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
  2. .\PrepareNode.ps1 -KubernetesVersion v1.23.6

运行 kubeadm 添加节点

当你在控制面主机上运行 kubeadm init 时,输出了一个命令。现在运行这个命令。 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行 kubeadm token create --print-join-command 来生成新的令牌和 join 命令。

安装 containerD

  1. curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/Install-Containerd.ps1
  2. .\Install-Containerd.ps1

Note:

要安装特定版本的 containerD,使用参数 -ContainerDVersion指定版本。

  1. # Example
  2. .\Install-Containerd.ps1 -ContainerDVersion 1.4.1

Note:

如果你在 Windows 节点上使用了与 Ethernet 不同的接口(例如 “Ethernet0 2”),使用参数 -netAdapterName 指定名称。

  1. # Example
  2. .\Install-Containerd.ps1 -netAdapterName "Ethernet0 2"

安装 wins,kubelet 和 kubeadm

  1. curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
  2. .\PrepareNode.ps1 -KubernetesVersion v1.23.6 -ContainerRuntime containerD

运行 kubeadm 添加节点

使用当你在控制面主机上运行 kubeadm init 时得到的命令。 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行 kubeadm token create --print-join-command 来生成新的令牌和 join 命令。

Note: If using CRI-containerD add --cri-socket "npipe:////./pipe/containerd-containerd" to the kubeadm call

检查你的安装

你现在应该能够通过运行下面的命令来查看集群中的 Windows 节点了:

  1. kubectl get nodes -o wide

如果你的新节点处于 NotReady 状态,很可能的原因是系统仍在下载 Flannel 镜像。 你可以像之前一样,通过检查 kube-system 名字空间中的 Flannel Pods 来了解 安装进度。

  1. kubectl -n kube-system get pods -l app=flannel

一旦 Flannel Pod 运行起来,你的节点就应该能进入 Ready 状态并可 用来处理负载。

What’s next

最后修改 April 20, 2022 at 6:20 PM PST: [zh]update file content/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md (63cf9b57c)