本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

v1.22 中的 Alpha 特性:Windows HostProcess 容器

Kubernetes v1.22 引入了一项新的 Alpha 功能,适用于包含 Windows 节点的集群: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 **作业对象 (Job Objects)** 实现,这与以前使用服务器隔离舱的容器模型不同。作业对象是 Windows 操作系统的组件,它提供将一组进程作为一个组(也称为**作业**)进行管理,并为整个组分配资源限制的功能。作业对象是 Windows 操作系统特有的,与 Kubernetes Job API 无关。它们没有进程或文件系统隔离,允许特权负载在具有正确权限的情况下查看和编辑主机文件系统以及其他主机资源。init 进程以及它启动的任何进程或用户明确启动的任何进程,都被分配给该容器的作业对象。当 init 进程退出或收到退出信号时,作业中的所有进程都将收到退出信号,作业句柄将被关闭,并且存储将被卸载。

HostProcess 和 Linux 特权容器实现相似的场景,但它们的实现方式差异很大(因此命名不同)。HostProcess 容器有自己的 Pod 安全策略。用于配置 Linux 特权容器的策略**不**适用。在 Windows 主机上启用特权访问与 Linux 的过程完全不同,因此两者的配置和功能差异很大。下面是 Windows HostProcess 容器总体架构的详细图示。

HostProcess Architecture

我该如何使用它?

HostProcess 容器可以在 HostProcess Pod 中运行。在 Kubernetes 1.22 版本中启用此功能,并使用 containerd 容器运行时 1.5.4 或更高版本以及最新版本的 hcsshim,部署具有正确 HostProcess 配置的 Pod 规范将使您能够运行 HostProcess 容器。要开始运行 Windows 容器,请参阅 Kubernetes 中的 Windows 的一般指南。

我如何了解更多信息?

我如何参与?

HostProcess 容器正在积极开发中。SIG Windows 欢迎社区提出建议。加入 SIG Windows 做出贡献!