Configurer l'autoscaling de pods multidimensionnels

L'autoscaling de pods multidimensionnels vous évite d'avoir à choisir un seul moyen pour le scaling de vos clusters. Avec l'autoscaling de pods multidimensionnels, vous pouvez utiliser le scaling horizontal basé sur le processeur et le scaling vertical basé sur la mémoire en même temps.

Un objet MultidimPodAutoscaler modifie les demandes de mémoire et ajoute des instances dupliquées de sorte que l'utilisation moyenne du processeur de chaque instance dupliquée corresponde à votre utilisation cible.

Prérequis

Utiliser l'autoscaling de pods multidimensionnels

Cet exemple vous montre comment créer un objet Deployment et un objet MultidimPodAutoscaler pour procéder à l'autoscaling de votre objet Deployment.

Créer un déploiement

Avant de pouvoir créer un MultidimPodAutoscaler, vous devez créer la charge de travail qu'il surveille. Le fichier suivant, php-apache.yaml, spécifie une valeur pour les requêtes de processeur :

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

Pour créer le déploiement, appliquez le manifeste php-apache.yaml :

kubectl apply -f php-apache.yaml

Créer un objet MultidimPodAutoscaler

Une fois l'objet Deployment créé, vous pouvez créer un objet MultidimPodAutoscaler. Le fichier manifeste MultidimPodAutoscaler suivant ajuste automatiquement le nombre d'instances dupliquées et de demandes de mémoire en fonction des valeurs spécifiées.

Pour en savoir plus sur les champs de cet exemple, consultez la section Documentation de référence de l'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

Pour créer l'objet MultidimPodAutoscaler, appliquez le manifeste php-apache-autoscaler.yaml :

kubectl apply -f php-apache-autoscaler.yaml

Afficher un objet MultidimPodAutoscaler

Affichez tous les objets MultidimPodAutoscaler à l'aide de la commande kubectl get :

kubectl get mpa

Supprimer un objet MultidimPodAutoscaler

Supprimez un objet MultidimPodAutoscaler à l'aide de la commande kubectl delete :

kubectl delete -f php-apache-autoscaler.yaml

Document de référence sur les API

Les sections suivantes fournissent des informations sur les champs que vous pouvez ajouter à votre objet MultidimPodAutoscaler.

Tous les champs concernent apiVersion v1beta1 autoscaling.gke.io.

MultidimPodAutoscaler

MultidimPodAutoscaler correspond à la configuration pour un autoscaler de pods multidimensionnels, qui gère automatiquement les ressources du pod et leur nombre en fonction de l'utilisation des ressources historiques et en temps réel.

Champ Type Description
metadata ObjectMeta Métadonnées d'objet standards.
spec MultidimPodAutoscalerSpec Comportement souhaité de l'autoscaler de pods multidimensionnels.
status MultidimPodAutoscalerStatus Dernier état observé de l'autoscaler de pods multidimensionnels.

MultidimPodAutoscalerSpec

MultidimPodAutoscalerSpec est la spécification qui définit le comportement de l'autoscaler.

Champ Type Description
ScaleTargetRef autoscaling.CrossVersionObjectReference Une référence qui pointe vers une ressource cible pour effectuer le scaling (avec la sous-ressource Scale).
Goals *MultidimGoals Objectifs que l'autoscaler de pods multidimensionnels tente d'atteindre et de maintenir.
Constraints *MultidimConstraints Décrit les contraintes de l'autoscaling. Les contraintes dépassent les objectifs. Si des contraintes bloquent un objectif, l'objectif ne sera pas atteint. Par exemple, atteindre le nombre maximal d'instances dupliquées empêche un scaling plus élevé, même si le nombre d'instances dupliquées peut nécessiter un scaling.
Policy *MultidimPolicy Une règle vous permet de spécifier la manière dont les recommandations sont appliquées.

MultidimGoals

MultidimGoals sont des objectifs que l'autoscaler de pods multidimensionnels tente d'atteindre.

Champ Type Description
Metrics []MetricSpec Contient la liste des métriques ainsi que la valeur souhaitée. L'autoscaler de pods multidimensionnels tente de rester proche des valeurs souhaitées.

MultidimConstraints

MultidimConstraints décrivent les contraintes de l'autoscaling. Les contraintes prévalent sur les objectifs.

Champ Type Description
Global *GlobalConstraints Contraintes qui s'appliquent à l'application avec autoscaling dans sa globalité.
ContainerControlledResources []ResourceName Ressources de conteneur qui doivent être contrôlées par l'autoscaler. memory est la seule valeur acceptée.
Container []ContainerConstraints Contraintes qui s'appliquent aux conteneurs de pods.

ResourceConstraints

ResourceConstraints définit la quantité minimale et maximale de ressources que vous pouvez attribuer à un conteneur, à un pod ou à une application.

Champ Type Description
MinAllowed ResourceList Quantité minimale de ressources que vous pouvez attribuer. Si non spécifiée, 0 est utilisé.
MaxAllowed []ResourceName Quantité maximale de ressources que vous pouvez attribuer. Si cet argument n'est pas fourni, la quantité maximale de ressources n'est pas limitée.
Requests *ResourceConstraints Nombre minimal et maximal de ressources qu'une application peut demander, additionnées pour tous les pods.

ContainerConstraints

ContainerConstraints sont des contraintes qui s'appliquent aux conteneurs de pods.

Champs Type Description
Name String Nom du conteneur pour lequel les contraintes sont spécifiées. Vous pouvez également utiliser * pour spécifier des contraintes pour tous les conteneurs d'un pod.
Requests *ResourceConstraints Nombre minimal et maximal de ressources que le conteneur spécifié peut demander.

UpdateMode

Utilisez UpdateMode pour contrôler l'application des recommandations calculées.

Champs Type Description
AutoUpdates UpdateMode = "Auto" AutoUpdates signifie que toutes les recommandations de l'autoscaler peuvent être appliquées à tout moment.

MultidimPolicy

Champs Type Description
Update UpdateMode Définit la façon dont les recommandations doivent être appliquées. Une valeur vide fait échouer la validation.

MultidimPodAutoscalerStatus

MultidimPodAutoscalerStatus décrit l'état d'exécution de l'autoscaler.

Champs Type Description
RecommendedPodResources *RecommendedPodResources Dernière quantité de ressources recommandée par l'autoscaler pour les pods contrôlés.
CurrentReplicas Int32 CurrentReplicas correspond au nombre actuel d'instances dupliquées de pods gérés par cet autoscaler, comme vu la dernière fois par l'autoscaler.
DesiredReplicas Int32 DesiredReplicas correspond au nombre d'instances dupliquées de pods gérés par cet autoscaler, comme calculé la dernière fois par l'autoscaler.
Conditions []metav1.Condition Conditions correspond à l'ensemble des conditions requises pour que cet autoscaler effectue le scaling de sa cible et indique si ces conditions sont remplies.

Étape suivante