Vertical Pod Autoscaler (VPA) - Amazon EKS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Vertical Pod Autoscaler (VPA)

Le Vertical Pod Autoscaler de Kubernetes ajuste automatiquement les réservations de processeur et de mémoire pour vos Pods afin de vous aider à « dimensionner correctement » vos applications. Cet ajustement peut améliorer l'utilisation des ressources du cluster et libérer du processeur et de la mémoire pour d'autres Pods. Cette rubrique vous aide à déployer le VPA (Vertical Pod Autoscaler) sur votre cluster et à vérifier qu'il fonctionne.

Prérequis

Déploiement du VPA (Vertical Pod Autoscaler)

Dans cette section, vous déployez le Vertical Pod Autoscaler sur votre cluster.

Pour déployer le Vertical Pod Autoscaler
  1. Ouvrez une fenêtre de terminal et accédez à un répertoire dans lequel vous souhaitez télécharger le code source du VPA (Vertical Pod Autoscaler).

  2. Clonez le référentiel GitHub kubernetes/autoscaler.

    git clone https://github.com/kubernetes/autoscaler.git
  3. Passez au répertoire vertical-pod-autoscaler.

    cd autoscaler/vertical-pod-autoscaler/
  4. (Facultatif) Si vous avez déjà déployé une autre version du VPA (Vertical Pod Autoscaler), supprimez-la avec la commande suivante.

    ./hack/vpa-down.sh
  5. Si vos nœuds n'ont pas d'accès Internet au registre de conteneurs registry.k8s.io, vous devez extraire les images suivantes et les transférer vers votre propre référentiel privé. Pour plus d'informations sur la manière d'extraire les images et de les transférer vers votre propre référentiel privé, consultez Copier une image de conteneur d'un référentiel vers un autre référentiel.

    registry.k8s.io/autoscaling/vpa-admission-controller:0.10.0 registry.k8s.io/autoscaling/vpa-recommender:0.10.0 registry.k8s.io/autoscaling/vpa-updater:0.10.0

    Si vous transférez les images vers un référentiel Amazon ECR privé, remplacez registry.k8s.io dans les manifestes par votre registre. Remplacez 111122223333 par votre ID de compte. Remplacez region-code par la Région AWS dans laquelle se trouve votre cluster. Les commandes suivantes supposent que vous avez nommé votre référentiel de la même manière que le référentiel du manifeste. Si vous avez nommé votre référentiel différemment, vous devrez également modifier son nom.

    sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/admission-controller-deployment.yaml sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/recommender-deployment.yaml sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/updater-deployment.yaml
  6. Déployez le VPA (Vertical Pod Autoscaler) sur votre cluster avec la commande suivante.

    ./hack/vpa-up.sh
  7. Vérifiez que les Pods Vertical Pod Autoscaler ont été créés avec succès.

    kubectl get pods -n kube-system

    L'exemple qui suit illustre un résultat.

    NAME READY STATUS RESTARTS AGE [...] metrics-server-8459fc497-kfj8w 1/1 Running 0 83m vpa-admission-controller-68c748777d-ppspd 1/1 Running 0 7s vpa-recommender-6fc8c67d85-gljpl 1/1 Running 0 8s vpa-updater-786b96955c-bgp9d 1/1 Running 0 8s

Test de l'installation de votre VPA (Vertical Pod Autoscaler)

Dans cette section, vous déployez un exemple d'application pour vérifier que le Vertical Pod Autoscaler fonctionne.

Pour tester votre installation Vertical Pod Autoscaler
  1. Déployez l'exemple hamster.yaml Vertical Pod Autoscaler avec la commande suivante.

    kubectl apply -f examples/hamster.yaml
  2. Obtenez les Pods à partir de l'exemple d'application hamster.

    kubectl get pods -l app=hamster

    L'exemple qui suit illustre un résultat.

    hamster-c7d89d6db-rglf5   1/1     Running   0          48s
    hamster-c7d89d6db-znvz5   1/1     Running   0          48s
  3. Décrivez l'un des Pods pour afficher sa réservation de cpu et de memory. Remplacez c7d89d6db-rglf5 par l'un des ID renvoyés dans votre sortie de l'étape précédente.

    kubectl describe pod hamster-c7d89d6db-rglf5

    L'exemple qui suit illustre un résultat.

    [...]
    Containers:
      hamster:
        Container ID:  docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24
        Image:         registry.k8s.io/ubuntu-slim:0.1
        Image ID:      docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
        Port:          <none>
        Host Port:     <none>
        Command:
          /bin/sh
        Args:
          -c
          while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
        State:          Running
          Started:      Fri, 27 Sep 2019 10:35:16 -0700
        Ready:          True
        Restart Count:  0
        Requests:
          cpu:        100m
          memory:     50Mi
    [...]

    Vous pouvez voir que le Pod d'origine réserve 100 millicpu de processeur et 50 mégaoctets de mémoire. Pour cet exemple d'application, 100 millicpu est inférieur à ce dont le Pod a besoin pour s'exécuter, il est donc limité par le processeur. Il réserve également beaucoup moins de mémoire qu'il n'en a besoin. Le déploiement du Vertical Pod Autoscaler vpa-recommender analyse les Pods hamster pour voir si les exigences en termes de processeur et de mémoire sont appropriées. Si des ajustements sont nécessaires, le vpa-updater relance les Pods avec les valeurs mises à jour.

  4. Attendez que le vpa-updater lance un nouveau Pod hamster. Cela devrait prendre une minute ou deux. Vous pouvez surveiller les Pods avec la commande suivante.

    Note

    Si vous n'êtes pas sûr qu'un nouveau Pod a été lancé, comparez les noms de Pod avec votre liste précédente. Lorsque le nouveau Pod est lancé, un nouveau nom de Pod s'affiche.

    kubectl get --watch Pods -l app=hamster
  5. Lorsqu'un nouveau Pod hamster est démarré, décrivez-le et affichez les réservations de processeur et de mémoire mises à jour.

    kubectl describe pod hamster-c7d89d6db-jxgfv

    L'exemple qui suit illustre un résultat.

    [...]
    Containers:
      hamster:
        Container ID:  docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db
        Image:         registry.k8s.io/ubuntu-slim:0.1
        Image ID:      docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
        Port:          <none>
        Host Port:     <none>
        Command:
          /bin/sh
        Args:
          -c
          while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
        State:          Running
          Started:      Fri, 27 Sep 2019 10:37:08 -0700
        Ready:          True
        Restart Count:  0
        Requests:
          cpu:        587m
          memory:     262144k
    [...]

    Dans la sortie précédente, vous pouvez voir que la réservation de l'cpu est passée à 587 millicpu, ce qui représente plus de cinq fois la valeur d'origine. La memory a augmenté jusqu'à 262 144 kilo-octets, soit environ 250 mébioctets ou cinq fois la valeur d'origine. Ce Pod était sous-approvisionné et le Vertical Pod Autoscaler a corrigé notre estimation avec une valeur beaucoup plus appropriée.

  6. Décrivez la ressource hamster-vpa pour afficher la nouvelle recommandation.

    kubectl describe vpa/hamster-vpa

    L'exemple qui suit illustre un résultat.

    Name:         hamster-vpa
    Namespace:    default
    Labels:       <none>
    Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                    {"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d...
    API Version:  autoscaling.k8s.io/v1beta2
    Kind:         VerticalPodAutoscaler
    Metadata:
      Creation Timestamp:  2019-09-27T18:22:51Z
      Generation:          23
      Resource Version:    14411
      Self Link:           /apis/autoscaling.k8s.io/v1beta2/namespaces/default/verticalpodautoscalers/hamster-vpa
      UID:                 d0d85fb9-e153-11e9-ae53-0205785d75b0
    Spec:
      Target Ref:
        API Version:  apps/v1
        Kind:         Deployment
        Name:         hamster
    Status:
      Conditions:
        Last Transition Time:  2019-09-27T18:23:28Z
        Status:                True
        Type:                  RecommendationProvided
      Recommendation:
        Container Recommendations:
          Container Name:  hamster
          Lower Bound:
            Cpu:     550m
            Memory:  262144k
          Target:
            Cpu:     587m
            Memory:  262144k
          Uncapped Target:
            Cpu:     587m
            Memory:  262144k
          Upper Bound:
            Cpu:     21147m
            Memory:  387863636
    Events:          <none>
  7. Lorsque vous avez terminé de tester votre exemple d'application, supprimez-le avec la commande suivante.

    kubectl delete -f examples/hamster.yaml