适用于 v2.1.0 到 v2.1.9 和 v2.2.0 到 v2.2.3 版本

本节介绍如何在 Rancher v2.1.x 和 v2.2.x 版本中配置 Windows 集群。如果您正在使用 Rancher v2.3.0 或更高版本的 Rancher,请参阅新的 Windows 文档v2.3.0 或更高版本

当您创建一个自定义集群 (Rancher 使用 RKE (Rancher Kubernetes Engine) 在现有的节点上配置 Kubernetes 集群)时,您可以通过将 Linux 和 Windows 节点混合使用来创建自定义 Windows 集群。

重要: 在 v2.3 之前的 Rancher 版本中,对 Windows 节点的支持是实验性的。因此,如果您在 v2.3 之前使用 Rancher,则不建议在生产环境中使用 Windows 节点。

本指南将引导您完成创建包含三个节点的自定义 Windows 集群:

  • 一个 Linux 节点,用作 Kubernetes 管理面节点。
  • 另一个 Linux 节点,用作 Kubernetes 工作节点,用于支持集群的 Ingress Controller 等。
  • 一个 Windows 节点,也用作 Kubernetes 工作节点,用于运行您的 Windows 容器。

有关 Kubernetes 支持 Windows 的特性的摘要,请参阅在 Kubernetes 中使用 Windows

操作系统和容器要求

  • 对于使用 Rancher v2.1.x 和 v2.2.x 创建的集群,容器必须运行在 Windows Server 1809 或更高版本的 Windows 上。
  • 您必须在 Windows Server 1809 或更高版本的 Windows 上构建容器,才能在有着相同 Windows 版本的服务器上运行这些容器。

创建支持 Windows 的集群

在设置支持 Windows 节点和容器的自定义集群时,请完成下面的一系列任务。

1、创建节点

开始创建支持 Windows 的自定义集群前,请先准备您的节点服务器。根据我们的需求提供三个节点,两个 Linux 节点,一个 Windows 节点。您的节点可以是:

  • 云主机
  • 虚拟化平台中的虚拟机
  • 裸金属服务器

下表列出了您将分配给每个节点的Kubernetes 角色,尽管在创建节点过程中,您不会启用这些角色。但我们只是通知您每个节点的用途。第一个节点是 Linux 节点,主要负责 Kubernetes 控制面,不过,在这个用例中,我们将在这个节点上安装所有三个角色。节点 2 还是一个 Linux 工作节点,负责 Ingress Controller 等组件的支持。最后,第三个节点是 Windows 工作节点,它将运行您的 Windows 应用程序。

节点操作系统集群角色
节点 1Linux (推荐 Ubuntu Server 16.04)controlplane,etcd,worker
节点 2Linux (推荐 Ubuntu Server 16.04)worker (此节点用于 Ingress 支持)
节点 3Windows (Windows Server core version 1809 或更高版本)worker

要求

  • 您可以在安装指南中查看 Linux 和 Windows 节点的节点要求。
  • 虚拟化或裸金属的节点都必须使用 2 层网络连接。
  • 为了支持Ingress Controller,您的集群必须包含至少一个专门用于 worker 角色的 Linux 节点。
  • 尽管我们推荐上表中只列出的三个节点的架构,但是您可以添加额外的 Linux 和 Windows 节点来扩展您的集群,来实现冗余。

2、云主机的网络配置

注意: 此步骤仅适用于托管在云厂商虚拟机上的节点。如果您正在使用虚拟化或裸金属服务器,请直击跳转到创建自定义集群

如果您将节点托管在下面列出的任何云服务上,则必须在启动时禁用 Linux 和 Windows 节点时,禁用私有 IP 地址检查。请按照下面每个的说明,在每个节点上禁用的此检查。

服务禁用私有 IP 地址检查的说明
亚马逊 EC2禁用源/目标检查
谷歌云为实例启用 IP 转发
Azure VM启用或禁用 IP 转发

3、创建自定义集群

要创建支持 Windows 节点的自定义集群,请按照使用自定义节点创建集群中的说明操作,创建自定义集群,创建支持 Windows 节点的集群。

启用 Windows 支持选项

在选择集群选项时,将Windows 支持 (实验)设置为启用。

网络选项

当为支持 Windows 的集群选择网络插件时,唯一可用的选项是 Flannel,因为我们要用到host-gw来进行 IP 路由。

如果您的节点由云提供商托管,并且您希望获得额外自动化功能,例如负载均衡器或持久存储设备等,有关配置信息,请参阅Cloud Provider 设置

节点配置

集群中的第一个节点应该是充当控制面角色的 Linux 节点。在将 Windows 节点添加到集群之前,必须先创建此角色的节点。此节点必须启用 etcd 和 controlplane 角色,但我们建议同时启用这三个角色。下表列出了我们的推荐设置 (稍后我们将为节点 2 和节点 3 提供推荐设置)。

选项设置
节点操作系统Linux
节点的角色etcd,controlplane,worker

4、添加支持 Ingress 的 Linux 节点

在完成自定义集群的初始设置之后,集群只有一个 Linux 节点。我们需要添加另一个 Linux 节点,该节点将用于支持集群的 Ingress。

  1. 从主菜单中,找到您的 Windows 集群。

  2. 单击 编辑集群

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

  4. 选择 Worker 角色。

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

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

  7. Rancher中,单击 保存

结果: worker 角色已安装在 Linux 节点上,节点注册到了 Rancher 中。

5、添加 Windows 工作节点

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

  1. 从主菜单中,找到您的 Windows 集群。

  2. 单击 编辑集群

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

  4. 选择 Worker 角色。

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

  6. 使用您喜欢的工具登录到您的 Windows 节点,例如Microsoft 远程桌面。在**命令提示符(CMD)**中运行复制到剪贴板的命令。

  7. 在 Rancher 中,单击 保存

  8. 可选: 如果您希望向集群中添加更多的 Windows 节点,请重复这些指令。

结果: worker 角色已经安装在您的 Windows 节点上,节点注册到了 Rancher 中。

6、配置云主机路由

我们使用的 Flannel 后端是Host Gateway(L2bridge)模式,那么同一节点上的所有容器都属于一个私有子网,子网会通过主机网络和另一个节点上的子网进行通信。

  • 如果您的节点在 AWS、私有数据中心或裸金属服务器上,请确保这些节点都在相同的 2 层子网中。如果节点不属于同一个 2 层子网,那么host-gw网络将无法正常工作。

  • 如果您的节点在谷歌云或 Azure 上,那么它们会在不同的 2 层子网中。谷歌云和 Azure 上的节点属于一个可路由的 3 层网络。请按照下面的说明,来配置谷歌云和 Azure,以便云网络知道如何在每个节点上路由主机子网。

要在谷歌云或 Azure 上配置主机子网路由,首先运行以下命令来查找每个工作节点上的主机子网:

  1. kubectl get nodes -o custom-columns=nodeName:.metadata.name,nodeIP:status.addresses[0].address,routeDestination:.spec.podCIDR

然后按照每个云提供商的说明为每个节点配置路由规则:

服务说明
谷歌云如果节点在谷歌云,您需要为每个节点添加一个静态路由:添加静态路由
Azure如果节点在 Azure,您需要创建一个路由表:自定义路由:用户定义