Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas zarządzania klastrami w usłudze Azure Kubernetes Service (AKS) często trzeba odizolować zespoły i obciążenia. Harmonogram platformy Kubernetes umożliwia kontrolowanie dystrybucji zasobów obliczeniowych i ograniczanie wpływu zdarzeń konserwacji.
Ten artykuł dotyczący najlepszych rozwiązań koncentruje się na podstawowych funkcjach planowania platformy Kubernetes dla operatorów klastra. W tym artykule dowiesz się, jak:
- Używanie przydziałów zasobów w celu nadania zespołom lub obciążeniom stałej ilości zasobów
- Ograniczanie wpływu zaplanowanej konserwacji przy użyciu budżetów zakłóceń zasobników
Wymuszanie przydziałów zasobów
Wskazówki dotyczące najlepszych rozwiązań
Planowanie i stosowanie ograniczeń zasobów na poziomie przestrzeni nazw. Użyj limitów przydziałów i zakresów limitów, aby wymagać lub podać domyślne żądania zasobów i limity dla zasobników. Monitoruj użycie zasobów i dostosuj limity przydziału zgodnie z potrzebami.
Ustaw żądania zasobów i limity zasobów w specyfikacji zasobnika. Żądanie zasobu to ilość procesora CPU lub pamięci używanej przez harmonogram kubernetes do umieszczania zasobnika. Limit zasobów ogranicza ilość tego zasobu, którego może używać kontener. System wymusza limity procesora CPU przez ograniczanie przepustowości, podczas gdy wymusza limity pamięci reaktywnie przez zakończenie poza pamięcią (OOM). Aby uzyskać więcej informacji, zobacz Definiowanie żądań i limitów zasobów zasobnika.
Użyj przydziałów zasobów , aby ograniczyć zagregowane użycie zasobów dla zespołu deweloperów lub projektu. Zdefiniuj przydziały na poziomie przestrzeni nazw dla:
- Zasoby obliczeniowe, takie jak procesor CPU i pamięć, lub procesory GPU.
- Zasoby magazynu, w tym łączna liczba woluminów lub ilość miejsca na dysku dla danej klasy magazynu.
- Liczba obiektów, takich jak maksymalna liczba wpisów tajnych, usług lub zadań, które można utworzyć.
Harmonogram kubernetes używa żądań zasobów do umieszczania zasobników. Kontenery mogą używać większej ilości procesora CPU lub pamięci niż żądana, gdy pojemność jest dostępna, a limity zasobów mogą przekraczać żądania. Limit przydziału zasobów oddzielnie ogranicza zagregowane użycie przestrzeni nazw. Jeśli tworzenie lub aktualizowanie zasobu przekroczy limit przydziału twardego, serwer interfejsu API odrzuca żądanie z odpowiedzią HTTP 403 Forbidden . Nadal można utworzyć obiekt obciążenia, taki jak wdrożenie, nawet jeśli limit przydziału uniemożliwia jego kontrolerowi tworzenie wszystkich żądanych zasobników.
Jeśli limit przydziału zasobów śledzi procesor CPU lub pamięć, każdy nowy zasobnik musi określić żądanie lub limit dla tego zasobu. W przeciwnym razie serwer interfejsu API może odrzucić zasobnik. Domyślne żądania i limity dla przestrzeni nazw można skonfigurować przy użyciu elementu LimitRange.
Poniższy przykładowy manifest YAML o nazwie dev-app-team-quotas.yaml ustawia twardy limit całkowitej liczby 10 procesorów CPU, 20Gi pamięci i 10 zasobników:
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-app-team
spec:
hard:
cpu: "10"
memory: 20Gi
pods: "10"
Ten limit przydziału agreguje żądania procesora CPU na 10 procesorach CPU, agreguje żądania pamięci na 20Gi i liczbę zasobników nieterminalnych na 10 w przestrzeni nazw.
Zastosuj ten limit przydziału zasobów do przestrzeni nazw, takiej jak aplikacje deweloperskie:
kubectl apply -f dev-app-team-quotas.yaml --namespace dev-apps
Skontaktuj się z deweloperami i właścicielami aplikacji, aby zrozumieć ich potrzeby i zastosować odpowiednie limity przydziału zasobów.
Aby uzyskać więcej informacji na temat dostępnych obiektów zasobów, zakresów i priorytetów, zobacz Limity przydziału zasobów na platformie Kubernetes.
Ograniczanie wpływu zakłóceń przy użyciu budżetów zakłóceń zasobników (PDB)
Wskazówki dotyczące najlepszych rozwiązań
Zdefiniuj budżety zakłóceń zasobników (PDB) dla replikowanych aplikacji w celu ograniczenia współbieżnych dobrowolnych eksmisji podczas zdarzeń, takich jak opróżniania węzłów usługi AKS. Zachowaj wystarczającą liczbę replik w dobrej kondycji i zezwól na co najmniej jedno zakłócenie, gdy obciążenie pozwala na kontynuowanie konserwacji klastra.
Zdarzenia powodujące zakłócenia, które usuwają zasobniki, należą do dwóch kategorii:
Mimowolne zakłócenia
Mimowolne zakłócenia to zdarzenia wykraczające poza typową kontrolę operatora klastra lub właściciela aplikacji. Oto kilka przykładów:
- Awaria sprzętowa na maszynie fizycznej
- Panika jądra
- Usuwanie wirtualnej maszyny działającej jako węzeł
Możesz ograniczyć nieumyślne zakłócenia, wykonując następujące czynności:
- Używanie wielu replik podów w ramach wdrożenia.
- Uruchamianie wielu węzłów w klastrze AKS.
Dobrowolne zakłócenia
_ Dobrowolne disruptions_ to zdarzenia, które żąda operator klastra lub właściciel aplikacji. Oto kilka przykładów:
- Opróżnianie węzła podczas uaktualniania klastra
- Aktualizowanie szablonu wdrożenia
- Bezpośrednie usuwanie zasobnika
Nie wszystkie dobrowolne zakłócenia są ograniczone przez pliki PDB. Bezpośrednie usunięcie zasobnika lub obiektu obciążenia pomija pliki PDB, a kontrolery obciążeń, takie jak Wdrożenia i StatefulSets, nie są ograniczone przez pliki PDB podczas instalowania aktualizacji. Skonfiguruj strategię wdrażania obciążenia oddzielnie, aby zachować dostępność podczas aktualizacji aplikacji. Aby uzyskać więcej informacji, zobacz Zakłócenia w rozwiązaniu Kubernetes.
Pliki PDB ograniczają współbieżne dobrowolne eksmisje dla wybranych zasobników za pośrednictwem interfejsu API eksmisji Kubernetes. Podczas uaktualniania stopniowego usługi AKS usługa AKS dodaje pojemność skoków zgodnie z ustawieniami puli węzłów, kordonami i opróżnia węzeł, a następnie odtwarza obraz lub zastępuje opróżniony węzeł. Interfejs API eksmisji ocenia pdB podczas opróżniania. Po eksmisji kontroler obciążenia tworzy zasobnik zastępczy, a harmonogram umieszcza go w węźle z dostępną pojemnością. Restrykcyjny plik PDB, niewystarczająca liczba replik w dobrej kondycji lub niewystarczająca pojemność klastra może opóźnić lub zablokować opróżnianie.
Ustawianie minimalnej liczby dostępnych zasobników
Rozważ zestaw replik z pięcioma zasobnikami NGINX oznaczonymi etykietą app: nginx-frontend. Podczas dobrowolnego zdarzenia zakłóceń, takiego jak uaktualnienie klastra, co najmniej trzy zasobniki muszą pozostać dostępne. Następujący PodDisruptionBudget manifest definiuje to wymaganie:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
minAvailable: 3
unhealthyPodEvictionPolicy: AlwaysAllow
selector:
matchLabels:
app: nginx-frontend
Ten budżet wymaga co najmniej trzech zasobników z etykietą, aby zachować dobrą kondycję app: nginx-frontend podczas dobrowolnego eksmisji.
Można określić wartość procentową, taką jak 60%, aby budżet był dostosowywany podczas skalowania zestawu replik.
Ustawianie maksymalnej liczby niedostępnych zasobników
Plik PDB może definiować wartość minAvailable lub maxUnavailable, ale nie oba. Aby ograniczyć dobrowolne eksmisje na podstawie niedostępnych zasobników, określ maxUnavailable jako liczbę całkowitą lub procent. Następujący manifest zezwala na dobrowolne eksmisji tylko wtedy, gdy nie więcej niż dwa zasobniki w zestawie ReplicaSet będą niedostępne po eksmisji:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
maxUnavailable: 2
unhealthyPodEvictionPolicy: AlwaysAllow
selector:
matchLabels:
app: nginx-frontend
Ten budżet zezwala na dobrowolne eksmisje tylko wtedy, gdy nie więcej niż dwa zasobniki z etykietą app: nginx-frontend będą niedostępne po eksmisji. Mimowolne zakłócenia mogą nadal powodować spadek dostępności poniżej tego progu.
Zasady AlwaysAllow eksmisji zasobnika w złej kondycji pozwalają opróżnić uruchomione zasobniki, które nie są w dobrej kondycji. Bez tego ustawienia domyślne IfHealthyBudget zasady mogą blokować opróżnianie, czekając, aż zasobniki w złej kondycji staną się w dobrej kondycji. Użyj AlwaysAllow , gdy opróżnianie jest ważniejsze niż zapewnienie zasobnika w złej kondycji więcej czasu na odzyskanie.
Zapisz manifest pdB, którego chcesz użyć jako nginx-pdb.yaml, a następnie zastosuj go do klastra usługi AKS:
kubectl apply -f nginx-pdb.yaml
Przed konserwacją klastra sprawdź, czy każdy plik PDB zezwala na oczekiwaną eksmisję:
kubectl get poddisruptionbudgets --namespace <namespace>
Wartość ALLOWED DISRUPTIONS może blokować opróżnianie węzła 0 usługi AKS. Skontaktuj się z deweloperami aplikacji i właścicielami, aby zachować wystarczającą ilość replik w dobrej kondycji i wybrać budżet równoważący dostępność aplikacji z wymaganiami konserwacyjnymi.
Aby uzyskać więcej informacji na temat korzystania z budżetów zakłóceń podów, zajrzyj do Określania budżetu zakłóceń dla aplikacji.
Treści powiązane
Ten artykuł koncentruje się na podstawowych funkcjach harmonogramu Kubernetes. Aby uzyskać więcej informacji na temat operacji klastra w usłudze AKS, zobacz następujące artykuły dotyczące najlepszych rozwiązań: