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 tillämpas endast noderna i den nya nodpoolen. 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

Andra konfigurationer

Följande inställningar kan användas för att ändra andra inställningar för operativsystemet:

Dagens meddelande

--message-of-the-day Skicka flaggan med filens plats för att ersätta Dagens meddelande på Linux-noder när klustret skapas eller nodpoolen skapas.

az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Skapa nodpool
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt

Bekräfta att inställningarna har tillämpats

När du har tillämpat konfigurationen av anpassade noder kan du bekräfta att inställningarna har tillämpats på noderna genom att ansluta till värden och verifiera att sysctl eller 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 med heltals-CPU-begäranden åtkomst till exklusiva processorer på noden.
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. Om du vill inaktivera skräpinsamling för avbildningar anger du till 100.
imageGcLowThreshold 0-100, inte högre än imageGcHighThreshold 80 Den procent av diskanvändningen innan avbildningens skräpinsamling aldrig körs. Minsta diskanvändning som kan utlösa skräpinsamling.
topologyManagerPolicy none, best-effort, restricted, single-numa-node 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 (∞) Den maximala mängden process-ID:t som kan köras i en podd

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. Om du vill inaktivera skräpinsamling för avbildningar anger du till 100.
imageGcLowThreshold 0-100, inte högre än imageGcHighThreshold 80 Den procent av diskanvändningen innan avbildningens skräpinsamling 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-versaler.

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 Standardvärde beskrivning
fs.file-max 8192 - 12000500 709620 Maximalt antal filreferenser som Linux-kerneln ska allokera, genom att öka det här värdet kan du öka det maximala antalet öppna filer som tillåts.
fs.inotify.max_user_watches 781250 - 2097152 1048576 Maximalt antal filklockor 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 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 Det maximala antalet filreferenser som en process kan allokera.

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 Standardvärde beskrivning
net.core.somaxconn 4096 - 3240000 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 argumentet för kvarvarande uppgifter är större än somaxconn, trunkeras det tyst till den här gränsen.
net.core.netdev_max_backlog 1000 - 3240000 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 212992 Den maximala buffertstorleken för mottagningssocket i byte.
net.core.wmem_max 212992 - 134217728 212992 Maximal buffertstorlek för skicka socket i byte.
net.core.optmem_max 20480 - 4194304 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 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 32768 Maximalt antal timewait socketar som hålls av systemet samtidigt. Om det här antalet överskrids förstörs tidsvänte-socketen omedelbart och varningen skrivs ut.
net.ipv4.tcp_fin_timeout 5 - 120 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 Hur ofta TCP skickar ut keepalive meddelanden när keepalive är aktiverat.
net.ipv4.tcp_keepalive_probes 1 - 15 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 Hur ofta avsökningarna skickas ut. Multiplicerat tcp_keepalive_probes med det tar det tid att avsluta en anslutning som inte svarar när avsökningarna har startats.
net.ipv4.tcp_tw_reuse 0 eller 1 0 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 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 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 Mjukt 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 Hårt maximalt antal poster i ARP-cachen.
net.netfilter.nf_conntrack_max 131072 - 2097152 131072 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 65536 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 Standardvärde beskrivning
kernel.threads-max 20 - 513785 55601 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 Standardvärde beskrivning
vm.max_map_count 65530 - 262144 65530 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 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 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 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 Transparenta hugepages är en Linux-kernelfunktion som är avsedd att förbättra prestandan genom att använda processorns maskinvara för minnesmappning effektivare. När den är aktiverad försöker kerneln allokera hugepages när det är möjligt och en Linux-process får 2 MB sidor om 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. Ett program kan mmap vara en stor region men bara röra 1 byte av det, i så fall kan en 2 MB-sida allokeras i stället för en 4k-sida utan någon bra 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 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