Configurar el autoescalado de pods multidimensional

El autoescalado de pods multidimensional te permite elegir la forma de escalar tus clústeres. Con el autoescalado de pods multidimensional, puedes usar el escalado horizontal basado en la CPU y el escalado vertical basado en la memoria al mismo tiempo.

Un objeto MultidimPodAutoscaler modifica las solicitudes de memoria y añade réplicas para que el uso medio de CPU de cada réplica coincida con el uso objetivo.

Requisitos previos

Usar el autoescalado de pods multidimensional

En este ejemplo se muestra cómo crear un objeto Deployment y un objeto MultidimPodAutoscaler para escalar automáticamente tu Deployment.

Creando un despliegue

Para poder crear un MultidimPodAutoscaler, debes crear la carga de trabajo que monitoriza. El archivo php-apache.yaml 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 el Deployment, aplica el manifiesto php-apache.yaml:

kubectl apply -f php-apache.yaml

Crear un objeto MultidimPodAutoscaler

Una vez que hayas creado el Deployment, puedes crear un objeto MultidimPodAutoscaler. El siguiente manifiesto MultidimPodAutoscaler ajusta automáticamente el número de réplicas y las solicitudes de memoria en función de 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 el MultidimPodAutoscaler, aplica el php-apache-autoscaler.yaml manifiesto:

kubectl apply -f php-apache-autoscaler.yaml

Ver un objeto MultidimPodAutoscaler

Para ver todos los objetos MultidimPodAutoscaler, usa el comando kubectl get:

kubectl get mpa

Eliminar un objeto MultidimPodAutoscaler

Elimina un objeto MultidimPodAutoscaler con el comando kubectl delete:

kubectl delete -f php-apache-autoscaler.yaml

Referencia de la API

En las siguientes secciones se proporciona información sobre los campos que puede añadir al objeto MultidimPodAutoscaler.

Todos los campos son para apiVersion v1beta1 autoscaling.gke.io.

MultidimPodAutoscaler

MultidimPodAutoscaler es la configuración de un autoescalador de pods multidimensional, que gestiona automáticamente los recursos de los pods y su número en función del uso de recursos histórico y en tiempo real.

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

MultidimPodAutoscalerSpec

MultidimPodAutoscalerSpec es la especificación que define el comportamiento de la herramienta de adaptación dinámica.

Campo Tipo Descripción
ScaleTargetRef autoscaling.CrossVersionObjectReference Referencia que apunta a un recurso de destino para escalarlo (con el subrecurso Scale).
Goals *MultidimGoals Objetivos que el autoescalador de pods multidimensional intenta alcanzar y mantener.
Constraints *MultidimConstraints Describe las restricciones del autoescalado. Las restricciones tienen más peso que los objetivos. Si las restricciones impiden que se cumpla un objetivo, no se alcanzará. Por ejemplo, si se alcanza el número máximo de réplicas, no se podrá aumentar la escala, aunque las réplicas necesiten hacerlo.
Policy *MultidimPolicy La política te permite especificar cómo se aplican las recomendaciones.

MultidimGoals

MultidimGoals son los objetivos que intenta alcanzar el autoescalador de pods multidimensional.

Campo Tipo Descripción
Metrics []MetricSpec Contiene la lista de métricas junto con el valor deseado. La herramienta de adaptación dinámica de pods multidimensional intenta mantenerse cerca de los valores deseados.

MultidimConstraints

MultidimConstraints describe las restricciones del autoescalado. Las restricciones tienen prioridad sobre los objetivos.

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

ResourceConstraints

ResourceConstraints define 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 el valor 0.
MaxAllowed ResourceList Cantidad máxima de recursos que puedes asignar. Si no se proporciona, no hay límites en la cantidad máxima de recursos.

GlobalConstraints

GlobalConstraints define las restricciones que se aplican a la aplicación en su conjunto. Estas restricciones incluyen el número de réplicas o la cantidad total de recursos.

Campo Tipo Descripción
MinReplicas *Int32 Número mínimo de réplicas que puede tener la aplicación. Si no se proporciona, se usa el valor 1.
MaxReplicas *Int32 Número máximo de réplicas que puede tener la aplicación. Si no se proporciona, no hay límites en la cantidad máxima de réplicas.
Requests *ResourceConstraints Cantidad mínima y máxima de recursos que puede solicitar una aplicación, sumada en todos los pods.

PodConstraints

PodConstraints define la cantidad mínima y máxima de recursos que puede solicitar un solo pod, sumada 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, sumada 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 * para especificar restricciones para todos los contenedores de un pod.
Requests *ResourceConstraints Cantidad mínima y máxima de recursos que puede solicitar el contenedor especificado.

UpdateMode

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

Campos Tipo Descripción
AutoUpdates UpdateMode = "Auto" Actualizaciones automáticas significa que todas las recomendaciones de escalado automático se pueden aplicar en cualquier momento.
AutoUpdates UpdateMode = "Off" Actualizaciones automáticas significa que las recomendaciones de escalado automático no se aplican.

MultidimPolicy

Campos Tipo Descripción
Update UpdateMode Define cómo se deben aplicar las recomendaciones. Si el valor está vacío, se produce un error de validación.

MultidimPodAutoscalerStatus

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

Campos Tipo Descripción
ObservedGeneration *Int64 La generación más reciente observada por este escalador automático.
RecommendedPodResources *RecommendedPodResources La cantidad de recursos más reciente que ha calculado el autoescalador para los pods controlados.
CurrentReplicas Int32 CurrentReplicas es el número actual de réplicas de pods gestionadas por este escalador automático, según lo ha visto el escalador automático por última vez.
DesiredReplicas Int32 DesiredReplicas es el número de réplicas de pods que gestiona este escalador automático, según el último cálculo del escalador automático.
CurrentMetrics []autoscaling.MetricStatus El último estado de lectura de las métricas que usa este escalador automático.
Conditions []metav1.Condition Conditions es el conjunto de condiciones necesarias para que este escalador automático escale su destino e indica si se cumplen o no esas condiciones.

Siguientes pasos