Compartir por


Uso de contenedores HostProcess de Windows

Los contenedores HostProcess/con privilegios amplían el modelo de contenedor de Windows para habilitar una gama más amplia de escenarios de administración de clústeres de Kubernetes. Los contenedores HostProcess se ejecutan directamente en el host y mantienen un comportamiento y el acceso similares a los de un proceso normal. Los contenedores HostProcess permiten a los usuarios empaquetar y distribuir las operaciones y funcionalidades de administración que requieren acceso al host, al mismo tiempo que conservan los métodos de control de versiones e implementación proporcionados por los contenedores.

Un DaemonSet con privilegios puede realizar cambios o supervisar un host Linux en Kubernetes, pero no hosts Windows. Los contenedores HostProcess son el equivalente en Windows de la elevación de host.

Limitaciones

  • Los contenedores HostProcess requieren Kubernetes 1.23, o cualquier versión superior.
  • Los contenedores HostProcess requieren containerd 1.6 o cualquier runtime de contenedor superior.
  • Los pods hostProcess solo pueden incluir contenedores hostProcess debido a una limitación en el sistema operativo Windows. Los contenedores Windows sin privilegios no pueden compartir una vNIC con el espacio de nombres IP del host.
  • Los contenedores HostProcess se ejecutan como un proceso en el host. El único aislamiento del host que tienen esos contenedores son las restricciones de recursos impuestas en la cuenta de usuario de HostProcess.
  • Ni el aislamiento del sistema de archivos ni el de Hyper-V no son compatibles con contenedores HostProcess.
  • Se admiten montajes de volumen y se montan en el volumen del contenedor. Consulte Montajes de volumen.
  • De forma predeterminada, hay disponible un conjunto limitado de cuentas de usuario de host para contenedores de proceso de host. Consulte Elección de una cuenta de usuario.
  • Los límites de recursos, como el disco, la memoria y el número de CPU, funcionan de la misma manera que los procesos del host.
  • Los montajes de canalizaciones con nombre y los sockets de dominio Unix no se admiten directamente, pero se puede acceder a ellos en su ruta de acceso de host, como, por ejemplo \\.\pipe\*.

Ejecución de una carga de trabajo de HostProcess

Para usar las características de HostProcess con la implementación, establezca hostProcess: true y hostNetwork: true:

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

Para ejecutar una carga de trabajo de ejemplo que usa las características de HostProcess en un clúster de AKS existente con nodos de Windows, cree hostprocess.yaml con el siguiente contenido:

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

Use kubectl para ejecutar la carga de trabajo de ejemplo:

kubectl apply -f hostprocess.yaml

Debería ver la siguiente salida:

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

Compruebe que la carga de trabajo usa las características de los contenedores hostProcess mediante la visualización de los registros del pod.

Use kubectl para buscar el nombre del pod en el espacio de nombres kube-system.

$ kubectl get pods --namespace kube-system

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

Use kubectl log para ver los registros del pod y comprobar que el pod tiene derechos de administrador:

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

Pasos siguientes

Para más información sobre los contenedores HostProcess y la contribución de Microsoft a Kubernetes ascendente, consulte Alpha in v1.22: Windows HostProcess Containers.