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
Rozwiązywanie problemów z konfiguracjami węzłów niestandardowych
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 |
seccompDefault |
Unconfined , RuntimeDefault |
Unconfined |
Ustawia domyślny profil seccomp dla wszystkich obciążeń. RuntimeDefault używa domyślnego profilu seccomp kontenera, ograniczając niektóre wywołania systemowe w celu zwiększenia bezpieczeństwa. Ograniczone systemcalls zakończy się niepowodzeniem. Unconfined nie nakłada żadnych ograniczeń na systemcalls, a wszystkie wywołania systemowe są dozwolone, co zmniejsza bezpieczeństwo. Aby uzyskać więcej informacji, zobacz domyślny profil seccomp containerD. Ten parametr jest w wersji zapoznawczej. Zarejestruj flagę funkcji "KubeletDefaultSeccompProfilePreview" przy użyciu polecenia z parametrem az feature register --namespace "Microsoft.ContainerService". |
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-max ją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 , mprotect i 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 , , madvise never |
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 , , madvise never |
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
- Dowiedz się , jak skonfigurować klaster usługi AKS.
- Dowiedz się, jak uaktualnić obrazy węzłów w klastrze.
- Zobacz Uaktualnianie klastra usługi Azure Kubernetes Service (AKS), aby dowiedzieć się, jak uaktualnić klaster do najnowszej wersji rozwiązania Kubernetes.
- Zobacz listę często zadawanych pytań dotyczących usługi AKS , aby znaleźć odpowiedzi na niektóre typowe pytania dotyczące usługi AKS.
Azure Kubernetes Service