本文发表已超过一年。较旧的文章可能包含过时内容。请检查页面信息自发表以来是否已不再准确。
Kubernetes 1.26:Windows HostProcess 容器正式可用
期待已久的日子终于到来:HostProcess 容器,等同于 Linux 特权容器的 Windows 版本,终于在 Kubernetes 1.26 中达到普遍可用 (GA) 状态!
什么是 HostProcess 容器,它们为何有用?
集群操作员在节点供应时经常需要配置节点,例如安装 Windows 服务、配置注册表项、管理 TLS 证书、进行网络配置更改,甚至部署监控工具(例如 Prometheus 的 node-exporter)。以前,在 Windows 节点上执行这些操作通常是通过 SSH 或 WinRM 会话运行 PowerShell 脚本以及/或者使用你的云提供商的虚拟机管理工具来完成的。现在,HostProcess 容器使你能够使用 Kubernetes 原生 API 轻松完成所有这些以及更多任务。
借助 HostProcess 容器,你现在可以将任何负载打包到容器镜像中,在运行时将卷映射到容器中,并像管理任何其他 Kubernetes 工作负载一样来管理它们。你将获得容器化打包和部署方法的所有好处,同时降低管理和开发成本。集群操作员需要手动登录 Windows 节点执行管理任务的日子已经一去不复返了。
HostProcess 容器与常规 Windows Server 容器有很大不同。它们作为进程直接在主机上运行,并具有你指定用户的访问策略。HostProcess 容器可以作为内置的 Windows 系统账户运行,也可以作为你定义的用户组中的临时用户运行。HostProcess 容器还共享主机的网络命名空间,并可访问/配置主机可见的存储挂载点。另一方面,Windows Server 容器是高度隔离的,存在于一个独立的执行命名空间中。默认情况下,从 Windows Server 容器直接访问主机是被明确禁止的。
它是如何工作的?
Windows HostProcess 容器使用 Windows Job Objects 实现,这打破了之前使用 server silos 的容器模型。Job Objects 是 Windows 操作系统的组件,可以作为一个组(也称为 job)管理一组进程,并为整个组分配资源限制。Job 对象是 Windows 操作系统特有的,与 Kubernetes Job API 无关。它们没有进程或文件系统隔离,允许特权负载以所需权限查看和编辑主机文件系统以及其他主机资源。init 进程及其启动的任何进程(包括用户明确启动的进程)都分配给该容器的 job 对象。当 init 进程退出或被信号通知退出时,job 中的所有进程都会被信号通知退出,job 句柄将被关闭,存储将被卸载。
HostProcess 和 Linux 特权容器支持相似的场景,但在实现上差异很大(因此命名不同)。HostProcess 容器有其自己的 PodSecurityContext 字段。用于配置 Linux 特权容器的字段不适用。启用 Windows 主机的特权访问与 Linux 的过程根本不同,因此两者的配置和能力差异很大。下面是一张图,详细说明了 Windows HostProcess 容器的整体架构
在进入稳定状态之前,添加了两个主要功能:以本地用户账户运行的能力,以及访问卷挂载点的简化方法。要了解更多信息,请阅读创建 Windows HostProcess Pod。
HostProcess 容器实战
Kubernetes SIG Windows 一直忙于使用 HostProcess 容器——甚至在 GA 之前!他们非常兴奋能将 HostProcess 容器用于过去难以执行的许多重要活动。
以下是一些用例及示例部署,仅列举其中一部分
我如何使用它?
HostProcess 容器可以使用你选择的任何基础镜像构建,但为了方便起见,我们创建了一个 HostProcess 容器基础镜像。该镜像只有几 KB 大小,并且不继承常规 Windows Server 容器的任何兼容性要求,这使其可以在任何 Windows Server 版本上运行。
要使用该 Microsoft 镜像,请在你的 Dockerfile
中添加以下内容
FROM mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image:v1.0.0
你可以在 HostProcess Pod 中运行 HostProcess 容器。
要开始运行 Windows 容器,请参阅部署 Windows 节点的通用指南。如果你有兼容的节点(例如:操作系统为 Windows,容器运行时为 containerd v1.7 或更高版本),则可以部署包含一个或多个 HostProcess 容器的 Pod。有关更多信息,请参阅创建 Windows HostProcess Pod - 先决条件。
请注意,在同一个 Pod 中,你不能混用 HostProcess 容器和普通 Windows 容器。
我如何了解更多?
阅读增强提案 Windows 特权容器和主机网络模式 (KEP-1981)
观看 KubeCon NA 2022 会议上的 Windows HostProcess for Configuration and Beyond 演讲
我如何参与贡献?
参与 SIG Windows 进行贡献!