Anpassa nodkonfigurationen för AKS-nodpooler (Azure Kubernetes Service)

Genom att anpassa nodkonfigurationen kan du justera inställningarna för operativsystem (OS) eller kubeletparametrar så att de matchar arbetsbelastningarnas behov. När du skapar ett AKS-kluster eller lägger till en nodpool i klustret kan du anpassa en delmängd av vanliga inställningar för operativsystem och kubelet. Om du vill konfigurera inställningar utöver den här delmängden kan du använda en daemonuppsättning för att anpassa nödvändiga konfigurationer utan att förlora AKS-stöd för dina noder.

Skapa ett AKS-kluster med en anpassad nodkonfiguration

Skapa konfigurationsfiler

Konfigurationsändringar för operativsystem och kubelet kräver att du skapar en ny konfigurationsfil med parametrarna och önskade inställningar. Om ett värde för en parameter inte har angetts anges värdet till standardvärdet.

Kubelet-konfiguration

Skapa en linuxkubeletconfig.json fil med följande innehåll:

{
 "cpuManagerPolicy": "static",
 "cpuCfsQuota": true,
 "cpuCfsQuotaPeriod": "200ms",
 "imageGcHighThreshold": 90,
 "imageGcLowThreshold": 70,
 "topologyManagerPolicy": "best-effort",
 "allowedUnsafeSysctls": [
  "kernel.msg*",
  "net.*"
],
 "failSwapOn": false
}

OS-konfiguration

Skapa en linuxosconfig.json fil med följande innehåll:

{
 "transparentHugePageEnabled": "madvise",
 "transparentHugePageDefrag": "defer+madvise",
 "swapFileSizeMB": 1500,
 "sysctls": {
  "netCoreSomaxconn": 163849,
  "netIpv4TcpTwReuse": true,
  "netIpv4IpLocalPortRange": "32000 60000"
 }
}

Skapa ett nytt kluster med anpassade konfigurationsfiler

När du skapar ett nytt kluster kan du använda de anpassade konfigurationsfilerna som skapades i föregående steg för att ange kubelet-konfigurationen, OS-konfigurationen eller båda.

Kommentar

Om du anger en konfiguration när du skapar ett kluster kommer endast noderna i den första nodpoolen att ha den konfigurationen tillämpad. Alla inställningar som inte har konfigurerats i JSON-filen behåller standardvärdet. CustomLinuxOsConfig stöds inte för operativsystemstyp: Windows.

Skapa ett nytt kluster med anpassade konfigurationsfiler med kommandot az aks create och ange dina konfigurationsfiler. Följande exempelkommando skapar ett nytt kluster med anpassade ./linuxkubeletconfig.json filer och ./linuxosconfig.json filer:

az aks create --name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

Lägga till en nodpool med hjälp av anpassade konfigurationsfiler

När du lägger till en nodpool i ett kluster kan du använda den anpassade konfigurationsfilen som skapades i föregående steg för att ange kubelet-konfigurationen. CustomKubeletConfig stöds för Linux- och Windows-nodpooler.

Kommentar

När du lägger till en Linux-nodpool i ett befintligt kluster kan du ange kubelet-konfigurationen, OS-konfigurationen eller båda. När du lägger till en Windows-nodpool i ett befintligt kluster kan du bara ange kubelet-konfigurationen. Om du anger en konfiguration när du lägger till en nodpool, kommer endast noderna i den nya nodpoolen att få den konfigurationen tillämpad. Alla inställningar som inte har konfigurerats i JSON-filen behåller standardvärdet.

az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json

Felsöka anpassade nodkonfigurationer

Bekräfta att inställningarna har tillämpats

När du har tillämpat anpassad nodkonfiguration kan du kontrollera att inställningarna verkligen har tillämpats på noderna genom att ansluta till värden och verifiera sysctl eller om konfigurationsändringar har gjorts i filsystemet.

Parametrar som stöds för anpassad nodkonfiguration

Anpassad Kubelet-konfiguration

Kubelet-anpassad konfiguration stöds för Linux- och Windows-nodpooler. Parametrar som stöds skiljer sig åt och dokumenteras nedan.

Anpassad Linux Kubelet-konfiguration

Parameter Tillåtna värden/intervall Standardvärde beskrivning
cpuManagerPolicy none, static inget Den statiska principen tillåter containrar i garanterade poddar att få åtkomst till exklusiva processorer på noden när CPU-begäranden är angivna i heltal.
cpuCfsQuota SANT, FALSKT true Aktivera/inaktivera CPU CFS-kvottillämpning för containrar som anger CPU-gränser.
cpuCfsQuotaPeriod Intervall i millisekunder (ms) 100ms Anger värdet för CPU CFS-kvotperiod.
imageGcHighThreshold 0–100 85 Den procent av diskanvändningen varefter skräpinsamling av avbildningar alltid körs. Minsta diskanvändning som utlöser skräpinsamling. För att inaktivera skräpinsamling av bilder, ange värdet till 100.
imageGcLowThreshold 0-100, inte högre än imageGcHighThreshold 80 Den procentuella andelen av diskanvändning före vilket skräpinsamlingen för bilder aldrig körs. Minsta diskanvändning som kan utlösa skräpinsamling.
topologyManagerPolicy none, bästa möjliga ansträngning, begränsad, enkel NUMA-nod inget Optimera NUMA-nodjusteringen. Mer information finns här.
allowedUnsafeSysctls kernel.shm*, kernel.msg*, kernel.sem, , , fs.mqueue.*net.* Ingen Tillåten lista över osäkra sysctls eller osäkra sysctl-mönster.
containerLogMaxSizeMB Storlek i megabyte (MB) 50 Den maximala storleken (till exempel 10 MB) för en containerloggfil innan den roteras.
containerLogMaxFiles ≥ 2 5 Det maximala antalet containerloggfiler som kan finnas för en container.
podMaxPids -1 till kernel-PID-gräns -1 (∞) Det maximala antalet process-ID:n som kan köras i en Pod
seccompDefault Unconfined, RuntimeDefault Unconfined Anger standardprofilen för seccomp för alla arbetsbelastningar. RuntimeDefault använder containerds standardprofil för seccomp, vilket begränsar vissa systemanrop för att förbättra säkerheten. Begränsade systemanrop kommer att misslyckas. Unconfined har inga begränsningar för syscalls och alla systemanrop tillåts, vilket minskar säkerheten. Mer information finns i standardprofilen för seccomp för containerD. Den här parametern är i förhandsversion. Registrera funktionsflaggan "KubeletDefaultSeccompProfilePreview" med hjälp av az feature register kommandot och --namespace "Microsoft.ContainerService".

Anpassad Windows Kubelet-konfiguration

Parameter Tillåtna värden/intervall Standardvärde beskrivning
imageGcHighThreshold 0–100 85 Den procent av diskanvändningen varefter skräpinsamling av avbildningar alltid körs. Minsta diskanvändning som utlöser skräpinsamling. För att inaktivera skräpinsamling av bilder, ange värdet till 100.
imageGcLowThreshold 0-100, inte högre än imageGcHighThreshold 80 Den procentuella andelen av diskanvändning före vilket skräpinsamlingen för bilder aldrig körs. Minsta diskanvändning som kan utlösa skräpinsamling.
containerLogMaxSizeMB Storlek i megabyte (MB) 10 Den maximala storleken (till exempel 10 MB) för en containerloggfil innan den roteras.
containerLogMaxFiles ≥ 2 5 Det maximala antalet containerloggfiler som kan finnas för en container.

Konfigurationsinställningar för anpassade Linux-operativsystem

Viktigt!

För att förenkla sökningen och läsbarheten visas inställningarna för operativsystemet i den här artikeln efter deras namn, men de bör läggas till i JSON-konfigurationsfilen eller AKS API:et med hjälp av camelCase-konventionen.

Om du till exempel ändrar inställningen "vm.max_map_count" bör du formatera om till "vmMaxMapCount" i JSON-konfigurationsfilen.

Gränser för filhandtag

När du hanterar mycket trafik kommer trafiken ofta från ett stort antal lokala filer. Du kan justera kernelinställningarna nedan och de inbyggda gränserna så att du kan hantera mer, till priset av en del systemminne.

Inställning Tillåtna värden/intervall Standard (Ubuntu 22.04) Standard (Ubuntu 24.04) Standard (Azure Linux 3.0) beskrivning
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 Maximalt antal filreferenser som Linux-kerneln ska allokera. Detta är inställt på det maximala möjliga värdet (2^63-1) för att förhindra filbeskrivningsöverbelastning och säkerställa obegränsade systemomfattande filhandtag för containerbaserade arbetsbelastningar.
fs.inotify.max_user_watches 781250 - 2097152 1048576 1048576 1048576 Maximalt antal filövervakningar som tillåts av systemet. Varje klocka är ungefär 90 byte på en 32-bitars kernel och ungefär 160 byte på en 64-bitars kernel.
fs.aio-max-nr 65536 - 6553500 65536 65536 65536 Aio-nr visar det aktuella systemomfattande antalet asynkrona io-begäranden. med aio-max-nr kan du ändra det maximala värde som aio-nr kan växa till.
fs.nr_open 8192 - 20000500 1048576 1048576 1073741816 Det maximala antalet filreferenser som en process kan allokera.

Kommentar

Parametern fs.file-max är inställd på 9223372036854775807 (det maximala värdet för ett signerat 64-bitars heltal) i Ubuntu och Azure Linux baserat på överordnade standardvärden. Den här konfigurationen:

  • Förhindrar överbelastningsattacker baserat på systemomfattande filbeskrivningsöverbelastning.
  • Säkerställer att containerarbetsbelastningar aldrig begränsas av systemövergripande filhandtagsbegränsningar.
  • Upprätthåller säkerhet via per process-gränser (fs.nr_open och ulimit) som fortfarande gäller för enskilda processer.
  • Optimerar för containerplattformar där många containrar kan köras samtidigt, var och en kan öppna många filer och nätverksanslutningar.

Socket- och nätverksjustering

För agentnoder, som förväntas hantera ett mycket stort antal samtidiga sessioner, kan du använda delmängden av TCP- och nätverksalternativen nedan som du kan justera per nodpool.

Inställning Tillåtna värden/intervall Standard (Ubuntu 22.04) Standard (Ubuntu 24.04) Standard (Azure Linux 3.0) beskrivning
net.core.somaxconn 4096 - 3240000 16384 16384 16384 Maximalt antal anslutningsbegäranden som kan köas för en viss lyssningssocket. En övre gräns för värdet för parametern för kvarvarande uppgifter som skickas till funktionen listen(2). Om köargumentet är större än somaxconn, trunkeras det tyst till den här gränsen.
net.core.netdev_max_backlog 1000 - 3240000 1000 1000 1000 Maximalt antal paket, i kö på indatasidan, när gränssnittet tar emot paket snabbare än kerneln kan bearbeta dem.
net.core.rmem_max 212992 - 134217728 1048576 1048576 212992 Den maximala buffertstorleken för mottagningssocket i byte.
net.core.wmem_max 212992 - 134217728 212992 212992 212992 Maximal buffertstorlek för skicka socket i byte.
net.core.optmem_max 20480 - 4194304 20480 131072 20480 Maximal sidobuffertstorlek (alternativminnesbuffert) som tillåts per socket. Socket-alternativminne används i några fall för att lagra extra strukturer relaterade till användning av socketen.
net.ipv4.tcp_max_syn_backlog 128 - 3240000 16384 16384 16384 Det maximala antalet köade anslutningsbegäranden som fortfarande inte har fått någon bekräftelse från den anslutande klienten. Om det här antalet överskrids börjar kerneln ta bort begäranden.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 262144 262144 131072 Maximalt antal timewait socketar som hålls av systemet samtidigt. Om det här antalet överskrids förstörs time-wait-socketen omedelbart och en varning skrivs ut.
net.ipv4.tcp_fin_timeout 5 - 120 60 60 60 Hur lång tid en överbliven anslutning (som inte längre refereras till av något program) förblir i FIN_WAIT_2 tillstånd innan den avbryts i den lokala änden.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 7200 7200 Hur ofta TCP skickar ut keepalive meddelanden när keepalive är aktiverat.
net.ipv4.tcp_keepalive_probes 1 - 15 9 9 9 Hur många keepalive avsökningar TCP skickar ut tills den beslutar att anslutningen är bruten.
net.ipv4.tcp_keepalive_intvl 10 - 90 75 75 75 Hur ofta probsignalerna skickas ut. Multiplicerat med tcp_keepalive_probes utgör det tiden för att avsluta en anslutning som inte svarar, efter att probsignalerna har börjat.
net.ipv4.tcp_tw_reuse 0 eller 1 2 2 2 Tillåt återanvändning TIME-WAIT av socketar för nya anslutningar när det är säkert från protokollsynpunkt.
net.ipv4.ip_local_port_range Första: 1024 - 60999 och Sist: 32768 - 65535] Första: 32768 och Sist: 60999 Första: 32768 och Sist: 60999 Första: 32768 och Sist: 60999 Det lokala portintervall som används av TCP- och UDP-trafik för att välja den lokala porten. Består av två tal: Det första talet är den första lokala porten som tillåts för TCP- och UDP-trafik på agentnoden, den andra är det sista lokala portnumret.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 4096 4096 4096 Minsta antal poster som kan finnas i ARP-cachen. Skräpinsamling utlöses inte om antalet poster ligger under den här inställningen.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 8192 8192 Flexibelt maximalt antal poster som kan finnas i ARP-cachen. Den här inställningen är utan tvekan den viktigaste eftersom ARP-skräpinsamling utlöses cirka 5 sekunder efter att den här mjuka maxgränsen har nåtts.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 16384 16384 Hårt maximalt antal poster i ARP-cachen.
net.netfilter.nf_conntrack_max 131072 - 2097152 524288 524288 262144 nf_conntrack är en modul som spårar anslutningsposter för NAT i Linux. Modulen nf_conntrack använder en hash-tabell för att registrera den etablerade anslutningsposten för TCP-protokollet. nf_conntrack_max är det maximala antalet noder i hash-tabellen, dvs. det maximala antalet anslutningar som stöds av modulen nf_conntrack eller storleken på anslutningsspårningstabellen.
net.netfilter.nf_conntrack_buckets 65536 - 524288 262144 262144 262144 nf_conntrack är en modul som spårar anslutningsposter för NAT i Linux. Modulen nf_conntrack använder en hash-tabell för att registrera den etablerade anslutningsposten för TCP-protokollet. nf_conntrack_buckets är storleken på hash-tabellen.

Arbetsgränser

Precis som filbeskrivningsgränser begränsas antalet arbetare eller trådar som en process kan skapa av både en kernelinställning och användargränser. Användargränsen för AKS är obegränsad.

Inställning Tillåtna värden/intervall Standard (Ubuntu 22.04) Standard (Ubuntu 24.04) Standard (Azure Linux 3.0) beskrivning
kernel.threads-max 20 - 513785 1030425 1030462 256596 Processer kan starta arbetstrådar. Det maximala antalet trådar som kan skapas anges med kernelinställningen kernel.threads-max.

Virtuellt minne

Inställningarna nedan kan användas för att justera driften av undersystemet virtuellt minne (VM) i Linux-kerneln och writeout för smutsiga data till disk.

Inställning Tillåtna värden/intervall Standard (Ubuntu 22.04) Standard (Ubuntu 24.04) Standard (Azure Linux 3.0) beskrivning
vm.max_map_count 65530 - 262144 65530 1048576 1048576 Den här filen innehåller det maximala antalet minnesmappningsområden som en process kan ha. Områden för minneskarta används som en bieffekt av att anropa malloc, direkt av mmap, mprotectoch madvise, och även vid inläsning av delade bibliotek.
vm.vfs_cache_pressure 1 - 100 100 100 100 Det här procentvärdet styr kernelns tendens att frigöra minnet, som används för cachelagring av katalog- och inode-objekt.
vm.swappiness 0 - 100 60 60 60 Den här kontrollen används för att definiera hur aggressiv kerneln ska växla minnessidor. Högre värden ökar aggressiviteten, lägre värden minskar mängden växling. Värdet 0 instruerar kerneln att inte initiera växling förrän mängden lediga och filbaserade sidor är mindre än högvattenmärket i en zon.
swapFileSizeMB 1 MB – Storleken på den temporära disken (/dev/sdb) Ingen Ingen Ingen SwapFileSizeMB anger storleken i MB för en växlingsfil som ska skapas på agentnoderna från den här nodpoolen.
transparentHugePageEnabled always, madvisenever always always madvise Transparent Hugepages är en Linux kernel-funktion avsedd att förbättra prestandan genom att göra mer effektiv användning av processorns minnesmappningsmaskinvara. När den är aktiverad försöker kärnan allokera hugepages när det är möjligt och en Linux-process får 2 MB sidor ifall mmap regionen är 2 MB naturligt justerad. I vissa fall när hugepages är aktiverade i hela systemet kan program till slut allokera fler minnesresurser. En applikation kan mmap vara en stor region men bara röra 1 byte av den, i det fallet kan en 2 MB-sida allokeras i stället för en 4 kB-sida utan någon giltig anledning. Det här scenariot är anledningen till att det är möjligt att inaktivera hugepages hela systemet eller bara ha dem i MADV_HUGEPAGE madvise regioner.
transparentHugePageDefrag always, defer, defer+madvise, , , madvisenever madvise madvise madvise Det här värdet styr om kerneln ska använda minneskomprimering aggressivt för att göra mer hugepages tillgängligt.

Nästa steg