本文已發布超過一年。較舊的文章可能包含過時的內容。請確認頁面上的資訊自發布以來是否已變得不正確。
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 Job Objects 實作的,這與先前使用伺服器孤島的容器模型有所不同。Job Objects 是 Windows 作業系統的組件,它提供將一組進程作為一個群組(也稱為 job)管理,並將資源約束指派給整個群組的能力。Job objects 是 Windows 作業系統特有的,並且與 Kubernetes Job API 無關。它們沒有進程或檔案系統隔離,使具備權限的有效負載能夠檢視和編輯具有所需權限的主機檔案系統以及其他主機資源。init 進程及其啟動的任何進程(包括使用者明確啟動的進程)都會被指派給該容器的 job object。當 init 進程結束或收到結束信號時,job 中的所有進程都將收到結束信號,job handle 將被關閉,並且儲存體將被卸載。
HostProcess 和 Linux 權限容器啟用了類似的場景,但在實作上差異很大(因此命名有所不同)。HostProcess 容器有自己的 PodSecurityContext 欄位。那些用於設定 Linux 權限容器的欄位不適用。啟用對 Windows 主機的權限存取與 Linux 的基本不同,因此每個的設定和功能差異很大。以下圖表詳細說明了 Windows HostProcess 容器的整體架構
在轉為穩定版之前新增了兩個主要功能:能夠以本機使用者帳戶身分執行,以及簡化的磁碟區掛載存取方法。若要了解更多資訊,請閱讀〈建立 Windows HostProcess Pod〉。
HostProcess 容器的實際應用
Kubernetes SIG Windows 一直忙於使用 HostProcess 容器 - 甚至在正式發布 (GA) 之前!他們很高興將 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 容器混合使用。
我如何能了解更多?
閱讀 Kubernetes Pod 安全標準和 Pod 安全許可控制相關資訊
閱讀增強提案〈Windows 權限容器和主機網路模式〉(KEP-1981)
觀看 KubeCon NA 2022 演講〈Windows HostProcess for Configuration and Beyond〉
我該如何參與?
參與 SIG Windows 來做出貢獻!