Udostępnij za pośrednictwem


Dostosowywanie konfiguracji węzła dla pul węzłów usługi Azure Kubernetes Service (AKS)

Dostosowanie konfiguracji węzła umożliwia dostosowanie ustawień systemu operacyjnego lub parametrów kubelet w celu dopasowania ich do potrzeb obciążeń. Podczas tworzenia klastra usługi AKS lub dodawania puli węzłów do klastra można dostosować podzbiór często używanych ustawień systemu operacyjnego i narzędzia kubelet. Aby skonfigurować ustawienia poza tym podzestawem, możesz użyć demona ustawionego w celu dostosowania potrzebnych konfiguracji bez utraty obsługi usługi AKS dla węzłów.

Tworzenie klastra usługi AKS przy użyciu niestandardowej konfiguracji węzła

Tworzenie plików konfiguracji

Zmiany konfiguracji systemu operacyjnego i narzędzia kubelet wymagają utworzenia nowego pliku konfiguracji z parametrami i żądanymi ustawieniami. Jeśli wartość parametru nie zostanie określona, wartość zostanie ustawiona na wartość domyślną.

Konfiguracja rozwiązania Kubelet

linuxkubeletconfig.json Utwórz plik z następującą zawartością:

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

Konfiguracja systemu operacyjnego

linuxosconfig.json Utwórz plik z następującą zawartością:

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

Tworzenie nowego klastra przy użyciu niestandardowych plików konfiguracji

Podczas tworzenia nowego klastra można użyć dostosowanych plików konfiguracji utworzonych w poprzednich krokach, aby określić konfigurację narzędzia kubelet, konfigurację systemu operacyjnego lub oba te elementy.

Uwaga

Jeśli określisz konfigurację podczas tworzenia klastra, zostaną zastosowane tylko węzły w początkowej puli węzłów. Wszystkie ustawienia, które nie zostały skonfigurowane w pliku JSON, zachowają wartość domyślną. CustomLinuxOsConfig nie jest obsługiwana w przypadku typu systemu operacyjnego: Windows.

Utwórz nowy klaster przy użyciu niestandardowych plików konfiguracji przy użyciu az aks create polecenia i określ pliki konfiguracji. Następujące przykładowe polecenie tworzy nowy klaster z plikami niestandardowymi ./linuxkubeletconfig.json i ./linuxosconfig.json :

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

Dodawanie puli węzłów przy użyciu niestandardowych plików konfiguracji

Podczas dodawania puli węzłów do klastra można użyć dostosowanego pliku konfiguracji utworzonego w poprzednim kroku, aby określić konfigurację narzędzia kubelet. CustomKubeletConfig Jest obsługiwany w przypadku pul węzłów systemów Linux i Windows.

Uwaga

Po dodaniu puli węzłów systemu Linux do istniejącego klastra można określić konfigurację narzędzia kubelet, konfigurację systemu operacyjnego lub obie te elementy. Po dodaniu puli węzłów systemu Windows do istniejącego klastra można określić tylko konfigurację narzędzia kubelet. Jeśli określisz konfigurację podczas dodawania puli węzłów, zostaną zastosowane tylko węzły w nowej puli węzłów. Wszystkie ustawienia, które nie zostały skonfigurowane w pliku JSON, zachowają wartość domyślną.

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

Inne konfiguracje

Do modyfikowania innych ustawień systemu operacyjnego można użyć następujących ustawień:

Wiadomość dnia

Przekaż flagę --message-of-the-day z lokalizacją pliku, aby zastąpić komunikat dnia w węzłach systemu Linux podczas tworzenia klastra lub tworzenia puli węzłów.

az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Tworzenie puli węzłów
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt

Upewnij się, że zastosowano ustawienia

Po zastosowaniu niestandardowej konfiguracji węzła można potwierdzić, że ustawienia zostały zastosowane do węzłów , łącząc się z hostem i sprawdzając, czy sysctl zmiany konfiguracji zostały wprowadzone w systemie plików.

Parametry obsługiwane przez konfigurację węzła niestandardowego

Konfiguracja niestandardowa rozwiązania Kubelet

Konfiguracja niestandardowa rozwiązania Kubelet jest obsługiwana w przypadku pul węzłów systemu Linux i Windows. Obsługiwane parametry różnią się i są udokumentowane poniżej.

Konfiguracja niestandardowa rozwiązania Kubelet w systemie Linux

Parametr Dozwolone wartości/interwał Domyślny opis
cpuManagerPolicy brak, statyczny Brak Zasady statyczne umożliwiają kontenerom w zasobnikach gwarantowanych z liczbą całkowitą żądań dostępu do wyłącznych procesorów CPU w węźle.
cpuCfsQuota wartość true, false prawda Włączanie/wyłączanie wymuszania limitów przydziału procesora CPU CFS dla kontenerów określających limity procesora CPU.
cpuCfsQuotaPeriod Interwał w milisekundach (ms) 100ms Ustawia wartość okresu limitu przydziału procesora CPU CFS.
imageGcHighThreshold 0–100 85 Procent użycia dysku, po którym odzyskiwanie pamięci obrazu jest zawsze uruchamiane. Minimalne użycie dysku, które spowoduje wyzwolenie odzyskiwania pamięci. Aby wyłączyć odzyskiwanie pamięci obrazu, ustaw wartość 100.
imageGcLowThreshold 0–100, nie wyższe niż imageGcHighThreshold 80 Procent użycia dysku, przed którym odzyskiwanie pamięci obrazu nigdy nie jest uruchamiane. Minimalne użycie dysku, które może wyzwalać odzyskiwanie pamięci.
topologyManagerPolicy none, best-effort, restricted, single-numa-node Brak Optymalizowanie wyrównania węzła NUMA, zobacz więcej tutaj.
allowedUnsafeSysctls kernel.shm*, , kernel.msg*, kernel.sem, , fs.mqueue.*net.* Brak Dozwolona lista niebezpiecznych systemów lub niebezpiecznych wzorców sysctl.
containerLogMaxSizeMB Rozmiar w megabajtach (MB) 50 Maksymalny rozmiar (na przykład 10 MB) pliku dziennika kontenera przed jego obróceniu.
containerLogMaxFiles ≥ 2 5 Maksymalna liczba plików dziennika kontenera, które mogą być obecne dla kontenera.
podMaxPids -1 do limitu PID jądra -1 (∞) Maksymalna liczba identyfikatorów procesów, które mogą być uruchomione w zasobniku

Konfiguracja niestandardowa rozwiązania Windows Kubelet

Parametr Dozwolone wartości/interwał Domyślny opis
imageGcHighThreshold 0–100 85 Procent użycia dysku, po którym odzyskiwanie pamięci obrazu jest zawsze uruchamiane. Minimalne użycie dysku, które spowoduje wyzwolenie odzyskiwania pamięci. Aby wyłączyć odzyskiwanie pamięci obrazu, ustaw wartość 100.
imageGcLowThreshold 0–100, nie wyższe niż imageGcHighThreshold 80 Procent użycia dysku, przed którym odzyskiwanie pamięci obrazu nigdy nie jest uruchamiane. Minimalne użycie dysku, które może wyzwalać odzyskiwanie pamięci.
containerLogMaxSizeMB Rozmiar w megabajtach (MB) 10 Maksymalny rozmiar (na przykład 10 MB) pliku dziennika kontenera przed jego obróceniu.
containerLogMaxFiles ≥ 2 5 Maksymalna liczba plików dziennika kontenera, które mogą być obecne dla kontenera.

Niestandardowe ustawienia konfiguracji systemu operacyjnego Linux

Ważne

Aby uprościć wyszukiwanie i czytelność, ustawienia systemu operacyjnego są wyświetlane w tym artykule według ich nazwy, ale należy je dodać do pliku JSON konfiguracji lub interfejsu API usługi AKS przy użyciu konwencji wielkości liter camelCase.

Jeśli na przykład zmodyfikujesz ustawienie "vm.max_map_count", należy ponownie sformatować wartość "vmMaxMapCount" w pliku JSON konfiguracji.

Limity dojść do plików

W przypadku obsługi dużej liczby ruchu ruch często pochodzi z dużej liczby plików lokalnych. Możesz dostosować poniższe ustawienia jądra i wbudowane limity, aby umożliwić obsługę większej ilości pamięci systemowej.

Ustawienie Dozwolone wartości/interwał Domyślny opis
fs.file-max 8192 - 12000500 709620 Maksymalna liczba dojść do plików przydzielanych przez jądro systemu Linux przez zwiększenie tej wartości pozwala zwiększyć maksymalną dozwoloną liczbę otwartych plików.
fs.inotify.max_user_watches 781250 - 2097152 1048576 Maksymalna liczba zegarków plików dozwolonych przez system. Każdy zegarek jest około 90 bajtów w 32-bitowym jądrze, a około 160 bajtów w 64-bitowym jądrze.
fs.aio-max-nr 65536 - 6553500 65536 Wartość aio-nr pokazuje bieżącą liczbę asynchronicznych żądań we/wy dla całego systemu. aio-max-nr umożliwia zmianę maksymalnej wartości aio-nr może wzrosnąć.
fs.nr_open 8192 - 20000500 1048576 Maksymalna liczba dojść do plików, które może przydzielić proces.

Dostrajanie gniazd i sieci

W przypadku węzłów agentów, które mają obsługiwać bardzo dużą liczbę współbieżnych sesji, można użyć podzestawu opcji TCP i sieci poniżej, które można dostosować dla puli węzłów.

Ustawienie Dozwolone wartości/interwał Domyślny opis
net.core.somaxconn 4096 - 3240000 16384 Maksymalna liczba żądań połączeń, które można kolejkować dla dowolnego gniazda nasłuchiwania. Górny limit wartości parametru listy prac przekazany do funkcji listen(2). Jeśli argument listy prac jest większy niż somaxconn, jest dyskretnie obcięty do tego limitu.
net.core.netdev_max_backlog 1000 - 3240000 1000 Maksymalna liczba pakietów, w kolejce po stronie danych WEJŚCIOWYch, gdy interfejs odbiera pakiety szybciej niż jądro może je przetworzyć.
net.core.rmem_max 212992 - 134217728 212992 Maksymalny rozmiar buforu gniazda odbioru w bajtach.
net.core.wmem_max 212992 - 134217728 212992 Maksymalny rozmiar buforu gniazda wysyłania w bajtach.
net.core.optmem_max 20480 - 4194304 20480 Maksymalny rozmiar buforu pomocniczego (bufor pamięci opcji) dozwolony na gniazdo. Pamięć opcji gniazda jest używana w kilku przypadkach do przechowywania dodatkowych struktur związanych z użyciem gniazda.
net.ipv4.tcp_max_syn_backlog 128 - 3240000 16384 Maksymalna liczba żądań połączeń w kolejce, które nadal nie otrzymały potwierdzenia od klienta łączącego. Jeśli ta liczba zostanie przekroczona, jądro rozpocznie upuszczanie żądań.
net.ipv4.tcp_max_tw_buckets 8000 - 1440000 32768 Maksymalna liczba timewait gniazd przechowywanych jednocześnie przez system. Jeśli ta liczba zostanie przekroczona, gniazdo oczekiwania czasowego zostanie natychmiast zniszczone i zostanie wyświetlone ostrzeżenie.
net.ipv4.tcp_fin_timeout 5 - 120 60 Czas, przez jaki połączenie oddzielone (nie przywoływane przez dowolną aplikację) pozostanie w stanie FIN_WAIT_2, zanim zostanie przerwane na końcu lokalnym.
net.ipv4.tcp_keepalive_time 30 - 432000 7200 Jak często protokół TCP wysyła komunikaty po keepalive keepalive włączeniu.
net.ipv4.tcp_keepalive_probes 1 - 15 9 Ile keepalive sond tcp wysyła, dopóki nie zdecyduje, że połączenie zostanie przerwane.
net.ipv4.tcp_keepalive_intvl 10 - 90 75 Jak często są wysyłane sondy. Pomnożony przez tcp_keepalive_probes to czas, aby zabić połączenie, które nie odpowiada, po uruchomieniu sond.
net.ipv4.tcp_tw_reuse 0 lub 1 0 Zezwalaj na ponowne użycie TIME-WAIT gniazd dla nowych połączeń, gdy jest bezpieczny z punktu widzenia protokołu.
net.ipv4.ip_local_port_range Pierwszy: 1024 - 60999 i Ostatni: 32768 - 65535] Pierwsze: 32768 i ostatnie: 60999 Zakres portów lokalnych używany przez ruch TCP i UDP do wybierania portu lokalnego. Składa się z dwóch liczb: pierwsza liczba to pierwszy port lokalny dozwolony dla ruchu TCP i UDP w węźle agenta, drugi jest ostatnim numerem portu lokalnego.
net.ipv4.neigh.default.gc_thresh1 128 - 80000 4096 Minimalna liczba wpisów, które mogą znajdować się w pamięci podręcznej ARP. Odzyskiwanie pamięci nie zostanie wyzwolone, jeśli liczba wpisów jest poniżej tego ustawienia.
net.ipv4.neigh.default.gc_thresh2 512 - 90000 8192 Maksymalna liczba wpisów, które mogą znajdować się w pamięci podręcznej ARP. To ustawienie jest prawdopodobnie najważniejsze, ponieważ odzyskiwanie pamięci ARP zostanie wyzwolone około 5 sekund po osiągnięciu tego miękkiego maksimum.
net.ipv4.neigh.default.gc_thresh3 1024 - 100000 16384 Maksymalna liczba wpisów w pamięci podręcznej ARP.
net.netfilter.nf_conntrack_max 131072 - 2097152 131072 nf_conntrack to moduł, który śledzi wpisy połączenia dla translatora adresów sieciowych w systemie Linux. Moduł nf_conntrack używa tabeli skrótów do rejestrowania ustanowionego rekordu połączenia protokołu TCP. nf_conntrack_max to maksymalna liczba węzłów w tabeli skrótów, czyli maksymalna liczba połączeń obsługiwanych przez nf_conntrack moduł lub rozmiar tabeli śledzenia połączeń.
net.netfilter.nf_conntrack_buckets 65536 - 524288 65536 nf_conntrack to moduł, który śledzi wpisy połączenia dla translatora adresów sieciowych w systemie Linux. Moduł nf_conntrack używa tabeli skrótów do rejestrowania ustanowionego rekordu połączenia protokołu TCP. nf_conntrack_buckets jest rozmiarem tabeli skrótów.

Limity procesów roboczych

Podobnie jak limity deskryptorów plików, liczba procesów roboczych lub wątków, które można utworzyć, jest ograniczona zarówno przez ustawienie jądra, jak i limity użytkowników. Limit użytkownika w usłudze AKS jest nieograniczony.

Ustawienie Dozwolone wartości/interwał Domyślny opis
kernel.threads-max 20 - 513785 55601 Procesy mogą uruchamiać wątki robocze. Maksymalna liczba wszystkich wątków, które można utworzyć, jest ustawiana przy użyciu ustawienia kernel.threads-maxjądra .

Pamięć wirtualna

Poniższe ustawienia mogą służyć do dostrajania działania podsystemu pamięci wirtualnej jądra systemu Linux i writeout zanieczyszczonych danych na dysku.

Ustawienie Dozwolone wartości/interwał Domyślny opis
vm.max_map_count 65530 - 262144 65530 Ten plik zawiera maksymalną liczbę obszarów mapy pamięci, które może mieć proces. Obszary mapy pamięci są używane jako efekt uboczny wywoływania funkcji malloc, bezpośrednio przez mmap, mprotecti madvise, a także podczas ładowania udostępnionych bibliotek.
vm.vfs_cache_pressure 1 - 100 100 Ta wartość procentowa kontroluje tendencję jądra do odzyskania pamięci, która jest używana do buforowania katalogów i obiektów inode.
vm.swappiness 0 - 100 60 Ta kontrolka służy do definiowania, jak agresywne jest zamienianie stron pamięci przez jądro. Wyższe wartości zwiększą agresywność, niższe wartości zmniejszają ilość zamiany. Wartość 0 powoduje, że jądro nie inicjuje zamiany, dopóki ilość wolnych stron i stron opartych na plikach jest mniejsza niż wysoki limit wody w strefie.
swapFileSizeMB 1 MB — rozmiar dysku tymczasowego (/dev/sdb) Brak SwapFileSizeMB określa rozmiar w MB pliku wymiany zostanie utworzony w węzłach agenta z tej puli węzłów.
transparentHugePageEnabled always, , madvisenever always Przezroczyste ogromne strony to funkcja jądra systemu Linux przeznaczona do poprawy wydajności dzięki zwiększeniu wydajności sprzętu mapowania pamięci procesora. Po włączeniu jądra próbuje przydzielić hugepages zawsze, gdy jest to możliwe, a każdy proces systemu Linux otrzyma 2 MB stron, jeśli mmap region jest naturalnie wyrównany do 2 MB. W niektórych przypadkach, gdy hugepages włączono szeroką gamę systemu, aplikacje mogą przydzielać więcej zasobów pamięci. Aplikacja może mmap być dużym regionem, ale tylko dotknąć 1 bajt, w takim przypadku strona 2 MB może zostać przydzielona zamiast strony 4k bez powodu. W tym scenariuszu można wyłączyć hugepages cały system lub mieć je tylko w MADV_HUGEPAGE madvise regionach.
transparentHugePageDefrag always, , defer, defer+madvise, , madvisenever madvise Ta wartość określa, czy jądro powinno zwiększyć wykorzystanie kompaktowania pamięci w celu zwiększenia hugepages dostępności.

Następne kroki