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