Windows HostProcess-containers gebruiken
HostProcess/Privileged-containers breiden het Windows-containermodel uit om een breder scala aan Kubernetes-clusterbeheerscenario's mogelijk te maken. HostProcess-containers worden rechtstreeks op de host uitgevoerd met gedrag en toegang die vergelijkbaar zijn met die van een normaal proces. Met HostProcess-containers kunnen gebruikers beheerbewerkingen en -functionaliteiten verpakken en distribueren waarvoor hosttoegang is vereist, terwijl versiebeheer- en implementatiemethoden van containers behouden blijven.
Een bevoegde DaemonSet kan wijzigingen uitvoeren of een Linux-host bewaken op Kubernetes, maar niet op Windows-hosts. HostProcess-containers zijn het Windows-equivalent van host-uitbreiding.
Beperkingen
- Voor HostProcess-containers is Kubernetes 1.23 of hoger vereist.
- Voor HostProcess-containers is 1.6 of hoger containerruntime vereist
containerd
. - HostProcess-pods kunnen alleen HostProcess-containers bevatten vanwege een beperking op het Windows-besturingssysteem. Niet-bevoegde Windows-containers kunnen geen vNIC delen met de host-IP-naamruimte.
- HostProcess-containers worden uitgevoerd als een proces op de host. De enige isolatie die deze containers van de host hebben, zijn de resourcebeperkingen die zijn opgelegd aan het HostProcess-gebruikersaccount.
- Bestandssysteemisolatie en Hyper-V-isolatie worden niet ondersteund voor HostProcess-containers.
- Volumekoppelingen worden ondersteund en worden gekoppeld onder het containervolume. Zie Volumekoppelingen.
- Een beperkte set hostgebruikersaccounts is standaard beschikbaar voor hostprocescontainers. Zie Een gebruikersaccount kiezen.
- Resourcelimieten zoals schijf, geheugen en cpu-telling werken op dezelfde manier als processen op de host.
- Benoemde pijpkoppelingen en Unix-domeinsockets worden niet rechtstreeks ondersteund, maar kunnen worden geopend op hun hostpad, bijvoorbeeld
\\.\pipe\*
.
Een HostProcess-workload uitvoeren
Als u HostProcess-functies wilt gebruiken met uw implementatie, stelt u hostProcess in: true en hostNetwork: true: true:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Als u een voorbeeldworkload wilt uitvoeren die gebruikmaakt van HostProcess-functies op een bestaand AKS-cluster met Windows-knooppunten, maakt u hostprocess.yaml
deze met de volgende inhoud:
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
Gebruik kubectl
dit om de voorbeeldworkload uit te voeren:
kubectl apply -f hostprocess.yaml
U moet de volgende uitvoer zien:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
Controleer of uw workload gebruikmaakt van de functies van HostProcess-containers door de logboeken van de pod te bekijken.
Gebruik kubectl
dit om de naam van de pod in de kube-system
naamruimte te vinden.
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
Gebruik kubectl log
dit om de logboeken van de pod weer te geven en te controleren of de pod beheerdersrechten heeft:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Volgende stappen
Zie de Alpha in v1.22: Windows HostProcess Containers voor meer informatie over HostProcess-containers en de bijdrage van Microsoft aan Kubernetes upstream.
Azure Kubernetes Service