使用 Windows HostProcess 容器

HostProcess /特殊權限容器會擴充 Windows 容器模型,以實現更廣泛的 Kubernetes 叢集管理情節。 HostProcess 容器會直接在主機上執行,並維持與一般程序類似的行為和存取權。 HostProcess 容器可讓使用者封裝及散發需要主機存取的管理作業和功能,同時保留容器所提供的版本設定和部署方法。

特殊權限的 DaemonSet 可以在 Kubernetes 上 (但無法在 Windows 主機) 執行變更或監視 Linux 主機。 HostProcess 容器相當於主機提高權限的 Windows。

限制

  • HostProcess 容器需要 Kubernetes 1.23 或更新版本。
  • HostProcess 容器需要 containerd 1.6 或更高版本的容器執行階段。
  • 由於 Windows 作業系統的限制,HostProcess Pod 只能包含 HostProcess 容器。 非特殊權限的 Windows 容器無法與主機 IP 命名空間共用 vNIC。
  • HostProcess 容器會在主機上以程序的形式執行。 這些容器與主機唯一的隔離是對 HostProcess 使用者帳戶所施加的資源限制。
  • HostProcess 容器不支援檔案系統隔離和 Hyper-V 隔離。
  • 支援磁碟區掛接,且其掛接在容器磁碟區下。 請參閱磁碟區掛階。
  • 根據預設,主機程序容器可以使用一組有限的主機使用者帳戶。 請參閱選擇使用者帳戶。
  • 磁碟、記憶體和 CPU 計數等資源限制的運作方式與主機上的程序相同。
  • 不直接支援具名管道掛接和 Unix 網域通訊端,但您可以在其主機路徑上存取這些項目,例如 \\.\pipe\*

執行 HostProcess 工作負載

若要搭配部署使用 HostProcess 功能,請設定 hostProcess: truehostNetwork: true

    spec:
      ...
      securityContext:
         windowsOptions:
           hostProcess: true
           ...
      hostNetwork: true
      containers:
      ...

若要在具有 Windows 節點的現有 AKS 叢集上執行使用 HostProcess 功能的範例工作負載,請使用下列內容建立 hostprocess.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: privileged-daemonset
  namespace: kube-system
  labels:
    app: privileged-daemonset
spec:
  selector:
    matchLabels:
      app: privileged-daemonset
  template:
    metadata:
      labels:
        app: privileged-daemonset
    spec:
      nodeSelector:
        kubernetes.io/os: windows
      securityContext:
        windowsOptions:
          hostProcess: true
          runAsUserName: "NT AUTHORITY\\SYSTEM"
      hostNetwork: true
      containers:
        - name: powershell
          image: mcr.microsoft.com/powershell:lts-nanoserver-1809 # or lts-nanoserver-ltsc2022
          command:
            - powershell.exe
            - -Command
            - Start-Sleep -Seconds 2147483
      terminationGracePeriodSeconds: 0

使用 kubectl 來執行範例工作負載:

kubectl apply -f hostprocess.yaml

您應該會看見下列輸出:

$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created

檢視 Pod 的記錄,確認您的工作負載使用 HostProcess 容器的功能。

使用 kubectl 來尋找 kube-system 命名空間中的 Pod 名稱。

$ kubectl get pods --namespace kube-system

NAME                                  READY   STATUS    RESTARTS   AGE
...
privileged-daemonset-12345            1/1     Running   0          2m13s

使用 kubectl log 來檢視 Pod 的記錄,並確認 Pod 具有系統管理員權限:

$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:

下一步

如需 HostProcess 容器和 Microsoft 對 Kubernetes 上游貢獻的詳細資訊,請參閱第 1.22 版中的 Alpha:Windows HostProcess 容器