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.
Azure Kubernetes Service