Sdílet prostřednictvím


Přizpůsobení konfigurace 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

Další konfigurace

K úpravě dalších nastavení operačního systému je možné použít následující nastavení:

Zpráva dne

--message-of-the-day Předejte příznak s umístěním souboru, který nahradí zprávu dne v uzlech Linuxu při vytváření clusteru nebo vytvoření fondu uzlů.

az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Vytvoření fondu uzlů
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt

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 vlastní konfigurace 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 true, false true 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í paměti image. Minimální využití disku, které aktivuje uvolňování paměti. Pokud chcete zakázat uvolňování paměti image, nastavte hodnotu 100.
imageGcLowThreshold 0–100, ne vyšší než imageGcHighThreshold 80 Procento využití disku, před kterým se nikdy nespustí uvolňování paměti image. Minimální využití disku, které může aktivovat uvolňování paměti.
topologyManagerPolicy none, best-effort, restricted, single-numa-node Žá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 vzorů sysctl nebo nebezpečných vzorů 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

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í paměti image. Minimální využití disku, které aktivuje uvolňování paměti. Pokud chcete zakázat uvolňování paměti image, nastavte hodnotu 100.
imageGcLowThreshold 0–100, ne vyšší než imageGcHighThreshold 80 Procento využití disku, před kterým se nikdy nespustí uvolňování paměti image. Minimální využití disku, které může aktivovat uvolňování paměti.
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 poskytování velkého množství provozu provoz 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í Popis
fs.file-max 8192 - 12000500 709620 Maximální počet popisovačů souborů, které jádro Linuxu přidělí, zvýšením této hodnoty můžete zvýšit maximální povolený počet otevřených souborů.
fs.inotify.max_user_watches 781250 - 2097152 1048576 Maximální počet hodinek souborů povolených systémem. Každé hodinky jsou 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 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 aio-nr může růst na.
fs.nr_open 8192 - 20000500 1048576 Maximální počet popisovačů souborů, které proces může přidělit.

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í Popis
net.core.somaxconn 4096 - 3240000 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ž somaxconnargument , je bezobslužně zkrácen na tento limit.
net.core.netdev_max_backlog 1000 - 3240000 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 212992 Maximální velikost vyrovnávací paměti soketu příjmu v bajtech.
net.core.wmem_max 212992 - 134217728 212992 Maximální velikost vyrovnávací paměti soketu pro odesílání v bajtech.
net.core.optmem_max 20480 - 4194304 20480 Maximální velikost pomocné vyrovnávací paměti (vyrovnávací paměť možností) 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 Maximální počet žádostí o připojení zařazených do fronty, které stále nepřišly potvrzení od připojujícího klienta. Pokud je toto číslo překročeno, jádro začne zahazovat požadavky.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 32768 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 upozornění.
net.ipv4.tcp_fin_timeout 5 - 120 60 Doba, po kterou osamocené připojení (na které už odkazuje žádná aplikace), zůstane v FIN_WAIT_2 stavu, než dojde k jeho přerušení na místním konci.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 Jak často tcp odesílá keepalive zprávy, když keepalive je povoleno.
net.ipv4.tcp_keepalive_probes 1 - 15 9 Kolik keepalive sond TCP odesílá, dokud se nerozhodne, že připojení není přerušeno.
net.ipv4.tcp_keepalive_intvl 10 - 90 75 Jak často se sondy odesílají. Vynásobením tcp_keepalive_probes je čas ukončení připojení, které nereaguje, po spuštění sond.
net.ipv4.tcp_tw_reuse 0 nebo 1 0 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 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 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 pod tímto nastavením.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 Maximální maximální počet položek, které můžou 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 Maximální počet položek v mezipaměti protokolu ARP.
net.netfilter.nf_conntrack_max 131072 - 2097152 131072 nf_conntrack je modul, který sleduje položky připojení pro překlad adres (NAT) v Linuxu. 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 65536 nf_conntrack je modul, který sleduje položky připojení pro překlad adres (NAT) v Linuxu. 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.

Omezení pracovních procesů

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í Popis
kernel.threads-max 20 - 513785 55601 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í Popis
vm.max_map_count 65530 - 262144 65530 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 mmapmprotectpomocí , a , a madvisetaké při načítání sdílených knihoven.
vm.vfs_cache_pressure 1 - 100 100 Tato procentuální hodnota řídí hodnotu jádra k uvolnění paměti, která se používá k ukládání objektů adresáře do mezipaměti a objektů inode.
vm.swappiness 0 - 100 60 Tento ovládací prvek slouží k definování toho, jak agresivní jádro prohodí stránky paměti. Vyšší hodnoty zvýší agresivitu, nižší hodnoty sníží množství prohození. Hodnota 0 dává jádru pokyn, aby nespouštět prohození, dokud velikost volných stránek a stránek s podporou souborů není menší než horní mez v zóně.
swapFileSizeMB 1 MB – velikost dočasného disku (/dev/sdb) Nic SwapFileSizeMB určuje velikost v MB prohození souboru se vytvoří na uzlech agenta z tohoto fondu uzlů.
transparentHugePageEnabled always, , madvisenever always 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, pokusí se jádro přidělit hugepages , kdykoli je to možné, a jakýkoli proces Linuxu obdrží 2 MB stránky, pokud mmap je oblast přirozeně zarovnaná. V některých případech, kdy hugepages jsou povolené systémy, můžou aplikace nakonec přidělit více paměťových prostředků. Aplikace může mmap mít velkou oblast, ale z tohoto 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. Tento scénář je důvod, proč je možné zakázat hugepages systém v celém systému nebo je mít jenom uvnitř MADV_HUGEPAGE madvise oblastí.
transparentHugePageDefrag always, defer, defer+madvise, , madvisenever madvise Tato hodnota určuje, jestli má jádro agresivně využívat komprimace paměti, aby bylo k dispozici více hugepages .

Další kroky