Använda Windows HostProcess-containrar

HostProcess/Privileged-containrar utökar Windows-containermodellen för att möjliggöra ett bredare utbud av Kubernetes-klusterhanteringsscenarier. HostProcess-containrar körs direkt på värden och underhåller beteendet och åtkomsten på liknande sätt som i en vanlig process. Med HostProcess-containrar kan användare paketera och distribuera hanteringsåtgärder och funktioner som kräver värdåtkomst samtidigt som versionshanterings- och distributionsmetoder som tillhandahålls av containrar bevaras.

En privilegierad DaemonSet kan utföra ändringar eller övervaka en Linux-värd på Kubernetes men inte Windows-värdar. HostProcess-containrar är Windows-motsvarigheten till värdhöjning.

Begränsningar

  • HostProcess-containrar kräver Kubernetes 1.23 eller senare.
  • HostProcess-containrar kräver containerd 1.6 eller senare containerkörning.
  • HostProcess-poddar kan bara innehålla HostProcess-containrar på grund av en begränsning i Windows-operativsystemet. Icke-privilegierade Windows-containrar kan inte dela ett virtuellt nätverkskort med värd-IP-namnområdet.
  • HostProcess-containrar körs som en process på värden. Den enda isolering som containrarna har från värden är de resursbegränsningar som gäller för HostProcess-användarkontot.
  • Filsystemisolering och Hyper-V-isolering stöds inte för HostProcess-containrar.
  • Volymmonteringar stöds och monteras under containervolymen. Se Volymmonteringar.
  • En begränsad uppsättning värdanvändarkonton är tillgängliga för värdprocesscontainrar som standard. Se Välja ett användarkonto.
  • Resursbegränsningar som disk, minne och cpu-antal fungerar på samma sätt som processer på värden.
  • Namngivna rörmonteringar och Unix-domänsocketer stöds inte direkt, men kan nås på deras värdsökväg, till exempel \\.\pipe\*.

Köra en HostProcess-arbetsbelastning

Om du vill använda HostProcess-funktioner med distributionen anger du hostProcess: true och hostNetwork: true:

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

Om du vill köra en exempelarbetsbelastning som använder HostProcess-funktioner i ett befintligt AKS-kluster med Windows-noder skapar hostprocess.yaml du med följande innehåll:

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

Använd kubectl för att köra exempelarbetsbelastningen:

kubectl apply -f hostprocess.yaml

Du bör se följande utdata:

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

Kontrollera att din arbetsbelastning använder funktionerna i HostProcess-containrar genom att visa poddens loggar.

Använd kubectl för att hitta namnet på podden i kube-system namnområdet.

$ kubectl get pods --namespace kube-system

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

Använd kubectl log för att visa loggarna för podden och kontrollera att podden har administratörsbehörighet:

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

Nästa steg

Mer information om HostProcess-containrar och Microsofts bidrag till Kubernetes uppströms finns i Alpha i v1.22: Windows HostProcess Containers.