在 Windows 集群上启动 Kubernetes

使用 Rancher 配置自定义集群时,Rancher 通过 RKE(Rancher Kubernetes Engine)在现有节点上安装 Kubernetes。

在使用 Rancher 配置的 Windows 集群中,集群必须同时包含 Linux 和 Windows 节点。Kubernetes controlplane 只能运行在 Linux 节点上,Windows 节点只能有 Worker 角色。Windows 节点只能用于部署工作负载。

Windows 集群的其他要求如下:

  • 只有在创建集群时启用了 Windows 支持的集群才能添加 Windows 节点。无法为现有集群启用 Windows 支持。
  • 需要 Kubernetes 1.15+。
  • 必须使用 Flannel 网络提供商。
  • Windows 节点必须有 50 GB 的磁盘空间。

有关完整的要求列表,请参阅本节

有关支持 Windows 的 Kubernetes 功能摘要,请参阅在 Windows 中使用 Kubernetes 支持的功能和限制的 Kubernetes 文档,或在 Kubernetes 中调度 Windows 容器的指南

RKE2 Windows

RKE2 配置功能还包括在 Windows 集群上安装 RKE2。RKE2 的 Windows 功能包括:

  • 由 containerd 提供支持的使用 RKE2 的 Windows 容器
  • 直接从 Rancher UI 配置 Windows RKE2 自定义集群
  • 用于 Windows RKE2 自定义集群的 Calico CNI
  • 技术预览包含了 Windows Server 的 SAC 版本(2004 和 20H2)

要使 Windows 支持 RKE2 自定义集群,请选择 Calico 作为 CNI。

在 Windows 集群上启动 Kubernetes - 图1备注

默认情况下,Rancher 允许 Windows 工作负载 pod 部署在 Windows 和 Linux Worker 节点上。在 RKE2 中创建混合集群时,你必须编辑 Chart 中的 nodeSelector,从而将 Pod 放置到兼容的 Windows 节点上。有关如何使用 nodeSelector 将 pod 分配给节点的更多信息,请参阅 Kubernetes 文档

  • Kubernetes v1.24.1 及更高版本支持 Windows RKE2 中的 HostProcess 容器。有关详细信息,请参阅上游文档

Windows 集群的要求

网络、操作系统和 Docker 的一般节点要求与 Rancher 安装 的节点要求相同。

操作系统和 Docker 要求

我们对 Windows Server 和 Windows 容器的支持与 LTSC(长期服务渠道)和 SAC(半年渠道)的 Microsoft 官方生命周期相匹配。

有关 Windows Server 的支持生命周期的日期,请参阅 Microsoft 文档

Kubernetes 版本

需要 Kubernetes v1.15+。

如果你在 Windows Server 20H2 Standard Core 上使用 Kubernetes v1.21,则必须在节点上安装补丁“2019-08 Servicing Stack Update for Windows Server”。

节点要求

集群中的主机至少需要:

  • 2 核 CPU
  • 5 GB 内存
  • 50 GB 磁盘空间

Rancher 不会配置不满足要求的节点。

网络要求

在配置新集群之前,请确保你已经在接收入站网络流量的设备上安装了 Rancher。这是集群节点与 Rancher 通信所必需的。如果你尚未安装 Rancher,请在继续阅读本指南之前先参阅安装文档进行安装。。

Rancher 仅支持使用 Flannel 作为网络提供商的 Windows。

有两个网络选项:Host Gateway (L2bridge)VXLAN (Overlay)。默认选项是 VXLAN (Overlay) 模式。

对于 Host Gateway (L2bridge) 网络,最好为所有节点使用相同的第 2 层网络。否则,你需要为它们配置路由规则。有关详细信息,请参阅配置云托管 VM 路由的文档。如果你使用的是 Amazon EC2、Google GCE 或 Azure 虚拟机,你需要禁用私有 IP 地址检查

对于 VXLAN (Overlay) 网络,你必须安装 KB4489899 补丁。大多数云托管的 VM 已经具有此修补程序。

如果你在为 AWS 虚拟私有云配置 DHCP 选项集,请注意,你只能在 domain-name 选项字段中指定一个域名。详情请参见 DHCP 选项文档

在 Windows 集群上启动 Kubernetes - 图2备注

一些 Linux 操作系统支持以空格分隔的多个域名。但是,其他 Linux 操作系统和 Windows 将该值视为单个域名,从而导致意外错误。如果你的 DHCP 选项集与具有多个操作系统实例的 VPC 相关联,请仅指定一个域名。

带有 ESXi 6.7u2 及更高版本的 vSphere 上的 Rancher

如果你在带有 ESXi 6.7u2 或更高版本的 VMware vSphere 上使用 Rancher,并使用 Red Hat Enterprise Linux 8.3、CentOS 8.3 或 SUSE Enterprise Linux 15 SP2 或更高版本,你需要禁用 vmxnet3 虚拟网络适配器硬件卸载功能。否则,不同集群节点上的 pod 之间的所有网络连接会因为超时错误而失败。从 Windows pod 到在 Linux 节点上运行的关键服务(例如 CoreDNS)的所有连接也将失败。外部连接也可能失败。出现这个问题的原因是 Linux 发行版在 vmxnet3 中启用了硬件卸载功能,而且 vmxnet3 硬件卸载功能中存在一个会丢弃客户覆盖流量的数据包的 bug。要解决此问题,必须禁用 vmxnet3 硬件卸载功能。此设置不会在重启后继续生效,因此需要在每次启动时禁用。推荐的做法是在 /etc/systemd/system/disable_hw_offloading.service 中创建一个 systemd 单元文件,这会在启动时禁用 vmxnet3 硬件卸载功能。禁用 vmxnet3 硬件卸载功能的示例 systemd 单元文件如下所示。注意,<VM network interface> 必须自定义为主机的 vmxnet3 网络接口,如 ens192

  1. [Unit]
  2. Description=Disable vmxnet3 hardware offloading feature
  3. [Service]
  4. Type=oneshot
  5. ExecStart=ethtool -K <VM network interface> tx-udp_tnl-segmentation off
  6. ExecStart=ethtool -K <VM network interface> tx-udp_tnl-csum-segmentation off
  7. StandardOutput=journal
  8. [Install]
  9. WantedBy=multi-user.target

然后在 systemd 单元文件上设置适当的权限:

  1. chmod 0644 /etc/systemd/system/disable_hw_offloading.service

最后,启用 systemd 服务:

  1. systemctl enable disable_hw_offloading.service

架构要求

Kubernetes 集群管理节点(etcdcontrolplane)必须运行在 Linux 节点上。

部署工作负载的 worker 节点通常是 Windows 节点,但必须至少有一个 worker 节点运行在 Linux 上,才能按顺序运行 Rancher Cluster Agent、DNS、Metrics Server 和 Ingress 相关容器。

推荐架构

我们推荐下表中列出的三节点架构,但你始终可以添加额外的 Linux 和 Windows worker 节点来扩展集群,从而实现冗余:

节点操作系统Kubernetes 集群角色用途
节点 1Linux (推荐 Ubuntu Server 18.04)Control plane, etcd, worker管理 Kubernetes 集群
节点 2Linux (推荐 Ubuntu Server 18.04)Worker支持集群的 Rancher Cluster Agent、Metrics Server、DNS 和 Ingress
节点 3Windows(Windows Server 核心版本 1809 或更高版本)Worker运行 Windows 容器

容器要求

Windows 要求容器的版本必须与部署容器的 Windows Server 的版本一致。因此,你必须在 Windows Server 核心版本 1809 或更高版本上构建容器。如果你已经使用早期的 Windows Server 核心版本构建了容器,则必须使用 Windows Server 核心版本 1809 或更高版本重新构建容器。

云提供商要求

如果你在集群中设置了 Kubernetes 云提供商,则需要进行一些额外的操作。如果你想使用云提供商的功能,例如为集群自动配置存储、负载均衡器或其他基础设施,你可能需要设置云提供商。有关如何配置满足条件的云提供商集群节点,请参阅此页面

如果你的云提供商是 GCE(Google Compute Engine),则必须执行以下操作:

  • 按照步骤cluster.yml 中启用 GCE 云提供商。
  • 在 Rancher 中配置集群时,在 Rancher UI 中选择自定义云提供商作为云提供商。

教程:如何创建支持 Windows 的集群

本教程描述了如何使用推荐架构中的三个节点创建由 Rancher 配置的集群。

在现有节点上使用 Rancher 配置集群时,你需要在每个节点上安装 Rancher Agent 来将节点添加到集群中。在 Rancher UI 中创建或编辑集群时,你会看到一个自定义节点运行命令,你可以在每台服务器上运行该命令,从而将服务器添加到集群中。

要设置支持 Windows 节点和容器的集群,你需要完成以下任务:

1. 配置主机

要在具有 Windows 支持的现有节点上配置集群,请准备好你的主机。

主机可以是:

  • 云托管的虚拟机
  • 虚拟化集群中的虚拟机
  • 裸金属服务器

你将配置三个节点:

  • 一个 Linux 节点,用于管理 Kubernetes controlplane 并存储你的 etcd
  • 第二个 Linux 节点,它将作为 worker 节点。
  • Windows 节点,它将作为 worker 节点运行 Windows 容器。
节点操作系统
节点 1Linux (推荐 Ubuntu Server 18.04)
节点 2Linux (推荐 Ubuntu Server 18.04)
节点 3Windows(Windows Server 核心版本 1809 或更高版本)

如果你的节点托管在云提供商上,并且你需要自动化支持(例如负载均衡器或持久存储设备),你的节点还需要满足额外的配置要求。详情请参见选择云提供商

2. 在现有节点上创建集群

在现有节点上创建 Windows 集群的说明与一般创建自定义集群的说明非常相似,但有一些特定于 Windows 的要求。

  1. 在左上角,单击 ☰ > 集群管理
  2. 集群页面上,单击创建
  3. 单击自定义
  4. 集群名称字段中输入集群的名称。
  5. Kubernetes 版本下拉菜单中,选择 v1.19 或更高版本。
  6. 网络提供商字段中,选择 Flannel
  7. Windows 支持中,单击启用
  8. 可选:启用 Windows 支持后,你将能够选择 Flannel 后端模式。有两个网络选项:Host Gateway (L2bridge)VXLAN (Overlay)。 默认选项是 VXLAN (Overlay) 模式。
  9. 点击下一步

在 Windows 集群上启动 Kubernetes - 图3重要提示:

对于 Host Gateway (L2bridge) 网络,最好为所有节点使用相同的第 2 层网络。否则,你需要为它们配置路由规则。有关详细信息,请参阅配置云托管 VM 路由的文档。如果你使用的是 Amazon EC2、Google GCE 或 Azure 虚拟机,你需要禁用私有 IP 地址检查

3. 将节点添加到集群

本节介绍如何将 Linux 和 Worker 节点注册到集群。你将在每个节点上运行一个命令,该命令将安装 Rancher Agent 并允许 Rancher 管理每个节点。

添加 Linux master 节点

在本节中,你需要在 Rancher UI 上填写表单以获取自定义命令,从而在 Linux master 节点上安装 Rancher Agent。然后,复制该命令并在 Linux master 节点上运行命令,从而在集群中注册该节点。

集群中的第一个节点应该是具有 controlplaneetcd 角色的 Linux 主机。至少必须为此节点启用这两个角色,并且必须先将此节点添加到集群中,然后才能添加 Windows 主机。

  1. 节点操作系统中,单击 Linux
  2. 节点角色中,至少选择 etcdcontrolplane。推荐选择所有的三个角色。
  3. 可选:如果点击显示高级选项,你可以自定义 Rancher Agent节点标签的设置。
  4. 将屏幕上显示的命令复制到剪贴板。
  5. SSH 到你的 Linux 主机,然后运行复制到剪贴板的命令。
  6. 完成配置 Linux 节点后,选择完成

结果

你已创建集群,集群的状态是配置中。Rancher 已在你的集群中。

当集群状态变为 Active 后,你可访问集群。

Active 状态的集群会分配到两个项目:

  • Default:包含 default 命名空间
  • System:包含 cattle-systemingress-nginxkube-publickube-system 命名空间。

节点可能需要几分钟才能注册到集群中。

添加 Linux Worker 节点

在本节中,我们通过运行命令将 Linux Worker 节点注册到集群中。

在初始配置集群之后,你的集群只有一个 Linux 主机。接下来,我们添加另一个 Linux worker 主机,用于支持集群的 Rancher Cluster AgentMetrics ServerDNSIngress

  1. 在左上角,单击 ☰ > 集群管理
  2. 转到你创建的集群,然后单击 ⋮ > 编辑配置
  3. 向下滚动到节点操作系统。选择 Linux
  4. 自定义节点运行命令中,转到节点选项并选择 Worker 角色。
  5. 将屏幕上显示的命令复制到剪贴板。
  6. 使用远程终端连接登录到你的 Linux 主机。粘贴剪贴板的命令并运行。
  7. Rancher中,单击保存

结果Worker 角色已安装在你的 Linux 主机上,并且节点会向 Rancher 注册。节点可能需要几分钟才能注册到集群中。

在 Windows 集群上启动 Kubernetes - 图4备注

Linux Worker 节点上的污点

以下污点将添加集群中的 Linux Worker 节点中。将此污点添加到 Linux Worker 节点后,添加到 Windows 集群的任何工作负载都将自动调度到 Windows Worker 节点。如果想将工作负载专门调度到 Linux Worker 节点上,则需要为这些工作负载添加容忍度。

污点键污点值污点效果
cattle.io/oslinuxNoSchedule

添加 Windows Worker 节点

在本节中,我们通过运行命令将 Windows Worker 节点注册到集群中。

你可以通过编辑集群并选择 Windows 选项,从而将 Windows 主机添加到集群中。

  1. 在左上角,单击 ☰ > 集群管理
  2. 转到你创建的集群,然后单击 ⋮ > 编辑配置
  3. 向下滚动到节点操作系统。选择 Windows。注意:你将看到 worker 角色是唯一可用的角色。
  4. 将屏幕上显示的命令复制到剪贴板。
  5. 使用你喜欢的工具(例如 Microsoft 远程桌面)登录到 Windows 主机。在 Command Prompt (CMD) 中运行复制到剪贴板的命令。
  6. 在 Rancher 中,单击保存
  7. 可选:如果要向集群添加更多 Windows 节点,请重复这些操作。

结果Worker 角色已安装在你的 Windows 主机上,并且节点会向 Rancher 注册。节点可能需要几分钟才能注册到集群中。你现在已拥有一个 Windows Kubernetes 集群。

可选的后续步骤

创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式:

  • 通过 kubectl CLI 访问你的集群:按照这些步骤在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。
  • 通过 kubectl CLI 使用授权的集群端点访问你的集群:按照这些步骤直接使用 kubectl 访问集群,而无需通过 Rancher Server 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。

Azure 中存储类的配置

如果你的节点使用 Azure VM,则可以使用 Azure 文件作为集群的存储类(StorageClass)。详情请参见此部分