Configurar ajuste de escala automático multidimensional de pods

El Ajuste de escala automático de Pods multidimensional te libera de elegir una sola manera de escalar tus clústeres. Con el Ajuste de escala automático multidimensional, puedes usar el Escalamiento horizontal en función de la CPU y el Escalamiento vertical según 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

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 realizar un ajuste de escala automático de la implementación.

Crea un Deployment

Antes de crear un MultidimPodAutoscaler, debes crear la carga de trabajo que supervisa. 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 MultidimPodAutoscaler

Una vez que hayas creado la implementación, puedes crear un objeto MultidimPodAutoscaler. Con 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 MultidPodAutoscaler

Visualiza todos los objetos MultidimPodAutoscaler con 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 campos posibles que puedes agregar a tu objeto MultidimPodAutoscaler.

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

MultidimPodAutoscaler

MultidimPodAutoscaler es la configuración de un escalador automático de Pods multidimensional, que administra de forma automática los recursos de Pod y su recuento según el 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 de Pods multidimensional.

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 objetivo para escalar (con el subrecurso Scale).
Goals *MultidimGoals Objetivos que el escalador automático de Pods multidimensional 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, entonces no se alcanzará. Por ejemplo, si se alcanza el recuento máximo de réplicas, es posible que no se pueda escalar aún más, incluso si es necesario escalar las réplicas.
Policy *MultidimPolicy La política le permite especificar cómo se aplican las recomendaciones.

MultidimGoals

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

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.

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 Las restricciones que se aplican a la aplicación con ajuste de escala automático.
ContainerControlledResources []ResourceName Recursos de contenedor que el escalador automático debe controlar. 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 usa 0.
MaxAllowed []ResourceName Cantidad máxima de recursos que puedes asignar. Si no se proporcionan, 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.

Restricciones de contenedores

ContainerConstraints son restricciones que se aplican a los contenedores de 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 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" La opción Actualizaciones automáticas significa que todas las recomendaciones del escalador automático se pueden aplicar en cualquier momento.

MultidimPolicy

Campos Tipo Descripción
Update UpdateMode Define cómo se deben aplicar las recomendaciones. Un valor vacío no se valida.

MultidimPodAutoscalerStatus

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

Campos Tipo Descripción
RecommendedPodResources *RecommendedPodResources La cantidad calculada más recientemente de recursos que recomienda el escalador automático para los pods controlados.
CurrentReplicas Int32 CurrentReplicas: Es la cantidad actual de réplicas de Pods que administra este escalador automático, que lo vio por última vez.
DesiredReplicas Int32 DesiredReplicas es la cantidad deseada de réplicas de Pods que administra este escalador automático, que es el que calcula este último.
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?