Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Node Hardening är en opt-in-funktion för Linux-nodpooler som skyddar nodstabiliteten när arbetsbelastningar sätter noder under cpu-, minnes- eller disktryck. När du aktiverar Node Hardening i ett kluster ändrar AKS hur varje nod reserverar och framtvingar resurser för Kubernetes-komponenter och värdtjänster samt hur kubelet tar bort poddar när resurserna tar slut.
Den här artikeln förklarar vad Node Hardening ändrar, jämför de härdade standardvärdena med standardvärdena för AKS och visar hur du aktiverar, verifierar, anpassar och inaktiverar funktionen.
Important
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och frivillig registrering. Förhandsversioner tillhandahålls "i befintligt skick" och "i mån av tillgång," och de är undantagna från servicenivåavtal och begränsad garanti. AKS-förhandsversioner stöds delvis av kundsupport efter bästa förmåga. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
Fördelar med nodhärdning
På upptagna eller burstiga noder kan arbetsbelastningar använda resurser som kubelet, containerkörningen och värdtjänsterna behöver. När det händer kan noder sluta svara, rapportera statusen NotReady eller avsluta poddar plötsligt. Node Hardening minskar dessa risker på följande sätt:
-
Tvingande reservationer: Som standard använder AKS endast kube-reserverade värden för att beräkna hur mycket kapacitet schemaläggaren kan allokera till poddar. Med hjälp av Node Hardening framtvingar kubelet även kube-reserverad och systemreserverad kapacitet via Linux-kontrollgrupper (cgroups). Kubelet och containerd körs i en dedikerad
kubereserved.slicecgroup, så de behåller sin reserverade CPU-resurs och minne även när poddar belastar noden fullt ut. -
Dedikerad kapacitet för värdtjänster: Node Hardening lägger till en systemreserverad allokering för värdoperativsystemtjänster som körs på
system.slice. - Mer minnesutrymme: Tröskelvärdet för hård eviktering för tillgängligt minne skalar med nodens minne, så kubelet tar bort poddar innan noden får kritiskt lite minne.
- Mjuk vräkning: Med tröskelvärden för mjuk vräkning kan kubelet vräka poddar på ett kontrollerat sätt, med en respitperiod för avslutning, när minnet eller diskutrymmet tar slut. Hard eviction, som avslutar poddar omedelbart, är sedan en sista utväg.
- Reservationer som skalas med podddensitet: Beräkningen av kube-reserverat minne ökar med det maximala antalet poddar per nod, vilket står för kubelet- och containerd-overheaden för att köra fler poddar.
Vad ändras när du aktiverar Node Hardening
I följande tabeller jämförs standardinställningarna för Linux-noder som kör Kubernetes 1.29 eller senare med de standardvärden som AKS använder när Node Hardening är aktiverat.
Resursbokningar
| Setting | Utan nodhärdning | Med Node Hardening |
|---|---|---|
| CPU reserverad för Kube | Baserat på antalet CPU-kärnor. Mer information finns i CPU-reservationer. | Oförändrad |
| Reserverat minne för Kube |
min(20 × maxPods + 50, 25% of node memory) MiB |
min(35 × maxPods + max(250, 2% of node memory), 25% of node memory) MiB |
| Kube-reserverade process-ID:n (PID:er) | 1000 |
Inte reserverad |
| Systemreserverad CPU | None | 100m |
| Systemreserverat minne | None | 200 MiB, plus 100 MiB för varje fullt 32 GiB nodminne, plus 100 MiB för kluster som använder Azure CNI |
| Systemreserverad ephemeral lagring | None | 1Gi |
Tröskelvärden för avhysning
| Setting | Utan nodhärdning | Med Node-härdning |
|---|---|---|
Hård utrensning: memory.available |
100Mi |
250Mi för noder med 8 GiB minne eller mindre, 375Mi för noder med mer än 8 GiB och mindre än 32 GiB, och 512Mi för noder med 32 GiB eller mer |
Hård avhysning: nodefs.available och nodefs.inodesFree |
10% och 5% |
Oförändrad |
Hård utkastning: pid.available |
2000 |
Inte inställt |
Mjuk utkastning: memory.available |
None |
500Mi, 750Mi, eller 1Gi, med samma nodminnesnivåer som hård vräkning, med en respitperiod på 30 sekunder |
Soft eviction: nodefs.available och nodefs.inodesFree |
None |
12% och 7%, med en respitperiod på 2 minuter vardera |
| Maximal grace period för poddavslut under mjuk vräkning | Inte inställt | 60 sekunder |
Cgroup-genomdrivning
| Setting | Utan Node-härdning | Med Node Hardening |
|---|---|---|
| Framtvingade allokerbara nodresurser | pods |
pods, kube-reserved och system-reserved |
| Kubelet och containerd cgroup |
system.slice, utan gränser |
kubereserved.slice, med minne begränsat till kube-reserverat minne och en CPU-resurs som är proportionell mot kube-reserverad CPU |
| Cgroup för värdtjänster |
system.slice, utan gränser |
system.slice, med minne begränsat till det systemreserverade minnet och en CPU-andel som är proportionell mot de systemreserverade CPU-resurserna |
Eftersom Node Hardening reserverar mer kapacitet rapporterar noder mindre allokerbar kapacitet för poddar. På en nod med 4 vCPU:er och 16 GiB minne som använder Azure CNI minskar till exempel allokerbar kapacitet genom att aktivera Node Hardening på följande sätt:
- Med standardmaximalt 250 poddar per nod, cirka 570 MiB minne, 100 millicores CPU och 1 GiB tillfällig lagring.
- Med högst 30 poddar per nod, med cirka 1,3 GiB minne, 100 millicores CPU och 1 GiB tillfällig lagring.
Tröskelvärden för mjuk vräkning minskar inte allokerbar kapacitet. De ändras bara när kubelet börjar vräka poddar.
Considerations
Tänk på följande innan du aktiverar Node Hardening:
- Du aktiverar Node Hardening på klusternivå och det gäller för alla Linux-nodpooler i klustret. Du kan inte aktivera det för enskilda nodpooler och det påverkar inte Windows nodpooler.
- Noder rapporterar mindre allokerbar kapacitet, så poddar som får plats på en nod innan du aktiverar Node Hardening kanske inte längre får plats efteråt. Granska dina poddresursbegäranden och nodpoolstorlekar.
- Värdtjänster i
system.slicedelar en hård minnesgräns som är lika med det systemreserverade minnet. Om du kör dina egna agenter på noder som systemd-tjänster, till exempel säkerhets-, övervaknings- eller loggvidarebefordringsagenter, räknas dessa agenter mot den här gränsen. Verifiera deras minnesanvändning och stabilitet innan du använder Node Hardening i produktion. - Värden som du anger i en nodpools anpassade kubelet-konfiguration åsidosätter motsvarande standardvärden för nodhärdning. Mer information finns i Anpassa nodhärdningsinställningar.
- Om du inaktiverar Node Hardening senare behåller befintliga nodpooler de härdade inställningarna för mjuk vräkning, även efter att noderna har ominstallerats. Om du vill ta bort de här inställningarna måste du skapa nya nodpooler. Mer information finns, se Inaktivera nodhärdning.
- Standardvärden kan ändras medan funktionen är i förhandsversion. Börja med ett icke-produktionskluster och verifiera dina arbetslaster under representativa nodtrycksförhållanden.
Prerequisites
- Ett Azure-abonnemang. Om du inte har något skapar du ett kostnadsfritt konto.
- Ett AKS-kluster med Linux-nodpooler, eller behörighet att skapa ett.
- Azure CLI-tillägget
aks-previewoch funktionsflagganCustomNodeConfigPreview, som beskrivs i följande avsnitt.
Installera tillägget aks-preview Azure CLI
Installera
aks-previewtillägget med hjälp av kommandotaz extension add.az extension add --name aks-previewUppdatera till den senaste versionen av tillägget med hjälp av kommandot
az extension update.az extension update --name aks-preview
Registrera funktionsflaggan CustomNodeConfigPreview
Registrera funktionsflaggan
CustomNodeConfigPreviewmed kommandotaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"Det tar några minuter för statusen att visa Registrerad.
Verifiera registreringsstatusen
az feature showmed hjälp av kommandot .az feature show --namespace "Microsoft.ContainerService" --name "CustomNodeConfigPreview"När statusen visas Registrerad uppdaterar du registreringen av Microsoft. ContainerService-resursprovider med hjälp
az provider registerav kommandot .az provider register --namespace "Microsoft.ContainerService"
Aktivera nodhärdning
I förhandsversionen är Node Hardening inte aktiverat som standard.
Aktivera nodhärdning på ett nytt kluster
Skapa ett kluster med Node Hardening aktiverat med hjälp az aks create av kommandot med parametern --enable-node-hardening .
Det här kommandot kräver aks-preview tillägget och funktionsflaggan CustomNodeConfigPreview . Mer information finns i Förutsättningar.
az aks create \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening \
--generate-ssh-keys
Bekräfta ändringen, se Verifiera inställningar för nodhärdning.
Aktivera Node Hardening på ett befintligt kluster
Aktivera Node Hardening i ett befintligt kluster med hjälp az aks update av kommandot med parametern --enable-node-hardening .
Det här kommandot kräver aks-preview tillägget och funktionsflaggan CustomNodeConfigPreview . Mer information finns i Förutsättningar.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-node-hardening
För att bekräfta ändringen, se Verifiera inställningar för nodhärdning.
Verifiera inställningar för Node Hardening
Hämta autentiseringsuppgifterna för klustret med hjälp av kommandot
az aks get-credentials.az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>Granska de effektiva kubelet-reservations- och vräkningsinställningarna på en nod genom att fråga kubelet-konfigurationsslutpunkten.
kubectl get --raw "/api/v1/nodes/<node-name>/proxy/configz" | jq '.kubeletconfig | {kubeReserved, systemReserved, evictionHard, evictionSoft, evictionSoftGracePeriod, evictionMaxPodGracePeriod, enforceNodeAllocatable}'På en härdad nod
systemReservedochevictionSoftinnehåller värden ochenforceNodeAllocatableinnehållerkube-reservedochsystem-reserved.Jämför nodens kapacitet med dess allokerbara resurser.
kubectl get node <node-name> -o jsonpath='{.status.capacity}{"\n"}{.status.allocatable}{"\n"}'På en härdad nod är allokerbar processor, minne och tillfällig lagring lägre än kapaciteten. Skillnaden motsvarar värdena för kube-reserverad och systemreserverad i resursreservationer, plus tröskelvärdena för hård vräkning i vräkningströsklar. På en nod med 4 virtuella processorer och 16 GiB minne som använder Azure CNI är allokerbar PROCESSOR 240 millicores lägre än kapaciteten: 140 millicores kube-reserverad CPU och 100 millicores systemreserverad CPU.
Anpassa nodhärdningsinställningar
Du kan åsidosätta standardvärdena för kube-reserved och vräkning för en Linux-nodpool med hjälp av en anpassad kubelet-konfiguration. De här inställningarna kräver funktionsflaggan CustomNodeConfigPreview . Du kan använda dem oavsett om Node Hardening är aktiverat i klustret eller inte. AKS hanterar systemreserverade värden och cgroup-tillämpning, och du kan inte anpassa dem.
Varje inställning åsidosätter en rad i tabellerna Resursreservationer eller Tröskelvärden för borttagning . Kube-reserverade rader motsvarar inställningarna för kubeReserved. Rader för hård borttagning motsvarar hardEvictionThreshold inställningarna. Rader för mjuk eviktering motsvarar softEvictionThreshold- och softEvictionGracePeriod-inställningarna. Den maximala tidsfristen för avslutning av podd motsvarar evictionMaxPodGracePeriodInSeconds.
Du kan konfigurera följande inställningar:
| Setting | Overrides | Description |
|---|---|---|
kubeReserved.cpuMillicores |
CPU reserverad för Kube | CPU reserverad för Kubernetes-systemdaemoner, i millicores. |
kubeReserved.memoryMB |
Kube-reserverat minne | Minne reserverat för Kubernetes-systemdaemoner i MiB. |
hardEvictionThreshold.memoryAvailable |
Hård eviktering: memory.available |
Tröskelvärde för hård vräkning för tillgängligt minne. |
hardEvictionThreshold.nodeFsAvailable |
Hård eviktering: nodefs.available |
Tröskelvärde för hård vräkning för tillgängligt utrymme i nodens filsystem. |
hardEvictionThreshold.nodeFsInodesFree |
Hård avhysning: nodefs.inodesFree |
Tröskelvärde för hård vräkning för lediga inode för nodens filsystem. |
softEvictionThreshold.memoryAvailable |
Mjuk utrensning: memory.available |
Tröskelvärde för mjuk vräkning för tillgängligt minne. |
softEvictionThreshold.nodeFsAvailable |
Mjuk avhysning: nodefs.available |
Tröskelvärde för mjuk eviktion för tillgängligt filsystemutrymme på noden. |
softEvictionThreshold.nodeFsInodesFree |
Mjuk eviktion: nodefs.inodesFree |
Tröskelvärde för mjuk eviktering för lediga nodfilsystemsinoder. |
softEvictionGracePeriod.memoryAvailable |
Mjuk vräkning: memory.available respitperiod |
Hur länge tillgängligt minne måste ligga under det mjuka tröskelvärdet innan kubelet tar bort poddar. |
softEvictionGracePeriod.nodeFsAvailable |
Mjuk vräkning: nodefs.available respitperiod |
Hur länge tillgängligt nodfilsystemutrymme måste ligga under det mjuka tröskelvärdet innan kubelet tar bort poddar. |
softEvictionGracePeriod.nodeFsInodesFree |
Mjuk vräkning: nodefs.inodesFree respitperiod |
Hur länge free node filesystem inodes måste ligga under sitt mjuka tröskelvärde innan kubelet tar bort poddar. |
evictionMaxPodGracePeriodInSeconds |
Maximal respitperiod för poddavslut under mjuk vräkning | Maximalt antal sekunder som kubelet tillåter poddar att avslutas under en mjuk vräkning. |
- Tillåtna värden, minimivärden och verifieringsregler för varje inställning finns i Konfigurationsparametrar för anpassade noder för AKS.
- För varje vräkningssignal anger du både tröskelvärdet för mjuk vräkning och dess matchande respitperiod och ser till att varje tröskelvärde för mjuk vräkning är större än tröskelvärdet för hård vräkning för samma signal.
Skapa en kubelet-konfigurationsfil, till exempel
nodehardening-kubelet.json, med de inställningar som du vill anpassa. I följande exempel anges varje konfigurerbart värde. Den anger kube-reserved till 200 millicores cpu och 1 024 MiB minne. Den anger tröskelvärden för hård borttagning av512Mitillgängligt minne,10%tillgängligt filsystemutrymme och5%fria inoder. Den anger tröskelvärden för mjuk borttagning av1Gi,12%och7%med respitperioder på 30 sekunder, 2 minuter och 2 minuter. Den anger också en maximal tidsfrist på 60 sekunder för poddavslut.{ "kubeReserved": { "cpuMillicores": 200, "memoryMB": 1024 }, "hardEvictionThreshold": { "memoryAvailable": "512Mi", "nodeFsAvailable": "10%", "nodeFsInodesFree": "5%" }, "softEvictionThreshold": { "memoryAvailable": "1Gi", "nodeFsAvailable": "12%", "nodeFsInodesFree": "7%" }, "softEvictionGracePeriod": { "memoryAvailable": "30s", "nodeFsAvailable": "2m", "nodeFsInodesFree": "2m" }, "evictionMaxPodGracePeriodInSeconds": 60 }Skapa en Linux-nodpool som använder konfigurationsfilen med hjälp
az aks nodepool addav kommandot med parametern--kubelet-config.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./nodehardening-kubelet.jsonDu kan också använda parametern
--kubelet-configmedaz aks createkommandot för att tillämpa konfigurationen på klustrets första nodpool.
Inaktivera Node Hardening
Inaktivera Node Hardening med hjälp az aks update av kommandot med parametern --disable-node-hardening .
Det här kommandot kräver aks-preview tillägget och funktionsflaggan CustomNodeConfigPreview . Mer information finns i Förutsättningar.
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--disable-node-hardening
Om du inaktiverar Node Hardening inaktiveras inställningen på klusternivå, men befintliga noder ändras inte omedelbart. Befintliga noder behåller alla härdade inställningar tills de har installerats om med en ny avbild, till exempel under en uppgradering av nodbilden. När en nod har avbildats om gäller följande ändringar:
- Återgick till standardinställningarna för AKS: Kube-reserverade och systemreserverade resurser, tröskelvärden för hård borttagning och cgroup-tillämpning. Nodens allokerbara kapacitet ökar i enlighet med detta.
- Behålls: Tröskelvärdena för mjuk eviktion, respitperioderna för mjuk eviktion och den maximala tidsgränsen för avslutning av poddar under mjuk eviktion.
Du kan bara ange en anpassad kubelet-konfiguration när du skapar ett kluster eller en nodpool, så att du inte kan ta bort de kvarhållna inställningarna för mjuk eviktion från en befintlig nodpool. Om du vill ta bort dem skapar du en ny nodpool som uttryckligen avaktiverar dem, flyttar dina arbetsbelastningar till den nya nodpoolen och tar sedan bort den gamla nodpoolen.
Skapa en kubelet-konfigurationsfil, till exempel
remove-soft-eviction.json. I följande exempel anges varje tröskelvärde för soft eviction och respitperiod till en tom sträng, vilket inaktiverar soft eviction för den signalen. Den anger också den maximala respitperioden för poddavslut till0, vilket är standardvärdet för AKS.{ "softEvictionThreshold": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "softEvictionGracePeriod": { "memoryAvailable": "", "nodeFsAvailable": "", "nodeFsInodesFree": "" }, "evictionMaxPodGracePeriodInSeconds": 0 }Skapa en Linux-nodpool som använder konfigurationsfilen med hjälp
az aks nodepool addav kommandot med parametern--kubelet-config.az aks nodepool add \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubelet-config ./remove-soft-eviction.jsonFlytta dina arbetsbelastningar till den nya nodpoolen och ta sedan bort den gamla nodpoolen. Mer information finns i Ändra storlek på nodpooler i AKS.
Se Verifiera inställningar för nodhärdning. På noder i den nya nodpoolen är evictionSoft tom.