Använda Windows HostProcess-containrar
HostProcess/Privilegierade 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 behåller beteendet och åtkomsten på liknande sätt som för 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 versionshantering 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 högre 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 dessa containrar har från värden är resursbegränsningarna 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.
- Resursgränser som disk, minne och cpu-antal fungerar på samma sätt som processer på värden.
- Namngivna rörmonteringar och Unix-domänuttag 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 din distribution 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 arbetsbelastningen 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.
Azure Kubernetes Service