Pode dimensionar a maioria dos serviços executados no Kubernetes a partir da linha de comandos ou numa substituição de configuração. Pode definir parâmetros de escalabilidade para os serviços de runtime híbrido do Apigee no ficheiro overrides.yaml.
| Serviço | Implementado como | Dimensionar |
|---|---|---|
| Cassandra | ApigeeDatastore (CRD) | Consulte o artigo Dimensionar o Cassandra. |
| Ingress/LoadBalancer | Implementação | O Cloud Service Mesh usa a escala automática horizontal de pods (HPAs). |
| Logger | DaemonSet | Os DaemonSets gerem réplicas de um pod em todos os nós, pelo que são dimensionados quando dimensiona os próprios pods. |
| MART Apigee Connect Watcher |
ApigeeOrganization (CRD) | Para dimensionar através da configuração, aumente o valor da propriedade de configuração mart: replicaCountMax: 2 replicaCountMin: 1 watcher: replicaCountMax: 2 replicaCountMin: 1 connectAgent: replicaCountMax: 2 replicaCountMin: 1 Estas implementações usam um redimensionador automático horizontal de pods para a escala automática. Defina a propriedade Para mais informações sobre a definição de propriedades de configuração, consulte o artigo Faça a gestão dos componentes do plano de tempo de execução. |
| Runtime Synchronizer UDCA |
ApigeeEnvironment (CRD) | Para dimensionar através da configuração, aumente o valor da propriedade replicaCountMin para as cláusulas udca, synchronizer e/ou runtime no ficheiro de substituições. Por exemplo:
synchronizer: replicaCountMax: 10 replicaCountMin: 1 runtime: replicaCountMax: 10 replicaCountMin: 1 udca: replicaCountMax: 10 replicaCountMin: 1 Nota: estas alterações aplicam-se a TODOS os ambientes no ficheiro de substituições. Se quiser personalizar o ajuste de escala para cada ambiente, consulte as Configurações avançadas abaixo. Estas implementações usam um redimensionador automático horizontal de pods para a
escala automática. Defina a propriedade Para mais informações sobre a definição de propriedades de configuração, consulte o artigo Faça a gestão dos componentes do plano de tempo de execução. |
Configurações avançadas
Em alguns cenários, pode ter de usar opções de dimensionamento avançadas. Exemplos de cenários:
- Definir diferentes opções de dimensionamento para cada ambiente. Por exemplo, onde env1 tem um
minReplicade 5 e env2 tem umminReplicade 2. - Definir diferentes opções de escalabilidade para cada componente num ambiente. Por exemplo,
em que o componente
udcatem ummaxReplicade 5 e o componentesynchronizertem ummaxReplicade 2.
O exemplo seguinte mostra como usar o comando kubernetes patch para alterar a propriedade maxReplicas do componente runtime:
- Crie variáveis de ambiente para usar com o comando:
export ENV_NAME=my-environment-name
export ENV_RELEASE_NAME=$ENV_NAME # the Helm release name for the environmentexport APIGEE_NAMESPACE=apigee #the namespace where Apigee is deployedexport COMPONENT=runtime #can be udca or synchronizerexport MAX_REPLICAS=2export MIN_REPLICAS=1 - Aplique o patch. Tenha em atenção que este exemplo pressupõe que
kubectlestá emPATH:kubectl patch apigeeenvironment -n $APIGEE_NAMESPACE \ $(kubectl get apigeeenvironments -n $APIGEE_NAMESPACE -o jsonpath='{.items[?(@.spec.name == "'$ENV'" )]..metadata.name}') \ --patch "$(echo -e "spec:\n components:\n $COMPONENT:\n autoScaler:\n maxReplicas: $MAX_REPLICAS\n minReplicas: $MIN_REPLICAS")" \ --type merge - Valide a alteração:
kubectl get hpa -n $APIGEE_NAMESPACE
Dimensionamento baseado no ambiente
Por predefinição, o dimensionamento é descrito ao nível da organização. Pode
substituir as predefinições especificando o dimensionamento específico do ambiente
no ficheiro overrides.yaml, conforme mostrado no exemplo seguinte:
envs:
# Apigee environment name
- name: ENV_NAME>
components:
# Environment-specific scaling override
# Otherwise, uses scaling defined at the respective root component
runtime:
replicaCountMin: 2
replicaCountMax: 20
Escalabilidade baseada em métricas
Com o dimensionamento baseado em métricas, o tempo de execução pode usar métricas da CPU e da aplicação para dimensionar os pods apigee-runtime.
A API Horizontal Pod Autoscaler (HPA) do Kubernetes usa o campo hpaBehavior para configurar os comportamentos de aumento e diminuição da escala do serviço de destino.
O escalamento baseado em métricas não está disponível para outros componentes numa implementação híbrida.
O dimensionamento pode ser ajustado com base nas seguintes métricas:
| Métrica | Medida | Considerações |
|---|---|---|
| serverMainTaskWaitTime | Tempo de espera médio (em ms) da fila de processamento em instâncias de tempo de execução para pedidos de proxy para processar políticas. | Esta métrica mede o impacto da complexidade nas políticas anexadas ao fluxo de pedidos de proxy. |
| serverNioTaskWaitTime | Tempo de espera médio (em ms) da fila de processamento em instâncias de tempo de execução para pedidos de proxy na camada http. | Esta métrica mede o impacto do número e do tamanho da carga útil dos pedidos e das respostas de proxy. |
O exemplo seguinte da secção runtime no ficheiro overrides.yaml
ilustra os parâmetros padrão (e os intervalos permitidos) para dimensionar os pods apigee-runtime numa implementação híbrida:
runtime:
# the following parameters configure metrics-based scaling
hpaMetrics:
serverMainTaskWaitTime: 400M # (range: 300M to 450M)
serverNioTaskWaitTime: 400M # (range: 300M to 450M)
targetCPUUtilizationPercentage: 75
hpaBehavior:
scaleDown:
percent:
periodSeconds: 60 # (range: 30 - 180)
value: 20 # (range: 5 - 50)
pods:
periodSeconds: 60 # (range: 30 - 180)
value: 2 # (range: 1 - 15)
selectPolicy: Min
stabilizationWindowSeconds: 120 # (range: 60 - 300)
scaleUp:
percent:
periodSeconds: 60 # (range: 30 - 120)
value: 20 # (range: 5 - 100)
pods:
periodSeconds: 60 # (range: 30 - 120)
value: 4 # (range: 2 - 15)
selectPolicy: Max
stabilizationWindowSeconds: 30 # (range: 30 - 120)
Aplique estas definições atualizando o gráfico apigee-runtime para cada ambiente. Por exemplo:
helm upgrade $ENV_RELEASE_NAME apigee-runtime/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set env=$ENV_NAME \ -f overrides.yaml
Ative ou desative o ajuste de escala com base em métricas
O ajuste de escala com base em métricas está ativado por predefinição. Pode ativar ou desativar o dimensionamento baseado em métricas definindo a propriedade customAutoscaling.enabled como true ou false. Aplique alterações à propriedade customAutoscaling.enabled atualizando o gráfico apigee-telemetry. Por exemplo:
helm upgrade telemetry apigee-telemetry/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
Configure um ajuste de escala mais agressivo
O aumento dos valores percent e pods da política de expansão resulta numa política de expansão mais agressiva. Da mesma forma, aumentar os valores percent e pods em scaleDown
resulta numa política de redução agressiva. Por exemplo:
runtime:
# ...
hpaMetrics:
serverMainTaskWaitTime: 400M
serverNioTaskWaitTime: 400M
targetCPUUtilizationPercentage: 75
hpaBehavior:
scaleDown:
percent:
periodSeconds: 60
value: 20
pods:
periodSeconds: 60
value: 4
selectPolicy: Min
stabilizationWindowSeconds: 120
scaleUp:
percent:
periodSeconds: 60
value: 30
pods:
periodSeconds: 60
value: 5
selectPolicy: Max
stabilizationWindowSeconds: 30
No exemplo acima, o scaleDown.pods.value é aumentado para 5, o scaleUp.percent.value é aumentado para 30 e o scaleUp.pods.value é aumentado para 5.
Configure um ajuste de escala menos agressivo
Os valores de configuração hpaBehavior também podem ser diminuídos para implementar políticas de aumento e diminuição menos agressivas. Por exemplo:
runtime:
# ...
hpaMetrics:
serverMainTaskWaitTime: 400M
serverNioTaskWaitTime: 400M
targetCPUUtilizationPercentage: 75
hpaBehavior:
scaleDown:
percent:
periodSeconds: 60
value: 10
pods:
periodSeconds: 60
value: 1
selectPolicy: Min
stabilizationWindowSeconds: 180
scaleUp:
percent:
periodSeconds: 60
value: 20
pods:
periodSeconds: 60
value: 4
selectPolicy: Max
stabilizationWindowSeconds: 30
No exemplo acima, o scaleDown.percent.value é reduzido para 10, o scaleDown.pods.value é reduzido para 1 e o scaleUp.stablizationWindowSeconds é aumentado para 180.
Para mais informações sobre o ajuste de escala baseado em métricas através do campo hpaBehavior, consulte o artigo
Políticas de ajuste de escala.
Resolução de problemas
Esta secção descreve métodos de resolução de problemas para erros comuns que pode encontrar ao configurar o ajuste de escala e o ajuste de escala automático.
O HPA mostra unknown para os valores das métricas
Se o dimensionamento baseado em métricas não funcionar e o HPA mostrar unknown
para os valores das métricas, use o seguinte comando para verificar a saída do HPA:
kubectl describe hpa HPA_NAME
Quando executar o comando, substitua HPA_NAME pelo nome do HPA que quer ver.
O resultado mostra o objetivo e a utilização da CPU do serviço, o que indica que o dimensionamento da CPU funciona na ausência do dimensionamento baseado em métricas. Para o comportamento da HPA com vários parâmetros, consulte o artigo Escalar em função de várias métricas.