mirror of
https://github.com/rancher/rancher-docs.git
synced 2026-05-04 20:23:24 +00:00
287 lines
19 KiB
Markdown
287 lines
19 KiB
Markdown
---
|
||
title: 在 Windows 集群上启动 Kubernetes
|
||
---
|
||
|
||
使用 Rancher 配置[自定义集群](use-existing-nodes.md)时,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-集群的要求)。
|
||
|
||
有关支持 Windows 的 Kubernetes 功能摘要,请参阅[在 Windows 中使用 Kubernetes 支持的功能和限制](https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#supported-functionality-and-limitations)的 Kubernetes 文档,或[在 Kubernetes 中调度 Windows 容器的指南](https://kubernetes.io/docs/setup/production-environment/windows/user-guide-windows-containers/)。
|
||
|
||
|
||
## Rancher 2.6 变更
|
||
|
||
Rancher 2.6 支持直接使用 Rancher UI 配置 [RKE2](https://docs.rke2.io/) 集群。RKE2,也称为 RKE Government,是一个完全符合标准的 Kubernetes 发行版,它专注于安全性和合规性。
|
||
|
||
在 Rancher 2.6.5 中,RKE2 已经 GA。
|
||
|
||
### 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。
|
||
|
||
:::note
|
||
|
||
默认情况下,Rancher 允许 Windows 工作负载 pod 部署在 Windows 和 Linux Worker 节点上。在 RKE2 中创建混合集群时,你必须编辑 Chart 中的 `nodeSelector`,从而将 Pod 放置到兼容的 Windows 节点上。有关如何使用 `nodeSelector` 将 pod 分配给节点的更多信息,请参阅 [Kubernetes 文档](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector)。
|
||
|
||
:::
|
||
|
||
**_Rancher v2.6.7 新功能_**
|
||
|
||
- Kubernetes v1.24.1 及更高版本支持 Windows RKE2 中的 HostProcess 容器。有关详细信息,请参阅[上游文档](https://kubernetes.io/docs/tasks/configure-pod-container/create-hostprocess-pod/)。
|
||
|
||
## Windows 集群的要求
|
||
|
||
网络、操作系统和 Docker 的一般节点要求与 [Rancher 安装](installation-requirements.md)的节点要求相同。
|
||
|
||
### 操作系统和 Docker 要求
|
||
|
||
我们对 Windows Server 和 Windows 容器的支持与 LTSC(长期服务渠道)和 SAC(半年渠道)的 Microsoft 官方生命周期相匹配。
|
||
|
||
有关 Windows Server 的支持生命周期的日期,请参阅 [Microsoft 文档](https://docs.microsoft.com/en-us/windows-server/get-started/windows-server-release-info)。
|
||
|
||
### 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,请在继续阅读本指南之前先参阅[安装文档](installation-and-upgrade.md)进行安装。
|
||
|
||
Rancher 仅支持使用 Flannel 作为网络提供商的 Windows。
|
||
|
||
有两个网络选项:[**Host Gateway (L2bridge)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) 和 [**VXLAN (Overlay)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)。默认选项是 **VXLAN (Overlay)** 模式。
|
||
|
||
对于 **Host Gateway (L2bridge)** 网络,最好为所有节点使用相同的第 2 层网络。否则,你需要为它们配置路由规则。有关详细信息,请参阅[配置云托管 VM 路由的文档](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/use-windows-clusters/network-requirements-for-host-gateway.md#云托管虚拟机的路由配置)。如果你使用的是 Amazon EC2、Google GCE 或 Azure 虚拟机,你需要[禁用私有 IP 地址检查](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/use-windows-clusters/network-requirements-for-host-gateway.md#禁用私有-ip-地址检查)。
|
||
|
||
对于 **VXLAN (Overlay)** 网络,你必须安装 [KB4489899](https://support.microsoft.com/en-us/help/4489899) 修补程序。大多数云托管的 VM 已经具有此修补程序。
|
||
|
||
如果你在为 AWS 虚拟私有云配置 DHCP 选项集,请注意,你只能在 `domain-name` 选项字段中指定一个域名。详情请参见 [DHCP 选项文档](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。
|
||
|
||
:::note
|
||
|
||
一些 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`:
|
||
|
||
```
|
||
[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 集群管理节点(`etcd` 和 `controlplane`)必须运行在 Linux 节点上。
|
||
|
||
部署工作负载的 `worker` 节点通常是 Windows 节点,但必须至少有一个 `worker` 节点运行在 Linux 上,才能按顺序运行 Rancher Cluster Agent、DNS、Metrics Server 和 Ingress 相关容器。
|
||
|
||
我们推荐下表中列出的三节点架构,但你始终可以添加额外的 Linux 和 Windows worker 节点来扩展集群,从而实现冗余:
|
||
|
||
<a id="guide-architecture"></a>
|
||
|
||
| 节点 | 操作系统 | Kubernetes 集群角色 | 用途 |
|
||
| ------ | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
||
| 节点 1 | Linux(推荐 Ubuntu Server 18.04) | controlplane, etcd, worker | 管理 Kubernetes 集群 |
|
||
| 节点 2 | Linux(推荐 Ubuntu Server 18.04) | Worker | 支持集群的 Rancher Cluster Agent、Metrics Server、DNS 和 Ingress |
|
||
| 节点 3 | Windows(Windows Server 核心版本 1809 或更高版本) | Worker | 运行 Windows 容器 |
|
||
|
||
### 容器要求
|
||
|
||
Windows 要求容器的版本必须与部署容器的 Windows Server 的版本一致。因此,你必须在 Windows Server 核心版本 1809 或更高版本上构建容器。如果你已经使用早期的 Windows Server 核心版本构建了容器,则必须使用 Windows Server 核心版本 1809 或更高版本重新构建容器。
|
||
|
||
### 云提供商要求
|
||
|
||
如果你在集群中设置了 Kubernetes 云提供商,则需要进行一些额外的操作。如果你想使用云提供商的功能,例如为集群自动配置存储、负载均衡器或其他基础设施,你可能需要设置云提供商。有关如何配置满足条件的云提供商集群节点,请参阅[此页面](../pages-for-subheaders/set-up-cloud-providers.md)。
|
||
|
||
如果你的云提供商是 GCE(Google Compute Engine),则必须执行以下操作:
|
||
|
||
- 按照[步骤](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/set-up-cloud-providers/google-compute-engine.md) 在`cluster.yml` 中启用 GCE 云提供商。
|
||
- 在 Rancher 中配置集群时,在 Rancher UI 中选择**自定义云提供商**作为云提供商。
|
||
|
||
## 教程:如何创建支持 Windows 的集群
|
||
|
||
本教程描述了如何使用[推荐架构](#guide-architecture)中的三个节点创建由 Rancher 配置的集群。
|
||
|
||
在现有节点上使用 Rancher 配置集群时,你需要在每个节点上安装 [Rancher Agent](../reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md) 来将节点添加到集群中。在 Rancher UI 中创建或编辑集群时,你会看到一个**自定义节点运行命令**,你可以在每台服务器上运行该命令,从而将服务器添加到集群中。
|
||
|
||
要设置支持 Windows 节点和容器的集群,你需要完成以下任务:
|
||
|
||
|
||
### 1. 配置主机
|
||
|
||
要在具有 Windows 支持的现有节点上配置集群,请准备好你的主机。
|
||
|
||
主机可以是:
|
||
|
||
- 云托管的虚拟机
|
||
- 虚拟化集群中的虚拟机
|
||
- 裸金属服务器
|
||
|
||
你将配置三个节点:
|
||
|
||
- 一个 Linux 节点,用于管理 Kubernetes controlplane 并存储你的 `etcd`。
|
||
- 第二个 Linux 节点,它将作为 worker 节点。
|
||
- Windows 节点,它将作为 worker 节点运行 Windows 容器。
|
||
|
||
| 节点 | 操作系统 |
|
||
| ------ | ------------------------------------------------------------ |
|
||
| 节点 1 | Linux(推荐 Ubuntu Server 18.04) |
|
||
| 节点 2 | Linux(推荐 Ubuntu Server 18.04) |
|
||
| 节点 3 | Windows(Windows Server 核心版本 1809 或更高版本) |
|
||
|
||
如果你的节点托管在**云提供商**上,并且你需要自动化支持(例如负载均衡器或持久存储设备),你的节点还需要满足额外的配置要求。详情请参见[选择云提供商](../pages-for-subheaders/set-up-cloud-providers.md)。
|
||
|
||
### 2. 在现有节点上创建集群
|
||
|
||
在现有节点上创建 Windows 集群的说明与一般[创建自定义集群的说明](use-existing-nodes.md)非常相似,但有一些特定于 Windows 的要求。
|
||
|
||
1. 在左上角,单击 **☰ > 集群管理**。
|
||
1. 在**集群**页面上,单击**创建**。
|
||
1. 单击**自定义**。
|
||
1. 在**集群名称**字段中输入集群的名称。
|
||
1. 在 **Kubernetes 版本**下拉菜单中,选择 v1.19 或更高版本。
|
||
1. 在**网络提供商**字段中,选择 **Flannel**。
|
||
1. 在 **Windows 支持**中,单击**启用**。
|
||
1. 可选:启用 Windows 支持后,你将能够选择 Flannel 后端模式。有两个网络选项:[**Host Gateway (L2bridge)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) 和 [**VXLAN (Overlay)**](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)。默认选项是 **VXLAN (Overlay)** 模式。
|
||
1. 点击**下一步**。
|
||
|
||
:::note 重要提示:
|
||
|
||
对于 <b>Host Gateway (L2bridge)</b> 网络,最好为所有节点使用相同的第 2 层网络。否则,你需要为它们配置路由规则。有关详细信息,请参阅[配置云托管 VM 路由的文档](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/use-windows-clusters/network-requirements-for-host-gateway.md#云托管虚拟机的路由配置)。如果你使用的是 Amazon EC2、Google GCE 或 Azure 虚拟机,你需要[禁用私有 IP 地址检查](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/use-windows-clusters/network-requirements-for-host-gateway.md#禁用私有-ip-地址检查)。
|
||
|
||
:::
|
||
|
||
### 3. 将节点添加到集群
|
||
|
||
本节介绍如何将 Linux 和 Worker 节点注册到集群。你将在每个节点上运行一个命令,该命令将安装 Rancher Agent 并允许 Rancher 管理每个节点。
|
||
|
||
#### 添加 Linux master 节点
|
||
|
||
在本节中,你需要在 Rancher UI 上填写表单以获取自定义命令,从而在 Linux master 节点上安装 Rancher Agent。然后,复制该命令并在 Linux master 节点上运行命令,从而在集群中注册该节点。
|
||
|
||
集群中的第一个节点应该是具有 **controlplane** 和 **etcd** 角色的 Linux 主机。至少必须为此节点启用这两个角色,并且必须先将此节点添加到集群中,然后才能添加 Windows 主机。
|
||
|
||
1. 在**节点操作系统**中,单击 **Linux**。
|
||
1. 在**节点角色**中,至少选择 **etcd** 和 **controlplane**。推荐选择所有的三个角色。
|
||
1. 可选:如果点击**显示高级选项**,你可以自定义 [Rancher Agent](../reference-guides/cluster-configuration/rancher-server-configuration/use-existing-nodes/rancher-agent-options.md) 和[节点标签](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)的设置。
|
||
1. 将屏幕上显示的命令复制到剪贴板。
|
||
1. SSH 到你的 Linux 主机,然后运行复制到剪贴板的命令。
|
||
1. 完成配置 Linux 节点后,选择**完成**。
|
||
|
||
**结果**:
|
||
|
||
你已创建集群,集群的状态是**配置中**。Rancher 已在你的集群中。
|
||
|
||
当集群状态变为 **Active** 后,你可访问集群。
|
||
|
||
**Active** 状态的集群会分配到两个项目:
|
||
|
||
- `Default`:包含 `default` 命名空间
|
||
- `System`:包含 `cattle-system`,`ingress-nginx`,`kube-public` 和 `kube-system` 命名空间。
|
||
|
||
|
||
节点可能需要几分钟才能注册到集群中。
|
||
|
||
#### 添加 Linux Worker 节点
|
||
|
||
在本节中,我们通过运行命令将 Linux Worker 节点注册到集群中。
|
||
|
||
在初始配置集群之后,你的集群只有一个 Linux 主机。接下来,我们添加另一个 Linux `worker` 主机,用于支持集群的 _Rancher Cluster Agent_、_Metrics Server_、_DNS_ 和 _Ingress_。
|
||
|
||
1. 在左上角,单击 **☰ > 集群管理**。
|
||
1. 转到你创建的集群,然后单击 **⋮ > 编辑配置**。
|
||
1. 向下滚动到**节点操作系统**。选择 **Linux**。
|
||
1. 在**自定义节点运行命令**中,转到**节点选项**并选择 **Worker** 角色。
|
||
1. 将屏幕上显示的命令复制到剪贴板。
|
||
1. 使用远程终端连接登录到你的 Linux 主机。粘贴剪贴板的命令并运行。
|
||
1. 在 **Rancher**中,单击**保存**。
|
||
|
||
**结果**:**Worker** 角色已安装在你的 Linux 主机上,并且节点会向 Rancher 注册。节点可能需要几分钟才能注册到集群中。
|
||
|
||
:::note
|
||
|
||
Linux Worker 节点上的污点
|
||
|
||
以下污点将添加集群中的 Linux Worker 节点中。将此污点添加到 Linux Worker 节点后,添加到 Windows 集群的任何工作负载都将自动调度到 Windows Worker 节点。如果想将工作负载专门调度到 Linux Worker 节点上,则需要为这些工作负载添加容忍度。
|
||
|
||
| 污点键 | 污点值 | 污点效果 |
|
||
| -------------- | ----------- | ------------ |
|
||
| `cattle.io/os` | `linux` | `NoSchedule` |
|
||
|
||
:::
|
||
|
||
#### 添加 Windows Worker 节点
|
||
|
||
在本节中,我们通过运行命令将 Windows Worker 节点注册到集群中。
|
||
|
||
你可以通过编辑集群并选择 **Windows** 选项,从而将 Windows 主机添加到集群中。
|
||
|
||
1. 在左上角,单击 **☰ > 集群管理**。
|
||
1. 转到你创建的集群,然后单击 **⋮ > 编辑配置**。
|
||
1. 向下滚动到**节点操作系统**。选择 **Windows**。注意:你将看到 **worker** 角色是唯一可用的角色。
|
||
1. 将屏幕上显示的命令复制到剪贴板。
|
||
1. 使用你喜欢的工具(例如 [Microsoft 远程桌面](https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-clients))登录到 Windows 主机。在 **Command Prompt (CMD)** 中运行复制到剪贴板的命令。
|
||
1. 在 Rancher 中,单击**保存**。
|
||
1. 可选:如果要向集群添加更多 Windows 节点,请重复这些操作。
|
||
|
||
**结果**:**Worker** 角色已安装在你的 Windows 主机上,并且节点会向 Rancher 注册。节点可能需要几分钟才能注册到集群中。你现在已拥有一个 Windows Kubernetes 集群。
|
||
|
||
### 可选的后续步骤
|
||
|
||
创建集群后,你可以通过 Rancher UI 访问集群。最佳实践建议你设置以下访问集群的备用方式:
|
||
|
||
- **通过 kubectl CLI 访问你的集群**:按照[这些步骤](../how-to-guides/new-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#在工作站使用-kubectl-访问集群)在你的工作站上使用 kubectl 访问集群。在这种情况下,你将通过 Rancher Server 的身份验证代理进行身份验证,然后 Rancher 会让你连接到下游集群。此方法允许你在没有 Rancher UI 的情况下管理集群。
|
||
- **通过 kubectl CLI 使用授权的集群端点访问你的集群**:按照[这些步骤](../how-to-guides/new-user-guides/manage-clusters/access-clusters/use-kubectl-and-kubeconfig.md#直接使用下游集群进行身份验证)直接使用 kubectl 访问集群,而无需通过 Rancher Server 进行身份验证。我们建议设置此替代方法来访问集群,以便在无法连接到 Rancher 时访问集群。
|
||
|
||
## Azure 中存储类的配置
|
||
|
||
如果你的节点使用 Azure VM,则可以使用 [Azure 文件](https://docs.microsoft.com/en-us/azure/aks/azure-files-dynamic-pv)作为集群的存储类(StorageClass)。详情请参见[此部分](../how-to-guides/new-user-guides/kubernetes-clusters-in-rancher-setup/use-windows-clusters/azure-storageclass-configuration.md)。
|