Sdílet prostřednictvím


Přizpůsobení nastavení uzlu pro fondy uzlů Azure Kubernetes Service (AKS)

Přizpůsobení konfigurace uzlu umožňuje upravit nastavení operačního systému (OS) nebo parametry kubeletu tak, aby odpovídaly potřebám vašich úloh. Když vytvoříte cluster AKS nebo do clusteru přidáte fond uzlů, můžete přizpůsobit podmnožinu běžně používaných nastavení operačního systému a kubeletu. Pokud chcete nakonfigurovat nastavení nad rámec této podmnožiny, můžete pomocí démona nastavit přizpůsobení potřebných konfigurací bez ztráty podpory AKS pro uzly.

Vytvoření clusteru AKS s vlastní konfigurací uzlu

Vytvoření konfiguračních souborů

Změny konfigurace operačního systému a kubeletu vyžadují, abyste vytvořili nový konfigurační soubor s parametry a požadovanými nastaveními. Pokud není zadána hodnota parametru, nastaví se tato hodnota na výchozí hodnotu.

Konfigurace Kubeletu

Vytvořte linuxkubeletconfig.json soubor s následujícím obsahem:

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

Konfigurace operačního systému

Vytvořte linuxosconfig.json soubor s následujícím obsahem:

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

Vytvoření nového clusteru pomocí vlastních konfiguračních souborů

Při vytváření nového clusteru můžete pomocí přizpůsobených konfiguračních souborů vytvořených v předchozích krocích určit konfiguraci kubeletu, konfiguraci operačního systému nebo obojí.

Poznámka:

Pokud při vytváření clusteru zadáte konfiguraci, budou mít tuto konfiguraci použity pouze uzly v počátečním fondu uzlů. Všechna nastavení nenakonfigurovaná v souboru JSON zachovají výchozí hodnotu. CustomLinuxOsConfig nepodporuje se pro typ operačního systému: Windows.

Vytvořte nový cluster pomocí vlastních konfiguračních souborů pomocí az aks create příkazu a zadáním konfiguračních souborů. Následující ukázkový příkaz vytvoří nový cluster s vlastními ./linuxkubeletconfig.json soubory a ./linuxosconfig.json soubory:

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

Přidání fondu uzlů pomocí vlastních konfiguračních souborů

Při přidávání fondu uzlů do clusteru můžete pomocí přizpůsobeného konfiguračního souboru vytvořeného v předchozím kroku určit konfiguraci kubeletu. CustomKubeletConfig podporuje fondy uzlů Linuxu a Windows.

Poznámka:

Když do existujícího clusteru přidáte fond uzlů Linuxu, můžete zadat konfiguraci kubeletu, konfiguraci operačního systému nebo obojí. Když do existujícího clusteru přidáte fond uzlů Windows, můžete zadat pouze konfiguraci kubeletu. Pokud při přidávání fondu uzlů zadáte konfiguraci, budou mít tuto konfiguraci použity pouze uzly v novém fondu uzlů. Všechna nastavení nenakonfigurovaná v souboru JSON zachovají výchozí hodnotu.

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

Řešení potíží s vlastními konfiguracemi uzlů

Potvrzení použití nastavení

Po použití vlastní konfigurace uzlu můžete ověřit, že se nastavení použila na uzly připojením k hostiteli a ověřením sysctl nebo provedením změn konfigurace v systému souborů.

Podporované parametry konfigurace vlastního uzlu

Vlastní konfigurace Kubeletu

Vlastní konfigurace Kubeletu je podporovaná pro fondy uzlů Linuxu a Windows. Podporované parametry se liší a jsou popsané níže.

Vlastní konfigurace Linux Kubeletu

Parametr Povolené hodnoty/interval Výchozí Popis
cpuManagerPolicy žádná, statická Žádná Statické zásady umožňují kontejnerům v garantovaných podech s celočíselnou žádostí o procesor přístup k výhradním procesorům na uzlu.
cpuCfsQuota pravda, nepravda pravda Povolte nebo zakažte vynucení kvóty CFS procesoru pro kontejnery, které určují limity procesoru.
cpuCfsQuotaPeriod Interval v milisekundách (ms) 100ms Nastaví hodnotu období kvóty CFS procesoru.
imageGcHighThreshold 0–100 85 Procento využití disku, po kterém se vždy spustí uvolňování nevyužívaných obrazů. Minimální využití disku, které aktivuje sběr odpadků. Pokud chcete zakázat uvolňování paměti obrázků, nastavte hodnotu na 100.
imageGcLowThreshold 0–100, ne vyšší než imageGcHighThreshold 80 Procento využití disku, při kterém nikdy nedojde ke spuštění uvolnění nepoužívaných obrazů. Minimální využití disku, které může spustit čištění disku.
topologyManagerPolicy žádný, nejlepší úsilí, omezené, jeden-node-numa Žádná Optimalizujte zarovnání uzlů NUMA. Další informace najdete tady.
allowedUnsafeSysctls kernel.shm*, kernel.msg*, kernel.sem, , fs.mqueue.*net.* Nic Povolený seznam nebezpečných sysctlů nebo vzorů nebezpečných sysctlů.
containerLogMaxSizeMB Velikost v megabajtech (MB) 50 Maximální velikost souboru protokolu kontejneru (například 10 MB) před otočením.
containerLogMaxFiles ≥ 2 5 Maximální počet souborů protokolu kontejneru, které mohou být přítomné pro kontejner.
podMaxPids -1 až limit PID jádra -1 (∞) Maximální počet ID procesů, které lze spustit v Podu
seccompDefault Unconfined, RuntimeDefault Unconfined Nastaví výchozí profil seccomp pro všechny úlohy. RuntimeDefault používá výchozí profil seccomp kontejneru, který omezuje určitá systémová volání pro zvýšení zabezpečení. Omezená volání syscallů selžou. Unconfined neklade žádná omezení na syscalls a všechna systémová volání jsou povolena, čímž se snižuje zabezpečení. Další podrobnosti najdete ve výchozím seccomp profilu containerD. Tento parametr je ve verzi Preview. Pomocí příkazu s parametrem --namespace "Microsoft.ContainerService" zaregistrujte příznak funkce "KubeletDefaultSeccompProfilePreview".

Vlastní konfigurace Windows Kubeletu

Parametr Povolené hodnoty/interval Výchozí Popis
imageGcHighThreshold 0–100 85 Procento využití disku, po kterém se vždy spustí uvolňování nevyužívaných obrazů. Minimální využití disku, které aktivuje sběr odpadků. Pokud chcete zakázat uvolňování paměti obrázků, nastavte hodnotu na 100.
imageGcLowThreshold 0–100, ne vyšší než imageGcHighThreshold 80 Procento využití disku, při kterém nikdy nedojde ke spuštění uvolnění nepoužívaných obrazů. Minimální využití disku, které může spustit čištění disku.
containerLogMaxSizeMB Velikost v megabajtech (MB) 10 Maximální velikost souboru protokolu kontejneru (například 10 MB) před otočením.
containerLogMaxFiles ≥ 2 5 Maximální počet souborů protokolu kontejneru, které mohou být přítomné pro kontejner.

Vlastní nastavení konfigurace operačního systému Linux

Důležité

Pro zjednodušení vyhledávání a čitelnosti se nastavení operačního systému zobrazí v tomto článku podle jejich názvu, ale měly by se přidat do konfiguračního souboru JSON nebo rozhraní API AKS pomocí konvence velká písmena camelCase.

Pokud například upravíte nastavení vm.max_map_count, měli byste v konfiguračním souboru JSON přeformátovat hodnotu vmMaxMapCount.

Omezení popisovačů souborů

Při zpracovávání velkého množství provozu obvykle pochází z velkého počtu místních souborů. Můžete upravit níže uvedená nastavení jádra a předdefinovaná omezení, abyste mohli zpracovat více za cenu některých systémových pamětí.

Nastavení Povolené hodnoty/interval Výchozí (Ubuntu 22.04) Výchozí (Ubuntu 24.04) Výchozí (Azure Linux 3.0) Popis
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 Maximální počet popisovačů souborů, které přidělí jádro Linuxu. Tato hodnota je nastavená na maximální možnou hodnotu (2^63-1), aby se zabránilo vyčerpání popisovače souborů a zajistilo neomezené systémové popisovače souborů pro kontejnerizované úlohy.
fs.inotify.max_user_watches 781250 - 2097152 1048576 1048576 1048576 Maximální počet sledování souborů povolený systémem. Každý watch je přibližně 90 bajtů v 32bitovém jádru a přibližně 160 bajtů v 64bitovém jádru.
fs.aio-max-nr 65536 - 6553500 65536 65536 65536 Aio-nr zobrazuje aktuální počet asynchronních vstupně-výstupních požadavků v celém systému. aio-max-nr umožňuje změnit maximální hodnotu, které může aio-nr dosáhnout.
fs.nr_open 8192 - 20000500 1048576 1048576 1073741816 Maximální počet popisovačů souborů, které proces může přidělit.

Poznámka:

Parametr fs.file-max je nastavený na 9223372036854775807 (maximální hodnota 64bitového celého čísla) napříč Ubuntu a Azure Linuxem na základě výchozích hodnot upstreamu. Tato konfigurace:

  • Zabraňuje útokům na dostupnost služby na základě vyčerpání popisovače souborů v rámci celého systému.
  • Zajišťuje, že úlohy kontejnerů nejsou nikdy kritickým bodem limitů zpracování souborů na úrovni celého systému.
  • Udržuje zabezpečení prostřednictvím limitů jednotlivých procesů (fs.nr_open a ulimit), které se stále vztahují na jednotlivé procesy.
  • Optimalizuje se pro kontejnerové platformy , ve kterých může běžet mnoho kontejnerů současně, přičemž každý potenciálně otevírá mnoho souborů a síťové připojení.

Soket a ladění sítě

U uzlů agentů, u kterých se očekává zpracování velmi velkého počtu souběžných relací, můžete použít podmnožinu možností protokolu TCP a sítě níže, které můžete upravit pro každý fond uzlů.

Nastavení Povolené hodnoty/interval Výchozí (Ubuntu 22.04) Výchozí (Ubuntu 24.04) Výchozí (Azure Linux 3.0) Popis
net.core.somaxconn 4096 - 3240000 16384 16384 16384 Maximální počet požadavků na připojení, které lze zařadit do fronty pro libovolný daný naslouchající soket. Horní limit hodnoty parametru backlogu předaného funkci listen(2). Pokud je argument backlogu větší než somaxconn, je automaticky zkrácen na tento limit.
net.core.netdev_max_backlog 1000 - 3240000 1000 1000 1000 Maximální počet paketů zařazených do fronty na straně INPUT, když rozhraní přijímá pakety rychleji, než je jádro dokáže zpracovat.
net.core.rmem_max 212992 - 134217728 1048576 1048576 212992 Maximální velikost vyrovnávací paměti soketu příjmu v bajtech.
net.core.wmem_max 212992 - 134217728 212992 212992 212992 Maximální velikost vyrovnávací paměti soketu pro odesílání v bajtech.
net.core.optmem_max 20480 - 4194304 20480 131072 20480 Maximální velikost pomocné vyrovnávací paměti (vyrovnávací paměť pro možnosti) povolená pro každý soket. Paměť možností soketu se používá v několika případech k ukládání dalších struktur týkajících se použití soketu.
net.ipv4.tcp_max_syn_backlog 128 - 3240000 16384 16384 16384 Maximální počet žádostí o připojení ve frontě, které stále neobdržely potvrzení od připojujícího se klienta. Pokud je toto číslo překročeno, jádro začne zahazovat požadavky.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 262144 262144 131072 Maximální počet timewait soketů uložených systémem současně. Pokud je toto číslo překročeno, soket s časovým čekáním se okamžitě zničí a zobrazí se varování.
net.ipv4.tcp_fin_timeout 5 - 120 60 60 60 Doba, po kterou osamocené připojení (na které už neodkazuje žádná aplikace), zůstane ve stavu FIN_WAIT_2, než bude přerušeno na místním konci.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 7200 7200 Jak často tcp odesílá keepalive zprávy, když keepalive je povoleno.
net.ipv4.tcp_keepalive_probes 1 - 15 9 9 9 Dokud se TCP nerozhodne, že připojení je přerušeno, kolik sond odesílá?
net.ipv4.tcp_keepalive_intvl 10 - 90 75 75 75 Jak často se sondy odesílají. Vynásobením tcp_keepalive_probes se stanoví doba, po které se ukončí připojení, které nereaguje, když již byly sondy spuštěny.
net.ipv4.tcp_tw_reuse 0 nebo 1 2 2 2 Povolte opakované použití TIME-WAIT soketů pro nová připojení, pokud je bezpečné z hlediska protokolu.
net.ipv4.ip_local_port_range První: 1024 - 60999 a poslední: 32768 - 65535] První: 32768 a poslední: 60999 První: 32768 a poslední: 60999 První: 32768 a poslední: 60999 Místní rozsah portů používaný přenosy TCP a UDP k výběru místního portu. Skládá se ze dvou čísel: Prvním číslem je první místní port povolený pro provoz TCP a UDP na uzlu agenta, druhý je poslední číslo místního portu.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 4096 4096 4096 Minimální počet položek, které mohou být v mezipaměti protokolu ARP. Automatické uvolňování paměti se neaktivuje, pokud je počet položek pod tímto nastavením.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 8192 8192 Měkký maximální počet položek, které mohou být v ARP mezipaměti. Toto nastavení je možná nejdůležitější, protože uvolňování paměti protokolu ARP bude spuštěno přibližně 5 sekund po dosažení této měkké hranice.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 16384 16384 Pevný maximální počet položek v mezipaměti protokolu ARP.
net.netfilter.nf_conntrack_max 131072 - 2097152 524288 524288 262144 nf_conntrack je modul, který v Linuxu sleduje položky připojení pro NAT (překlad adres). Modul nf_conntrack používá k zaznamenání vytvořeného záznamu připojení protokolu TCP tabulku hash. nf_conntrack_max je maximální počet uzlů v tabulce hash, tj. maximální počet připojení podporovaný modulem nf_conntrack nebo velikost tabulky sledování připojení.
net.netfilter.nf_conntrack_buckets 65536 - 524288 262144 262144 262144 nf_conntrack je modul, který v Linuxu sleduje položky připojení pro NAT (překlad adres). Modul nf_conntrack používá k zaznamenání vytvořeného záznamu připojení protokolu TCP tabulku hash. nf_conntrack_buckets je velikost hashovací tabulky.

Limity pracovníků

Stejně jako omezení popisovače souborů je počet pracovních procesů nebo vláken, které může proces vytvořit, omezen nastavením jádra i uživatelskými limity. Omezení uživatele v AKS je neomezené.

Nastavení Povolené hodnoty/interval Výchozí (Ubuntu 22.04) Výchozí (Ubuntu 24.04) Výchozí (Azure Linux 3.0) Popis
kernel.threads-max 20 - 513785 1030425 1030462 256596 Procesy můžou aktivovat pracovní vlákna. Maximální počet všech vláken, které lze vytvořit, je nastaven s nastavením kernel.threads-maxjádra .

Virtuální paměť

Následující nastavení můžete použít k ladění provozu subsystému virtuální paměti (VM) jádra Linuxu a writeout zašpiněných dat na disk.

Nastavení Povolené hodnoty/interval Výchozí (Ubuntu 22.04) Výchozí (Ubuntu 24.04) Výchozí (Azure Linux 3.0) Popis
vm.max_map_count 65530 - 262144 65530 1048576 1048576 Tento soubor obsahuje maximální počet oblastí mapy paměti, které může proces mít. Oblasti mapy paměti se používají jako vedlejší účinek volání malloc, přímo pomocí mmap, mprotect a madvise, a také při načítání sdílených knihoven.
vm.vfs_cache_pressure 1 - 100 100 100 100 Tato procentuální hodnota ovlivňuje tendenci jádra k uvolňování paměti, která se používá pro ukládání objektů adresáře a objektů inode do mezipaměti.
vm.swappiness 0 - 100 60 60 60 Tento ovládací prvek slouží k definici, jak agresivně bude operační systém vyměňovat stránky paměti. Vyšší hodnoty zvýší agresivitu, nižší hodnoty sníží množství prohození. Hodnota 0 dává jádru pokyn, aby nespustil prohazování, dokud množství volných stránek a stránek zálohovaných souborem nebude menší než horní mezní hodnota v zóně.
swapFileSizeMB 1 MB – velikost dočasného disku (/dev/sdb) Nic Nic Nic SwapFileSizeMB určuje velikost v MB odkládacího souboru, který bude vytvořen na agentových uzlech z tohoto fondu uzlů.
transparentHugePageEnabled always madvise never always always madvise Transparent Hugepages je funkce jádra Linuxu určená ke zlepšení výkonu tím, že zefektivňuje využití hardwaru mapování paměti procesoru. Pokud je tato funkce povolena, jádro se pokusí přidělit hugepages kdykoli je to možné, a jakýkoli proces v systému Linux obdrží 2MB stránky, pokud je oblast mmap přirozeně zarovnaná na 2 MB. V některých případech, kdy hugepages jsou povoleny systémově, můžou aplikace nakonec přidělit více paměťových prostředků. Aplikace může mmap zabírat velkou oblast, ale dotknout se pouze 1 bajtu, v takovém případě může být přidělena stránka o velikosti 2 MB místo stránky velikosti 4 kB bez důvodu. Proto je možné zakázat hugepages v celém systému nebo je mít jen uvnitř MADV_HUGEPAGE madvise regionů.
transparentHugePageDefrag always, defer, defer+madvise, , madvisenever madvise madvise madvise Tato hodnota určuje, jestli má jádro agresivně využívat komprimace paměti, aby bylo k dispozici více hugepages .

Další kroky