Configura el ajuste de escala automático multidimensional de Pods


El ajuste de escala automático multidimensional de Pods te libera de elegir una sola forma de escalar tus clústeres. Con el ajuste de escala automático multidimensional de Pods, puedes usar el escalamiento horizontal basado en la CPU y el escalamiento vertical en función de la memoria al mismo tiempo.

Un objeto MultidimPodAutoscaler modifica las solicitudes de memoria y agrega réplicas para que el uso de CPU promedio de cada réplica coincida con el uso objetivo.

Requisitos previos

Usa el ajuste de escala automático multidimensional de Pods

En este ejemplo, se muestra cómo crear un Deployment y un objeto MultidimPodAutoscaler para realizar un ajuste de escala automático del Deployment.

Crea un Deployment

Antes de crear un MultidimPodAutoscaler, debes crear la carga de trabajo que supervisará. En el siguiente archivo, php-apache.yaml, se especifica un valor para las solicitudes de CPU:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 80
        resources:
        # Since MPA does not specify CPU requests, you must specify a request in
        # the Deployment
          limits:
            cpu: 500m
          requests:
            cpu: 200m

Para crear la implementación, aplica el manifiesto php-apache.yaml:

kubectl apply -f php-apache.yaml

Crea un MultidimPodAutoscaler

Una vez creada la implementación, puedes crear un objeto MultidimPodAutoscaler. En el siguiente manifiesto MultidimPodAutoscaler, se ajusta de forma automática la cantidad de réplicas y solicitudes de memoria según los valores que especifiques.

Para obtener más información sobre los campos de este ejemplo, consulta la sección Referencia de la API.

apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
  name: php-apache-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  goals:
    metrics:
    - type: Resource
      resource:
      # Define the target CPU utilization request here
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60
  constraints:
    global:
      minReplicas: 1
      maxReplicas: 5
    containerControlledResources: [ memory ]
    container:
    - name: '*'
    # Define boundaries for the memory request here
      requests:
        minAllowed:
          memory: 1Gi
        maxAllowed:
          memory: 2Gi
  policy:
    updateMode: Auto

Para crear la implementación MultidimPodAutoscaler, aplica el manifiesto php-apache-autoscaler.yaml:

kubectl apply -f php-apache-autoscaler.yaml

Cómo ver un MultidimPodAutoscaler

Visualiza todos los objetos MultidimPodAutoscaler mediante el comando kubectl get:

kubectl get mpa

Borra un MultidimPodAutoscaler

Borra un objeto MultidimPodAutoscaler con el comando kubectl delete:

kubectl delete -f php-apache-autoscaler.yaml

Referencia de API

En las siguientes secciones, se proporciona información sobre los posibles campos que puedes agregar a tu objeto MultidimPodAutoscaler.

Todos los campos corresponden a apiVersion v1beta1 autoscaling.gke.io.

MultidimPodAutoscaler

MultidimPodAutoscaler es la configuración de un escalador automático multidimensional de Pods, que administra de forma automática los recursos del Pod y su recuento en función del uso histórico y en tiempo real de los recursos.

Campo Tipo Descripción
metadata ObjectMeta Metadatos de objeto estándar
spec MultidimPodAutoscalerSpec El comportamiento deseado del escalador automático multidimensional de Pods.
status MultidimPodAutoscalerStatus El estado más reciente del escalador automático multidimensional de Pods.

MultidimPodAutoscalerSpec

MultidimPodAutoscalerSpec es la especificación que define el comportamiento del escalador automático.

Campo Tipo Descripción
ScaleTargetRef autoscaling.CrossVersionObjectReference Una referencia que apunta a un recurso de destino para escalar (con el subrecurso Scale).
Goals *MultidimGoals Objetivos que el escalador automático multidimensional de Pods intenta alcanzar y mantener.
Constraints *MultidimConstraints Describe las restricciones para el ajuste de escala automático. Las restricciones superan los objetivos. Si las restricciones bloquean algún objetivo, no se alcanzará el objetivo. Por ejemplo, alcanzar el recuento máximo de réplicas evita que se escale verticalmente aún más, incluso si las réplicas necesitan escalar.
Policy *MultidimPolicy La política te permite especificar cómo se aplican las recomendaciones.

MultidimGoals

MultidimGoals son objetivos que el escalador automático multidimensional de Pods intenta alcanzar.

Campo Tipo Descripción
Metrics []MetricSpec Contiene la lista de métricas junto con el valor deseado. El escalador automático multidimensional de Pods intenta permanecer cerca de los valores deseados.

MultidimConstraints

MultidimConstraints describen las restricciones para el ajuste de escala automático. Las restricciones tienen prioridad sobre los objetivos.

Campo Tipo Descripción
Global *GlobalConstraints Restricciones que se aplican a la aplicación con ajuste de escala automático en conjunto.
Pod *PodConstraints Restricciones que se aplican a un solo Pod desde la aplicación objetivo.
ContainerControlledResources []ResourceName Recursos de contenedores que el escalador automático debe controlar. memory es el único valor admitido.
Container []ContainerConstraints Restricciones que se aplican a los contenedores de los Pods.

Restricciones de recursos

ResourceConstraints definen la cantidad mínima y máxima de recursos que puedes asignar a un contenedor, un Pod o una aplicación.

Campo Tipo Descripción
MinAllowed ResourceList Cantidad mínima de recursos que puedes asignar. Si no se proporciona, se usa 0.
MaxAllowed ResourceList Cantidad máxima de recursos que puedes asignar. Si no se proporciona, no hay límites para la cantidad máxima de recursos.

Restricciones globales

GlobalConstraints definen las restricciones que se aplican a la aplicación por completo. Estas restricciones incluyen la cantidad de réplicas o la cantidad total de recursos.

Campo Tipo Descripción
MinReplicas *Int32 Cantidad mínima de réplicas que puede tener la aplicación. Si no se proporciona, se usa 1.
MaxReplicas *Int32 Cantidad máxima de réplicas que puede tener la aplicación. Si no se proporciona, no hay límites para la cantidad máxima de recursos.
Requests *ResourceConstraints Cantidad mínima y máxima de recursos que una aplicación puede solicitar, sumados en todos los Pods.

PodConstraints

PodConstraints define la cantidad mínima y máxima de recursos que puede solicitar un solo Pod, sumados en todos los contenedores que pertenecen al Pod.

Campo Tipo Descripción
Requests *ResourceConstraints Cantidad mínima y máxima de recursos que puede solicitar un solo Pod, sumados en todos los contenedores que pertenecen al Pod.

ContainerConstraints

ContainerConstraints son restricciones que se aplican a los contenedores de los Pods.

Campos Tipo Descripción
Name String Nombre del contenedor para el que se especifican las restricciones. También puedes usar * a fin de especificar restricciones para todos los contenedores en un Pod.
Requests *ResourceConstraints Cantidad mínima y máxima de recursos que puede solicitar el contenedor especificado.

Modo de actualización

Usa UpdateMode para controlar cómo se aplican las recomendaciones calculadas.

Campos Tipo Descripción
AutoUpdates UpdateMode = "Auto" AutoUpdates significa que todas las recomendaciones del escalador automático se pueden aplicar en cualquier momento.
AutoUpdates UpdateMode = "Off" Las actualizaciones automáticas implican que las recomendaciones del escalador automático no se aplican en absoluto.

MultidimPolicy

Campos Tipo Descripción
Update UpdateMode Define cómo se deben aplicar las recomendaciones. Un valor vacío falla en la validación.

MultidimPodAutoscalerStatus

MultidimPodAutoscalerStatus describe el estado del entorno de ejecución del escalador automático.

Campos Tipo Descripción
ObservedGeneration *Int64 La generación más reciente de este escalador automático.
RecommendedPodResources *RecommendedPodResources La cantidad de recursos calculado más reciente que recomienda el escalador automático para los Pods controlados.
CurrentReplicas Int32 CurrentReplicas es la cantidad actual de réplicas de Pods administradas por este escalador automático, según la información más reciente del escalador automático.
DesiredReplicas Int32 DesiredReplicas es la cantidad deseada de réplicas de Pods administradas por este escalador automático, según el cálculo más reciente del escalador automático.
CurrentMetrics []autoscaling.MetricStatus El último estado de lectura de las métricas usadas por este escalador automático.
Conditions []metav1.Condition Conditions es el conjunto de condiciones necesarias para que este escalador automático escale su objetivo y también indica si se cumplen o no esas condiciones.

¿Qué sigue?