Udostępnij za pośrednictwem


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
Diagram przedstawiający porównanie opóźnienia P99 dla nakładki usługi Azure CNI. Diagram, który porównuje opóźnienie P99 dla nakładki usługi Azure CNI z cilium.
Diagram przedstawiający porównanie opóźnienia P90 dla nakładki CNI platformy Azure. Diagram przedstawiający opóźnienie P90 dla nakładki CNI platformy Azure 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}}'

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.