Utilisation de l'outil de redimensionnement automatique de pod vertical Kubernetes

Découvrez comment utiliser l'outil de redimensionnement automatique de pod vertical Kubernetes pour ajuster automatiquement les demandes et les limites de ressource pour les conteneurs exécutés dans des pods sur un cluster que vous avez créé à l'aide de Kubernetes Engine (OKE).

Remarque

Vous ne pouvez pas utiliser l'outil de redimensionnement automatique de pod vertical Kubernetes avec des pools de noeuds virtuels.
Vous pouvez utiliser l'outil de redimensionnement automatique de pod vertical Kubernetes afin d'ajuster automatiquement les limites et les demandes de ressource pour les conteneurs exécutés dans les pods d'un déploiement. L'outil de redimensionnement automatique de pod vertical peut améliorer l'utilisation des ressources de cluster en :
  • définissant automatiquement les demandes en fonction de l'utilisation afin de s'assurer que la quantité de ressources appropriée est disponible pour chaque pod,
  • maintenant les ratios entre les limites et les demandes spécifiées dans les configurations initiales des conteneurs,
  • réduisant les pods qui demandent trop de ressources en fonction de leur utilisation au fil du temps,
  • augmentant les pods qui ne demandent pas assez de ressources en fonction de leur utilisation au fil du temps.

L'outil de redimensionnement automatique de pod vertical a trois composants :

  • Outil de recommandation : surveille la consommation de ressources actuelle et passée, et recommande des valeurs de demande de mémoire et d'UC pour un conteneur.
  • Outil de mise à jour : recherche les pods avec des ressources incorrectes et les supprime afin qu'ils puissent être recréés avec les valeurs de demande mises à jour.
  • Module d'extension d'admission : définit les demandes de ressource correctes sur les nouveaux pods (c'est-à-dire, les pods qui viennent d'être créés ou recréés par leur contrôleur en raison des modifications apportées par l'outil de mise à jour).

Pour plus d'informations, reportez-vous à la rubrique relative à l'outil de redimensionnement automatique de pod vertical et à la rubrique relative à la gestion des ressources pour les conteneurs dans la documentation Kubernetes.

Configurez l'outil de redimensionnement automatique de pod vertical à l'aide de l'objet de définition de ressource personnalisée VerticalPodAutoscaler. L'objet VerticalPodAutoscaler vous permet de spécifier les pods à redimensionner automatiquement de façon verticale ainsi que les recommandations de ressource à appliquer (le cas échéant). Pour plus d'informations, reportez-vous à VerticalPodAutoscaler et à l'objet de définition de ressource personnalisée dans la documentation Kubernetes.

L'outil de redimensionnement automatique de pod vertical nécessite l'installation d'une source de mesures, telle que le serveur de mesures Kubernetes, dans le cluster. Pour plus d'informations, reportez-vous à Déploiement du serveur de mesures Kubernetes sur un cluster.

Remplacement des plages de limites

L'outil de redimensionnement automatique de pod vertical tente de formuler des recommandations comprises entre les valeurs minimale et maximale spécifiées par une plage de limites, si vous en avez défini une. Toutefois, si la plage de limites applicable est en conflit avec les valeurs indiquées dans la section resourcePolicy du manifeste VerticalPodAutoscaler, l'outil de redimensionnement automatique de pod vertical accorde la priorité à la stratégie de ressource et formule des recommandations en conséquence (même si les valeurs dépassent la plage de limites). Pour plus d'informations, reportez-vous aux sections sur les plages de limites et le remplacement de la plage de limites par la stratégie de ressource dans la documentation Kubernetes.

Création de recommandations sans les appliquer

Vous pouvez utiliser l'outil de redimensionnement automatique de pod vertical pour créer et appliquer des recommandations, ou simplement pour en créer (sans mettre à jour les pods). Pour simplement créer des recommandations sans les appliquer, définissez updateMode: "Off" dans la section updatePolicy du manifeste VerticalPodAutoscaler.

Lorsque des pods sont créés, l'outil de redimensionnement automatique de pod vertical analyse les besoins en UC et en mémoire des conteneurs, et enregistre ces recommandations dans son champ Status. L'outil de redimensionnement automatique de pod vertical ne prend aucune mesure pour mettre à jour les demandes de ressource pour les conteneurs en cours d'exécution.

Exclusion de conteneurs spécifiques

Vous pouvez utiliser l'outil de redimensionnement automatique de pod vertical pour créer et appliquer des recommandations à tous les conteneurs dans un pod, ou exclure de manière sélective des conteneurs spécifiques. Afin de désactiver les recommandations pour un conteneur spécifique, dans la section resourcePolicy du manifeste VerticalPodAutoscaler, spécifiez un nom de conteneur (containerName) et définissez mode: "Off" dans la section ContainerPolicies.

Remarques sur l'outil de redimensionnement automatique de pod vertical

Tenez compte des éléments suivants :

  • Actuellement, il est recommandé de ne pas utiliser l'outil de redimensionnement automatique de pod vertical avec l'outil de redimensionnement automatique de pod horizontal sur les mesures d'utilisation de l'UC ou de la mémoire. Toutefois, vous pouvez le faire sur des mesures personnalisées et externes. Reportez-vous à la section sur la prise en charge des mesures personnalisées dans la documentation Kubernetes.
  • Les recommandations de l'outil de redimensionnement automatique de pod vertical peuvent dépasser les ressources disponibles (par exemple, taille de noeud, taille disponible, quota disponible). L'application des recommandations peut faire passer les pods au statut En attente.
  • Chaque fois que l'outil de redimensionnement automatique de pod vertical met à jour les ressources de pod, le pod est recréé, ce qui provoque le redémarrage de tous les conteneurs en cours d'exécution. Il est possible que le pod soit recréé sur un noeud différent.
  • Vous pouvez utiliser l'outil de redimensionnement automatique de pod vertical Kubernetes avec des pools de noeuds gérés, mais pas avec des pools de noeuds virtuels.

Emploi de l'outil de redimensionnement automatique de pod vertical

Les instructions ci-dessous vous guident tout au long du déploiement de l'outil de redimensionnement automatique de pod vertical sur un cluster. Elles indiquent comment effectuer les tâches suivantes :

  • Vérification de l'installation du serveur de mesures Kubernetes sur un cluster
  • Téléchargez et déployez l'outil de redimensionnement automatique de pod vertical.
  • Déployez une application échantillon.
  • Observation de l'opération de redimensionnement en action
  • Affichage de la recommandation
  • Nettoyage en enlevant l'application échantillon et l'outil de redimensionnement automatique de pod vertical

Etape 1 : vérification de l'installation du serveur de mesures Kubernetes

  1. Si vous ne l'avez pas encore fait, suivez les étapes permettant de configurer le fichier de configuration Kubeconfig du cluster et (si nécessaire) de définir la variable d'environnement KUBECONFIG de sorte qu'elle pointe vers le fichier. Vous devez configurer votre propre fichier Kubeconfig. Vous ne pouvez pas accéder à un cluster à l'aide d'un fichier Kubeconfig configuré par un autre utilisateur. Reportez-vous à Configuration de l'accès à un cluster.
  2. Vérifiez que le serveur de mesures Kubernetes a été déployé sur le cluster et qu'il est disponible en saisissant ce qui suit :

    kubectl -n kube-system get deployment/metrics-server

    Si la commande renvoie une erreur "Introuvable", vous devez déployer le serveur de mesures Kubernetes sur le cluster avant de continuer. Reportez-vous à Déploiement du serveur de mesures Kubernetes sur un cluster.

Etape 2 : téléchargement et déploiement de l'outil de redimensionnement automatique de pod vertical

  1. Téléchargez le code source de l'outil de redimensionnement automatique de pod vertical sur GitHub. Par exemple, entrez la commande suivante :
    git clone -b vpa-release-0.8 https://github.com/kubernetes/autoscaler.git
  2. Passez au répertoire vertical-pod-autoscaler :

    cd autoscaler/vertical-pod-autoscaler
  3. Si vous avez déjà déployé l'outil de redimensionnement automatique de pod vertical, supprimez-le en saisissant ce qui suit :
    ./hack/vpa-down.sh
  4. Déployez l'outil de redimensionnement automatique de pod vertical en saisissant ce qui suit :

    ./hack/vpa-up.sh
  5. Vérifiez que les pods de l'outil de redimensionnement automatique de pod vertical ont été créés en saisissant ce qui suit :

    kubectl get pods -n kube-system

    La sortie de la commande ci-dessus indique les pods :

    vpa-admission-controller-59d9965cfb-bzs8l 1/1 Running 0 6m34s
    vpa-recommender-5bcb58569-mqdds 1/1 Running 0 6m43s
    vpa-updater-5979cbf757-scw2d 1/1 Running 0 6m46s

    Vous verrez probablement des noms et des nombres différents.

Etape 3 : déploiement de l'application échantillon

  1. Déployez l'application échantillon hamster pour créer un déploiement et un outil de redimensionnement automatique de pod vertical correspondant en saisissant ce qui suit :
    kubectl apply -f examples/hamster.yaml

    La sortie de la commande ci-dessus confirme le déploiement et la création :

    verticalpodautoscaler.autoscaling.k8s.io/hamster-vpa created
    deployment.apps/hamster created

    Le fait de déployer l'application hamster crée un déploiement avec deux pods et un outil de redimensionnement automatique de pod vertical pointant vers ce déploiement.

  2. Vérifiez que les pods hamster ont été créés en saisissant ce qui suit :
    kubectl get pods -l app=hamster

    La sortie de la commande ci-dessus confirme la création :

    NAME                     READY STATUS  RESTARTS AGE
    hamster-7cbfd64f57-mqqnk 1/1   Running 0        54s
    hamster-7cbfd64f57-rq6wv 1/1   Running 0        55s

    Vous verrez probablement des noms différents pour les pods hamster.

  3. Affichez les réservations d'UC et de mémoire à l'aide de la commande kubectl describe pod et de l'un des noms de pod hamster renvoyés à l'étape précédente. Par exemple :
    kubectl describe pod hamster-7cbfd64f57-rq6wv

    La commande ci-dessus n'est qu'un exemple. Vous devez utiliser l'un des noms de pod hamster renvoyés lors de l'exécution de la commande kubectl get pods -l app=hamster à l'étape précédente.

    Dans la section Requests de la sortie, vous pouvez voir les réservations d'UC et de mémoire en cours du pod. Par exemple :

    Requests:
          cpu:        100m
          memory:     50Mi

    L'outil de redimensionnement automatique de pod vertical (plus précisément, l'outil de recommandation) analyse les pods et observe leur comportement pour déterminer si ces réservations d'UC et de mémoire sont appropriées. Vous pouvez voir des réservations d'UC et de mémoire différentes.

    Les réservations ne sont pas suffisantes car l'application échantillon hamster est délibérément sous-dotée en ressources. Chaque pod exécute un conteneur unique qui :

    • demande 100 millièmes de coeur, mais tente d'utiliser plus de 500 millièmes de coeur,
    • réserve bien moins de mémoire qu'il n'en a besoin pour fonctionner.

Etape 4 : observation de l'opération de redimensionnement

Après avoir analysé les pods d'origine dans l'application échantillon hamster et déterminé que les réservations d'UC et de mémoire sont insuffisantes, l'outil de redimensionnement automatique de pod vertical (plus précisément, l'outil de mise à jour) relance les pods avec d'autres valeurs selon les propositions de l'outil de recommandation. L'outil de redimensionnement automatique de pod vertical ne modifie pas le modèle dans le déploiement mais met à jour les demandes réelles des pods.

  1. Surveillez les pods dans l'application échantillon hamster et attendez que l'outil de mise à jour démarre un nouveau pod hamster avec un nouveau nom en saisissant ce qui suit :
    kubectl get --watch pods -l app=hamster
  2. Lorsque vous voyez qu'un nouveau pod hamster a démarré, affichez ses réservations d'UC et de mémoire à l'aide de la commande kubectl describe pod et du nom du pod. Par exemple :
    kubectl describe pod hamster-7cbfd64f57-wmg4

    Dans la section Requests de la sortie, vous pouvez voir les réservations d'UC et de mémoire du nouveau pod :

        Requests:
          cpu:        587m
          memory:     262144k

    Dans l'exemple ci-dessus, la réservation d'UC a augmenté pour atteindre 587 millièmes de coeur et la réservation de mémoire a augmenté pour atteindre 262 144 kilo-octets. Le pod d'origine était sous-doté en ressources et l'outil de redimensionnement automatique de pod vertical a corrigé les réservations d'origine avec des valeurs plus appropriées. Vous pouvez voir des réservations d'UC et de mémoire différentes.

Etape 5 : affichage de la recommandation

Affichez les recommandations faites par l'outil de redimensionnement automatique de pod vertical (plus spécifiquement, par l'outil de recommandation) en saisissant ce qui suit :

kubectl describe vpa/hamster-vpa

La sortie de la commande ci-dessus affiche les recommandations :

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/v1
Kind:         VerticalPodAutoscaler
Metadata:
  Creation Timestamp:  2020-09-22T18:08:09Z
  Generation:          27
  Resource Version:    19466955
  Self Link:           /apis/autoscaling.k8s.io/v1/namespaces/default/verticalpodautoscalers/hamster-vpa
  UID:                 689cee90-6fed-404d-adf9-b6fa8c1da660
Spec:
  Resource Policy:
    Container Policies:
      Container Name:  *
      Controlled Resources:
        cpu
        memory
      Max Allowed:
        Cpu:     1
        Memory:  500Mi
      Min Allowed:
        Cpu:     100m
        Memory:  50Mi
  Target Ref:
    API Version:  apps/v1
    Kind:         Deployment
    Name:         hamster
  Update Policy:
    Update Mode:  Auto
Status:
  Conditions:
    Last Transition Time:  2020-09-22T18:10:10Z
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  hamster
      Lower Bound:
        Cpu:     519m
        Memory:  262144k
      Target:
        Cpu:     587m
        Memory:  262144k
      Uncapped Target:
        Cpu:     587m
        Memory:  262144k
      Upper Bound:
        Cpu:     1
        Memory:  500Mi
Events:          <none>

Vous pouvez voir des recommandations différentes.

Etape 6 : nettoyage

  1. Enlevez l'application échantillon en saisissant ce qui suit :
    kubectl delete -f examples/hamster.yaml
  2. Dans le répertoire vertical-pod-autoscaler, supprimez le déploiement de l'outil de redimensionnement automatique de pod vertical en saisissant ce qui suit :

    ./hack/vpa-down.sh