codecamp

Kubernetes 添加Windows节点

添加 Windows 节点

FEATURE STATE: Kubernetes v1.18 [beta]

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

在开始之前

您的 Kubernetes 服务器的版本必须为 1.17 或更高版本。 要检查版本,请输入 ​kubectl version​。

  • 获取 Windows Server 2019 或更高版本的授权 以便配置托管 Windows 容器的 Windows 节点。 如果你在使用 VXLAN/覆盖(Overlay)联网设施,则你还必须安装 KB4489899
  • 一个利用 kubeadm 创建的基于 Linux 的 Kubernetes 集群;你能访问该集群的控制面。

目标

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

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

联网配置 

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

配置 Flannel 

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

    sudo sysctl net.bridge.bridge-nf-call-iptables=1
    
  3. 下载并配置 Linux 版本的 Flannel
  4. 下载最新的 Flannel 清单文件:

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

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

    net-conf.json: |
        {
          "Network": "10.244.0.0/16",
          "Backend": {
             "Type": "vxlan",
             "VNI": 4096,
             "Port": 4789
        }
    }

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

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

  5. 应用 Flannel 清单并验证
  6. 首先应用 Flannel 配置:

    kubectl apply -f kube-flannel.yml
    

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

    kubectl get pods -n kube-system
    

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

    NAMESPACE     NAME                                      READY        STATUS    RESTARTS   AGE
    ...
    kube-system   kube-flannel-ds-54954                     1/1          Running   0          1m
  7. 添加 Windows Flannel 和 kube-proxy DaemonSet
  8. 现在你可以添加 Windows 兼容版本的 Flannel 和 kube-proxy。为了确保你能获得兼容 版本的 kube-proxy,你需要替换镜像中的标签。 下面的例子中展示的是针对 Kubernetes v1.24.0 版本的用法, 不过你应该根据你自己的集群部署调整其中的版本号。

    curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.24.0/g' | kubectl apply -f -
    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.yml​ 或 ​flannel-overlay.yml​ 文件中的下面这行:
    wins cli process run --path /k/flannel/setup.exe --args "--mode=overlay --interface=Ethernet"
    

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

    # Example
    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)。
  • CRI-containerD
  • 安装 containerD

    curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/Install-Containerd.ps1
    .\Install-Containerd.ps1
    Note:
    要安装特定版本的 containerD,使用参数 -ContainerDVersion 指定版本。
    # Example
    .\Install-Containerd.ps1 -ContainerDVersion 1.4.1

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

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

    安装 wins、kubelet 和 kubeadm

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

    从 cri-tools 项目安装 ​crtctl​。 ​crictl​ 是必需的,kubeadm 使用它与 CRI 端点通信。

    运行 kubeadm 添加节点

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

  • Docker Engine
  • 安装 Docker Engine

    安装 ​Containers ​功能特性

    Install-WindowsFeature -Name containers
    

    安装 Docker

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

    安装 cri-dockerd。kubelet 可以通过 cri-dockerd 在 CRI 兼容的节点上与 Docker 通信。

    Note:
    Docker Engine 没有实现 CRI, 而 CRI 是容器运行时能够与 Kubernetes 一起工作的要求。 出于这个原因,必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于原来的内置 Docker Engine 支持的项目, 而这一支持在 1.24 版本的 kubelet 中已被移除。

    从 cri-tools 项目安装 ​crictl​。 kubeadm 需要 ​crictl ​才能与 CRI 端点通信。

    安装 wins、kubelet 和 kubeadm

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

    运行 kubeadm 添加节点

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

检查你的安装 

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

kubectl get nodes -o wide

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

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

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


Kubernetes 升级kubeadm集群
Kubernetes 升级Windows节点
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Kubernetes 管理集群

Kubernetes Service

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }