本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

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 Silo)的容器模型有所不同。作業物件是 Windows 作業系統的元件,能夠將一組程序作為一個組(也稱為一個**作業**)來管理,併為整個組分配資源限制。作業物件是 Windows 作業系統特有的,與 Kubernetes 的 Job API 無關。它們沒有程序或檔案系統隔離,使得特權負載能夠以所需的許可權檢視和編輯主機檔案系統以及其他主機資源。初始化程序及其啟動的任何程序(包括使用者明確啟動的程序)都被分配給該容器的作業物件。當初始化程序退出或被訊號通知退出時,作業中的所有程序都將被訊號通知退出,作業控制代碼將被關閉,儲存將被解除安裝。

HostProcess 容器和 Linux 特權容器啟用了相似的場景,但在實現上有很大差異(因此名稱也不同)。HostProcess 容器有自己的 PodSecurityContext 欄位。用於配置 Linux 特權容器的欄位**不適用**於此。在 Windows 主機上啟用特權訪問與 Linux 的過程根本不同,因此它們的配置和能力也大相徑庭。下圖詳細說明了 Windows HostProcess 容器的整體架構。

HostProcess Architecture

在進入穩定版之前,添加了兩個主要功能:以本地使用者帳戶執行的能力,以及一種簡化的訪問卷掛載的方法。要了解更多資訊,請閱讀建立 Windows HostProcess Pod

HostProcess 容器的實際應用

Kubernetes SIG Windows 一直在積極使用 HostProcess 容器——甚至在正式釋出之前!他們非常興奮地將 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 容器混合使用。

我如何瞭解更多資訊?

我如何參與?

參與 SIG Windows 做出貢獻!