第 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 服务器容器使用共享内核提供资源隔离,但它并不适用于托管可能会有恶意的多租户工作负载。涉及主机多租户的情况应该使用 Hyper-V 隔离容器来严格隔离租户。
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 版本工作负载进行区分。