Skip to main content

创建 Windows 集群

概述#

从 v2.3.0 开始支持

当使用 Rancher 初始化一个自定义集群时,Rancher 会在您的基础设施上,使用 RKE(Rancher Kubernetes Engine)进行 Kubernetes 集群初始化。

使用限制#

使用 Windows 集群时,有如下限制:

  • 同时使用 Linux 以及 Windows 的节点时,Windows 节点只能作为 worker 节点使用,Linux 则需要作为管理节点。

  • 您只能在启用了 Windows 支持的集群中添加 Windows 节点。

  • Windows 集群只能适用于自定义集群,并且 Kubernetes 版本不低于 v1.15。

  • 只能使用 Flannel 作为网络插件。

  • 不能在已创建的集群中启用 Windows 支持。

  • Windows 节点必须有 50GB 的磁盘空间,并且需要保证满足所有以下的节点要求

Windows 集群比 Linux 集群有更多的使用限制。例如,Windows 节点必须有 50GB 的磁盘空间,并且需要保证满足所有以下的节点要求

有关 Kubernetes 中 Windows 节点支持,请参阅Kubernetes Windows 支持或者参考在 Kubernetes 中调度 Windows 容器

Windows 集群要求#

对于自定义集群,网络,操作系统和 Docker 的一般节点要求与下游集群的节点要求相同。

操作系统和 Docker#

Rancher v2.5.8+:我们对 Windows Server 和 Windows 容器的支持与微软官方的 LTSC(长期服务渠道)和 SAC(半年度渠道)的生命周期一致。

Rancher v2.5.8 之前:关于 Windows Server 的支持生命周期日期,请参见微软文档。

为了将 Windows 节点添加到集群,该节点必须运行以下 Windows Server 版本之一,并且使用相应版本的 Docker 企业版(EE):

  • 具有 Windows Server 核心版本 1809 的节点应使用 Docker EE-basic 18.09 或 Docker EE-basic 19.03。
  • 具有 Windows Server 核心版本 1903 的节点应使用 Docker EE-basic 19.03。

注意事项:

  • 如果您使用的是 AWS,Rancher 建议将 Microsoft Windows Server 2019 Base with Containers 作为 Amazon Machine Image(AMI)。
  • 如果您使用的是 GCP,Rancher 建议将 Windows Server 2019 Datacenter for Containers 作为 OS 映像。

节点要求#

集群中的节点至少必须具有:

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

如果节点不满足这些要求,Rancher 将不会纳管该节点。

网络要求#

在配置新集群之前,请确保已经安装了 Rancher。并且确保节点可以与 Rancher 通信。如果尚未安装 Rancher,请参考安装文档进行安装。

Rancher 仅支持在 Windows 集群中使用 Flannel 作为网络插件。

您需要在Host Gateway (L2bridge)VXLAN (Overlay)中选择一个作为 Rancher 的网络模式。

如果您选用Host Gateway (L2bridge) 网络模式,最好对所有节点使用相同的第 2 层网络。否则,您需要为其配置路由规则。有关详细信息,请参阅配置云托管的 VM 路由,如果您使用的是亚马逊 EC2,Google GCE 或 Azure VM,还需要禁用私有 IP 地址检查

VXLAN (Overlay) 模式是默认选项。如果您选用 VXLAN (Overlay) 网络,必须安装KB4489899补丁,大多数云托管的虚拟机已经安装了这个补丁。

如果您正在为 AWS 虚拟私有云配置 DHCP 选项,请注意在域名选项字段中,只能指定一个域名。根据 DHCP 选项文档

一些 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 pods 到 Linux 节点上运行的关键服务的连接,如 CoreDNS,也将失败。外部连接也有可能失败。这个问题是由于 Linux 发行版在vmxnet3中启用了硬件卸载功能,以及vmxnet3硬件卸载功能中的一个 bug,导致丢弃了客户覆盖流量的数据包。为了解决这个问题,有必要禁用vmxnet3的硬件卸载功能。这个设置不能在重启后继续使用,因此有必要在每次启动时禁用。推荐的做法是在/etc/systemd/system/disable_hw_offloading.service创建一个 systemd 单元文件,在启动时禁用vmxnet3硬件卸载功能。禁用 vmxnet3 硬件卸载功能的 systemd 单元文件示例如下。注意,<VM network interface>必须定制为主机的vmxnet3网络接口,如ens192:

[Unit]
Description=Disable vmxnet3 hardware offloading feature
[Service]
Type=oneshot
ExecStart=ethtool -K <VM network interface> tx-udp_tnl-segmentation off
ExecStart=ethtool -K <VM network interface> tx-udp_tnl-csum-segmentation off
StandardOutput=journal
[Install]
WantedBy=multi-user.target

然后给 systemd 单元文件设置相应的权限:

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

最后,启用 systemd 服务。

systemctl enable disable_hw_offloading.service

架构要求#

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

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

在所有三个节点角色(worker、etcd 和 controlplane)都出现之前,集群不会开始配置。

下表中是一个由三个节点组成的集群,您可以添加其他 Linux 和 Windows 节点来扩展集群,实现冗余:

节点操作系统集群角色目的
Node 1Linux (推荐 Ubuntu Server 18.04)Control Plane, etcd, Worker管理 Kubernetes 集群
Node 2Linux (推荐 Ubuntu Server 18.04)Worker用来部署 Rancher Cluster Agent,Metrics server,DNS 和 Ingress
Node 3Windows (Windows Server 1809 或以上版本)Worker运行 Windows 容器

容器要求#

因为 Windows 要求容器必须建立在与容器相同的 Windows Server 版本上,所以您必须在 Windows Server Core 1809 或更高版本上构建容器。如果您已经为早期的 Windows Server 核心版本构建了容器,则必须在 Windows Server Core 1809 或更高版本上重新构建。

Cloud Providers#

如果您在集群中设置 Kubernetes Cloud Provider,则需要执行一些其他步骤。如果要利用云提供商的功能(例如,为集群自动配置存储,负载均衡器或其他基础设施),则可能需要设置 Cloud Provider。请参阅本页,以获取有关如何配置 Cloud Provider 的详细信息。

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

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

创建 Windows 集群#

本教程将介绍如何使用三个节点创建 Windows 集群。

使用 Rancher 设置自定义集群时,将通过在每个集群上安装Rancher Agent将节点添加到集群中。从 Rancher UI 创建或编辑集群时,您将看到一个自定义节点启动命令,您可以在每个服务器上运行该命令以将其添加到自定义集群中。

要创建支持 Windows 节点和容器的自定义集群,您需要完成以下任务。

1. 初始化主机#

要开始配置具有 Windows 支持的自定义集群,请先准备主机。

您的主机可以是:

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

您将配置三个节点:

  • 一个 Linux 节点,用于部署 Kubernetes control-plane 和etcd
  • 第二个 Linux 节点,它将是一个工作节点
  • Windows 节点,它将用来运行 Windows 容器。
节点操作系统
Node 1Linux (推荐 Ubuntu Server 18.04)
Node 2Linux (推荐 Ubuntu Server 18.04)
Node 3Windows (Windows Server Core Version 1809 或以上)

如果您的节点由云供应商托管,并且您需要自动化支持(例如负载均衡器或永久性存储设备),则您的节点还有其他配置要求。有关详细信息,请参阅设置 Cloud Provider

2. 创建自定义集群#

创建支持 Windows 节点的自定义集群的说明与一般创建自定义集群的说明基本相同,但是具有一些特定于 Windows 的要求。

仅当集群使用 Kubernetes v1.15+ 和 Flannel 网络插件时才可以启用 Windows 支持。

  1. 全局视图中,单击集群选项卡,然后单击添加集群

  2. 单击自定义

  3. 集群名称文本框中输入集群的名称。

  4. Kubernetes 版本下拉菜单中,选择 v1.15 或更高版本。

  5. 网络驱动字段中,选择Flannel

  6. Windows 支持部分中,单击启用

  7. 可选:启用 Windows 支持后,您将能够选择 Flannel 后端模式。有两个网络选项:Host Gateway (L2bridge)VXLAN (Overlay)。默认选项是 VXLAN (Overlay) 模式。

  8. 单击 下一步.

重要提示: 对于 Host Gateway (L2bridge)网络,最好对所有节点使用相同的第 2 层网络。否则,您需要为其配置路由规则。有关详细信息,请参阅配置云托管的 VM 路由。如果您使用的是亚马逊 EC2,Google GCE 或 Azure VM,还需要禁用私有 IP 地址检查

3. 在集群上添加节点#

本节介绍如何将 Linux 和 Worker 节点注册到自定义集群。

添加 Linux Master 节点#

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

在本节中,我们在 Rancher UI 上填写表格,以获取自定义命令,以在 Linux 主节点上安装 Rancher 代理。然后,我们将复制命令并在 Linux 主节点上运行该命令,以在集群中注册该节点。

  1. 节点操作系统部分中,单击Linux

  2. 节点角色部分中,至少选择etcdControl Plane。选择所有角色。

  3. 可选:如果您单击显示高级选项,则可以自定义 Rancher Agent节点标签等。

  4. 将屏幕上显示的命令复制到剪贴板。

  5. SSH 进入 Linux 主机,然后运行复制到剪贴板的命令。

  6. 完成配置 Linux 节点后,选择完成

结果:

  • 您的集群已创建并进入为 Provisioning 的状态。Rancher 正在启动您的集群。
  • 您可以在集群的状态更新为 Active 后访问它。
  • Rancher 为活动的集群分配了两个项目,即 Default(包含命名空间 default)和 System(包含命名空间 cattle-systemingress-nginxkube-publickube-system,如果命名空间存在)。

该节点可能需要几分钟才能在您的集群中注册。

添加 Linux Worker 节点#

初始配置自定义集群后,集群仅具有单个 Linux 主机。接下来,我们添加另一个 Linuxworker主机,它将用于为您的集群支持 Rancher Cluster AgentMetrics ServerDNSIngress

  1. 全局视图中,单击集群

  2. 转到您创建的自定义集群,然后单击省略号(...)> 编辑。

  3. 向下滚动到节点操作系统。选择 Linux

  4. 自定义节点运行命令部分中,转到节点选项并选择Worker角色。

  5. 将屏幕上显示的命令复制到剪贴板。

  6. 使用远程终端连接登录到 Linux 主机。运行复制到剪贴板的命令。

  7. Rancher 中,单击保存

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

注意: Linux 节点上的污点(Taint)设置

对于添加到集群中的每个 Linux 节点,以下污点将添加到 Linux 节点。通过将此污点添加到 Linux Worker 节点,使得添加到 Windows 集群的所有工作负载都将自动调度到 Windows Worker 节点。如果要将工作负载专门安排到 Linux 工作节点上,则需要为这些工作负载添加 Toleration 或者指定某一台 Linux 主机。

Taint KeyTaint ValueTaint Effect
cattle.io/oslinuxNoSchedule

添加 Windows 节点#

您可以通过编辑集群并选择Windows选项将 Windows 主机添加到自定义集群。

  1. 全局视图中,单击集群

  2. 转到您创建的自定义集群,然后单击省略号(...)>编辑。

  3. 向下滚动到节点操作系统。选择 Windows。注意:您将看到 worker 角色是唯一可用的角色。

  4. 将屏幕上显示的命令复制到剪贴板。

  5. 使用首选工具,例如Microsoft 远程桌面。在命令提示符(CMD)中运行复制到剪贴板的命令。

  6. Rancher中,单击保存

  7. 可选:如果要向集群添加更多 Windows 节点,请重复上述步骤。

结果: Worker角色已安装在 Windows 主机上,并且该节点向 Rancher 注册。该节点可能需要几分钟才能在您的集群中注册。您现在已经拥有来 Windows Kubernetes 集群。

可选步骤#

创建集群后,您可以通过 Rancher UI 访问它。作为最佳实践,我们建议同时设置以下访问集群的替代方法:

  • 通过 kubectl CLI 访问集群: 请按照这些步骤来通过 kubectl 访问您的集群。在这种情况下,您将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会将您连接到下游集群。此方法使您无需 Rancher UI 即可管理集群。

  • 通过 kubectl CLI 和授权的集群地址访问您的集群: 请按照这些步骤来通过 kubectl 直接访问您的集群,而不需要通过 Rancher 进行认证。我们建议您设定此方法访问集群,这样在您无法连接 Rancher 时您仍然能够访问集群。

Azure 中存储类的配置#

如果您为节点使用 Azure VM,则可以将Azure File用作存储类

为了使 Azure 平台创建所需的存储资源,请按照下列步骤操作:

  1. 配置 Azure Cloud Provider

  2. 配置kubectl连接到您的集群。

  3. 复制下面的 Service Account 的ClusterRoleClusterRoleBinding配置:

    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
    name: system:azure-cloud-provider
    rules:
    - apiGroups: ['']
    resources: ['secrets']
    verbs: ['get','create']
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
    name: system:azure-cloud-provider
    roleRef:
    kind: ClusterRole
    apiGroup: rbac.authorization.k8s.io
    name: system:azure-cloud-provider
    subjects:
    - kind: ServiceAccount
    name: persistent-volume-binder
    namespace: kube-system
  4. 使用以下命令创建相关资源。

    # kubectl create -f <MANIFEST>
Last updated on by vickyhella