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

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