Wydajność i skalowanie w usłudze Istio service mesh
Dodatek siatki usług oparty na istio jest logicznie podzielony na płaszczyznę sterowania (istiod
) i płaszczyznę danych. Płaszczyzna danych składa się z serwerów proxy przyczepki usługi Envoy wewnątrz zasobników obciążeń. Program Istiod zarządza tymi serwerami proxy usługi Envoy i konfiguruje je. W tym artykule przedstawiono wydajność zarówno kontroli, jak i płaszczyzny danych dla wersji asm-1-19, w tym zużycie zasobów, pojemność przyczepki i obciążenie opóźnienia. Ponadto zawiera sugestie dotyczące potencjalnego obciążenia zasobów w okresach dużego obciążenia. W tym artykule opisano również sposób dostosowywania skalowania dla płaszczyzny sterowania i bram.
Wydajność płaszczyzny sterowania
Wymagania dotyczące procesora CPU i pamięci istiod są skorelowane ze zmianami wdrażania i konfiguracji oraz liczbą połączonych serwerów proxy. Przetestowane scenariusze to:
- Współczynnik zmian zasobników: analizuje wpływ zmian zasobników na
istiod
. Aby zmniejszyć zmienne, tylko jedna usługa jest używana dla wszystkich przyczepek. - Wiele usług: sprawdza wpływ wielu usług na maksymalną liczbę przyczepek Istiod może zarządzać (pojemność przyczepki), gdzie każda usługa ma
N
przyczepki, łącznie z ogólną maksymalną wartością.
Specyfikacje testów
- Jedno
istiod
wystąpienie z ustawieniami domyślnymi - Automatyczne skalowanie zasobników w poziomie jest wyłączone
- Przetestowano przy użyciu dwóch wtyczek sieciowych: nakładka interfejsu azure Container Networking Interface (CNI) i nakładka usługi Azure CNI z funkcją Cilium (zalecane wtyczki sieciowe dla klastrów na dużą skalę)
- Jednostka SKU węzła: Standardowa D16 v3 (16 procesorów wirtualnych, 64 GB pamięci)
- Wersja platformy Kubernetes: 1.28.5
- Poprawka istio: asm-1-19
Współczynnik zmian zasobnika
Struktura ClusterLoader2 została użyta do określenia maksymalnej liczby przyczepek Istiod może zarządzać w przypadku rezygnacji z przyczepki. Procent zmian jest definiowany jako procent chucars churned w dół/w górę podczas testu. Na przykład 50% churn dla 10.000 przyczepek oznaczałoby, że 5000 przyczepek zostało churned w dół, a następnie 5000 przyczepek zostało churned. Przetestowane procenty zmian zostały określone na podstawie typowego procentu zmian podczas wdrażania (maxUnavailable
). Współczynnik zmian został obliczony przez określenie całkowitej liczby chudych przyczepek (w górę i w dół) w czasie rzeczywistym potrzebnym do ukończenia procesu rezygnacji.
Pojemność przyczepki i procesor i pamięć istiod
Nakładka usługi Azure CNI
Współczynnik zmian (%) | Współczynnik zmian (przyczepki na sekundę) | Pojemność przyczepki | Pamięć istiod (GB) | Procesor Istiod |
---|---|---|---|---|
0 | -- | 25000 | 32,1 | 15 |
25 | 31,2 | 15000 | 22.2 | 15 |
50 | 31,2 | 15000 | 25,4 | 15 |
Nakładka CNI platformy Azure z funkcją Cilium
Współczynnik zmian (%) | Współczynnik zmian (przyczepki na sekundę) | Pojemność przyczepki | Pamięć istiod (GB) | Procesor Istiod |
---|---|---|---|---|
0 | -- | 30000 | 41.2 | 15 |
25 | 41.7 | 25000 | 36.1 | 16 |
50 | 37.9 | 25000 | 42.7 | 16 |
Wiele usług
Struktura ClusterLoader2 została użyta do określenia maksymalnej liczby przyczepek istiod
, którymi można zarządzać za pomocą 1000 usług. Wyniki można porównać z testem zmian w 0% (jedna usługa) w scenariuszu zmian zasobników. Każda usługa miała N
przyczepki przyczyniające się do ogólnej maksymalnej liczby przyczepek. Zaobserwowano użycie zasobów serwera interfejsu API w celu określenia, czy wystąpił znaczny stres z dodatku.
Pojemność przyczepki
Nakładka Azure CNI | Nakładka usługi Azure CNI z cilium |
---|---|
20000 | 20000 |
Procesor i pamięć
Zasób | Nakładka Azure CNI | Nakładka usługi Azure CNI z cilium |
---|---|---|
Pamięć serwera interfejsu API (GB) | 38.9 | 9,7 |
Procesor API Server | 6.1 | 4.7 |
Pamięć istiod (GB) | 40.4 | 42.6 |
Procesor Istiod | 15 | 16 |
Wydajność płaszczyzny danych
Różne czynniki wpływają na wydajność przyczepki, takie jak rozmiar żądania, liczba wątków procesu roboczego serwera proxy i liczba połączeń klienta. Ponadto każde żądanie przepływające przez siatkę przechodzi przez serwer proxy po stronie klienta, a następnie serwer proxy po stronie serwera. W związku z tym opóźnienia i zużycie zasobów są mierzone w celu określenia wydajności płaszczyzny danych.
Fortio
element został użyty do utworzenia obciążenia. Test został przeprowadzony za pomocą repozytorium testów porównawczych Istio, które zostało zmodyfikowane do użycia z dodatkiem.
Specyfikacje testów
- Przetestowano przy użyciu dwóch wtyczek sieciowych: nakładki CNI platformy Azure i nakładki usługi Azure CNI z funkcją Cilium (zalecane wtyczki sieciowe dla klastrów na dużą skalę)
- Jednostka SKU węzła: Standardowa D16 v5 (16 procesorów wirtualnych, 64 GB pamięci)
- Wersja platformy Kubernetes: 1.28.5
- Dwa procesy robocze serwera proxy
- Ładunek 1 KB
- 1000 zapytań na sekundę (QPS) w różnych połączeniach klientów
http/1.1
protokół i włączono protokół TLS (Mutual Transport Layer Security)- Zebrane 26 punktów danych
Procesor i pamięć
Użycie pamięci i procesora CPU dla klienta i serwera proxy dla 16 połączeń klienckich i 1000 QPS we wszystkich scenariuszach wtyczek sieciowych wynosi około 0,4 procesorów wirtualnych i 72 MB.
Opóźnienie
Serwer proxy usługi Envoy przyczepki zbiera nieprzetworzone dane telemetryczne po odpowiedzi na klienta, co nie ma bezpośredniego wpływu na całkowity czas przetwarzania żądania. Jednak ten proces opóźnia rozpoczęcie obsługi następnego żądania, przyczyniając się do czasu oczekiwania w kolejce i wpływając na średnie i końcowe opóźnienia. W zależności od wzorca ruchu rzeczywiste opóźnienie ogona różni się.
Poniższe wyniki oceniają wpływ dodawania serwerów proxy przyczepki do ścieżki danych, pokazując opóźnienie P90 i P99.
- Ścieżka ruchu przyczepki: klient -> client-sidecar --> server-sidecar --> server
- Ścieżka ruchu według planu bazowego: klient —> serwer
Porównanie wydajności opóźnienia płaszczyzny danych w dodatku Istio i wersjach usługi AKS można znaleźć tutaj.
Nakładka Azure CNI | Nakładka usługi Azure CNI z cilium |
---|---|
Skalowanie
Dostosowywanie skalowania automatycznego zasobnika poziomego
Skalowanie automatyczne zasobników w poziomie (HPA) jest włączone dla zasobników bramy ruchu przychodzącego istiod
i . Domyślne konfiguracje dla istiod
bram i są następujące:
- Minimalna liczba replik: 2
- Maksymalna liczba replik: 5
- Wykorzystanie procesora CPU: 80%
Uwaga
Aby zapobiec konfliktom z dodatkiem PodDisruptionBudget
, dodatek nie zezwala na ustawienie minReplicas
poniżej początkowej wartości domyślnej .2
Poniżej przedstawiono zasoby HPA bramy i ruchu przychodzącego istiod
:
NAMESPACE NAME REFERENCE
aks-istio-ingress aks-istio-ingressgateway-external-asm-1-19 Deployment/aks-istio-ingressgateway-external-asm-1-19
aks-istio-ingress aks-istio-ingressgateway-internal-asm-1-19 Deployment/aks-istio-ingressgateway-internal-asm-1-19
aks-istio-system istiod-asm-1-19 Deployment/istiod-asm-1-19
Konfigurację HPA można modyfikować za pomocą poprawek i bezpośrednich edycji. Przykład:
kubectl patch hpa aks-istio-ingressgateway-external-asm-1-19 -n aks-istio-ingress --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'
Uwaga
Wpis usługi
Niestandardowa definicja zasobu ServiceEntry istio umożliwia dodawanie innych usług do wewnętrznego rejestru usług Istio. Usługa ServiceEntry umożliwia usługom już w siatce kierowanie lub uzyskiwanie dostępu do określonych usług. Jednak konfiguracja wielu obiektów ServiceEntries z polem ustawionym resolution
na dns może spowodować duże obciążenie serwerów systemu nazw domen (DNS). Następujące sugestie mogą pomóc zmniejszyć obciążenie:
- Przełącz się na ,
resolution: NONE
aby uniknąć wyszukiwania DNS serwera proxy całkowicie. Nadaje się do większości przypadków użycia. - Zwiększ czas wygaśnięcia (czas wygaśnięcia), jeśli kontrolujesz rozpoznawane domeny.
- Ogranicz zakres ServiceEntry za pomocą polecenia
exportTo
.
Azure Kubernetes Service