Rozwiązywanie problemów z nasyceniem pamięci w klastrach usługi AKS
W tym artykule omówiono metody rozwiązywania problemów z nasyceniem pamięci. Nasycenie pamięci występuje, jeśli co najmniej jedna aplikacja lub proces potrzebuje więcej pamięci niż może dostarczyć host kontenera lub jeśli host wyczerpa jego dostępną pamięć.
Wymagania wstępne
- Narzędzie wiersza polecenia kubernetes kubectl kubernetes. Aby zainstalować narzędzie kubectl przy użyciu interfejsu wiersza polecenia platformy Azure, uruchom polecenie az aks install-cli.
Symptomy
W poniższej tabeli przedstawiono typowe objawy nasycenia pamięci.
Objaw | opis |
---|---|
Nieplanowalne zasobniki | Nie można zaplanować dodatkowych zasobników, jeśli węzeł jest blisko ustawionego limitu pamięci. |
Eksmisja zasobnika | Jeśli węzeł zabraknie pamięci, kubelet może eksmitować zasobniki. Mimo że płaszczyzna sterowania próbuje ponownie zaplanować eksmitowane zasobniki w innych węzłach, które mają zasoby, nie ma gwarancji, że inne węzły mają wystarczającą ilość pamięci do uruchamiania tych zasobników. |
Węzeł nie jest gotowy | Nasycenie pamięci może spowodować kubelet brak odpowiedzi i containerd ostatecznie spowodować problemy z gotowością węzła. |
Zabicie poza pamięcią (OOM) | Problem z rozwiązaniem OOM występuje, jeśli eksmisja zasobnika nie może zapobiec problemowi z węzłem. |
Lista kontrolna rozwiązywania problemów
Aby zmniejszyć nasycenie pamięci, użyj skutecznych narzędzi do monitorowania i zastosuj najlepsze rozwiązania.
Krok 1. Identyfikowanie węzłów z nasyceniem pamięci
Użyj jednej z następujących metod, aby zidentyfikować węzły, które mają nasycenie pamięci:
W przeglądarce internetowej użyj funkcji Container Insights usługi AKS w witrynie Azure Portal.
W konsoli programu użyj narzędzia wiersza polecenia kubernetes (kubectl).
Container Insights to funkcja w usłudze AKS, która monitoruje wydajność obciążenia kontenera. Aby uzyskać więcej informacji, zobacz Włączanie szczegółowych informacji o kontenerze dla klastra usługi Azure Kubernetes Service (AKS).
W witrynie Azure Portal wyszukaj i wybierz pozycję Usługi Kubernetes.
Na liście usług Kubernetes wybierz nazwę klastra.
W okienku nawigacji klastra znajdź nagłówek Monitorowanie , a następnie wybierz pozycję Szczegółowe informacje.
Ustaw odpowiednią wartość zakresu czasu.
Wybierz kartę Węzły .
Na liście Metryki wybierz pozycję Zestaw roboczy pamięci (obliczony z listy Allocatable).
W selektorze percentylu ustaw próbkę na Wartość Maksymalna, a następnie wybierz etykietę kolumny Max % dwa razy. Ta akcja sortuje węzły tabeli według maksymalnego procentu używanej pamięci, od najwyższego do najniższego.
Ponieważ pierwszy węzeł ma najwyższe użycie pamięci, wybierz ten węzeł, aby zbadać użycie pamięci zasobników uruchomionych w węźle.
Uwaga 16.
Procent użycia procesora CPU lub pamięci dla zasobników jest oparty na żądaniu procesora CPU określonym dla kontenera. Nie reprezentuje ona wartości procentowej użycia procesora CPU ani pamięci dla węzła. Dlatego przyjrzyj się rzeczywistego użycia procesora CPU lub pamięci, a nie procentowego użycia procesora CPU lub pamięci dla zasobników.
Teraz, gdy zidentyfikowano zasobniki korzystające z dużej ilości pamięci, możesz zidentyfikować aplikacje uruchomione na zasobniku.
Krok 2. Przejrzyj najlepsze rozwiązania, aby uniknąć nasycenia pamięci
Zapoznaj się z poniższą tabelą, aby dowiedzieć się, jak zaimplementować najlepsze rozwiązania dotyczące unikania nasycenia pamięci.
Najlepsze rozwiązanie | opis |
---|---|
Używanie żądań i limitów pamięci | Platforma Kubernetes udostępnia opcje określania minimalnego rozmiaru pamięci (żądania) i maksymalnego rozmiaru pamięci (limitu) dla kontenera. Konfigurując limity dla zasobników, można uniknąć wykorzystania pamięci na węźle. Upewnij się, że zagregowane limity dla wszystkich uruchomionych zasobników nie przekraczają dostępnej pamięci węzła. Ta sytuacja jest nazywana nadmiernym zatwierdzaniem. Harmonogram platformy Kubernetes przydziela zasoby na podstawie ustawionych żądań i limitów za pośrednictwem jakości usługi (QoS). Bez odpowiednich limitów harmonogram może zaplanować zbyt wiele zasobników w jednym węźle. Może to w ostateczności doprowadzić do wyłączenia węzła. Ponadto, gdy składnik kubelet wyklucza zasobniki, priorytetyzuje te zasobniki, w których użycie pamięci przekracza zdefiniowane żądania. Zalecamy, aby dla żądania pamięci ustawić wartość zbliżoną do rzeczywistego użycia. |
Włączanie narzędzia do automatycznego skalowania zasobnika poziomego | Skalując klaster, można zrównoważyć żądania w wielu zasobnikach, aby zapobiec nasyceniu pamięci. Ta technika może zmniejszyć zużycie pamięci w określonym węźle. |
Używanie tagów anty-koligacji | W scenariuszach, w których pamięć jest nieograniczona, można użyć selektorów węzłów i koligacji lub tagów zapobiegających koligacji, co pozwala na wyizolowanie obciążenia do określonych węzłów. Korzystając z tagów zapobiegających koligacji, można uniemożliwić innym obciążeniom planowanie zasobników w tych węzłach. Redukuje to problem z nasyceniem pamięci. |
Wybieranie maszyn wirtualnych wyższej jednostki SKU | Maszyny wirtualne z większą ilością pamięci RAM lepiej nadają się do obsługi dużego użycia pamięci. Aby użyć tej opcji, musisz utworzyć nową pulę węzłów, odizolować węzły (sprawić, aby były niedostępne do zaplanowania) i opróżnić istniejącą pulę węzłów. |
Izolowanie obciążeń systemowych i użytkowników | Zalecamy uruchamianie aplikacji w puli węzłów użytkownika. Ta konfiguracja umożliwia odizolowanie zasobników specyficznych dla platformy Kubernetes do puli węzłów systemowych i zachowanie wydajności klastra. |
Więcej informacji
Dowiedz się więcej o najlepszych rozwiązaniach usługi Azure Kubernetes Service (AKS)
Monitorowanie wydajności klastra Kubernetes za pomocą usługi Container Insights
Zastrzeżenie dotyczące innych firm
Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.
Wyłączenie odpowiedzialności za kontakty z osobami trzecimi
Firma Microsoft udostępnia informacje kontaktowe innych firm, aby uzyskać dodatkowe informacje na temat tego tematu. Informacje te mogą zostać zmienione bez powiadomienia. Firma Microsoft nie gwarantuje dokładności informacji kontaktowych innych firm.
Skontaktuj się z nami, aby uzyskać pomoc
Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.