Använda Windows HostProcess-containrar
HostProcess/Privileged-containrar utökar Windows-containermodellen för att möjliggöra ett bredare utbud av Kubernetes-klusterhanteringsscenarier. HostProcess-containrar körs direkt på värden och underhåller beteendet och åtkomsten på liknande sätt som i en vanlig process. Med HostProcess-containrar kan användare paketera och distribuera hanteringsåtgärder och funktioner som kräver värdåtkomst samtidigt som versionshanterings- och distributionsmetoder som tillhandahålls av containrar bevaras.
En privilegierad DaemonSet kan utföra ändringar eller övervaka en Linux-värd på Kubernetes men inte Windows-värdar. HostProcess-containrar är Windows-motsvarigheten till värdhöjning.
Begränsningar
- HostProcess-containrar kräver Kubernetes 1.23 eller senare.
- HostProcess-containrar kräver
containerd
1.6 eller senare containerkörning. - HostProcess-poddar kan bara innehålla HostProcess-containrar på grund av en begränsning i Windows-operativsystemet. Icke-privilegierade Windows-containrar kan inte dela ett virtuellt nätverkskort med värd-IP-namnområdet.
- HostProcess-containrar körs som en process på värden. Den enda isolering som containrarna har från värden är de resursbegränsningar som gäller för HostProcess-användarkontot.
- Filsystemisolering och Hyper-V-isolering stöds inte för HostProcess-containrar.
- Volymmonteringar stöds och monteras under containervolymen. Se Volymmonteringar.
- En begränsad uppsättning värdanvändarkonton är tillgängliga för värdprocesscontainrar som standard. Se Välja ett användarkonto.
- Resursbegränsningar som disk, minne och cpu-antal fungerar på samma sätt som processer på värden.
- Namngivna rörmonteringar och Unix-domänsocketer stöds inte direkt, men kan nås på deras värdsökväg, till exempel
\\.\pipe\*
.
Köra en HostProcess-arbetsbelastning
Om du vill använda HostProcess-funktioner med distributionen anger du hostProcess: true och hostNetwork: true:
spec:
...
securityContext:
windowsOptions:
hostProcess: true
...
hostNetwork: true
containers:
...
Om du vill köra en exempelarbetsbelastning som använder HostProcess-funktioner i ett befintligt AKS-kluster med Windows-noder skapar hostprocess.yaml
du med följande innehåll:
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
Använd kubectl
för att köra exempelarbetsbelastningen:
kubectl apply -f hostprocess.yaml
Du bör se följande utdata:
$ kubectl apply -f hostprocess.yaml
daemonset.apps/privileged-daemonset created
Kontrollera att din arbetsbelastning använder funktionerna i HostProcess-containrar genom att visa poddens loggar.
Använd kubectl
för att hitta namnet på podden i kube-system
namnområdet.
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
...
privileged-daemonset-12345 1/1 Running 0 2m13s
Använd kubectl log
för att visa loggarna för podden och kontrollera att podden har administratörsbehörighet:
$ kubectl logs privileged-daemonset-12345 --namespace kube-system
InvalidOperation: Unable to find type [Security.Principal.WindowsPrincipal].
Process has admin rights:
Nästa steg
Mer information om HostProcess-containrar och Microsofts bidrag till Kubernetes uppströms finns i Alpha i v1.22: Windows HostProcess Containers.