本文发布已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不正确。
Kubernetes 1.26:Windows HostProcess 容器正式发布
期待已久的一天终于到来了:HostProcess 容器,Windows 中与 Linux 特权容器等效的功能,终于在 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 作业对象 实现,这与之前使用服务器孤岛的容器模型不同。作业对象是 Windows 操作系统组件,它提供了将一组进程作为组(也称为作业)进行管理,并为整个组分配资源约束的能力。作业对象是 Windows 操作系统特有的,与 Kubernetes 作业 API 没有关联。它们没有进程或文件系统隔离,从而使特权负载能够使用所需的权限查看和编辑主机文件系统以及其他主机资源。初始化进程及其启动的任何进程(包括用户显式启动的进程)都分配给该容器的作业对象。当初始化进程退出或被指示退出时,作业中的所有进程都将被指示退出,作业句柄将被关闭,并且存储将被卸载。
HostProcess 和 Linux 特权容器可以实现类似的场景,但在实现方式上大相径庭(因此命名有所不同)。HostProcess 容器有自己的 PodSecurityContext 字段。用于配置 Linux 特权容器的字段不适用。启用对 Windows 主机的特权访问与 Linux 有根本不同的过程,因此每个的配置和功能也大不相同。下图详细说明了 Windows HostProcess 容器的总体架构。
在转为稳定版之前,添加了两个主要功能:以本地用户帐户运行的能力以及访问卷挂载的简化方法。要了解更多信息,请阅读创建 Windows HostProcess Pod。
HostProcess 容器的实际应用
Kubernetes SIG Windows 一直忙于将 HostProcess 容器投入使用 - 甚至在 GA 之前!他们非常兴奋地将 HostProcess 容器用于许多过去难以执行的重要活动。
以下是许多用例中的几个示例部署
如何使用它?
HostProcess 容器可以使用您选择的任何基础镜像构建,但是,为了方便起见,我们创建了HostProcess 容器基础镜像。此镜像的大小仅为几 KB,并且不继承与常规 Windows 服务器容器相同的任何兼容性要求,这使其可以在任何 Windows 服务器版本上运行。
要使用该 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)
观看 用于配置及其他用途的 Windows HostProcess KubeCon NA 2022 演讲
如何参与?
加入SIG Windows 来做出贡献!