Partilhar via


Usar contêineres do Windows HostProcess

Os contêineres HostProcess / Privileged estendem o modelo de contêiner do Windows para permitir uma gama mais ampla de cenários de gerenciamento de cluster do Kubernetes. Os contentores HostProcess são executados diretamente no anfitrião e conservam um comportamento e acesso semelhantes aos de um processo normal. Os contêineres HostProcess permitem que os usuários empacotem e distribuam operações e funcionalidades de gerenciamento que exigem acesso ao host, mantendo os métodos de controle de versão e implantação fornecidos pelos contêineres.

Um DaemonSet privilegiado pode realizar alterações ou monitorar um host Linux no Kubernetes, mas não em hosts Windows. Os contêineres HostProcess são o equivalente do Windows à elevação do host.

Limitações

  • Os contêineres HostProcess exigem Kubernetes 1.23 ou superior.
  • Os contêineres HostProcess exigem containerd tempo de execução de contêiner 1.6 ou superior.
  • Os pods HostProcess só podem conter contêineres HostProcess devido a uma limitação no sistema operacional Windows. Os contêineres não privilegiados do Windows não podem compartilhar uma vNIC com o namespace IP do host.
  • Os contêineres HostProcess são executados como um processo no host. O único isolamento que esses contêineres têm do host são as restrições de recursos impostas à conta de usuário HostProcess.
  • O isolamento do sistema de arquivos e o isolamento do Hyper-V não são suportados para contêineres HostProcess.
  • As montagens de volume são suportadas e são montadas sob o volume do recipiente. Consulte Montagens de volume.
  • Um conjunto limitado de contas de usuário de host está disponível para contêineres do Processo de Host por padrão. Consulte Escolher uma conta de utilizador.
  • Os limites de recursos, como disco, memória e contagem de cpu, funcionam da mesma forma que os processos no host.
  • Montagens de pipe nomeado e soquetes de domínio Unix não são suportados diretamente, mas podem ser acessados em seu caminho de host, por exemplo \\.\pipe\*.

Executar uma carga de trabalho HostProcess

Para usar os recursos HostProcess com sua implantação, defina hostProcess: true e hostNetwork: true:

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

Para executar um exemplo de carga de trabalho que usa recursos HostProcess em um cluster AKS existente com nós do Windows, crie hostprocess.yaml com o seguinte conteúdo:

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 executar a carga de trabalho de exemplo:

kubectl apply -f hostprocess.yaml

Deverá ver o seguinte resultado:

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

Verifique se sua carga de trabalho usa os recursos dos contêineres HostProcess exibindo os logs do pod.

Use kubectl para localizar o nome do pod no kube-system namespace.

$ kubectl get pods --namespace kube-system

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

Use kubectl log para visualizar os logs do pod e verificar se o pod tem direitos de administrador:

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

Próximos passos

Para obter mais informações sobre contêineres HostProcess e a contribuição da Microsoft para o Kubernetes upstream, consulte o Alpha na v1.22: Windows HostProcess Containers.