Sdílet prostřednictvím


Přizpůsobte konfiguraci uzlů pro fondy uzlů služby Azure Kubernetes (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í uživatelsky definovaných konfiguračních souborů uzlů pro fondy uzlů AKS

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í zadaná hodnota parametru, je hodnota nastavená na výchozí hodnotu.

Poznámka:

Následující příklady ukazují běžná nastavení konfigurace. Nastavení můžete upravit tak, aby splňovala vaše požadavky na úlohy. Úplný seznam podporovaných parametrů vlastní konfigurace najdete v části Podporované vlastní parametry konfigurace .

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í clusteru AKS pomocí vlastních konfiguračních souborů

Poznámka:

Při používání vlastních konfiguračních souborů při vytváření nového clusteru AKS mějte na paměti následující informace:

  • Pokud při vytváření clusteru zadáte konfiguraci, konfigurace se vztahuje pouze na uzly v počátečním fondu uzlů. Všechna nastavení nenakonfigurovaná v souboru JSON zachovají výchozí hodnoty.
  • CustomLinuxOsConfig není podporován pro typ operačního systému Windows.

Vytvořte nový cluster s použitím vlastních konfiguračních souborů pomocí příkazu az aks create a zadáním vašich konfiguračních souborů pro parametry --kubelet-config a --linux-os-config. Následující ukázkový příkaz vytvoří nový cluster s vlastními ./linuxkubeletconfig.json soubory a ./linuxosconfig.json soubory:

az aks create --name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

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

Poznámka:

Při přidávání nového fondu uzlů do existujícího clusteru AKS mějte na paměti následující informace při použití vlastních konfiguračních souborů:

  • 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, konfigurace se vztahuje pouze na uzly v novém fondu uzlů. Všechna nastavení nenakonfigurovaná v souboru JSON zachovají výchozí hodnoty.
  • CustomKubeletConfig podporuje fondy uzlů Linuxu a Windows.

Vytvořte nový fond uzlů Linux pomocí příkazu az aks nodepool add a zadejte konfigurační soubory pro parametry --kubelet-config a --linux-os-config. Následující ukázkový příkaz vytvoří nový fond uzlů Linuxu s vlastním ./linuxkubeletconfig.json souborem:

az aks nodepool add --name <node-pool-name> --cluster-name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json

Potvrzení použití nastavení

Po použití vlastní konfigurace uzlu můžete potvrdit, že byla nastavení použita na uzly připojením k hostiteli a ověřením, zda byla provedena sysctl změna konfigurace v systému souborů.

Podporované vlastní parametry konfigurace

Vlastní konfigurace kubeletu pro Linux

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 uvolňování paměti. 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 naleznete v tématu Řízení zásad správy topologie na uzlu.
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) než dojde k rotaci.
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é se dají 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é systémové volání selže. Unconfined neklade žádná omezení na syscalls, což umožňuje všechny systémové volání a snižuje úroveň zabezpečení. Další informace najdete v kontejnerovém výchozím profilu seccomp. Tento parametr je ve verzi Preview. Zaregistrujte příznak funkce "KubeletDefaultSeccompProfilePreview" pomocí příkazu az feature register.

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 uvolňování paměti. 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) než dojde k rotaci.
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 být přidány do konfiguračního souboru JSON nebo rozhraní API AKS pomocí konvence velká písmena camelCase.

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

Omezení zpracování souborů v Linuxu

Při poskytování vysokého objemu provozu tento obvykle pochází z množství místních souborů. Můžete upravit následující nastavení jádra a předdefinovaná omezení, abyste mohli zpracovávat více za cenu některých systémových pamětí.

Následující tabulka uvádí omezení popisovače souborů, která můžeš přizpůsobit pro uzlový fond.

Nastavení Povolené hodnoty/interval Výchozí nastavení Ubuntu 22.04 Výchozí nastavení Ubuntu 24.04 Výchozí nastavení Azure Linux 3.0 Popis
fs.file-max 8192 - 9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807 Maximální počet popisovačů souborů, které jádro Linuxu přiděluje Tato hodnota je nastavena na maximální možnou hodnotu (2^63-1), aby se zabránilo vyčerpání souborových deskriptorů a zajistily neomezené souborové deskriptory v rámci celého systému 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 , kde může běžet mnoho kontejnerů současně, přičemž každý potenciálně otevírá mnoho souborů a síťové připojení.

Ladění zásuvky a sítě v Linuxu

U uzlů agentů, u kterých se očekává zpracování velkého počtu souběžných relací, můžete použít následující možnosti protokolu TCP a sítě a upravit je na fond uzlů:

Nastavení Povolené hodnoty/interval Výchozí nastavení Ubuntu 22.04 Výchozí nastavení Ubuntu 24.04 Výchozí nastavení 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í zařazených do fronty, které neobdržely potvrzení od připojujícího klienta. Pokud je toto číslo překročeno, začne jádro 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ž je 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 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. Uvolňování paměti se neaktivuje, pokud je počet položek méně než toto nastavení.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 8192 8192 Maximální maximální počet položek, které mohou být v mezipaměti protokolu ARP. Toto nastavení je pravděpodobně nejdůležitější, protože uvolňování paměti protokolu ARP se aktivuje přibližně 5 sekund po dosažení tohoto měkkého maxima.
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 Dynamicky vypočítané Dynamicky vypočítané Dynamicky vypočítané 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í. Výchozí hodnota se dynamicky počítá na základě systémové paměti pomocí vzorce: RAM_in_bytes / 16384 (nebo RAM_in_MB * 64). Například virtuální počítač s 8 GB paměti RAM má výchozí nastavení přibližně 524 288 připojení. Skutečné hodnoty se liší v závislosti na velikosti virtuálního počítače a dostupné paměti.
net.netfilter.nf_conntrack_buckets 65536 - 524288 Dynamicky vypočítané Dynamicky vypočítané Dynamicky vypočítané 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. Výchozí hodnota se dynamicky počítá na základě systémové paměti pomocí vzorce: RAM_in_bytes / 16384, s minimálně 1 024 kbelíky a maximálně 262 144 kbelíků. Výchozí hodnota nf_conntrack_max je obvykle nastavena na nf_conntrack_buckets * 4hodnotu . Skutečné hodnoty se liší v závislosti na velikosti virtuálního počítače a dostupné paměti.

Omezení pracovních procesů v Linuxu

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é. Následující tabulka uvádí nastavení jádra, které můžete přizpůsobit pro fond uzlů:

Nastavení Výchozí nastavení Ubuntu 22.04 Výchozí nastavení Ubuntu 24.04 Výchozí nastavení Azure Linux 3.0 Popis
kernel.threads-max Dynamicky vypočítané Dynamicky vypočítané Dynamicky vypočítané 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 . Výchozí hodnota se dynamicky počítá na základě systémové paměti pomocí vzorce: total_ram_pages / 4 (kde každá stránka je obvykle 4 kB). Skutečné hodnoty se liší v závislosti na velikosti virtuálního počítače a dostupné paměti.

Virtuální paměť s Linuxem

Následující tabulka uvádí nastavení jádra, která můžete přizpůsobit pro sdružení uzlů, aby se optimalizoval provoz subsystému virtuální paměti jádra Linuxu a writeout nezpracovaná data na disk:

Nastavení Povolené hodnoty/interval Výchozí nastavení Ubuntu 22.04 Výchozí nastavení Ubuntu 24.04 Výchozí nastavení Azure Linux 3.0 Popis
vm.max_map_count 65530 1048576 1048576 Tento soubor obsahuje maximální počet oblastí mapy paměti, které může proces obsahovat. 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 určení míry agresivity, s jakou jádro vyměňuje stránky paměti. Vyšší hodnoty zvyšují agresivitu, nižší hodnoty snižují množství výměny. 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 specifikuje velikost v MB swapovacího souboru, který se má vytvořit z tohoto fondu uzlů na uzlech agenta.
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 povoleno, jádro se pokusí o přidělení hugepages, kdykoli je to možné, a jakýkoli Linuxový proces obdrží stránky velikosti 2 MB, pokud je oblast mmap přirozeně zarovnaná 2 MB. V některých případech, kdy je hugepages povolené celosystémově, mohou aplikace nakonec přidělit více paměťových prostředků. Aplikace může mmap mít velkou oblast, ale z nějakého důvodu se dotkne jenom 1 bajtu. V takovém případě může být místo stránky 4k přidělena stránka o velikosti 2 MB. 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 .