本文已超過一年。較舊的文章可能包含過時內容。請確認頁面中的資訊自發布以來是否已變得不正確。

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 Job Objects 實作的,這與先前使用伺服器隔離倉的容器模型有所不同。Job 物件是 Windows 作業系統的組件,可提供將一組程序作為一個群組 (又稱工作) 進行管理,並將資源限制指派給整個群組的能力。Job 物件是 Windows 作業系統特有的,與 Kubernetes Job API 無關。它們沒有程序或檔案系統隔離,讓特權酬載能夠檢視和編輯具有正確權限的主機檔案系統以及其他主機資源。初始化程序以及它啟動的任何程序或使用者明確啟動的程序,都會被指派給該容器的 Job 物件。當初始化程序結束或收到結束訊號時,工作中的所有程序都會收到結束訊號,工作控制代碼將會關閉,並且儲存空間將會卸載。

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 以做出貢獻!