En este documento, se describe cómo configurar el ajuste automático de escala horizontal de Pods para 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 según la demanda en tiempo real, quita Pods cuando disminuye la carga y agrega Pods cuando aumenta la carga. Esta expansión y reducción es fundamental para garantizar la disponibilidad de la aplicación, el uso eficiente de los recursos y el ahorro de costos, ya que la capacidad se ajusta con precisión al tráfico de usuarios sin intervención manual. A medida que evolucionan los requisitos de carga de trabajo de tu contenedor, 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 el contenido de Google Cloud , consulta Roles de usuario y tareas comunes de GKE Enterprise.
Escala un Deployment
Usa la funcionalidad de escalamiento de Kubernetes para escalar de forma adecuada la cantidad de Pods que se ejecutan en tu implementación.
Ajusta automáticamente la escala de los Pods de una implementación
Kubernetes ofrece el ajuste de escala automático para eliminar la necesidad de actualizar manualmente tu implementación cuando evoluciona la demanda. Completa los siguientes pasos para ajustar automáticamente la escala de los pods de tu implementación:
Para garantizar que el escalador automático de Pods horizontal pueda medir correctamente el porcentaje de CPU, establece la solicitud de recursos de CPU en tu implementación.
Configura el escalador automático horizontal de Pods en tu implementación:
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ándares, puede ser cualquier espacio de nombres.DEPLOYMENT_NAME: Es el nombre de la implementación que se ajustará automáticamente.CPU_PERCENT: Es el porcentaje de uso promedio de CPU objetivo que se solicitará 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 lo siguiente:
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE DEPLOYMENT_NAME Deployment/DEPLOYMENT_NAME/scale 0% / 50% 1 10 1 18s
Ajusta manualmente la escala de los Pods de una implementación
Si prefieres ajustar la escala de una implementación de forma manual, ejecuta el siguiente comando:
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ándares, puede ser cualquier espacio de nombres.DEPLOYMENT_NAME: Es el nombre de la implementación en la que se realizará el ajuste de escala automático.DEPLOYMENT_NAME: Es la cantidad de objetosPodreplicados en la implementación.
Usa métricas personalizadas de Prometheus para el ajuste de escala automático
De forma predeterminada, el ajuste de escala automático horizontal de Pods usa métricas de recursos estándar, como el uso de CPU y memoria. Las métricas estándar funcionan para el ajuste de escala general, pero no son útiles para las 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 aprovechando 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 debe haber implementado un servidor de Prometheus al que se pueda acceder desde la red dentro del 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 de administrador: Debes tener los permisos necesarios para modificar el recurso personalizado del clúster.
Sin conflictos de API: Una verificación previa comprueba 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 supervisa estos ConfigMaps, los combina y los aplica automáticamente al adaptador.
Para obtener más información sobre cómo definir reglas, consulta Configuración de la presentación y el descubrimiento 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 seguridad de la capa de transporte mutua (mTLS), crea un objeto Secret de Kubernetes en formato kubeconfig que contenga las credenciales necesarias.
En el siguiente ejemplo, se muestra un objeto Secret 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 Cluster:
Agrega la anotación
preview.baremetal.cluster.gke.io/metrics-adapter: "true"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 de ConfigMaps
rules.La muestra de ConfigMap de un paso anterior 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 Cluster.