Puedes escalar la mayoría de los servicios que se ejecutan en Kubernetes desde la línea de comandos o en una anulación de configuración. Puedes configurar los parámetros de escalamiento para los servicios del entorno de ejecución de Apigee Hybrid en el archivo overrides.yaml
.
Servicio | Implementado como | Escalamiento |
---|---|---|
Cassandra | ApigeeDatastore (CRD) | Consulta Escalamiento de Cassandra. |
Ingress/LoadBalancer | Deployment |
Administra el escalamiento con
|
Logger | DaemonSet | Los DaemonSet administran réplicas de un pod en todos los nodos, por lo que escalan cuando escalas los pods. |
MART Apigee Connect Watcher |
ApigeeOrganization (CRD) | Para escalar a través de la configuración, aumenta el valor de la propiedad mart: replicaCountMax: 2 replicaCountMin: 1 watcher: replicaCountMax: 2 replicaCountMin: 1 connectAgent: replicaCountMax: 2 replicaCountMin: 1 Estas implementaciones usan un ajuste de escala automático de pod horizontal para el ajuste de escala automático. Configura la propiedad Para obtener más información sobre cómo configurar las propiedades de configuración, consulta Administra los componentes del plano de entorno de ejecución. |
Entorno de ejecución Synchronizer UDCA |
ApigeeEnvironment (CRD) | Para escalar a través de la configuración, aumenta el valor de la propiedad
replicaCountMin para las estrofas udca , synchronizer
o runtime
del archivo de anulación. Por ejemplo:
synchronizer: replicaCountMax: 10 replicaCountMin: 1 runtime: replicaCountMax: 10 replicaCountMin: 1 udca: replicaCountMax: 10 replicaCountMin: 1 Nota: Estos cambios se aplican a TODOS los entornos del archivo de anulación. Si deseas personalizar el escalamiento para cada entorno, consulta la sección Configuración avanzada a continuación. Estas implementaciones usan un ajuste de escala automático de pod horizontal para el ajuste de escala automático. Configura la propiedad Para obtener más información sobre cómo configurar las propiedades de configuración, consulta Administra los componentes del plano de entorno de ejecución. |
Configuración avanzada
En algunos casos, es posible que debas usar opciones de escalamiento avanzadas. Algunos ejemplos de situaciones son los siguientes:
- Configura diferentes opciones de escalamiento para cada entorno Por ejemplo, donde env1 tiene un
minReplica
de 5 y env2 tiene unminReplica
de 2. - Configura diferentes opciones de escalamiento para cada componente dentro de un entorno Por ejemplo,
cuando el componente
udca
tiene unamaxReplica
de 5 y el componentesynchronizer
tiene unamaxReplica
de 2.
En el siguiente ejemplo, se muestra cómo usar el comando kubernetes patch
para cambiar
la propiedad maxReplicas
del componente runtime
:
- Crea las variables de entorno para usarlas con el comando:
export ENV=my-environment-name export NAMESPACE=apigee #the namespace where apigee is deployed export COMPONENT=runtime #can be udca or synchronizer export MAX_REPLICAS=2 export MIN_REPLICAS=1
- Aplica el parche. Ten en cuenta que en este ejemplo se da por sentado que
kubectl
está en laPATH
:kubectl patch apigeeenvironment -n $NAMESPACE \ $(kubectl get apigeeenvironments -n $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
- Verifica el cambio:
kubectl get hpa -n $NAMESPACE
Escalamiento basado en el entorno
De forma predeterminada, el escalamiento se describe a nivel de la organización. Puedes anular la configuración predeterminada si especificas el escalamiento específico del entorno en el archivo overrides.yaml
, como se muestra en el siguiente ejemplo:
envs: # Apigee environment name - name: test components: # Environment-specific scaling override # Otherwise, uses scaling defined at the respective root component runtime: replicaCountMin: 2 replicaCountMax: 20
Escalamiento basado en métricas
Con el escalamiento basado en métricas, el entorno de ejecución puede usar CPU y métricas de aplicación para escalar los Pods apigee-runtime
.
La API de Horizontal Pod Autoscaler (HPA) de Kubernetes usa el campo hpaBehavior
para configurar los comportamientos de escalamiento vertical y horizontal del servicio de destino.
El escalamiento basado en métricas no está disponible para ningún otro componente en una implementación híbrida.
El escalamiento se puede ajustar en función de las siguientes métricas:
Métrica | Medir | Consideraciones |
---|---|---|
serverNioTaskWaitTime | Tiempo de espera promedio (en picosegundos) de la cola de procesamiento en las instancias del entorno de ejecución para las solicitudes de proxy en la capa HTTP. | Esta métrica mide el impacto de la cantidad y el tamaño de la carga útil de las solicitudes y respuestas del proxy. |
serverMainTaskWaitTime | Tiempo de espera promedio (en picosegundos) de la cola de procesamiento en las instancias del entorno de ejecución para que las solicitudes de proxy procesen políticas. | Esta métrica mide el impacto de la complejidad en las políticas adjuntas al flujo de solicitudes de proxy. |
En el siguiente ejemplo de la estrofa runtime
en overrides.yaml
, se ilustran los parámetros estándar (y los rangos permitidos) para el escalamiento de Pods de apigee-runtime
en una implementación híbrida:
hpaMetrics: serverMainTaskWaitTime: 400M (300M to 450M) serverNioTaskWaitTime: 400M (300M to 450M) targetCPUUtilizationPercentage: 75 hpaBehavior: scaleDown: percent: periodSeconds: 60 (30 - 180) value: 20 (5 - 50) pods: periodSeconds: 60 (30 - 180) value: 2 (1 - 15) selectPolicy: Min stabilizationWindowSeconds: 120 (60 - 300) scaleUp: percent: periodSeconds: 60 (30 - 120) value: 20 (5 - 100) pods: periodSeconds: 60 (30 - 120) value: 4 (2 - 15) selectPolicy: Max stabilizationWindowSeconds: 30 (30 - 120)
Configura un escalamiento más agresivo
Si se aumentan los valores percent
y pods
de la política de escalamiento vertical, se obtendrá una política de escalamiento vertical más agresiva. Del mismo modo, aumentar los valores percent
y pods
en scaleDown
dará como resultado una política agresiva de reducción de escala verticalmente. Por ejemplo:
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
En el ejemplo anterior, el scaleDown.pods.value
se aumenta a 5, el scaleUp.percent.value
se aumenta a 30 y el scaleUp.pods.value
se aumenta a 5.
Configura un escalamiento menos agresivo
Los valores de configuración hpaBehavior
también se pueden disminuir para implementar políticas de escalamiento vertical y reducción de escala menos agresivas. Por ejemplo:
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
En el ejemplo anterior, scaleDown.percent.value
disminuye a 10, scaleDown.pods.value
disminuye a 1 y scaleUp.stablizationWindowSeconds
aumenta a 180.
Para obtener más información sobre el escalamiento basado en métricas mediante el campo hpaBehavior
, consulta Políticas de escalamiento.
Inhabilita el escalamiento basado en métricas
Si bien el escalamiento basado en métricas está habilitado de forma predeterminada y no se puede inhabilitar por completo, puedes configurar los límites de las métricas a un nivel en el que no se activará el escalamiento basado en métricas. El comportamiento resultante del escalamiento será el mismo que el escalamiento basado en la CPU. Por ejemplo, puedes usar la configuración siguiente para evitar activar el escalamiento basado en métricas:
hpaMetrics: serverMainTaskWaitTime: 4000M serverNioTaskWaitTime: 4000M 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
Soluciona problemas
En esta sección, se describen métodos de solución de problemas para errores comunes que puedes encontrar cuando configuras el escalamiento y el ajuste de escala automático.
HPA muestra unknown
para los valores de métricas
Si el escalamiento basado en métricas no funciona y HPA muestra unknown
para los valores de métricas, usa el siguiente comando a fin de verificar el resultado de HPA:
kubectl describe hpa HPA_NAME
Cuando ejecutes el comando, reemplaza HPA_NAME por el nombre de HPA que deseas ver.
El resultado mostrará el objetivo de CPU y el uso del servicio, lo que indica que el escalamiento de la CPU funcionará en ausencia del escalamiento basado en métricas. Para el comportamiento del HPA con varios parámetros, consulta Escala en varias métricas.