OpenShift 的 Windows 容器支持
Red Hat OpenShift for Windows Containers 指南
摘要
Red Hat OpenShift support for Windows Containers 提供了在 OpenShift Container Platform 集群中运行 Windows 计算节点的功能。这可以通过使用 Red Hat Windows Machine Config Operator(WMCO)来安装和管理 Windows 节点来实现。通过红帽订阅,您可以获得对在 OpenShift Container Platform 中运行 Windows 工作负载的支持。WMCO 部署的 Windows 实例使用容器运行时配置。如需更多信息,请参阅 发行注记。
您可以通过创建计算机器集,或使用一个配置映射指定现有 Bring-Your-Own-Host (BYOH) Window 实例来添加 Windows 节点。
裸机或供应商无关的集群不支持计算机器集。
对于 Linux 和 Windows 等工作负载,OpenShift Container Platform 允许您部署在 Windows Server 容器上运行的 Windows 工作负载,同时还提供托管在 Red Hat Enterprise Linux CoreOS (RHCOS) 或 Red Hat Enterprise Linux (RHEL) 上的传统 Linux 工作负载。如需更多信息,请参阅开始使用 Windows 容器工作负载。
您需要 WMCO 在集群中运行 Windows 工作负载。WMCO 在集群中管理部署和管理 Windows 工作负载的过程。如需更多信息,请参阅如何启用 Windows 容器工作负载。
您可以创建一个 Windows MachineSet 对象来创建基础架构 Windows 机器集和相关的机器,以便将支持的 Windows 工作负载移到新的 Windows 机器。您可以在多个平台上创建 Windows MachineSet 对象。
您可以将 Windows 工作负载调度到 Windows 计算节点。
您可以执行 Windows Machine Config Operator 升级 以确保 Windows 节点有最新的更新。
您可以通过删除特定机器来删除 Windows 节点。
您可以使用 Bring-Your-Own-Host(BYOH)Windows 实例 重新使用 Windows Server 虚拟机并将其引入 OpenShift Container Platform。BYOH Windows 实例让希望降低 Windows 服务器离线时发生重大中断的用户受益。您可以使用 BYOH Windows 实例作为 OpenShift Container Platform 4.8 及更新的版本的节点。
您可以通过执行以下操作 禁用 Windows 容器工作负载 :
- 卸载 Windows Machine Config Operator
- 删除 Windows Machine Config Operator 命名空间
第 2 章 发行注记 复制链接链接已复制到粘贴板!
Red Hat OpenShift for Windows Containers 发行注记包括了 Windows Machine Config Operator (WMCO) 的开发信息,该开发提供了 OpenShift Container Platform 中的所有 Windows 容器工作负载功能。
2.1.1. Windows Machine Config Operator 编号 复制链接链接已复制到粘贴板!
WMCO 的 y-stream 版本包括在 OpenShift Container Platform 中,在 OpenShift Container Platform 版本间只有 z-stream 版本。WMCO 编号反映了在 y-stream 位置中相关的 OpenShift Container Platform 版本。例如,WMCO 的当前版本与 OpenShift Container Platform 版本 4.16 关联。因此,编号是 WMCO 10.16.z。
此 Windows Machine Config Operator (WMCO)发行版本为在 OpenShift Container Platform 集群中运行的 Windows 计算节点提供新功能和程序错误修复。WMCO 10.16.2 组件在 RHSA-2025:9136 中发布。
2.1.2.1. 新功能及改进 复制链接链接已复制到粘贴板!
2.1.2.1.1. WMCO 现在默认为 info 级别的日志 复制链接链接已复制到粘贴板!
WMCO 被配置为使用 info 日志级别。您可以通过编辑 WMCO 订阅对象将日志级别更改为 debug。
2.1.2.2. 程序错误修复 复制链接链接已复制到粘贴板!
-
在以前的版本中,如果在
ImageTagMirrorSet(ITMS) 对象的源中包含机构名称或命名空间,Windows 节点无法从镜像 registry 中拉取。在这个版本中,您可以在ITMS对象中包含机构名称或命名空间。在这个版本中,在 OpenShift Container Platform 文档中添加了对使用镜像 registry 的额外指南和要求。(OCPBUGS-55787)
2.2. Windows Machine Config Operator 的过去版本的发行注记 复制链接链接已复制到粘贴板!
以下发行注记适用于 Windows Machine Config Operator (WMCO) 的早期版本。
此 WMCO 发行版本为在 OpenShift Container Platform 集群中运行 Windows 计算节点提供程序错误修正。WMCO 10.16.1 组件在 RHSA-2024:5749 中发布。
2.2.1.1. 程序错误修复 复制链接链接已复制到粘贴板!
-
在以前的版本中,如果 Windows 虚拟机将其 PowerShell
ExecutionPolicy设置为Restricted,Windows Instance Config Daemon (WICD)将无法在创建 Windows 节点所需的虚拟机上运行命令。在这个版本中,WICD 在运行 PowerShell 命令时绕过虚拟机上的执行策略。因此,WICD 可以如预期在虚拟机上创建 Windows 节点。(OCPBUGS-37609)
此 WMCO 发行版本为在 OpenShift Container Platform 集群中运行 Windows 计算节点提供程序错误修正。WMCO 10.16.0 组件在 RHBA-2024:5014 中发布。
2.2.2.1. 新功能及改进 复制链接链接已复制到粘贴板!
2.2.2.1.1. 现在,在断开连接的网络中支持 WMCO 复制链接链接已复制到粘贴板!
现在,WMCO 在带有断开连接的网络的环境中被支持,这是一个有意阻止访问互联网的集群,也称为 restricted 或 air-gapped 集群。
如需更多信息,请参阅使用带有镜像 registry 的 Windows 容器。
2.2.2.1.2. WMCO 可以从已镜像的 registry 中拉取镜像 复制链接链接已复制到粘贴板!
WMCO 现在可以使用 ImageDigestMirrorSet (IDMS)和 ImageTagMirrorSet (ITMS)对象从镜像 registry 中拉取镜像。
如需更多信息,请参阅了解镜像 registry 存储库镜像
2.2.2.1.3. 现在,Windows 节点显示 文件系统 指标 复制链接链接已复制到粘贴板!
现在,OpenShift Container Platform Web 控制台中的 Node 详情页的 Utilization 标题中提供了 Filesystem 指标。您可以通过运行 Prometheus Query Language (PromQL)查询来查询指标。以前,图表报告 No datapoints found。
2.2.2.1.4. Pod 网络指标现在为 Windows 节点上的 pod 显示 复制链接链接已复制到粘贴板!
Network in 和 Network out 图表现在包括在 OpenShift Container Platform Web 控制台的 Pod 详情页中的 Windows pod。您可以通过运行 PromQL 查询来查询指标。以前,图表报告 No datapoints found。
2.2.2.1.5. 现在,Windows 节点上的 pod 显示 Pod CPU 和内存指标 复制链接链接已复制到粘贴板!
现在,OpenShift Container Platform Web 控制台中的 Pod 和 Pod 详情页中的 Windows pod 提供了 CPU 和内存用量指标。您可以通过运行 PromQL 查询来查询指标。以前,图表报告 No datapoints found。
2.2.2.1.6. Kubernetes 升级 复制链接链接已复制到粘贴板!
WMCO 现在使用 Kubernetes 1.29。
2.2.2.2. 程序错误修复 复制链接链接已复制到粘贴板!
因为 WICD 服务帐户缺少所需的 secret,因此 WMCO 无法在 Nutanix 集群中正确配置 Windows 节点。在这个版本中,WMCO 为 WICD 服务帐户创建一个长期令牌 secret。因此,WMCO 可以在 Nutanix 中配置 Windows 节点。(OCPBUGS-22680)
在以前的版本中,WMCO 执行一个清理步骤,该步骤错误地在用户集群范围代理配置中用分号替换逗号。此行为导致 Windows 忽略 noProxy 环境变量中设置的值。因此,WMCO 会错误地通过代理为 no-proxy 参数中指定的端点发送流量。在这个版本中,使用分号替换逗号的清理步骤已被删除。因此,从 Windows 节点到集群内部端点或 no-proxy 参数中存在的端点的 Web 请求不会通过代理。(OCPBUGS-24264)
在以前的版本中,由于网络配置脚本中的错误逻辑,WMCO 在 containderd CNI 配置文件中错误地读取回车,并会修改该文件。这个行为会导致 CNI 配置被不必要的重新载入,可能会导致容器重启和短暂的网络中断。在这个版本中,WMCO 仅在实际修改 CNI 配置时重新载入 CNI 配置。(OCPBUGS-2887)
在以前的版本中,由于 Windows Server 2019 中出现的路由问题,在某些条件下,运行了一小时后,Windows Server 2019 上的工作负载在与集群中的其他容器通信时可能会出现数据包丢失的情况。在这个版本中,在 kube-proxy 中启用直接服务器返回 (DSR) 路由。因此,DSR 现在会导致请求和响应流量使用不同的网络路径,绕过 Windows Server 2019 中的 bug。(OCPBUGS-26761)
在以前的版本中,Windows 节点上的 kubelet 无法通过私有 Amazon Elastic Container Registries (ECR) 进行身份验证。由于这个错误,kubelet 无法从这些 registry 中拉取镜像。在这个版本中,kubelet 能够按预期从这些 registry 中拉取镜像。(OCPBUGS-26602)
在以前的版本中,在 Azure 集群中,WMCO 会检查是否在集群中使用 Cloud Controller Manager (CCM)。如果使用 CCM,Operator 会相应地调整配置逻辑。因为用于检查 CCM 的 WMCO 的状态条件已被删除,所以 WMCO 已被删除,就像 CCM 没有被使用一样。在这个版本中,删除了检查。因此,WMCO 始终在 Azure 集群上配置所需的逻辑。(OCPBUGS-31626)
在以前的版本中,当通过 SSH 连接到 Windows 实例的命令失败时,WMCO 会记录错误消息。这个行为不正确,因为有些命令应该失败。例如,当 WMCO 重新引导节点时,Operator 会在实例上运行 PowerShell 命令,直到它们失败,这意味着 SSH 连接会如预期重启。在这个版本中,只会记录实际错误。(OCPBUGS-20255)
在以前的版本中,在轮转 kube-apiserver-to-kubelet-client-ca 证书后,Windows 节点上的 kubetl-ca.crt 文件的内容不会被正确填充。在这个版本中,在证书轮转后,kubetl-ca.crt 文件包含正确的证书。(OCPBUGS-22237)
在以前的版本中,因为作为 Windows AD 域控制器一部分的实例上的 kubelet 主机名中缺少 DNS 后缀,云供应商无法按名称查找虚拟机。在这个版本中,DNS 后缀包含在主机名解析中。因此,WMCO 能够配置和加入作为 AD 域控制器一部分的 Windows 实例。(OCPBUGS-34758)
在以前的版本中,用户提供的 registry 证书不会加载到每个节点上的 Windows 信任存储中。因此,从镜像 registry 拉取镜像会失败,因为需要自签名 CA。在这个版本中,registry 证书会加载到每个节点上的 Windows 信任存储中。因此,可以使用自签名 CA 从镜像 registry 中拉取镜像。(OCPBUGS-36408)
在以前的版本中,如果 WMCO 命名空间中有多个服务帐户令牌 secret,扩展 Windows 节点会失败。在这个版本中,WMCO 只使用它创建的 secret,忽略 WMCO 命名空间中的任何其他服务帐户令牌 secret。因此,Windows 节点可以正确扩展。(OCPBUGS-37481)
在以前的版本中,如果因为错误(如反向 DNS 查找服务不可用)导致反向 DNS 查找失败,WMCO 将无法回退到使用虚拟机主机名来确定证书签名请求(CSR)是否应批准。因此,使用 IP 地址配置的 Bring-Your-Own-Host (BYOH) Windows 节点将不可用。在这个版本中,如果反向 DNS 不可用,则会正确添加 BYOH 节点。(OCPBUGS-36643)
2.3. Windows Machine Config Operator 的先决条件 复制链接链接已复制到粘贴板!
以下信息详细介绍了 Windows Machine Config Operator 支持的平台版本、Windows Server 版本和网络配置。有关仅与该平台相关的任何信息请参阅 vSphere 文档。
2.3.1. WMCO 支持的安装方法 复制链接链接已复制到粘贴板!
WMCO 完全支持将 Windows 节点安装到安装程序置备的基础架构(IPI)集群中。这是首选的 OpenShift Container Platform 安装方法。
对于用户置备的基础架构 (UPI) 集群,WMCO 仅支持将 Windows 节点安装到安装 platform: none 字段在 install-config.yaml 文件中设置的 UPI 集群(bare-metal 或 provider-agnostic),且仅适用于 BYOH (您自己的主机) 用例。其他平台都不支持 UPI。
2.3.2. WMCO 10.16.0 支持的平台和 Windows 服务器版本 复制链接链接已复制到粘贴板!
下表根据适用的平台列出了 WMCO 10.16.0 支持的 Windows Server 版本。不支持 Windows Server 版本,并尝试使用它们将导致错误。要防止这些错误,请为您的平台使用适当的版本。
| 平台 | 支持的 Windows Server 版本 |
|---|---|
| Amazon Web Services (AWS) |
|
| Microsoft Azure |
|
| VMware vSphere | Windows Server 2022,OS Build 20348.681 或更高版本 |
| Google Cloud | Windows Server 2022,OS Build 20348.681 或更高版本 |
| Nutanix | Windows Server 2022,OS Build 20348.681 或更高版本 |
| 裸机或供应商无关 |
|
- 对于断开连接的集群,Windows AMI 必须安装有 EC2LaunchV2 代理版本 2.0.1643 或更高版本。如需更多信息,请参阅 AWS 文档中的安装最新版本的 EC2Launch v2。
2.3.3. 支持的网络 复制链接链接已复制到粘贴板!
与 OVN-Kubernetes 的混合网络是唯一支持的网络配置。有关此功能的更多信息,请参见下面的其他资源。下表概述了根据您的平台使用的网络配置和 Windows Server 版本类型。安装集群时必须指定网络配置。
- WMCO 不支持没有混合网络或 OpenShift SDN 的 OVN-Kubernetes。
- WMCO 管理的 Windows 实例不支持双 NIC。
| 平台 | 支持的网络 |
|---|---|
| Amazon Web Services (AWS) | 使用 OVN-Kubernetes 的混合网络 |
| Microsoft Azure | 使用 OVN-Kubernetes 的混合网络 |
| VMware vSphere | 带有自定义 VXLAN 端口的 OVN-Kubernetes 的混合网络 |
| Google Cloud | 使用 OVN-Kubernetes 的混合网络 |
| Nutanix | 使用 OVN-Kubernetes 的混合网络 |
| 裸机或供应商无关 | 使用 OVN-Kubernetes 的混合网络 |
2.4. Windows Machine Config Operator 已知的限制 复制链接链接已复制到粘贴板!
在使用由 WMCO 管理的 Windows 节点(Windows 节点)时,请注意以下限制:
Windows 节点上不支持以下 OpenShift Container Platform 功能:
- 镜像构建
- OpenShift Pipelines
- OpenShift Service Mesh
- OpenShift 监控用户定义的项目
- OpenShift Serverless
- Pod 横向自动扩展
- Pod 垂直自动扩展
- 托管 Control Planes
Windows 节点上不支持以下红帽功能:
- WMCO 管理的 Windows 实例不支持双 NIC。
- Windows 节点不支持使用部署配置创建的工作负载。您可以使用部署或其他方法部署工作负载。
- Red Hat OpenShift support for Windows Containers 不支持通过中继端口在集群中添加 Windows 节点。添加 Windows 节点唯一支持的网络配置是通过为 VLAN 传输流量的访问端口。
- Red Hat OpenShift support for Windows Containers 不支持 English (United States)以外的任何 Windows 操作系统语言。
-
由于 Windows 操作系统中的一个限制,类 E 的
clusterNetworkCIDR 地址(如240.0.0.0)与 Windows 节点不兼容。 Kubernetes 有以下节点功能限制 :
- Windows 容器不支持巨页。
- Windows 容器不支持特权容器。
- Kubernetes 已发现几个 API 兼容性问题。
第 3 章 获取支持 复制链接链接已复制到粘贴板!
Windows Container Support for Red Hat OpenShift 作为一个可选的、可安装的组件提供。Windows Container Support for Red Hat OpenShift 不是 OpenShift Container Platform 订阅的一部分。它需要额外的红帽订阅,并根据覆盖范围和服务等级协议进行支持。
您必须具有此单独的订阅才能获得对 Red Hat OpenShift 的 Windows Container 支持。如果没有此附加红帽订阅,则不支持在生产环境中部署 Windows 容器工作负载。您可以通过 红帽客户门户网站 请求支持。
如需更多信息,请参阅 Red Hat OpenShift Container Platform 生命周期政策文档中关于 Red Hat OpenShift support for Windows Containers 的部分。
如果您没有额外的红帽订阅,可以使用 Community Windows Machine Config Operator,它是一个不被官方支持的版本。
第 4 章 了解 Windows 容器工作负载 复制链接链接已复制到粘贴板!
Red Hat OpenShift for Windows Containers 为在 OpenShift Container Platform 上运行 Microsoft Windows Server 容器提供了内置的支持。对于使用 Linux 和 Windows 工作负载管理异构环境的管理员,OpenShift Container Platform 允许您部署在 Windows Server 容器上运行的 Windows 工作负载,同时也提供托管在 Red Hat Enterprise Linux CoreOS(RHCOS)或 Red Hat Enterprise Linux(RHEL)上的传统 Linux 工作负载。
不支持具有 Windows 节点的集群的多租户。当多个工作负载在共享基础架构和资源上运行时,集群被视为多租户。如果基础架构上运行的一个或多个工作负载无法信任,则多租户环境被视为 恶意。
恶意多租户集群在所有 Kubernetes 环境中都引入安全问题。额外的安全功能,如 Pod 安全策略,或节点的更精细的访问控制(RBAC),使利用安全漏洞进行工具更困难。但是,如果您选择运行托管多租户工作负载,则管理程序是唯一应使用的安全选项。Kubernetes 的安全域包括整个集群,而不是只限于单个节点。对于可能会有恶意的多租户工作负载,应该使用物理隔离的集群。
Windows 服务器容器使用共享内核提供资源隔离,但它并不适用于托管可能会有恶意的多租户工作负载。
4.1. Windows 工作负载管理 复制链接链接已复制到粘贴板!
要在集群中运行 Windows 工作负载,必须首先安装 Windows Machine Config Operator(WMCO)。WMCO 是一个基于 Linux 的 Operator,它运行在基于 Linux 的 control plane 和计算节点上。WMCO 在集群中管理部署和管理 Windows 工作负载的过程。
图 4.1. WMCO 设计
在部署 Windows 工作负载前,您必须创建一个 Windows 计算节点并加入集群。Windows 节点会在集群中托管 Windows 工作负载,并可与其他基于 Linux 的计算节点一起运行。您可以通过创建一个 Windows 计算机器设置为托管 Windows Server 计算机器来创建 Windows 计算节点。您必须将特定于 Windows 的标签应用到指定 Windows OS 镜像的计算机器集中。
WMCO 监视有 Windows 标签的机器。在检测到 Windows 计算机器并设置并置备相应机器后,WMCO 配置底层 Windows 虚拟机(VM),以便它可以将集群作为计算节点加入。
图 4.2. 混合 Windows 和 Linux 工作负载
WMCO 在命名空间中需要一个预先确定的 secret,该 secret 包含一个用于与 Windows 实例交互的私钥。WMCO 在引导时检查此 secret,并创建一个用户数据 secret,您必须在您创建的 Windows MachineSet 对象中引用该 secret。然后,WMCO 使用与私钥对应的公钥填充用户数据 secret。通过这些数据,集群可以使用 SSH 连接到 Windows 虚拟机。
当集群与 Windows 虚拟机建立连接后,您可以使用类似管理 Linux 节点一样的方法管理 Windows 节点。
OpenShift Container Platform Web 控制台为 Linux 节点可用的 Windows 节点提供大多数相同的监控功能。但是,目前无法监控 Windows 节点上运行的 pod 的工作负载图形。
将 Windows 工作负载调度到 Windows 节点可使用典型的 pod 调度实践,如污点、容限和节点选择器。或者,您也可以使用 RuntimeClass 对象来把 Windows 工作负载与 Linux 工作负载和其他 Windows 版本工作负载进行区分。
4.2. Windows 节点服务 复制链接链接已复制到粘贴板!
每个 Windows 节点均安装以下与 Windows 相关的服务:
| Service | 描述 |
|---|---|
| kubelet | 注册 Windows 节点并管理其状态。 |
| Container Network Interface (CNI) 插件 | 为 Windows 节点公开网络。 |
| Windows 实例配置守护进程 (WICD) | 维护在 Windows 实例上运行的所有服务的状态,以确保实例充当 worker 节点。 |
| 从 Windows 节点导出 Prometheus 指标 | |
| 与底层 Azure 云平台交互。 | |
| hybrid-overlay | 创建 OpenShift Container Platform 主机网络服务(HNS)。 |
| kube-proxy | 在节点上维护网络规则,以允许外部通信。 |
| 容器运行时 | 管理完整的容器生命周期。 |
| CSI 代理 | 启用 CSI 驱动程序在节点上执行存储操作,它允许容器化 CSI 驱动程序在 Windows 节点上运行。 |
第 5 章 启用 Windows 容器工作负载 复制链接链接已复制到粘贴板!
在向集群中添加 Windows 工作负载前,您必须安装由 OpenShift Container Platform OperatorHub 提供的 Windows Machine Config Operator(WMCO)。WMCO 在集群中管理部署和管理 Windows 工作负载的过程。
WMCO 管理的 Windows 实例不支持双 NIC。
5.1. 先决条件 复制链接链接已复制到粘贴板!
-
可以使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc)。 已使用以下基础架构之一安装集群:
- 任何安装程序置备的基础架构
-
在
install-config.yaml文件中设置platform: none字段的用户置备的基础架构
- 您已为集群配置了带有 OVN-Kubernetes 的混合网络。如需更多信息,请参阅配置混合网络。
- 运行 OpenShift Container Platform 集群版本 4.6.8 或更高版本。
WMCO 部署的 Windows 实例使用容器运行时配置。因为 WMCO 安装和管理运行时,所以请不要在节点上手动安装容器。
有关 Windows Machine Config Operator 的完整先决条件,请参阅"Windows Machine Config Operator 先决条件"。
5.2. 安装 Windows Machine Config Operator 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台或 OpenShift CLI(oc)安装 Windows Machine Config Operator。
由于 Windows 操作系统中的一个限制,类 E 的 clusterNetwork CIDR 地址(如 240.0.0.0 )与 Windows 节点不兼容。
5.2.1. 使用 Web 控制台安装 Windows Machine Config Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台安装 Windows Machine Config Operator(WMCO)。
WMCO 管理的 Windows 实例不支持双 NIC。
流程
- 从 OpenShift Container Platform Web 控制台中的 Adminstrator 视角进入 Operators → OperatorHub 页面。
-
使用 Filter by keyword 复选框在目录中搜索
Windows Machine Config Operator。点 Windows Machine Config Operator 标题。 - 查看 Operator 信息并点 Install。
在 Install Operator 页面中:
- 选择 stable 频道作为 更新频道。stable 频道允许安装 WMCO 的最新稳定版本。
- 安装模式 被预先配置,因为 WMCO 只能在单一命名空间中可用。
-
为 WMCO 选择 Installed Namespace。默认 Operator 建议命名空间为
openshift-windows-machine-config-operator。 - 点 Enable Operator recommended cluster monitoring on the Namespace 为 WMCO 启用集群监控。
选择一个批准策略。
- Automatic 策略允许 Operator Lifecycle Manager(OLM)在有新版本可用时自动更新 Operator。
- Manual 策略需要拥有适当凭证的用户批准 Operator 更新。
点 Install。WMCO 现在列在 Installed Operators 页中。
注意WMCO 会自动安装到您定义的命名空间中,如
openshift-windows-machine-config-operator。- 验证 Status 显示为 Succeeded 以确认成功安装了 WMCO。
5.2.2. 使用 CLI 安装 Windows Machine Config Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift CLI(oc)安装 Windows Machine Config Operator(WMCO)。
WMCO 管理的 Windows 实例不支持双 NIC。
流程
为 WMCO 创建命名空间。
为 WMCO 创建一个
Namespace对象 YAML 文件。例如,wmco-namespace.yaml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建命名空间:
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc create -f wmco-namespace.yaml
$ oc create -f wmco-namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为 WMCO 创建 Operator 组。
创建
OperatorGroup对象 YAML 文件。例如,wmco-og.yaml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Operator 组:
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc create -f wmco-og.yaml
$ oc create -f wmco-og.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为 WMCO 订阅命名空间。
创建
Subscription对象 YAML 文件。例如,wmco-sub.yaml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建订阅:
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc create -f wmco-sub.yaml
$ oc create -f wmco-sub.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow WMCO 现已安装到
openshift-windows-machine-config-operator中。
验证 WMCO 安装:
oc get csv -n openshift-windows-machine-config-operator
$ oc get csv -n openshift-windows-machine-config-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE windows-machine-config-operator.2.0.0 Windows Machine Config Operator 2.0.0 Succeeded
NAME DISPLAY VERSION REPLACES PHASE windows-machine-config-operator.2.0.0 Windows Machine Config Operator 2.0.0 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 为 Windows Machine Config Operator 配置 secret 复制链接链接已复制到粘贴板!
要运行 Windows Machine Config Operator(WMCO),您必须在包含私钥的 WMCO 命名空间中创建一个 secret。这需要允许 WMCO 与 Windows 虚拟机(VM)进行通信。
先决条件
- 已使用 Operator Lifecycle Manager(OLM)安装 Windows Machine Config Operator(WMCO)。
您使用强大的算法(如 ECDSA)创建了一个包含私钥的 PEM 编码文件。
如果您在 Red Hat Enterprise Linux (RHEL) 系统上创建了密钥对,在 Windows 系统上使用公钥之前,请确保公钥保存为 ASCII 编码。例如,以下 PowerShell 命令复制公钥,为 ASCII 字符集进行编码:
echo "ssh-rsa <ssh_pub_key>" | Out-File <ssh_key_path> -Encoding ascii
C:\> echo "ssh-rsa <ssh_pub_key>" | Out-File <ssh_key_path> -Encoding asciiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<ssh_pub_key>- 指定用于访问集群的 SSH 公钥。
<ssh_key_path>- 指定 SSH 公钥的路径。
流程
定义访问 Windows 虚拟机所需的 secret:
oc create secret generic cloud-private-key --from-file=private-key.pem=${HOME}/.ssh/<key> \ -n openshift-windows-machine-config-operator$ oc create secret generic cloud-private-key --from-file=private-key.pem=${HOME}/.ssh/<key> \ -n openshift-windows-machine-config-operator1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1
- 您必须在 WMCO 命名空间中创建私钥,如
openshift-windows-machine-config-operator。
建议您使用与安装集群时所用的私钥不同的私钥。
5.4. 在支持代理的集群中使用 Windows 容器 复制链接链接已复制到粘贴板!
在向集群的内部网络外发出外部请求时,Windows Machine Config Operator (WMCO) 可以使用集群范围的出口代理配置。
这可让您在支持代理的集群中添加 Windows 节点并运行工作负载,允许 Windows 节点从代理服务器后面的 registry 中拉取镜像,或者向使用自定义公钥基础架构的非集群服务和服务发出请求。
集群范围的代理仅影响系统组件,而不会影响用户工作负载。
在启用了代理的集群中,WMCO 知道为集群设置的 NO_PROXY、HTTP_PROXY 和 HTTPS_PROXY 值。WMCO 定期检查代理环境变量是否已更改。如果存在差异,WMCO 会协调并更新 Windows 实例上的代理环境变量。
在支持代理的集群的 Windows 节点上创建的 Windows 工作负载不会继承节点上的代理设置,与 Linux 节点相同。另外,默认情况下,PowerShell 会话不会在启用了代理的集群中继承 Windows 节点上的代理设置。
5.5. 使用带有镜像 registry 的 Windows 容器 复制链接链接已复制到粘贴板!
Windows Machine Config Operator (WMCO)可以使用 ImageDigestMirrorSet (IDMS) 或 ImageTagMirrorSet (ITMS) 对象从 registry 镜像拉取镜像,而不是从公共 registry 中拉取镜像。
镜像 registry 具有以下优点:
- 避免公共 registry 中断
- 加速节点和 pod 创建
- 从机构的防火墙后拉取镜像
镜像 registry 也可以在断开连接的环境中的 OpenShift Container Platform 集群中使用,或 air-gapped 网络。断开连接的网络是一个受限网络,没有直接互联网连接。由于集群无法访问互联网,所以无法引用任何外部容器镜像。
使用镜像 registry 需要以下常规步骤:
- 使用 Red Hat Quay 等工具创建镜像 registry。
- 创建容器镜像 registry 凭据文件。
- 将镜像从在线镜像存储库复制到您的镜像 registry。
有关这些步骤的详情,请参考"关于断开连接的安装镜像"。
在创建镜像 registry 并镜像镜像后,您可以使用 ImageDigestMirrorSet (IDMS)或 ImageTagMirrorSet (ITMS)对象将集群配置为从镜像 registry 拉取镜像,而无需更新每个 pod 规格。IDMS 和 ITMS 对象重定向从源镜像 registry 上的存储库拉取镜像并通过镜像存储库解析的请求。
如果对 IDMS 或 ITMS 对象进行了更改,WMCO 将使用新信息自动更新 Windows 节点上的相应 hosts.toml 文件。请注意,WMCO 在镜像设置更改时按顺序更新每个 Windows 节点。因此,随着集群中的 Windows 节点数量增加这些更新所需的时间。
因为 WMCO 配置的 Windows 节点依赖于容器运行时,WMCO 可确保容器的配置文件与 registry 设置保持同步。对于新节点,这些文件在创建时复制到实例。对于现有节点,在激活镜像 registry 后,registry 控制器使用 SSH 访问每个节点并复制生成的配置文件,替换任何现有文件。
您可以使用带有机器集或 Bring-Your-Own-Host (BYOH) Windows 节点的 mirror registry。
当使用 IDMS 或 ITMS 对象在 Windows 节点上镜像容器镜像时,请注意以下与 Linux 节点不同的行为:
Windows 节点上的镜像在 registry 级别上工作,而不是在 Linux 节点使用的镜像级别上工作。因此,使用 IDMS 或 ITMS 对象进行镜像的 Windows 镜像具有特定的命名要求。
命名空间和镜像镜像的镜像名称的最终部分必须与正在镜像的镜像匹配。例如,当镜像
mcr.microsoft.com/oss/kubernetes/pause:3.9镜像时,镜像必须采用$mirrorRegistry/<organization>/oss/kubernetes/pause:3.9格式,其中$org可以是任何机构名称或命名空间。有些有效值有$mirrorRegistry/oss/kubernetes/pause:3.9,$mirrorRegistry/custom/oss/kubernetes/pause:3.9, 和$mirrorRegistry/x/y/z/oss/kubernetes/pause:3.9。Windows 节点使用 ITMS 对象,并使用它来配置 registry 范围镜像。在以下示例中,将
quay.io/remote-org/image配置为镜像到quay.io/my-org/image会导致 Windows 节点使用来自quay.io/remote-org的所有镜像。因此,quay.io/remote-org/image:tag使用quay.io/my-org/image:tag镜像,但使用quay.io/remote-org/different-image:tag镜像的另一个容器也会尝试使用quay.io/remote-org/different-image:tagmirror。如果没有考虑意外的行为,这可能会导致意外的行为。因此,使用 IDMS 对象而不是 ITMS 对象使用摘要来指定容器镜像。使用摘要可以防止使用错误的容器镜像,确保容器指定的镜像以及拉取的镜像具有相同的摘要。
5.5.1. 了解镜像 registry 仓库镜像 复制链接链接已复制到粘贴板!
通过设置容器 registry 存储库镜像,您可以执行以下任务:
- 配置 OpenShift Container Platform 集群,以便重定向从源镜像 registry 上的存储库拉取(pull)镜像的请求,并通过已镜像 (mirror) 的镜像 registry 上的存储库来解决该请求。
- 为每个目标存储库识别多个已镜像 (mirror)的存储库,以确保如果一个镜像停止运作,仍可使用其他镜像。
OpenShift Container Platform 中的存储库镜像包括以下属性:
- 镜像拉取(pull)可应对 registry 停机的问题。
-
在断开连接的环境中的集群可以从关键位置(如
quay.io)拉取镜像,并让公司防火墙后面的 registry 提供请求的镜像。 - 发出镜像拉取(pull)请求时尝试特定 registry 顺序,通常最后才会尝试持久性 registry。
-
您输入的镜像信息会添加到 OpenShift Container Platform 集群中每个 Windows 节点上的适当的
hosts.toml容器配置文件中。 - 当节点从源存储库中请求镜像时,它会依次尝试每个已镜像的存储库,直到找到所请求的内容。如果所有镜像均失败,集群则会尝试源存储库。如果成功,则镜像拉取至节点中。
您可以使用以下方法设置存储库镜像:
在 OpenShift Container Platform 安装中:
通过拉取(pull) OpenShift Container Platform 所需的容器镜像,然后将这些镜像放至公司防火墙后,即可将 OpenShift Container Platform 安装到受限网络中的数据中心。
安装 OpenShift Container Platform 后:
如果您没有在 OpenShift Container Platform 安装过程中配置镜像,您可以在安装后使用以下自定义资源 (CR) 对象之一进行配置:
-
ImageDigestMirrorSet(IDMS).此对象允许您使用摘要规格从镜像 registry 中拉取镜像。IDMS CR 可让您设置回退策略,在镜像拉取失败时继续尝试从源 registry 中拉取。 -
ImageTagMirrorSet(ITMS)。此对象允许您使用镜像标签从已镜像的 registry 中拉取镜像。ITMS CR 可让您设置回退策略,在镜像拉取失败时继续尝试从源 registry 中拉取。
-
每个自定义资源对象都标识以下信息:
- 您希望镜像 (mirror) 的容器镜像存储库的源。
- 您要提供内容的每个镜像存储库的独立条目
请注意以下操作以及它们对节点排空行为的影响:
- 如果您创建一个 IDMS 或 ICSP CR 对象,MCO 不会排空或重启节点。
- 如果创建一个 ITMS CR 对象,MCO 会排空并重启节点。
- 如果您删除 ITMS 或 IDMS CR 对象,MCO 会排空并重启节点。
- 如果您修改 ITMS 或 IDMS CR 对象,MCO 会排空并重启节点。
Windows Machine Config Operator (WMCO)会监视 IDMS 和 ITMS 资源的更改,并生成一组 host.toml 容器配置文件,每个源 registry 有一个文件,以及这些更改。然后,WMCO 会更新任何现有 Windows 节点以使用新的 registry 配置。
在使用镜像 registry 添加 Windows 节点前,必须创建 IDMS 和 ITMS 对象。
5.5.2. 配置镜像 registry 存储库镜像 复制链接链接已复制到粘贴板!
您可以创建安装后镜像配置自定义资源 (CR),将源镜像 registry 中的镜像拉取请求重定向到镜像 registry。
通过 ImageDigestMirrorSet 和 ImageTagMirrorSet 对象镜像的 Windows 镜像具有特定的命名要求,如"使用带有镜像 registry 的 Windows 容器"中所述。
先决条件
-
使用具有
cluster-admin角色的用户访问集群。
流程
通过以下方法配置已镜像的存储库:
使用 Red Hat Quay 设置已镜像的存储库。您可以将镜像从一个存储库复制到另一个存储库,也可以使用 Red Hat Quay 随着时间的推移自动重复同步这些存储库。
使用
skopeo等工具手动将镜像从源存储库复制到已镜像的存储库。例如,在 {op-system-base-full system} 上安装 skopeo RPM 软件包后,使用
skopeo命令,如下例所示:skopeo copy --all \ docker://registry.access.redhat.com/ubi9/ubi-minimal:latest@sha256:5cf... \ docker://example.io/example/ubi-minimal
$ skopeo copy --all \ docker://registry.access.redhat.com/ubi9/ubi-minimal:latest@sha256:5cf... \ docker://example.io/example/ubi-minimalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,有一个名为
example.io的容器镜像 registry,以及名为example的容器镜像 registry。您需要将ubi9/ubi-minimal镜像从registry.access.redhat.com复制到example.io。创建已镜像的 registry 后,您可以将 OpenShift Container Platform 集群配置为将向源存储库发出的请求重定向到已镜像的存储库。
重要您必须镜像
mcr.microsoft.com/oss/kubernetes/pause:3.9镜像。例如,您可以使用以下skopeo命令镜像镜像:skopeo copy \ docker://mcr.microsoft.com/oss/kubernetes/pause:3.9\ docker://example.io/oss/kubernetes/pause:3.9
$ skopeo copy \ docker://mcr.microsoft.com/oss/kubernetes/pause:3.9\ docker://example.io/oss/kubernetes/pause:3.9Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 登录您的 OpenShift Container Platform 集群。
根据需要,创建一个
ImageDigestMirrorSet或ImageTagMirrorSetCR,将源和镜像(mirror)替换为您自己的 registry、存储库对和镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建新对象:
oc create -f registryrepomirror.yaml
$ oc create -f registryrepomirror.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要检查是否应用了镜像的配置设置,请在其中一个节点上执行以下操作。
列出您的节点:
oc get node
$ oc get nodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动调试过程以访问节点:
oc debug node/ip-10-0-147-35.ec2.internal
$ oc debug node/ip-10-0-147-35.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Starting pod/ip-10-0-147-35ec2internal-debug ... To use host binaries, run `chroot /host`
Starting pod/ip-10-0-147-35ec2internal-debug ... To use host binaries, run `chroot /host`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将您的根目录改为
/host:chroot /host
sh-4.2# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 WMCO 是否为每个 Windows 实例上的每个 registry 生成
hosts.toml文件。对于上例 IDMS 对象,文件结构中应该有三个文件:tree $config_path
$ tree $config_pathCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下输出代表了应用了前面的 IDMS 对象的
hosts.toml容器配置文件。host.toml 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从源拉取镜像到节点,并检查是否通过 mirror 解析。
podman pull --log-level=debug registry.access.redhat.com/ubi9/ubi-minimal@sha256:5cf...
sh-4.2# podman pull --log-level=debug registry.access.redhat.com/ubi9/ubi-minimal@sha256:5cf...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
如果存储库镜像过程无法正常工作,请使用以下有关存储库镜像如何工作的信息来帮助排除此问题:
- 首个工作镜像用于提供拉取(pull)的镜像。
- 只有在无其他镜像工作时,才会使用主 registry。
-
从系统上下文,
Insecure标志用作回退。
5.6. 正常重新引导节点 复制链接链接已复制到粘贴板!
Windows Machine Config Operator (WMCO) 尽可能最小化节点重启。但是,某些操作和更新需要重新引导,以确保正确且安全地应用更改。要安全地重新引导 Windows 节点,请使用安全重启过程。有关安全重新引导标准 OpenShift Container Platform 节点的详情,请参考节点文档中的"正常引导节点"。
在重启节点前,建议备份 etcd 数据以避免该节点上出现数据丢失。
对于需要用户执行 oc login 命令而不是 kubeconfig 文件中的证书来管理集群的单节点 OpenShift 集群,oc adm 命令在封锁并排空节点后可能无法使用。这是因为 openshift-oauth-apiserver pod 没有运行,因为 cordon。您可以使用 SSH 访问节点,如以下步骤所示。
在单节点 OpenShift 集群中,在封锁和排空时无法重新调度 Pod。但是,这样做会为 pod(特别是您的工作负载 pod)提供一定的时间来正确停止和释放相关资源。
流程
执行节点正常重启:
将节点标记为不可调度:
oc adm cordon <node1>
$ oc adm cordon <node1>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 排空节点以删除所有正在运行的 pod:
oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force
$ oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --forceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可能会收到与自定义 pod 中断预算(PDB)关联的 pod 无法被驱除的错误。
错误示例
error when evicting pods/"rails-postgresql-example-1-72v2w" -n "rails" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.
error when evicting pods/"rails-postgresql-example-1-72v2w" -n "rails" (will retry after 5s): Cannot evict pod as it would violate the pod's disruption budget.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,再次运行 drain 命令,添加
disable-eviction标记,这将绕过 PDB 检查:oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force --disable-eviction
$ oc adm drain <node1> --ignore-daemonsets --delete-emptydir-data --force --disable-evictionCopy to Clipboard Copied! Toggle word wrap Toggle overflow SSH 到 Windows 节点,并运行以下命令来输入 PowerShell:
powershell
C:\> powershellCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令重启节点:
Restart-Computer -Force
C:\> Restart-Computer -ForceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Amazon Web Services (AWS) 上的 Windows 节点不会因为 EC2 实例元数据路由和主机网络服务(HNS)网络不一致而在安全重启后返回
READY状态。重启后,通过 SSH 到 AWS 上的任何 Windows 节点,并在 shell 提示符中运行以下命令来添加路由:
route add 169.254.169.254 mask 255.255.255.0 <gateway_ip>
C:\> route add 169.254.169.254 mask 255.255.255.0 <gateway_ip>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
169.254.169.254- 指定 EC2 实例元数据端点的地址。
255.255.255.255- 指定 EC2 实例元数据端点的网络掩码。
<gateway_ip>运行以下命令,在 Windows 实例中指定网关的对应 IP 地址,您可以找到该地址:
ipconfig | findstr /C:"Default Gateway"
C:\> ipconfig | findstr /C:"Default Gateway"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重启完成后,运行以下命令将节点标记为可以调度:
oc adm uncordon <node1>
$ oc adm uncordon <node1>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证节点是否已就绪:
oc get node <node1>
$ oc get node <node1>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS ROLES AGE VERSION <node1> Ready worker 6d22h v1.18.3+b0068a8
NAME STATUS ROLES AGE VERSION <node1> Ready worker 6d22h v1.18.3+b0068a8Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 6 章 创建 Windows 机器集 复制链接链接已复制到粘贴板!
6.1. 在 AWS 上创建 Windows 机器集 复制链接链接已复制到粘贴板!
您可以在 Amazon Web Services(AWS)上的 OpenShift Container Platform 集群中创建 Windows MachineSet 对象来满足特定目的。例如,您可以创建基础架构 Windows 机器集和相关机器,以便将支持的 Windows 工作负载转移到新的 Windows 机器上。
6.1.1. 先决条件 复制链接链接已复制到粘贴板!
- 已使用 Operator Lifecycle Manager(OLM)安装 Windows Machine Config Operator(WMCO)。
您可以使用受支持的 Windows Server 作为操作系统镜像。
根据您的 Windows Server 发行版本,使用以下
aws命令之一来查询有效的 AMI 镜像:Windows Server 2022 命令示例
aws ec2 describe-images --region <aws_region_name> --filters "Name=name,Values=Windows_Server-2022*English*Core*Base*" "Name=is-public,Values=true" --query "reverse(sort_by(Images, &CreationDate))[*].{name: Name, id: ImageId}" --output table$ aws ec2 describe-images --region <aws_region_name> --filters "Name=name,Values=Windows_Server-2022*English*Core*Base*" "Name=is-public,Values=true" --query "reverse(sort_by(Images, &CreationDate))[*].{name: Name, id: ImageId}" --output tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow Windows Server 2019 命令示例
aws ec2 describe-images --region <aws_region_name> --filters "Name=name,Values=Windows_Server-2019*English*Core*Base*" "Name=is-public,Values=true" --query "reverse(sort_by(Images, &CreationDate))[*].{name: Name, id: ImageId}" --output table$ aws ec2 describe-images --region <aws_region_name> --filters "Name=name,Values=Windows_Server-2019*English*Core*Base*" "Name=is-public,Values=true" --query "reverse(sort_by(Images, &CreationDate))[*].{name: Name, id: ImageId}" --output tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
- <aws_region_name>
- 指定 AWS 区域的名称。
- 对于断开连接的集群,Windows AMI 必须安装有 EC2LaunchV2 代理版本 2.0.1643 或更高版本。如需更多信息,请参阅 AWS 文档中的安装最新版本的 EC2Launch v2。
6.1.2. Machine API 概述 复制链接链接已复制到粘贴板!
Machine API 将基于上游 Cluster API 项目的主要资源与自定义 OpenShift Container Platform 资源相结合。
对于 OpenShift Container Platform 4.16 集群,在集群安装完成后,Machine API 会执行所有节点主机置备管理操作。因此,OpenShift Container Platform 4.16 在公有或私有云基础架构之上提供了一种弹性动态置备的方法。
两种主要资源分别是:
- Machines
-
描述节点主机的基本单元。机器具有
providerSpec规格,用于描述为不同云平台提供的计算节点的类型。例如,计算节点的机器类型可能会定义特定的机器类型和所需的元数据。 - 机器集
MachineSet资源是计算机器组。计算机器集适用于计算机器,因为副本集是针对 pod。如果需要更多计算机器或必须缩减规模,您可以更改MachineSet资源的replicas字段来满足您的计算需求。警告control plane 机器不能由计算机器集管理。
control plane 机器集为 control plane 机器提供管理功能,与为计算机器提供的计算机器集类似。
如需更多信息,请参阅"管理 control plane 机器"。
以下自定义资源可为集群添加更多功能:
- 机器自动扩展
MachineAutoscaler资源自动扩展云中的计算机器。您可以为指定计算机器集中的节点设置最小和最大扩展界限,机器自动扩展则维护该范围内的节点。ClusterAutoscaler对象存在后,MachineAutoscaler对象生效。ClusterAutoscaler和MachineAutoscaler资源都由ClusterAutoscalerOperator对象提供。- 集群自动扩展
此资源基于上游集群自动扩展项目。在 OpenShift Container Platform 实现中,它通过扩展计算机器设置 API 来与 Machine API 集成。您可以使用以下方法使用集群自动扩展来管理集群:
- 为内核、节点、内存和 GPU 等资源设置集群范围的扩展限制
- 设置优先级,以便集群对 pod 和新节点进行优先排序,而在不太重要的 pod 时不会上线
- 设置扩展策略,以便您可以扩展节点,但不会缩减节点
- 机器健康检查
-
MachineHealthCheck资源可检测机器何时处于不健康状态并将其删除,然后在支持的平台上生成新的机器。
在 OpenShift Container Platform 版本 3.11 中,您无法轻松地推出多区架构,因为集群不负责管理机器置备。自 OpenShift Container Platform 版本 4.1 起,此过程变得更加容易。每个计算机器集限定在一个区,因此安装程序可以代表您的可用区向计算机器集发送。然后,由于您的计算是动态的,因此在面对区域故障时,您始终都有一个区域来应对必须重新平衡机器的情况。在没有多个可用区的全局 Azure 区域,您可以使用可用性集来确保高可用性。自动扩展器在集群生命周期内尽可能提供平衡。
6.1.3. AWS 上 Windows MachineSet 对象的 YAML 示例 复制链接链接已复制到粘贴板!
此 YAML 示例定义了一个在 Amazon Web Services(AWS)上运行的 Windows MachineSet 对象,它可响应 Windows Machine Config Operator(WMCO)。
- 1 3 5 10 13 14 15 16
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。您可以运行以下命令来获取基础架构 ID:
oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 2 4 6
- 指定基础架构 ID、worker 标签和区。
- 7
- 将计算机器设置为 Windows 机器。
- 8
- 将 Windows 节点配置为计算机器。
- 9
- 指定安装了容器运行时的受支持的 Windows 镜像的 AMI ID。注意
对于断开连接的集群,Windows AMI 必须安装有 EC2LaunchV2 代理版本 2.0.1643 或更高版本。如需更多信息,请参阅 AWS 文档中的安装最新版本的 EC2Launch v2。
- 11
- 指定 AWS 区域,如
us-east-1a。 - 12
- 指定 AWS 区域,如
us-east-1。 - 17
- 由 WMCO 配置第一个 Windows 机器时创建的。之后,所有后续计算机器集都可以使用
windows-user-data。
6.1.4. 创建计算机器集 复制链接链接已复制到粘贴板!
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
先决条件
- 部署一个 OpenShift Container Platform 集群。
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin权限的用户身份登录oc。 -
在断开连接的环境中,
MachineSet自定义资源(CR)中指定的镜像必须安装有 OpenSSH 服务器 v0.0.1.0。
流程
创建一个包含计算机器集自定义资源(CR)示例的新 YAML 文件,并将其命名为
<file_name>.yaml。确保设置
<clusterID>和<role>参数值。可选:如果您不确定要为特定字段设置哪个值,您可以从集群中检查现有计算机器集:
要列出集群中的计算机器集,请运行以下命令:
oc get machinesets -n openshift-machine-api
$ oc get machinesets -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看特定计算机器集自定义资源 (CR) 的值,请运行以下命令:
oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建
MachineSetCR:oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,查看计算机器集列表:
oc get machineset -n openshift-machine-api
$ oc get machineset -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当新的计算机器集可用时,
DESIRED和CURRENT的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。
6.2. 在 Azure 上创建 Windows 机器集 复制链接链接已复制到粘贴板!
您可以在 Microsoft Azure 上的 OpenShift Container Platform 集群中创建 Windows MachineSet 对象来满足特定目的。例如,您可以创建基础架构 Windows 机器集和相关机器,以便将支持的 Windows 工作负载转移到新的 Windows 机器上。
6.2.1. 先决条件 复制链接链接已复制到粘贴板!
- 已使用 Operator Lifecycle Manager(OLM)安装 Windows Machine Config Operator(WMCO)。
- 您可以使用受支持的 Windows Server 作为操作系统镜像。
6.2.2. Machine API 概述 复制链接链接已复制到粘贴板!
Machine API 将基于上游 Cluster API 项目的主要资源与自定义 OpenShift Container Platform 资源相结合。
对于 OpenShift Container Platform 4.16 集群,在集群安装完成后,Machine API 会执行所有节点主机置备管理操作。因此,OpenShift Container Platform 4.16 在公有或私有云基础架构之上提供了一种弹性动态置备的方法。
两种主要资源分别是:
- Machines
-
描述节点主机的基本单元。机器具有
providerSpec规格,用于描述为不同云平台提供的计算节点的类型。例如,计算节点的机器类型可能会定义特定的机器类型和所需的元数据。 - 机器集
MachineSet资源是计算机器组。计算机器集适用于计算机器,因为副本集是针对 pod。如果需要更多计算机器或必须缩减规模,您可以更改MachineSet资源的replicas字段来满足您的计算需求。警告control plane 机器不能由计算机器集管理。
control plane 机器集为 control plane 机器提供管理功能,与为计算机器提供的计算机器集类似。
如需更多信息,请参阅"管理 control plane 机器"。
以下自定义资源可为集群添加更多功能:
- 机器自动扩展
MachineAutoscaler资源自动扩展云中的计算机器。您可以为指定计算机器集中的节点设置最小和最大扩展界限,机器自动扩展则维护该范围内的节点。ClusterAutoscaler对象存在后,MachineAutoscaler对象生效。ClusterAutoscaler和MachineAutoscaler资源都由ClusterAutoscalerOperator对象提供。- 集群自动扩展
此资源基于上游集群自动扩展项目。在 OpenShift Container Platform 实现中,它通过扩展计算机器设置 API 来与 Machine API 集成。您可以使用以下方法使用集群自动扩展来管理集群:
- 为内核、节点、内存和 GPU 等资源设置集群范围的扩展限制
- 设置优先级,以便集群对 pod 和新节点进行优先排序,而在不太重要的 pod 时不会上线
- 设置扩展策略,以便您可以扩展节点,但不会缩减节点
- 机器健康检查
-
MachineHealthCheck资源可检测机器何时处于不健康状态并将其删除,然后在支持的平台上生成新的机器。
在 OpenShift Container Platform 版本 3.11 中,您无法轻松地推出多区架构,因为集群不负责管理机器置备。自 OpenShift Container Platform 版本 4.1 起,此过程变得更加容易。每个计算机器集限定在一个区,因此安装程序可以代表您的可用区向计算机器集发送。然后,由于您的计算是动态的,因此在面对区域故障时,您始终都有一个区域来应对必须重新平衡机器的情况。在没有多个可用区的全局 Azure 区域,您可以使用可用性集来确保高可用性。自动扩展器在集群生命周期内尽可能提供平衡。
6.2.3. Azure 上 Windows MachineSet 对象的 YAML 示例 复制链接链接已复制到粘贴板!
此 YAML 示例定义了一个在 Microsoft Azure 上运行的 Windows MachineSet 对象,Windows Machine Config Operator(WMCO)可以响应。
- 1 3 5 11 12 13 15
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。您可以运行以下命令来获取基础架构 ID:
oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 2 4 6
- 指定 Windows 计算机器设置名称。Azure 上的 Windows 机器名称不能超过 15 个字符。因此,因为机器名称的生成方式,计算机器设置名称不能超过 9 个字符。
- 7
- 将计算机器设置为 Windows 机器。
- 8
- 将 Windows 节点配置为计算机器。
- 9
- 指定一个
WindowsServer镜像,它定义了2019-Datacenter-with-ContainersSKU。 - 10
- 指定 Azure 区域,如
centralus。 - 14
- 由 WMCO 配置第一个 Windows 机器时创建的。之后,所有后续计算机器集都可以使用
windows-user-data。 - 16
- 指定您所在地区(region)内要放置机器的区域 (zone) 。确保您的地区支持您指定的区域。
6.2.4. 创建计算机器集 复制链接链接已复制到粘贴板!
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
先决条件
- 部署一个 OpenShift Container Platform 集群。
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin权限的用户身份登录oc。 -
在断开连接的环境中,
MachineSet自定义资源(CR)中指定的镜像必须安装有 OpenSSH 服务器 v0.0.1.0。
流程
创建一个包含计算机器集自定义资源(CR)示例的新 YAML 文件,并将其命名为
<file_name>.yaml。确保设置
<clusterID>和<role>参数值。可选:如果您不确定要为特定字段设置哪个值,您可以从集群中检查现有计算机器集:
要列出集群中的计算机器集,请运行以下命令:
oc get machinesets -n openshift-machine-api
$ oc get machinesets -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看特定计算机器集自定义资源 (CR) 的值,请运行以下命令:
oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建
MachineSetCR:oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,查看计算机器集列表:
oc get machineset -n openshift-machine-api
$ oc get machineset -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当新的计算机器集可用时,
DESIRED和CURRENT的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。
6.3. 在 Google Cloud 上创建 Windows 机器集 复制链接链接已复制到粘贴板!
您可以在 Google Cloud 上的 OpenShift Container Platform 集群中创建 Windows MachineSet 对象来满足特定目的。例如,您可以创建基础架构 Windows 机器集和相关机器,以便将支持的 Windows 工作负载转移到新的 Windows 机器上。
6.3.1. 先决条件 复制链接链接已复制到粘贴板!
- 已使用 Operator Lifecycle Manager(OLM)安装 Windows Machine Config Operator(WMCO)。
- 您可以使用受支持的 Windows Server 作为操作系统镜像。
6.3.2. Machine API 概述 复制链接链接已复制到粘贴板!
Machine API 将基于上游 Cluster API 项目的主要资源与自定义 OpenShift Container Platform 资源相结合。
对于 OpenShift Container Platform 4.16 集群,在集群安装完成后,Machine API 会执行所有节点主机置备管理操作。因此,OpenShift Container Platform 4.16 在公有或私有云基础架构之上提供了一种弹性动态置备的方法。
两种主要资源分别是:
- Machines
-
描述节点主机的基本单元。机器具有
providerSpec规格,用于描述为不同云平台提供的计算节点的类型。例如,计算节点的机器类型可能会定义特定的机器类型和所需的元数据。 - 机器集
MachineSet资源是计算机器组。计算机器集适用于计算机器,因为副本集是针对 pod。如果需要更多计算机器或必须缩减规模,您可以更改MachineSet资源的replicas字段来满足您的计算需求。警告control plane 机器不能由计算机器集管理。
control plane 机器集为 control plane 机器提供管理功能,与为计算机器提供的计算机器集类似。
如需更多信息,请参阅"管理 control plane 机器"。
以下自定义资源可为集群添加更多功能:
- 机器自动扩展
MachineAutoscaler资源自动扩展云中的计算机器。您可以为指定计算机器集中的节点设置最小和最大扩展界限,机器自动扩展则维护该范围内的节点。ClusterAutoscaler对象存在后,MachineAutoscaler对象生效。ClusterAutoscaler和MachineAutoscaler资源都由ClusterAutoscalerOperator对象提供。- 集群自动扩展
此资源基于上游集群自动扩展项目。在 OpenShift Container Platform 实现中,它通过扩展计算机器设置 API 来与 Machine API 集成。您可以使用以下方法使用集群自动扩展来管理集群:
- 为内核、节点、内存和 GPU 等资源设置集群范围的扩展限制
- 设置优先级,以便集群对 pod 和新节点进行优先排序,而在不太重要的 pod 时不会上线
- 设置扩展策略,以便您可以扩展节点,但不会缩减节点
- 机器健康检查
-
MachineHealthCheck资源可检测机器何时处于不健康状态并将其删除,然后在支持的平台上生成新的机器。
在 OpenShift Container Platform 版本 3.11 中,您无法轻松地推出多区架构,因为集群不负责管理机器置备。自 OpenShift Container Platform 版本 4.1 起,此过程变得更加容易。每个计算机器集限定在一个区,因此安装程序可以代表您的可用区向计算机器集发送。然后,由于您的计算是动态的,因此在面对区域故障时,您始终都有一个区域来应对必须重新平衡机器的情况。在没有多个可用区的全局 Azure 区域,您可以使用可用性集来确保高可用性。自动扩展器在集群生命周期内尽可能提供平衡。
6.3.3. Google Cloud 上 Windows MachineSet 对象的 YAML 示例 复制链接链接已复制到粘贴板!
此 YAML 文件示例定义了一个在 Google Cloud 上运行的 Windows MachineSet 对象,Windows Machine Config Operator (WMCO)可以使用。
- 1 3 5 10
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。您可以运行以下命令来获取基础架构 ID:
oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 2 4 6
- 指定基础架构 ID、worker 标签和区域后缀(如
a)。 - 7
- 将机器配置为 Windows 机器。
- 8
- 将 Windows 节点配置为计算机器。
- 9
- 指定支持的 Windows Server 镜像的完整路径。
- 11
- 指定在其中创建此集群的 Google Cloud 项目。
- 12
- 指定 Google Cloud 区域,如
us-central1。 - 13
- 由 WMCO 配置第一个 Windows 机器时创建的。之后,所有后续机器组都可以使用
windows-user-data。 - 14
- 指定所选区域中的区域,如
us-central1-a。
6.3.4. 创建计算机器集 复制链接链接已复制到粘贴板!
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
先决条件
- 部署一个 OpenShift Container Platform 集群。
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin权限的用户身份登录oc。
流程
创建一个包含计算机器集自定义资源(CR)示例的新 YAML 文件,并将其命名为
<file_name>.yaml。确保设置
<clusterID>和<role>参数值。可选:如果您不确定要为特定字段设置哪个值,您可以从集群中检查现有计算机器集:
要列出集群中的计算机器集,请运行以下命令:
oc get machinesets -n openshift-machine-api
$ oc get machinesets -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看特定计算机器集自定义资源 (CR) 的值,请运行以下命令:
oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建
MachineSetCR:oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,查看计算机器集列表:
oc get machineset -n openshift-machine-api
$ oc get machineset -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当新的计算机器集可用时,
DESIRED和CURRENT的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。
6.4. 在 Nutanix 上创建 Windows MachineSet 对象 复制链接链接已复制到粘贴板!
您可以在 Nutanix 上的 OpenShift Container Platform 集群中创建 Windows MachineSet 对象来满足特定目的。例如,您可以创建基础架构 Windows 机器集和相关机器,以便将支持的 Windows 工作负载转移到新的 Windows 机器上。
6.4.1. 先决条件 复制链接链接已复制到粘贴板!
- 已使用 Operator Lifecycle Manager(OLM)安装 Windows Machine Config Operator(WMCO)。
- 您可以使用受支持的 Windows Server 作为操作系统镜像。
-
您为内部 API 服务器 URL
api-int.<cluster_name>.<base_domain>添加了一个新的 DNS 条目,它指向外部 API 服务器 URLapi.<cluster_name>.<base_domain>。这可以是一个 CNAME 或一个 A 记录。
6.4.2. Machine API 概述 复制链接链接已复制到粘贴板!
Machine API 将基于上游 Cluster API 项目的主要资源与自定义 OpenShift Container Platform 资源相结合。
对于 OpenShift Container Platform 4.16 集群,在集群安装完成后,Machine API 会执行所有节点主机置备管理操作。因此,OpenShift Container Platform 4.16 在公有或私有云基础架构之上提供了一种弹性动态置备的方法。
两种主要资源分别是:
- Machines
-
描述节点主机的基本单元。机器具有
providerSpec规格,用于描述为不同云平台提供的计算节点的类型。例如,计算节点的机器类型可能会定义特定的机器类型和所需的元数据。 - 机器集
MachineSet资源是计算机器组。计算机器集适用于计算机器,因为副本集是针对 pod。如果需要更多计算机器或必须缩减规模,您可以更改MachineSet资源的replicas字段来满足您的计算需求。警告control plane 机器不能由计算机器集管理。
control plane 机器集为 control plane 机器提供管理功能,与为计算机器提供的计算机器集类似。
如需更多信息,请参阅"管理 control plane 机器"。
以下自定义资源可为集群添加更多功能:
- 机器自动扩展
MachineAutoscaler资源自动扩展云中的计算机器。您可以为指定计算机器集中的节点设置最小和最大扩展界限,机器自动扩展则维护该范围内的节点。ClusterAutoscaler对象存在后,MachineAutoscaler对象生效。ClusterAutoscaler和MachineAutoscaler资源都由ClusterAutoscalerOperator对象提供。- 集群自动扩展
此资源基于上游集群自动扩展项目。在 OpenShift Container Platform 实现中,它通过扩展计算机器设置 API 来与 Machine API 集成。您可以使用以下方法使用集群自动扩展来管理集群:
- 为内核、节点、内存和 GPU 等资源设置集群范围的扩展限制
- 设置优先级,以便集群对 pod 和新节点进行优先排序,而在不太重要的 pod 时不会上线
- 设置扩展策略,以便您可以扩展节点,但不会缩减节点
- 机器健康检查
-
MachineHealthCheck资源可检测机器何时处于不健康状态并将其删除,然后在支持的平台上生成新的机器。
在 OpenShift Container Platform 版本 3.11 中,您无法轻松地推出多区架构,因为集群不负责管理机器置备。自 OpenShift Container Platform 版本 4.1 起,此过程变得更加容易。每个计算机器集限定在一个区,因此安装程序可以代表您的可用区向计算机器集发送。然后,由于您的计算是动态的,因此在面对区域故障时,您始终都有一个区域来应对必须重新平衡机器的情况。在没有多个可用区的全局 Azure 区域,您可以使用可用性集来确保高可用性。自动扩展器在集群生命周期内尽可能提供平衡。
6.4.3. Nutanix 上 Windows MachineSet 对象的 YAML 示例 复制链接链接已复制到粘贴板!
此 YAML 示例定义了一个在 Nutanix 上运行的 Windows MachineSet 对象,Windows Machine Config Operator (WMCO) 可以响应。
- 1 3 5
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。您可以运行以下命令来获取基础架构 ID:
oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 2 4 6
- 指定基础架构 ID、worker 标签和区。
- 7
- 将计算机器设置为 Windows 机器。
- 8
- 将 Windows 节点配置为计算机器。
- 9
- 注意
您必须在 OpenShift Container Platform 4.16 中使用
Legacy引导类型。 - 10
- 指定 Nutanix Prism Element 集群配置。在本例中,集群类型是
uuid,因此有一个uuid小节。 - 11
- 指定集群的 secret 名称。不要更改这个值。
- 12
- 指定要使用的镜像。使用集群的现有默认计算机器集中的镜像。
- 13
- 指定云供应商平台类型。不要更改这个值。
- 14
- 指定集群的内存量(以 Gi 为单位)。
- 15
- 指定子网配置。在本例中,子网类型是
uuid,因此有一个uuid小节。 - 16
- 以 Gi 为单位指定系统磁盘大小。
- 17
- 指定
openshift-machine-api命名空间中的用户数据 YAML 文件中的 secret 名称。安装程序在默认计算机器集中填充时使用的值。 - 18
- 指定 vCPU 插槽数量。
- 19
- 指定每个插槽的 vCPU 数量。
6.4.4. 创建计算机器集 复制链接链接已复制到粘贴板!
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
先决条件
- 部署一个 OpenShift Container Platform 集群。
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin权限的用户身份登录oc。
流程
创建一个包含计算机器集自定义资源(CR)示例的新 YAML 文件,并将其命名为
<file_name>.yaml。确保设置
<clusterID>和<role>参数值。可选:如果您不确定要为特定字段设置哪个值,您可以从集群中检查现有计算机器集:
要列出集群中的计算机器集,请运行以下命令:
oc get machinesets -n openshift-machine-api
$ oc get machinesets -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看特定计算机器集自定义资源 (CR) 的值,请运行以下命令:
oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建
MachineSetCR:oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,查看计算机器集列表:
oc get machineset -n openshift-machine-api
$ oc get machineset -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当新的计算机器集可用时,
DESIRED和CURRENT的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。
6.5. 在 vSphere 上创建 Windows 机器集 复制链接链接已复制到粘贴板!
您可以在 VMware vSphere 上的 OpenShift Container Platform 集群中创建 Windows MachineSet 对象来满足特定目的。例如,您可以创建基础架构 Windows 机器集和相关机器,以便将支持的 Windows 工作负载转移到新的 Windows 机器上。
6.5.1. 先决条件 复制链接链接已复制到粘贴板!
- 已使用 Operator Lifecycle Manager(OLM)安装 Windows Machine Config Operator(WMCO)。
- 您可以使用受支持的 Windows Server 作为操作系统镜像。
6.5.2. Machine API 概述 复制链接链接已复制到粘贴板!
Machine API 将基于上游 Cluster API 项目的主要资源与自定义 OpenShift Container Platform 资源相结合。
对于 OpenShift Container Platform 4.16 集群,在集群安装完成后,Machine API 会执行所有节点主机置备管理操作。因此,OpenShift Container Platform 4.16 在公有或私有云基础架构之上提供了一种弹性动态置备的方法。
两种主要资源分别是:
- Machines
-
描述节点主机的基本单元。机器具有
providerSpec规格,用于描述为不同云平台提供的计算节点的类型。例如,计算节点的机器类型可能会定义特定的机器类型和所需的元数据。 - 机器集
MachineSet资源是计算机器组。计算机器集适用于计算机器,因为副本集是针对 pod。如果需要更多计算机器或必须缩减规模,您可以更改MachineSet资源的replicas字段来满足您的计算需求。警告control plane 机器不能由计算机器集管理。
control plane 机器集为 control plane 机器提供管理功能,与为计算机器提供的计算机器集类似。
如需更多信息,请参阅"管理 control plane 机器"。
以下自定义资源可为集群添加更多功能:
- 机器自动扩展
MachineAutoscaler资源自动扩展云中的计算机器。您可以为指定计算机器集中的节点设置最小和最大扩展界限,机器自动扩展则维护该范围内的节点。ClusterAutoscaler对象存在后,MachineAutoscaler对象生效。ClusterAutoscaler和MachineAutoscaler资源都由ClusterAutoscalerOperator对象提供。- 集群自动扩展
此资源基于上游集群自动扩展项目。在 OpenShift Container Platform 实现中,它通过扩展计算机器设置 API 来与 Machine API 集成。您可以使用以下方法使用集群自动扩展来管理集群:
- 为内核、节点、内存和 GPU 等资源设置集群范围的扩展限制
- 设置优先级,以便集群对 pod 和新节点进行优先排序,而在不太重要的 pod 时不会上线
- 设置扩展策略,以便您可以扩展节点,但不会缩减节点
- 机器健康检查
-
MachineHealthCheck资源可检测机器何时处于不健康状态并将其删除,然后在支持的平台上生成新的机器。
在 OpenShift Container Platform 版本 3.11 中,您无法轻松地推出多区架构,因为集群不负责管理机器置备。自 OpenShift Container Platform 版本 4.1 起,此过程变得更加容易。每个计算机器集限定在一个区,因此安装程序可以代表您的可用区向计算机器集发送。然后,由于您的计算是动态的,因此在面对区域故障时,您始终都有一个区域来应对必须重新平衡机器的情况。在没有多个可用区的全局 Azure 区域,您可以使用可用性集来确保高可用性。自动扩展器在集群生命周期内尽可能提供平衡。
6.5.3. 为 Windows 容器工作负载准备 vSphere 环境 复制链接链接已复制到粘贴板!
您必须通过创建 vSphere Windows VM 金级镜像并启用与 WMCO 的内部 API 服务器通信来为 Windows 容器工作负载准备 vSphere 环境。
6.5.3.1. 创建 vSphere Windows 虚拟机金级镜像 复制链接链接已复制到粘贴板!
创建 vSphere Windows 虚拟机(VM)金级镜像。
先决条件
您已创建了私钥/公钥对,用于在 OpenSSH 服务器中配置基于密钥的身份验证。私钥必须在 Windows Machine Config Operator (WMCO)命名空间中配置,以便 WMCO 能够与 Windows 虚拟机通信。
如果您在 Red Hat Enterprise Linux (RHEL) 系统上创建了密钥对,在 Windows 系统上使用公钥之前,请确保公钥保存为 ASCII 编码。例如,以下 PowerShell 命令复制公钥,为 ASCII 字符集进行编码:
echo "ssh-rsa <ssh_pub_key>" | Out-File <ssh_key_path> -Encoding ascii
C:\> echo "ssh-rsa <ssh_pub_key>" | Out-File <ssh_key_path> -Encoding asciiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<ssh_pub_key>- 指定用于访问集群的 SSH 公钥。
<ssh_key_path>- 指定 SSH 公钥的路径。
如需了解更多详细信息,请参阅"为 Windows Machine Config Operator 配置 secret" 部分。
在创建 Windows 虚拟机的多个情形中,您必须使用 Microsoft PowerShell 命令。本指南中的 PowerShell 命令由 PS C:\> 前缀区分。
流程
- 选择兼容的 Windows Server 版本。目前,Windows Machine Config Operator (WMCO) 稳定版本支持 Windows Server 2022 Long-Term Servicing Channel 及 OS-level 容器网络补丁 KB5012637。
使用带有兼容 Windows Server 版本的 VM金级镜像,在 vSphere 客户端中创建新虚拟机。有关兼容版本的更多信息,请参阅 Red Hat OpenShift support for Windows Containers 发行注记中的 "Windows Machine Config Operator prerequisites" 部分
重要您的虚拟机的虚拟硬件版本必须满足 OpenShift Container Platform 的基础架构要求。如需更多信息,请参阅 OpenShift Container Platform 文档中的 "VMware vSphere infrastructure requirements" 部分。另外,您还可以参考 VMware 有关 虚拟机硬件版本的文档。
- 在 Windows 虚拟机上安装和配置 VMware Tools 版本 11.0.6 或更高版本。如需更多信息,参阅 VMware Tools 文档。
在 Windows 虚拟机上安装了 VMware Tools 后,请验证以下内容:
The
C:\ProgramData\VMware\VMware Tools\tools.conf文件存在,并带有以下条目:exclude-nics=
exclude-nics=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
tools.conf文件不存在,则使用exclude-nics选项取消注释并设置为空值创建该文件。此条目确保通过混合覆盖在 Windows 虚拟机上生成的克隆 vNIC 不被忽略。
Windows 虚拟机在 vCenter 中有一个有效的 IP 地址:
ipconfig
C:\> ipconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow VMTools Windows 服务正在运行:
PS C:\> Get-Service -Name VMTools | Select Status, StartType
PS C:\> Get-Service -Name VMTools | Select Status, StartTypeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 在 Windows 虚拟机上安装和配置 OpenSSH 服务器。如需了解更多详细信息,请参阅 Microsoft 的有关安装 OpenSSH 的文档。
为管理用户设置 SSH 访问权限。详情请参阅 Microsoft 文档的管理员用户。
重要指令中使用的公钥必须与稍后在 WMCO 命名空间中创建的私钥对应,后者包含您的 secret。如需了解更多详细信息,请参阅"为 Windows Machine Config Operator 配置 secret" 部分。
您必须在 Windows 虚拟机中创建新的防火墙规则,以允许进入连接的容器日志。运行以下命令,在 TCP 端口 10250 中创建防火墙规则:
PS C:\> New-NetFirewallRule -DisplayName "ContainerLogsPort" -LocalPort 10250 -Enabled True -Direction Inbound -Protocol TCP -Action Allow -EdgeTraversalPolicy Allow
PS C:\> New-NetFirewallRule -DisplayName "ContainerLogsPort" -LocalPort 10250 -Enabled True -Direction Inbound -Protocol TCP -Action Allow -EdgeTraversalPolicy AllowCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 克隆 Windows 虚拟机,使其成为可重复利用的镜像。遵循 VMware 文档来了解如何克隆现有虚拟机以了解更多详细信息。
在克隆的 Windows 虚拟机上,运行 Windows Sysprep 工具 :
C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:<path_to_unattend.xml>
C:\> C:\Windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:<path_to_unattend.xml>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
unattend.xml文件的路径。
注意对于您可以在 Windows 镜像中运行
sysprep命令的次数有一个限制。如需更多信息,请参阅 Microsoft 文档。提供了
unattend.xml示例,它维护 WMCO 所需的所有更改。您必须修改这个示例,它不能直接使用。例 6.1.
unattend.xml示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
ComputerName,它必须遵循 Kubernetes 名称规格。这些规格也适用于在创建新虚拟机时在生成的模板中执行的 Guest OS 自定义。 - 2
- 禁用自动登录,以避免在启动时使用管理员特权打开终端的安全问题。这是默认值,不得更改。
- 3
- 将
MyPassword占位符替换为 Administrator 帐户的密码。这可防止内置的 Administrator 帐户默认拥有空白密码。遵循 Microsoft 选择密码的最佳实践。
Sysprep 工具完成后,Windows 虚拟机将关闭。您不得再使用此虚拟机或打开此虚拟机。
- 将 Windows 虚拟机转换为 vCenter 中的模板。
6.5.3.2. 在 vSphere 上启用与 WMCO 的内部 API 服务器通信 复制链接链接已复制到粘贴板!
Windows Machine Config Operator(WMCO)从内部 API 服务器端点下载 Ignition 配置文件。您必须启用与内部 API 服务器通信,以便您的 Windows 虚拟机可以下载 Ignition 配置文件,而配置的虚拟机上的 kubelet 只能与内部 API 服务器通信。
先决条件
- 您已在 vSphere 上安装了集群。
流程
-
为
api-int.<cluster_name>.<base_domain>添加一个新的 DNS 项,它指向外部 API 服务器 URLapi.<cluster_name>.<base_domain>。这可以是一个 CNAME 或一个 A 记录。
外部 API 端点已创建,作为 vSphere 上初始集群安装的一部分。
6.5.4. vSphere 上 Windows MachineSet 对象的 YAML 示例 复制链接链接已复制到粘贴板!
此 YAML 示例定义了一个在 VMware vSphere 上运行的 Windows MachineSet 对象,Windows Machine Config Operator(WMCO)可响应。
- 1 3 5
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。您可以运行以下命令来获取基础架构 ID:
oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 2 4 6
- 指定 Windows 计算机器设置名称。由于 vSphere 中生成机器名称的方式,计算机器设置的名称不能超过 9 个字符。
- 7
- 将计算机器设置为 Windows 机器。
- 8
- 将 Windows 节点配置为计算机器。
- 9
- 指定 vSphere Virtual Machine Disk (VMDK) 的大小。注意
这个参数不会设置 Windows 分区的大小。您可以使用
unattend.xml文件或创建带有所需磁盘大小的 vSphere Windows 虚拟机 (VM) 金级镜像来重新定义 Windows 分区大小。 - 10
- 指定要将计算机器设置为的 vSphere VM 网络。此虚拟机网络必须是集群中其他 Linux 计算机器所处的位置。
- 11
- 指定要使用的 Windows vSphere 虚拟机模板的完整路径,如
golden-images/windows-server-template。名称必须是唯一的。重要不要指定原始虚拟机模板。VM 模板必须保持关闭,必须为新的 Windows 机器克隆。启动虚拟机模板会将虚拟机模板配置为平台上的虚拟机,这样可防止它被用作计算机器集可应用配置的模板。
- 12
- 当配置了第一个 Windows 机器时,
windows-user-data由 WMCO 创建。之后,所有后续计算机器集都可以使用windows-user-data。 - 13
- 指定要部署计算机器集的 vCenter 数据中心。
- 14
- 指定要部署计算机器集的 vCenter 数据存储。
- 15
- 指定 vCenter 中 vSphere 虚拟机文件夹的路径,如
/dc1/vm/user-inst-5ddjd。 - 16
- 可选:为您的 Windows 虚拟机指定 vSphere 资源池。
- 17
- 指定 vCenter 服务器 IP 或完全限定域名。
6.5.5. 创建计算机器集 复制链接链接已复制到粘贴板!
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
先决条件
- 部署一个 OpenShift Container Platform 集群。
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin权限的用户身份登录oc。 -
在断开连接的环境中,
MachineSet自定义资源(CR)中指定的镜像必须安装有 OpenSSH 服务器 v0.0.1.0。
流程
创建一个包含计算机器集自定义资源(CR)示例的新 YAML 文件,并将其命名为
<file_name>.yaml。确保设置
<clusterID>和<role>参数值。可选:如果您不确定要为特定字段设置哪个值,您可以从集群中检查现有计算机器集:
要列出集群中的计算机器集,请运行以下命令:
oc get machinesets -n openshift-machine-api
$ oc get machinesets -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看特定计算机器集自定义资源 (CR) 的值,请运行以下命令:
oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建
MachineSetCR:oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,查看计算机器集列表:
oc get machineset -n openshift-machine-api
$ oc get machineset -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当新的计算机器集可用时,
DESIRED和CURRENT的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。
第 7 章 调度 Windows 容器工作负载 复制链接链接已复制到粘贴板!
您可以将 Windows 工作负载调度到 Windows 计算节点。
7.1. 先决条件 复制链接链接已复制到粘贴板!
- 已使用 Operator Lifecycle Manager(OLM)安装 Windows Machine Config Operator(WMCO)。
- 您可以使用 Windows 容器作为 OS 镜像。
- 您已创建了 Windows 计算机器集。
7.2. Windows pod 放置 复制链接链接已复制到粘贴板!
在集群中部署 Windows 工作负载前,您必须配置 Windows 节点调度,以便正确分配 pod。在有了托管 Windows 节点的机器后,就可以使用管理 Linux 节点相同的方法进行管理。同样,将 Windows pod 调度到适当的 Windows 节点会以相似的方式完成,可以使用污点、容限和节点选择器等机制。
如果在一个集群中,有多个操作系统以及运行多个 Windows OS 变体,您必须使用 RuntimeClass 对象将 Windows pod 映射到基本 Windows OS 变体。例如,如果您在不同 Windows Server 容器版本中运行多个 Windows 节点,集群可将 Windows pod 调度到不兼容的 Windows OS 变体。您必须为集群中的每个 Windows OS 变体配置 RuntimeClass 对象。如果集群中只有一个 Windows OS 变体,则建议使用 RuntimeClass 对象。
如需更多信息,请参阅微软有关主机和容器版本兼容性的文档。
另外,建议您在工作负载 pod 中设置 spec.os.name.windows 参数。Windows Machine Config Operator (WMCO) 使用此字段来权威性地指定 pod 操作系统进行验证,用于强制实施特定于 Windows 的 pod 安全性上下文约束 (SCC)。目前,此参数对 pod 调度没有影响。有关此参数的更多信息,请参阅 Kubernetes Pod 文档。
容器基础镜像与容器要调度到的节点的 Windows OS 版本和构建号需要相同。
另外,如果您将 Windows 节点从一个版本升级到另一个版本,例如从 20H2 升级到 2022,则需要升级容器基础镜像以匹配新版本。如需更多信息,请参阅 Windows 容器版本兼容性。
7.3. 创建 RuntimeClass 对象来封装调度机制 复制链接链接已复制到粘贴板!
使用 RuntimeClass 对象简化了调度机制的使用,如污点和容限 ; 您可以部署一个运行时类来封装您的污点和容限,然后将其应用到 pod,再将它们调度到适当的节点。在支持多个操作系统变体的集群中,还需要创建运行时类。
流程
创建
RuntimeClass对象 YAML 文件。例如,runtime-class.yaml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
RuntimeClass对象名称,该名称在您要由此运行时类管理的 pod 中定义。 - 2
- 指定支持这个运行时类的节点必须存在的标签。使用此运行时类的 Pod 只能调度到与此选择器匹配的节点。运行时类的节点选择器与 pod 的现有节点选择器合并。任何冲突都会阻止 pod 调度到节点。
-
对于 Windows 2019,指定
node.kubernetes.io/windows-build: '10.0.17763'标签。 -
对于 Windows 2022,指定
node.kubernetes.io/windows-build: '10.0.20348'标签。
-
对于 Windows 2019,指定
- 3
- 指定要在 pod 附加的容限(不包括重复),在准入过程中使用此运行时类运行。这将合并 pod 和运行时类容许的节点集合。
创建
RuntimeClass对象:oc create -f <file-name>.yaml
$ oc create -f <file-name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc create -f runtime-class.yaml
$ oc create -f runtime-class.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
RuntimeClass对象应用到您的 pod,以确保其被调度到适当的操作系统变体:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定管理 pod 调度的运行时类。
7.4. Windows 容器工作负载部署示例 复制链接链接已复制到粘贴板!
在有 Windows 计算节点可用后,您可以将 Windows 容器工作负载部署到集群中。
这个示例部署仅供参考。
Service 对象示例
Deployment 对象示例
- 1
- 指定要使用的容器镜像:
mcr.microsoft.com/powershell:<tag>或mcr.microsoft.com/windows/servercore:<tag>。容器镜像必须与节点上运行的 Windows 版本匹配。-
对于 Windows 2019,使用
ltsc2019标签。 -
对于 Windows 2022,使用
ltsc2022标签。
-
对于 Windows 2019,使用
- 2
- 指定要在容器上执行的命令。
-
对于
mcr.microsoft.com/powershell:<tag>容器镜像,您必须将命令定义为pwsh.exe。 -
对于
mcr.microsoft.com/windows/servercore:<tag>容器镜像,您必须将该命令定义为powershell.exe。
-
对于
- 3
- 指定您为集群中的 Windows 操作系统变体创建的运行时类。
7.5. 支持 Windows CSI 驱动程序 复制链接链接已复制到粘贴板!
Red Hat OpenShift for Windows Containers 在集群中的所有 Windows 节点上安装 CSI 代理。CSI Proxy 是一个插件,它允许 CSI 驱动程序在节点上执行存储操作。
要将持久性存储用于 Windows 工作负载,您必须部署特定的 Windows CSI 驱动程序守护进程集,如存储供应商文档所述。默认情况下,WMCO 不会自动创建 Windows CSI 驱动程序守护进程集。请参阅 Kubernetes CSI Developer 文档中的生产环境驱动程序列表。
红帽不提供对 Kubernetes CSI 开发人员文档中列出的第三方生产驱动程序的支持。
7.6. 手动扩展计算机器集 复制链接链接已复制到粘贴板!
要在计算机器集中添加或删除机器实例,您可以手动扩展计算机器集。
这个指南与全自动的、安装程序置备的基础架构安装相关。自定义的、用户置备的基础架构安装没有计算机器集。
先决条件
-
安装 OpenShift Container Platform 集群和
oc命令行。 -
以具有
cluster-admin权限的用户身份登录oc。
流程
运行以下命令,查看集群中的计算机器:
oc get machinesets.machine.openshift.io -n openshift-machine-api
$ oc get machinesets.machine.openshift.io -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 计算机器集以
<clusterid>-worker-<aws-region-az>的形式列出。运行以下命令,查看集群中的计算机器:
oc get machines.machine.openshift.io -n openshift-machine-api
$ oc get machines.machine.openshift.io -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在要删除的计算机器上设置注解:
oc annotate machines.machine.openshift.io/<machine_name> -n openshift-machine-api machine.openshift.io/delete-machine="true"
$ oc annotate machines.machine.openshift.io/<machine_name> -n openshift-machine-api machine.openshift.io/delete-machine="true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来扩展计算机器集:
oc scale --replicas=2 machinesets.machine.openshift.io <machineset> -n openshift-machine-api
$ oc scale --replicas=2 machinesets.machine.openshift.io <machineset> -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者:
oc edit machinesets.machine.openshift.io <machineset> -n openshift-machine-api
$ oc edit machinesets.machine.openshift.io <machineset> -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以应用以下 YAML 来扩展计算机器集:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以扩展或缩减计算机器。需要过几分钟以后新机器才可用。
重要默认情况下,机器控制器会尝试排空在机器上运行的节点,直到成功为止。在某些情况下,如错误配置了 pod 中断预算,排空操作可能无法成功。如果排空操作失败,机器控制器无法继续删除机器。
您可以通过在特定机器上注解
machine.openshift.io/exclude-node-draining来跳过排空节点。
验证
运行以下命令,验证删除所需的机器:
oc get machines.machine.openshift.io
$ oc get machines.machine.openshift.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 8 章 Windows 节点升级 复制链接链接已复制到粘贴板!
您可以通过升级 Windows Machine Config Operator(WMCO),以确保 Windows 节点具有最新的更新。
8.1. Windows Machine Config Operator 升级 复制链接链接已复制到粘贴板!
当发布与当前集群版本兼容的 Windows Machine Config Operator(WMCO)的新版本时,Operator 会根据升级频道和订阅批准策略升级,在使用 Operator Lifecycle Manager(OLM)时会安装它。WMCO 升级会在 Windows 机器中产生 Kubernetes 组件升级。
如果要升级到 WMCO 的新版本并希望使用集群监控,则必须在 WMCO 命名空间中具有 openshift.io/cluster-monitoring=true 标签。如果将该标签添加到已存在的 WMCO 命名空间,并且已经配置了 Windows 节点,重启 WMCO pod 以允许显示监控图形。
对于非破坏性升级,WMCO 会终止之前 WMCO 版本配置的 Windows 机器,并使用当前版本重新创建它们。这可以通过删除 Machine 对象来完成,这会导致 Windows 节点排空和删除。为便于升级,WMCO 会为所有配置的节点添加版本注解。在升级过程中,版本注解中的不匹配会导致删除和重新创建 Windows 机器。要在升级过程中减少服务的中断,WMCO 一次只更新一个 Windows 机器。
更新后,建议您在工作负载 pod 中设置 spec.os.name.windows 参数。WMCO 使用此字段来权威性地指定 pod 操作系统进行验证,用于强制实施特定于 Windows 的 pod 安全性上下文约束 (SCC)。
WMCO 仅负责更新 Kubernetes 组件,而不负责 Windows 操作系统更新。您在创建虚拟机时提供 Windows 镜像,因此您需要提供更新的镜像。您可以通过更改 MachineSet spec 中的镜像配置来提供更新的 Windows 镜像。
有关使用 Operator Lifecycle Manager (OLM) 升级 Operator 的更多信息,请参阅升级已安装的 Operator。
第 9 章 使用 Bring-Your-Own-Host (BYOH) Windows 实例作为节点 复制链接链接已复制到粘贴板!
通过自带主机 (BYOH) ,用户可以重新指定 Windows Server 虚拟机的用途,并将它们带入 OpenShift Container Platform。BYOH Windows 实例让希望在 Windows 服务器脱机时缓解重大中断的用户受益。
9.1. 配置 BYOH Windows 实例 复制链接链接已复制到粘贴板!
创建 BYOH Windows 实例需要在 Windows Machine Config Operator (WMCO) 命名空间中创建配置映射。
先决条件
要作为节点附加到集群的任何 Windows 实例都必须满足以下要求:
- 实例必须与集群中的 Linux worker 节点位于同一个网络中。
- 端口 22 必须处于打开状态,并且正在运行 SSH 服务器。
-
SSH 服务器的默认 shell 必须是 Windows 命令 shell 或
cmd.exe。 - 端口 10250 必须处于打开状态才能收集日志。
- 管理员用户会看到一个 私钥,该机密集中使用为授权 SSH 密钥 (Microsoft 文档)。
-
如果您要为安装程序置备的基础架构 (IPI) AWS 集群创建 BYOH Windows 实例,您必须在与 worker 节点的计算机器集中的
spec.template.spec.value.tag值匹配的 AWS 实例中添加标签。例如kubernetes.io/cluster/<cluster_id>: owned或kubernetes.io/cluster/<cluster_id>: shared。 - 如果您要在 vSphere 上创建 BYOH Windows 实例,则必须启用与内部 API 服务器的通信。
实例的主机名必须遵循 RFC 1123 DNS 标签要求,其中包括以下标准:
- 仅包含小写字母数字字符或 '-'。
- 以字母数字字符开头。
- 以字母数字字符结尾。
WMCO 部署的 Windows 实例使用容器运行时配置。由于 WMCO 安装和管理运行时,建议您不要在节点上手动安装容器。
流程
在 WMCO 命名空间中创建一个名为
windows-instances的 ConfigMap,用于描述要添加的 Windows 实例。注意格式化配置映射的 data 部分的每个条目,使用地址作为关键字,值为
username=<username>。配置映射示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.2. 删除 BYOH Windows 实例 复制链接链接已复制到粘贴板!
您可以通过删除配置映射中实例条目来删除附加到集群的 BYOH 实例。删除实例会在添加到集群之前将该实例恢复到其状态。任何日志和容器运行时工件都不会添加到这些实例中。
要完全删除实例,必须使用提供给 WMCO 的当前私钥访问该实例。例如,要从上例中删除 10.1.42.1 实例,配置映射将更改为以下内容:
删除 windows-instances 被视为取消构建添加为节点的所有 Windows 实例的请求。
第 10 章 删除 Windows 节点 复制链接链接已复制到粘贴板!
您可以通过删除其主机 Windows 机器来删除 Windows 节点。
10.1. 删除一个特定的机器 复制链接链接已复制到粘贴板!
您可以删除特定的机器。
除非集群使用 control plane 机器集,否则不要删除 control plane 机器。
先决条件
- 安装 OpenShift Container Platform 集群。
-
安装 OpenShift CLI (
oc) 。 -
以具有
cluster-admin权限的用户身份登录oc。
流程
运行以下命令,查看集群中的机器:
oc get machine -n openshift-machine-api
$ oc get machine -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出包含
<clusterid>-<role>-<cloud_region>格式的机器列表。- 找到您要删除的机器。
运行以下命令来删除机器:
oc delete machine <machine> -n openshift-machine-api
$ oc delete machine <machine> -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要默认情况下,机器控制器会尝试排空在机器上运行的节点,直到成功为止。在某些情况下,如错误配置了 pod 中断预算,排空操作可能无法成功。如果排空操作失败,机器控制器无法继续删除机器。
您可以通过在特定机器上注解
machine.openshift.io/exclude-node-draining来跳过排空节点。如果要删除的机器属于机器集,则会立即创建一个新机器来满足指定的副本数要求。
第 11 章 禁用 Windows 容器工作负载 复制链接链接已复制到粘贴板!
您可以通过卸载 Windows Machine Config Operator(WMCO),并删除安装 WMCO 时默认添加的命名空间,来禁用运行 Windows 容器工作负载的能力。
11.1. 卸载 Windows Machine Config Operator 复制链接链接已复制到粘贴板!
您可以从集群卸载 Windows Machine Config Operator(WMCO)。
先决条件
-
删除托管 Windows 工作负载的 Windows
Machine对象。
流程
-
在 Operators → OperatorHub 页面中,使用 Filter by keyword 复选框来搜索
Red Hat Windows Machine Config Operator。 - 点 Red Hat Windows Machine Config Operator 标题。Operator 标题表示已安装该 Operator。
- 在 Windows Machine Config Operator 描述符页面中,点 Uninstall。
11.2. 删除 Windows Machine Config Operator 命名空间 复制链接链接已复制到粘贴板!
您可以删除默认为 Windows Machine Config Operator(WMCO)生成的命名空间。
先决条件
- WMCO 已从集群中移除。
流程
删除
openshift-windows-machine-config-operator命名空间中创建的所有 Windows 工作负载:oc delete --all pods --namespace=openshift-windows-machine-config-operator
$ oc delete --all pods --namespace=openshift-windows-machine-config-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
openshift-windows-machine-config-operator命名空间中的所有 pod 是否已删除,或处于终止状态:oc get pods --namespace openshift-windows-machine-config-operator
$ oc get pods --namespace openshift-windows-machine-config-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
openshift-windows-machine-config-operator命名空间:oc delete namespace openshift-windows-machine-config-operator
$ oc delete namespace openshift-windows-machine-config-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.