Condividi tramite


Usare i contenitori HostProcess di Windows

I contenitori HostProcess/Privileged estendono il modello di contenitore di Windows per abilitare una gamma più ampia di scenari di gestione dei cluster Kubernetes. I contenitori HostProcess vengono eseguiti direttamente nell'host e mantengono un comportamento e un accesso analogo a quello dei processi normali. I contenitori HostProcess consentono agli utenti di creare pacchetti e distribuire operazioni e funzionalità di gestione che richiedono l'accesso host mantenendo al tempo stesso i metodi di controllo delle versioni e distribuzione forniti dai contenitori.

Un DaemonSet con privilegi può eseguire modifiche o monitorare un host Linux in Kubernetes ma non in host Windows. I contenitori HostProcess offrono in Windows le stesse funzionalità dell'elevazione dell'host.

Limiti

  • I contenitori HostProcess richiedono Kubernetes 1.23 o versione successiva.
  • I contenitori HostProcess richiedono il runtime del contenitore containerd 1.6 o versione successiva.
  • I pod HostProcess possono contenere solo contenitori HostProcess a causa di una limitazione nel sistema operativo Windows. I contenitori di Windows senza privilegi non possono condividere una scheda di interfaccia di rete virtuale con lo spazio dei nomi IP host.
  • I contenitori HostProcess vengono eseguiti come processo nell'host. L'unico isolamento di questi contenitori dall'host è rappresentato dai vincoli di risorse imposti per l'account utente HostProcess.
  • L'isolamento del file system e l'isolamento Hyper-V non sono supportati per i contenitori HostProcess.
  • I montaggi dei volumi sono supportati e vengono montati nel volume del contenitore. Vedere Montaggi di volumi.
  • Per impostazione predefinita, è disponibile un set limitato di account utente host per i contenitori HostProcess. Vedere Scelta di un account utente.
  • I limiti delle risorse, ad esempio disco, memoria e conteggio di CPU, funzionano in modo identico ai processi nell'host.
  • I montaggi di named pipe e i socket di dominio Unix non sono supportati direttamente, ma è possibile accedervi nel percorso host, ad esempio \\.\pipe\*.

Eseguire un carico di lavoro HostProcess

Per usare le funzionalità di HostProcess con la distribuzione, impostare hostProcess: true e hostNetwork: true:

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

Per eseguire un carico di lavoro di esempio che usa le funzionalità di HostProcess in un cluster del servizio Azure Kubernetes esistente con nodi Windows, creare hostprocess.yaml con il contenuto seguente:

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

Usare kubectl per eseguire il carico di lavoro di esempio:

kubectl apply -f hostprocess.yaml

Verrà visualizzato l'output seguente:

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

Verificare che il carico di lavoro usi le funzionalità dei contenitori HostProcess visualizzando i log del pod.

Usare kubectl per trovare il nome del pod nello spazio dei nomi kube-system.

$ kubectl get pods --namespace kube-system

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

Usare kubectl log per visualizzare i log del pod e verificare che il pod abbia diritti di amministratore:

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

Passaggi successivi

Per altre informazioni sui contenitori HostProcess e sul contributo di Microsoft a Kubernetes upstream, vedere Alpha nella versione 1.22: Contenitori HostProcess di Windows.