Windows HostProcess-containers gebruiken

HostProcess/Privileged-containers breiden het Windows-containermodel uit om een breder scala aan Kubernetes-clusterbeheerscenario's mogelijk te maken. HostProcess-containers worden rechtstreeks op de host uitgevoerd en behouden gedrag en toegang die vergelijkbaar zijn met dat van een normaal proces. Met HostProcess-containers kunnen gebruikers beheerbewerkingen en -functies verpakken en distribueren waarvoor hosttoegang is vereist, terwijl versiebeheer en implementatiemethoden van containers behouden blijven.

Een bevoegde DaemonSet kan wijzigingen uitvoeren of een Linux-host bewaken op Kubernetes, maar niet op Windows-hosts. HostProcess-containers zijn het Windows-equivalent van hostverhoging.

Beperkingen

  • Voor HostProcess-containers is Kubernetes 1.23 of hoger vereist.
  • HostProcess-containers vereisen containerd containerruntime 1.6 of hoger.
  • HostProcess-pods kunnen alleen HostProcess-containers bevatten vanwege een beperking op het Windows-besturingssysteem. Niet-bevoegde Windows-containers kunnen geen vNIC delen met de IP-naamruimte van de host.
  • HostProcess-containers worden uitgevoerd als een proces op de host. De enige isolatie die deze containers van de host hebben, zijn de resourcebeperkingen die zijn opgelegd aan het HostProcess-gebruikersaccount.
  • Bestandssysteemisolatie en Hyper-V-isolatie worden niet ondersteund voor HostProcess-containers.
  • Volumekoppelingen worden ondersteund en worden onder het containervolume gekoppeld. Zie Volumekoppelingen.
  • Er is standaard een beperkte set hostgebruikersaccounts beschikbaar voor hostprocescontainers. Zie Een gebruikersaccount kiezen.
  • Resourcelimieten zoals schijf, geheugen en CPU-aantal werken op dezelfde manier als processen op de host.
  • Benoemde pipekoppelingen en Unix-domeinsockets worden niet rechtstreeks ondersteund, maar kunnen worden geopend op hun hostpad, bijvoorbeeld \\.\pipe\*.

Een HostProcess-workload uitvoeren

Als u HostProcess-functies wilt gebruiken met uw implementatie, stelt u hostProcess: true in en hostNetwork: true:

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

Als u een voorbeeldworkload wilt uitvoeren die gebruikmaakt van HostProcess-functies op een bestaand AKS-cluster met Windows-knooppunten, maakt hostprocess.yaml u met de volgende inhoud:

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

Gebruik kubectl om de voorbeeldworkload uit te voeren:

kubectl apply -f hostprocess.yaml

U moet de volgende uitvoer zien:

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

Controleer of uw workload gebruikmaakt van de functies van HostProcess-containers door de logboeken van de pod te bekijken.

Gebruik kubectl om de naam van de pod in de kube-system naamruimte te zoeken.

$ kubectl get pods --namespace kube-system

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

Gebruik kubectl log om de logboeken van de pod weer te geven en te controleren of de pod beheerdersrechten heeft:

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

Volgende stappen

Zie Alpha in v1.22: Windows HostProcess Containers voor meer informatie over HostProcess-containers en de bijdrage van Microsoft aan Kubernetes upstream.