Configurar ajuste de escala automático multidimensional de pods

El ajuste de escala automático multidimensional de pods (MPA) te libera de elegir una sola manera de escalar tus clústeres. Con el ajuste de escala automático multidimensional de pod, 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 promedio de CPU de cada réplica coincida con tu uso objetivo.

Requisitos previos

El MPA es compatible con clústeres que son 1.19.4-gke.1700 o posteriores.

Usa el ajuste de escala automático multidimensional de pods

En este ejemplo, se muestra cómo crear una implementación y un objeto MultidimPodAutoscaler para ajustar automáticamente la escala de la implementación.

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: k8s.gcr.io/hpa-example
        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 multidPodAutoscaler

Una vez que hayas creado la implementación, puedes crear un objeto MultidimPodAutoscaler. El siguiente manifiesto MultidimPodAutoscaler ajusta automáticamente 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 MultidPodAutoscaler

Visualiza todos los objetos MultidimPodAutoscaler con el comando kubectl get:

kubectl get mpa

Borra un MultidPodAutoscaler

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 campos posibles que puedes agregar a tu objeto MultidimPodAutoscaler.

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

MultidPodAutoscaler

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

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

MultidPodAutoscalerSpec

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 objetivo para escalar (con el subrecurso de escalamiento).
Goals *MultidimGoals Objetivos que el escalador automático de pods multidimensional intenta lograr y mantener.
Constraints *MultidimConstraints Describe las restricciones para el ajuste de escala automático. Las restricciones superan los objetivos. Si las restricciones bloquean un objetivo, no se alcanzará el objetivo. Por ejemplo, si se alcanza el recuento máximo de réplicas, se evita un escalamiento mayor incluso si es posible que las réplicas necesiten escalar.
Policy *MultidimPolicy La política te permite especificar cómo se aplican las recomendaciones.

Multiobjetivos

MultidimGoals son objetivos que el escalador automático de pods multidimensional intenta lograr.

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

Restricciones múltiples

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

Campo Tipo Descripción
Global *GlobalConstraints Las restricciones que se aplican a la aplicación con ajuste de escala automático.
ContainerControlledResources []ResourceName Recursos de contenedores que debe controlar el escalador automático. memory es el único valor admitido.
Container []ContainerConstraints Restricciones que se aplican a los contenedores de pods.

Restricciones de recursos

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 utiliza 0.
MaxAllowed []ResourceName Cantidad máxima de recursos que puedes asignar. Si no se proporciona, no hay límites para la cantidad máxima de recursos.
Requests *ResourceConstraints Cantidad mínima y mínima de recursos que una aplicación puede solicitar, sumada en todos los pods.

Restricciones de contenedores

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ínima de recursos que el contenedor especificado puede solicitar.

Modo de actualización

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

Campos Tipo Descripción
AutoUpdates UpdateMode = "Auto" Las actualizaciones automáticas implican que todas las recomendaciones del escalador automático pueden aplicarse en cualquier momento.

Multidom Policy

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

MultidiPodAutoscalerStatus

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

Campos Tipo Descripción
RecommendedPodResources *RecommendedPodResources La cantidad calculada de recursos 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 administrados por este escalador automático, como la vio el escalador automático por última vez.
DesiredReplicas Int32 DesiredReplicas es la cantidad deseada de réplicas administradas de los pods que administra este escalador automático, según lo último por el escalador automático.
Conditions []metav1.Condition Conditions es el conjunto de condiciones necesarias para que este escalador automático ajuste su objetivo y, además, indica si se cumplen o no esas condiciones.

¿Qué sigue?