本文发布时间已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
v1.22 中的 Alpha 功能:Windows HostProcess 容器
Kubernetes v1.22 为包含 Windows 节点的集群引入了一个新的 alpha 功能:HostProcess 容器。
HostProcess 容器旨在扩展 Windows 容器模型,以实现更广泛的 Kubernetes 集群管理场景。HostProcess 容器直接在主机上运行,并保持与常规进程类似的行为和访问权限。借助 HostProcess 容器,用户可以打包和分发需要主机访问的管理操作和功能,同时保留容器提供的版本控制和部署方法。这使得 Windows 容器可以用于 Kubernetes 中的各种设备插件、存储和网络管理场景。随之而来的是主机网络模式的启用——允许在主机自身的网络命名空间中创建 HostProcess 容器,而不是在它们自己的命名空间中。HostProcess 容器也可以构建在现有的 Windows Server 2019(或更高版本)基础映像之上,通过 Windows 容器运行时进行管理,并作为主机机器上或域中可用的任何用户运行。
Linux 特权容器目前用于 Kubernetes 中的各种关键场景,包括 kube-proxy (通过 kubeadm)、存储和网络场景。之前在 Windows 中支持这些场景需要通过代理或其他实现方式进行变通。使用 HostProcess 容器,集群操作员不再需要登录并单独配置每个 Windows 节点以执行管理任务和 Windows 服务管理。操作员现在可以利用容器模型,轻松地将管理逻辑部署到所需的任意数量的集群。
它是如何工作的?
Windows HostProcess 容器使用 Windows 作业对象实现,这与之前使用服务器 silo 的容器模型有所不同。作业对象是 Windows 操作系统中的组件,它能够将一组进程作为一个组(又名作业)进行管理,并为整个组分配资源约束。作业对象是 Windows 操作系统特有的,与 Kubernetes Job API 无关。它们没有进程或文件系统隔离,允许特权有效负载使用正确的权限查看和编辑主机文件系统以及其他主机资源。初始化进程以及它启动的任何进程或由用户显式启动的进程都将分配给该容器的作业对象。当初始化进程退出或被指示退出时,作业中的所有进程都将被指示退出,作业句柄将被关闭,并且存储将被卸载。
HostProcess 和 Linux 特权容器启用了类似的场景,但它们的实现方式差异很大(因此命名有所不同)。HostProcess 容器有自己的 Pod 安全策略。那些用于配置 Linux 特权容器的策略不适用。启用对 Windows 主机的特权访问与 Linux 的过程根本不同,因此每个的配置和功能都有很大差异。下面是一个详细说明 Windows HostProcess 容器总体架构的图表

我该如何使用它?
HostProcess 容器可以在HostProcess Pod中运行。在 Kubernetes 版本 1.22 上启用该功能,使用 1.5.4 或更高版本的 containerd 容器运行时,以及最新版本的 hcsshim,部署具有正确 HostProcess 配置的 Pod 规范,即可运行 HostProcess 容器。要开始运行 Windows 容器,请参阅Kubernetes 中 Windows 的一般指南
如何了解更多?
阅读 Kubernetes Pod 安全标准
阅读增强提案 Windows 特权容器和主机网络模式 (KEP-1981)
我如何参与?
HostProcess 容器正在积极开发中。SIG Windows 欢迎社区的建议。请参与 SIG Windows 以做出贡献!