Använda Windows HostProcess-containrar

HostProcess/Privilegierade 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 behåller beteendet och åtkomsten på liknande sätt som för 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 versionshantering 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 högre 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 dessa containrar har från värden är resursbegränsningarna 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.
  • Resursgränser som disk, minne och cpu-antal fungerar på samma sätt som processer på värden.
  • Namngivna rörmonteringar och Unix-domänuttag 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 din distribution 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 arbetsbelastningen 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.