En este documento, se describe cómo configurar el ajuste de escala automático horizontal de Pods para las cargas de trabajo sin estado existentes que se ejecutan en tu clúster. El ajuste de escala automático horizontal de Pods ajusta automáticamente la cantidad de Pods en ejecución (réplicas) para una aplicación en función de la demanda en tiempo real, quita Pods cuando disminuye la carga y agrega Pods cuando aumenta la carga. Este ajuste de escala es fundamental para garantizar la disponibilidad de la aplicación, el uso eficiente de los recursos y el ahorro de costos, ya que adapta la capacidad con precisión al tráfico de usuarios sin intervención manual. A medida que evolucionan los requisitos de la carga de trabajo de contenedores, el ajuste de escala automático de Pods elimina la necesidad de que los operadores supervisen constantemente el rendimiento y ajusten manualmente los recuentos de Pods.
Esta página está destinada a administradores, arquitectos y operadores que administran el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en Google Cloud el contenido de, consulta Roles y tareas comunes del usuario de GKE.
Escala un Deployment
Usa la funcionalidad de ajuste de escala de Kubernetes para ajustar de forma adecuada la cantidad de Pods que se ejecutan en tu Deployment.
Ajusta automáticamente la escala de los Pods de un Deployment
Kubernetes ofrece el ajuste de escala automático para eliminar la necesidad de actualizar manualmente tu Deployment cuando evoluciona la demanda. Completa los siguientes pasos para ajustar automáticamente la escala de los Pods de tu Deployment:
Para asegurarte de que el escalador automático horizontal de Pods pueda medir de forma adecuada el porcentaje de CPU, establece la solicitud de recursos de CPU en tu Deployment.
Establece el escalador automático horizontal de Pods en tu Deployment:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ -n NAMESPACE \ autoscale deployment DEPLOYMENT_NAME \ --cpu-percent=CPU_PERCENT \ --min=MIN_NUMBER_REPLICAS \ --max=MAX_NUMBER_REPLICASReemplaza lo siguiente:
CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster.NAMESPACE: Es el espacio de nombres. En el caso de los clústeres compartidos, debe ser un espacio de nombres del proyecto. En el caso de los clústeres estándar, puede ser cualquier espacio de nombres.DEPLOYMENT_NAME: Es el nombre del Deployment para ajustar automáticamente la escala.CPU_PERCENT: Es el uso promedio objetivo de CPU que se solicitará, representado como un porcentaje, en todos los Pods.MIN_NUMBER_REPLICAS: Es el límite inferior para la cantidad de Pods que puede aprovisionar el escalador automático.MAX_NUMBER_REPLICAS: Es el límite superior para la cantidad de Pods que puede aprovisionar el escalador automático.
Verifica el estado actual del escalador automático horizontal de Pods:
kubectl get hpaEl resultado es similar a este:
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE DEPLOYMENT_NAME Deployment/DEPLOYMENT_NAME/scale 0% / 50% 1 10 1 18s
Escala manualmente los Pods de un Deployment
Si prefieres escalar manualmente un Deployment, ejecuta lo siguiente:
kubectl --kubeconfig CLUSTER_KUBECONFIG \
-n NAMESPACE \
scale deployment DEPLOYMENT_NAME \
--replicas NUMBER_OF_REPLICAS
Reemplaza lo siguiente:
CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster.NAMESPACE: Es el espacio de nombres. En el caso de los clústeres compartidos, debe ser un espacio de nombres del proyecto. En el caso de los clústeres estándar, puede ser cualquier espacio de nombres.DEPLOYMENT_NAME: Es el nombre del Deployment en el que se ajustará automáticamente la escala.DEPLOYMENT_NAME: Es la cantidad de objetosPodreplicados en el Deployment.
Usa métricas personalizadas de Prometheus para el ajuste de escala automático
El ajuste de escala automático horizontal de Pods usa métricas de recursos estándar, como el uso de CPU y memoria, de forma predeterminada. Las métricas estándar funcionan para el ajuste de escala general, pero no son útiles para cargas de aplicaciones especializadas.
Cuando usas el ajuste de escala automático horizontal de Pods con métricas personalizadas de Prometheus, puedes escalar cargas de trabajo en función de métricas específicas de la aplicación, como las tasas de solicitudes HTTP, la profundidad de la cola y la latencia de procesamiento. Tu clúster puede responder con mayor precisión a la demanda del mundo real si aprovecha los datos enriquecidos que ya recopiló tu pila de supervisión de Prometheus.
Requisitos previos para usar Prometheus con el ajuste de escala automático horizontal de Pods
Antes de habilitar la función, se deben cumplir las siguientes condiciones:
Servidor de Prometheus existente: Ya se debe haber implementado un servidor de Prometheus y se debe poder acceder a la red desde el clúster (el controlador de HPA no administra la instancia de Prometheus en sí). Para obtener más información, consulta Cómo implementar y configurar el operador de Prometheus en Kubernetes.
Permisos administrativos: Debes tener los permisos necesarios para modificar el recurso personalizado del clúster.
Sin conflictos de API: Una verificación previa verifica que ningún otro componente ya haya registrado un APIService para
custom.metrics.k8s.io. Si existe un conflicto, no se puede habilitar el adaptador.
Habilita y configura Prometheus
El proceso implica definir reglas de métricas y actualizar la configuración del clúster:
Crea uno o más ConfigMaps de reglas de métricas.
Define las reglas basadas en PromQL para tus métricas personalizadas en uno o más ConfigMaps dentro del espacio de nombres del clúster de destino. El controlador observa estos ConfigMaps, los une y los aplica automáticamente al adaptador.
Para obtener más información sobre la definición de reglas, consulta Configuración de descubrimiento y presentación de métricas en kubernetes-sigs/prometheus-adapter.
En el siguiente ejemplo, se muestra un ConfigMap con reglas definidas para
http_requests_per_seconden el campodata:apiVersion: v1 kind: ConfigMap metadata: name: my-app-rules namespace: <cluster-namespace> data: config.yaml: | rules: - seriesQuery: 'http_requests_total' resources: overrides: namespace_name: {resource: "namespace"} pod_name: {resource: "pod"} name: matches: "^(.*)_total$" as: "${1}_per_second" metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[5m])) by (<<.GroupBy>>)'Si tu servidor de Prometheus requiere autenticación, como la seguridad de la capa de transporte mutua (mTLS), crea un secreto de Kubernetes en formato kubeconfig que contenga las credenciales necesarias.
En el siguiente ejemplo, se muestra un secreto que admite la autenticación básica:
apiVersion: v1 kind: Secret metadata: name: prometheus-auth-secret namespace: <cluster-namespace> annotations: baremetal.cluster.gke.io/mark-source: "true" type: Opaque stringData: config: authentication-credentialsActualiza el recurso personalizado del clúster:
Agrega la
preview.baremetal.cluster.gke.io/metrics-adapter: "true"anotación ametadatapara el recurso personalizado del clúster.Agrega la sección
spec.metricsAdapterpara definir la URL de Prometheus y hacer referencia a tus ConfigMaps de reglas.apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: <cluster-name> namespace: <cluster-namespace> annotations: preview.baremetal.cluster.gke.io/metrics-adapter: "true" spec: # ... other existing cluster configurations ... metricsAdapter: prometheus: url: "http://prometheus-k8s.monitoring.svc.cluster.local:9090" orgID: "production-environment" auth: configSecretRef: name: prometheus-auth-secret key: config # This is the key within the Secret's 'data' field rules: configMapKeyRefs: - name: my-app-rules key: config.yaml # This is the key within the ConfigMap's 'data' field # - name: base-system-rules # key: config.yamlSi tu instancia de Prometheus no requiere autenticación, puedes omitir la sección
metricsAdapter.prometheus.authde la especificación del clúster.
Aplica el recurso personalizado del clúster actualizado.
El controlador implementa automáticamente el adaptador de Prometheus en el espacio de nombres
kube-system.Para usar las métricas personalizadas en el ajuste de escala automático horizontal de Pods, crea un recurso HorizontalPodAutoscaler que apunte a las métricas personalizadas definidas en los campos
rulesde ConfigMaps.En el ejemplo de ConfigMap de un paso anterior, se definió una métrica personalizada
http_requests_per_second. Para usar esta métrica, el recurso HorizontalPodAutoscaler debe ser similar al siguiente ejemplo:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: <name> namespace: <namespace> spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: <workload-name> minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metric: name: http_requests_per_second target: type: AverageValue averageValue: 10
Inhabilita Prometheus
Para inhabilitar el uso de Prometheus con el ajuste de escala automático horizontal de Pods, quita la sección spec.metricsAdapter del recurso personalizado del clúster.