Verwenden von Windows-HostProcess-Containern
HostProcess-Container/privilegierte Container erweitern das Windows-Containermodell, um eine größere Bandbreite von Kubernetes-Clusterverwaltungsszenarien zu ermöglichen. HostProcess-Container werden direkt auf dem Host ausgeführt und verwalten das Verhalten und den Zugriff ähnlich wie bei einem regulären Prozess. Mit HostProcess-Containern können Benutzer Verwaltungsvorgänge und -funktionen packen und verteilen, die Hostzugriff erfordern, während die von Containern bereitgestellten Versionsverwaltungs- und Bereitstellungsmethoden beibehalten werden.
Ein privilegierter DaemonSet kann Änderungen durchführen oder einen Linux-Host auf Kubernetes überwachen, aber keine Windows-Hosts. HostProcess-Container sind das Windows-Äquivalent zur Rechteerweiterung bei Hosts.
Einschränkungen
- HostProcess-Container erfordern Kubernetes 1.23 oder höher.
- HostProcess-Container erfordern eine Containerlaufzeit von
containerd
1.6 oder höher. - HostProcess-Pods können aufgrund einer Einschränkung des Windows-Betriebssystems nur HostProcess-Container enthalten. Nicht privilegierte Windows-Container können keine vNIC gemeinsam mit dem Host-IP-Namespace verwenden.
- HostProcess-Container werden als Prozess auf dem Host ausgeführt. Die einzige Isolierung, die diese Container vom Host haben, sind die Ressourceneinschränkungen, die dem HostProcess-Benutzerkonto auferlegt werden.
- Dateisystemisolierung und Hyper-V-Isolierung werden für HostProcess-Container nicht unterstützt.
- Volumeeinbindungen werden unterstützt und unter dem Containervolume eingebunden. Siehe „Volumeeinbindungen“.
- Standardmäßig ist eine begrenzte Gruppe von Hostbenutzerkonten für HostProcess-Container verfügbar. Siehe „Auswählen eines Benutzerkontos“.
- Ressourcengrenzwerte wie Datenträger, Arbeitsspeicher und CPU-Anzahl funktionieren auf dieselbe Weise wie Prozesse auf dem Host.
- Benannte Pipebereitstellungen und Unix-Domänensockets werden nicht direkt unterstützt, aber über ihren Hostpfad kann darauf zugegriffen werden, z. B.
\\.\pipe\*
.
Ausführen einer HostProcess-Workload
Um HostProcess-Features mit Ihrer Bereitstellung zu verwenden, legen Sie hostProcess: true und hostNetwork: true fest:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Um eine Beispielworkload auszuführen, die HostProcess-Features für einen vorhandenen AKS-Cluster mit Windows-Knoten verwendet, erstellen Sie hostprocess.yaml
mit folgenden Inhalten:
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
Verwenden Sie kubectl
, um die Beispielworkload auszuführen:
kubectl apply -f hostprocess.yaml
Die folgende Ausgabe wird angezeigt:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
Überprüfen Sie, ob Ihre Workload die Features von HostProcess-Containern nutzt, indem Sie die Protokolle des Pods anzeigen.
Verwenden Sie kubectl
, um den Namen des Pods im kube-system
-Namespace zu suchen.
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
Verwenden Sie kubectl log
, um die Protokolle des Pods anzuzeigen und zu überprüfen, ob der Pod über Administratorrechte verfügt:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Nächste Schritte
Weitere Informationen zu HostProcess-Containern und Microsofts Beitrag zu Kubernetes Upstream finden Sie unter Alpha in v1.22: Windows-HostProcess-Container.
Azure Kubernetes Service