Partilhar via


Desempenho e dimensionamento do complemento de malha de serviço Istio

O complemento de malha de serviço baseado em Istio é logicamente dividido em um plano de controle (istiod) e um plano de dados. O plano de dados é composto por proxies de sidecar Envoy dentro de pods de carga de trabalho. O Istiod gerencia e configura esses proxies do Envoy. Este artigo apresenta o desempenho do plano de controle e de dados para revisão asm-1-19, incluindo consumo de recursos, capacidade do sidecar e sobrecarga de latência. Além disso, fornece sugestões para lidar com a potencial pressão sobre os recursos durante períodos de carga pesada. Este artigo também aborda como personalizar o dimensionamento para o plano de controle e gateways.

Desempenho do plano de controlo

Os requisitos de CPU e memória do Istiod estão correlacionados com a taxa de implantação e alterações de configuração e o número de proxies conectados. Os cenários testados foram:

  • Pod churn: examina o impacto do pod churning no istiod. Para reduzir as variáveis, apenas um serviço é usado para todos os sidecars.
  • Serviços múltiplos: examina o impacto de vários serviços no máximo de sidecars que o Istiod pode gerenciar (capacidade de sidecar), onde cada serviço tem N sidecars, totalizando o máximo geral.

Especificações de ensaio

  • Uma istiod instância com configurações padrão
  • Dimensionamento automático de pod horizontal desativado
  • Testado com dois plug-ins de rede: Azure Container Networking Interface (CNI) Overlay e Azure CNI Overlay with Cilium (plug-ins de rede recomendados para clusters de grande escala)
  • SKU do nó: D16 v3 padrão (16 vCPU, 64 GB de memória)
  • Versão do Kubernetes: 1.28.5
  • Istio revisão: asm-1-19

Pod churn

A estrutura ClusterLoader2 foi usada para determinar o número máximo de sidecars que o Istiod pode gerenciar quando há agitação de sidecar. A percentagem de churn é definida como a percentagem de sidecars rodados para baixo/para cima durante o teste. Por exemplo, 50% de churn para 10.000 sidecars significaria que 5.000 sidecars foram agitados, então 5.000 sidecars foram agitados. As porcentagens de churn testadas foram determinadas a partir da porcentagem típica de churn durante as distribuições de implantação (maxUnavailable). A taxa de churn foi calculada determinando o número total de sidecars agitados (para cima e para baixo) ao longo do tempo real necessário para completar o processo de agitação.

Capacidade do sidecar e CPU e memória Istiod

Sobreposição CNI do Azure

Churn (%) Taxa de Churn (sidecars/seg) Capacidade do sidecar Memória Istiod (GB) Istiod CPU
0 -- 25 000 32.1 15
25 31,2 15000 22.2 15
50 31,2 15000 25.4 15

Sobreposição CNI do Azure com Cilium

Churn (%) Taxa de Churn (sidecars/seg) Capacidade do sidecar Memória Istiod (GB) Istiod CPU
0 -- 30000 41.2 15
25 41.7 25 000 36.1 16
50 37.9 25 000 42.7 16

Vários serviços

A estrutura ClusterLoader2 foi usada para determinar o número máximo de sidecars istiod que podem ser gerenciados com 1.000 serviços. Os resultados podem ser comparados com o teste de churn de 0% (um serviço) no cenário de churn pod. Cada serviço tinha N sidecars contribuindo para a contagem máxima geral de sidecars. O uso de recursos do API Server foi observado para determinar se havia algum estresse significativo do complemento.

Capacidade do sidecar

Sobreposição do Azure CNI Azure CNI Overlay com Cilium
20 000 20 000

CPU e memória

Recurso Sobreposição do Azure CNI Azure CNI Overlay com Cilium
Memória do servidor API (GB) 38.9 9,7
CPU do Servidor de API 6.1 4.7
Memória Istiod (GB) 40.4 42.6
Istiod CPU 15 16

Desempenho do plano de dados

Vários fatores afetam o desempenho do sidecar, como o tamanho da solicitação, o número de threads de trabalho proxy e o número de conexões de cliente. Além disso, qualquer solicitação que flui através da malha atravessa o proxy do lado do cliente e, em seguida, o proxy do lado do servidor. Portanto, a latência e o consumo de recursos são medidos para determinar o desempenho do plano de dados.

Fortio foi usado para criar a carga. O teste foi realizado com o repositório de benchmark Istio que foi modificado para uso com o add-on.

Especificações de ensaio

  • Testado com dois plug-ins de rede: Azure CNI Overlay e Azure CNI Overlay with Cilium (plug-ins de rede recomendados para clusters de grande escala)
  • SKU do nó: D16 v5 padrão (16 vCPU, 64 GB de memória)
  • Versão do Kubernetes: 1.28.5
  • Dois trabalhadores por procuração
  • Carga útil de 1 KB
  • 1.000 consultas por segundo (QPS) em conexões de cliente variáveis
  • http/1.1 protocolo e TLS (Transport Layer Security) mútuo ativado
  • 26 pontos de dados recolhidos

CPU e memória

O uso de memória e CPU para o proxy de cliente e servidor para 16 conexões de cliente e 1.000 QPS em todos os cenários de plug-in de rede é de aproximadamente 0,4 vCPU e 72 MB.

Latência

O proxy sidecar Envoy coleta dados brutos de telemetria depois de responder a um cliente, o que não afeta diretamente o tempo total de processamento da solicitação. No entanto, esse processo atrasa o início do tratamento da próxima solicitação, contribuindo para os tempos de espera na fila e influenciando as latências médias e finais. Dependendo do padrão de tráfego, a latência real da cauda varia.

Os resultados a seguir avaliam o impacto da adição de proxies de sidecar ao caminho de dados, mostrando a latência P90 e P99.

  • Caminho de tráfego do sidecar: client --> client-sidecar --> server-sidecar --> server
  • Caminho de tráfego de linha de base: cliente --> servidor

Uma comparação do desempenho de latência do plano de dados entre as versões do complemento Istio e do AKS pode ser encontrada aqui.

Sobreposição do Azure CNI Azure CNI Overlay com Cilium
Diagrama que compara a latência P99 para a Sobreposição CNI do Azure. Diagrama que compara a latência P99 para a Sobreposição CNI do Azure com o Cilium.
Diagrama que compara a latência P90 para a Sobreposição CNI do Azure. Diagrama que compara a latência P90 para a sobreposição CNI do Azure com o Cilium.

Dimensionamento

Personalização do dimensionamento automático do pod horizontal

O dimensionamento automático de pods horizontais (HPA) está habilitado para os pods de istiod gateway de entrada e de entrada. As configurações padrão para istiod e os gateways são:

  • Réplicas mínimas: 2
  • Máximo de réplicas: 5
  • Utilização da CPU: 80%

Nota

Para evitar conflitos com o PodDisruptionBudget, o complemento não permite definir abaixo minReplicas o padrão inicial de 2.

A seguir estão os istiod recursos HPA do gateway de entrada e entrada:

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

A configuração HPA pode ser modificada através de patches e edições diretas. Exemplo:

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

Nota

Consulte a documentação de atualização do complemento Istio para obter detalhes sobre como as configurações de HPA são aplicadas em ambas as revisões durante uma atualização canary.

Entrada de serviço

A definição de recurso personalizado ServiceEntry do Istio permite adicionar outros serviços ao registro de serviço interno do Istio. Um ServiceEntry permite que serviços já na malha roteiem ou acessem os serviços especificados. No entanto, a configuração de várias ServiceEntries com o resolution campo definido como DNS pode causar uma carga pesada nos servidores DNS (Sistema de Nomes de Domínio). As sugestões a seguir podem ajudar a reduzir a carga:

  • Mude para resolution: NONE para evitar totalmente as pesquisas de DNS de proxy. Adequado para a maioria dos casos de uso.
  • Aumente o TTL (Time To Live) se você controlar os domínios que estão sendo resolvidos.
  • Limite o escopo ServiceEntry com exportTo.