Compartir por


Rendimiento y escalado del complemento de malla de servicio de Istio

El complemento de malla de servicio basado en Istio se divide lógicamente en un plano de control (istiod) y un plano de datos. El plano de datos se compone de servidores proxy sidecar de Envoy dentro de pods de carga de trabajo. Istiod administra y configura estos servidores proxy de Envoy. En este artículo se presenta el rendimiento del plano de datos y de control para la revisión asm-1-19; se incluye el consumo de recursos, la capacidad de sidecar y la sobrecarga de latencia. Además, se proporcionan sugerencias para abordar posibles tensiones en los recursos durante períodos de carga pesada. En este artículo también se explica cómo personalizar el escalado para el plano de control y las puertas de enlace.

Rendimiento del plano de control

Los requisitos de CPU y memoria de Istiod se correlacionan con la tasa de cambios de implementación y configuración y el número de servidores proxy conectados. Los escenarios probados fueron:

  • Cambios en pods: se examina el impacto de los cambios en los pods en istiod. Para reducir las variables, solo se usa un servicio para todos los sidecars.
  • Varios servicios: se examina el impacto de varios servicios en el número máximo de sidecars que Istiod puede administrar (capacidad sidecar), donde cada servicio tiene N sidecars, totalizando el máximo total.

Especificaciones de prueba

  • Una instancia de istiod con la configuración predeterminada
  • Escalado automático horizontal de pods deshabilitado
  • Probado con dos complementos de red: Superposición de Azure Container Networking Interface (CNI) y Superposición de Azure CNI con Cilium (complementos de red recomendados para clústeres a gran escala)
  • SKU de nodo: Standard D16 v3 (16 vCPU, 64 GB de memoria)
  • Versión de Kubernetes: 1.28.5
  • Revisión de Istio: asm-1-19

Cambios en pods

Se usó el marco de trabajo ClusterLoader2 para determinar el número máximo de sidecars que Istiod puede administrar cuando se producen cambios en los sidecars. El porcentaje de cambios se define como el porcentaje de los sidecars que han aumentado o disminuido durante la prueba. Por ejemplo, cambios del 50 % con respecto a 10 000 sidecars significaría que ha habido una disminución de 5000 sidecars y un aumento de 5000 sidecars. Los porcentajes de cambios probados se determinaron a partir del porcentaje típico de cambios durante los lanzamientos de implementaciones (maxUnavailable). La tasa de cambios se calculó mediante la determinación del número total de sidecars con cambios (que han aumentado o disminuido) durante el tiempo real necesario para completar el proceso de cambios.

Capacidad de sidecars y CPU y memoria de Istiod

Superposición de Azure CNI

Cambios (%) Tasa de cambios (sidecars/s) Capacidad de sidecar Memoria de Istiod (GB) CPU de Istiod
0 -- 25000 32,1 15
25 31,2 15000 22.2 15
50 31,2 15000 25.4 15

Superposición de Azure CNI con Cilium

Cambios (%) Tasa de cambios (sidecars/s) Capacidad de sidecar Memoria de Istiod (GB) CPU de Istiod
0 -- 30000 41.2 15
25 41.7 25000 36,1 16
50 37.9 25000 42,7 16

Varios servicios

Se usó el marco de trabajo ClusterLoader2 para determinar el número máximo de sidecars que istiod puede administrar con 1000 servicios. Los resultados se pueden comparar con la prueba de cambios del 0 % (un servicio) en el escenario de cambios en los pods. Cada servicio tenía N sidecars que contribuyen al recuento total máximo de sidecars. Se observó el uso de recursos del servidor de API para determinar si había alguna carga significativa del complemento.

Capacidad de sidecar

Superposición de Azure CNI Superposición de Azure CNI con Cilium
20000 20000

CPU y memoria

Resource Superposición de Azure CNI Superposición de Azure CNI con Cilium
Memoria del servidor de API (GB) 38,9 9.7
CPU del servidor de API 6.1 4.7
Memoria de Istiod (GB) 40,4 42.6
CPU de Istiod 15 16

Rendimiento del plano de datos

Varios factores afectan al rendimiento de sidecars, como el tamaño de la solicitud, el número de subprocesos de trabajo de proxy y el número de conexiones de cliente. Además, cualquier solicitud que fluya a través de la malla atraviesa el proxy del lado cliente y, a continuación, el proxy del lado servidor. Por lo tanto, se miden la latencia y el consumo de recursos para determinar el rendimiento del plano de datos.

Se usó Fortio para crear la carga. La prueba se realizó con el repositorio de pruebas comparativas de Istio que se modificó para que se pudiera usar con el complemento.

Especificaciones de prueba

  • Probado con dos complementos de red: Superposición de Azure CNI y Superposición de Azure CNI con Cilium (complementos de red recomendados para clústeres a gran escala)
  • SKU de nodo: Standard D16 v5 (16 vCPU, 64 GB de memoria)
  • Versión de Kubernetes: 1.28.5
  • Dos trabajos de proxy
  • Carga de 1 KB
  • 1000 consultas por segundo (QPS) en conexiones de cliente variables
  • Protocolo http/1.1 y Seguridad de la capa de transporte (TLS) mutua habilitados
  • 26 puntos de datos recopilados

CPU y memoria

El uso de memoria y CPU para el proxy de cliente y servidor con 16 conexiones de cliente y 1000 QPS en todos los escenarios del complemento de red es aproximadamente de 0,4 vCPU y 72 MB.

Latencia

El proxy sidecar Envoy recopila datos de telemetría sin procesar después de responder a un cliente, lo que no afecta directamente al tiempo total de procesamiento de la solicitud. Sin embargo, este proceso retrasa el inicio de la gestión de la siguiente solicitud, lo que contribuye a tiempos de espera en cola e influye en latencias media y de cola. Según el patrón de tráfico, la latencia de cola real varía.

Los siguientes resultados evalúan el impacto de agregar servidores proxy sidecar a la ruta de acceso de datos, que muestra la latencia P90 y P99.

Superposición de Azure CNI Superposición de Azure CNI con Cilium
Diagrama que compara la latencia P99 en la Superposición de Azure CNI. Diagrama que compara la latencia P99 en la Superposición de Azure CNI con Cilium.
Diagrama que compara la latencia P90 en la Superposición de Azure CNI. Diagrama que compara la latencia P90 en la Superposición de Azure CNI con Cilium.

Ampliación

Personalización del escalado automático horizontal de pods

El Escalado automático horizontal de pods (HPA) está habilitado para los pods de puerta de enlace de entrada y istiod. Las configuraciones predeterminadas para istiod y las puertas de enlace son:

  • Réplicas mínimas: 2
  • Número máximo de réplicas: 5
  • Uso de CPU: 80 %

Nota:

Para evitar conflictos con el PodDisruptionBudget, el complemento no permite establecer el minReplicas por debajo del valor predeterminado inicial de 2.

A continuación se muestran los recursos de istiod y puerta de enlace de entrada de HPA:

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

La configuración de HPA se puede modificar mediante revisiones y modificaciones directas. Ejemplo:

kubectl patch hpa aks-istio-ingressgateway-external-asm-1-19 -n aks-istio-ingress --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'

Nota:

Consulte la documentación de actualización del complemento Istio para obtener detalles sobre cómo se aplican las configuraciones de HPA en ambas revisiones durante una actualización canaria.

Entrada de servicio

La definición de recursos personalizados de ServiceEntry de Istio permite agregar otros servicios al registro de servicios internos de Istio. Una entrada ServiceEntry permite a los servicios ya en la malla enrutar o acceder a los servicios especificados. Sin embargo, la configuración de varias ServiceEntries con el campo resolution establecido en DNS puede provocar una carga pesada en los servidores de Sistema de nombres de dominio (DNS). Las sugerencias siguientes pueden ayudarle a reducir la carga:

  • Cambie a resolution: NONE para evitar por completo búsquedas de DNS de proxy. Adecuado para la mayoría de los casos de uso.
  • Aumente el TTL (período de vida) si controla los dominios que se resuelven.
  • Limite el ámbito de ServiceEntry con exportTo.