Utilisation de l'outil de redimensionnement automatique de pod horizontal Kubernetes
Découvrez comment utiliser l'outil de redimensionnement automatique de pod horizontal Kubernetes pour redimensionner automatiquement le nombre de pods sur un cluster que vous avez créé à l'aide de Kubernetes Engine (OKE).
Vous pouvez utiliser l'outil de redimensionnement automatique de pod horizontal Kubernetes pour redimensionner automatiquement le nombre de pods dans un déploiement, un contrôleur de réplication, un ensemble de répliques ou un ensemble avec conservation de statut, en fonction de l'utilisation de l'UC ou de la mémoire de cette ressource, ou en fonction d'autres mesures. L'outil de redimensionnement automatique de pod horizontal permet d'augmenter des applications pour répondre à une demande d'augmentation des ressources ou d'en réduire lorsque des ressources ne sont plus nécessaires. Vous pouvez définir un pourcentage de mesure cible que l'outil de redimensionnement automatique de pod horizontal doit respecter lorsqu'il redimensionne des applications. Pour plus d'informations, reportez-vous à la rubrique relative à l'outil de redimensionnement automatique de pod horizontal dans la documentation Kubernetes.
L'outil de redimensionnement automatique de pod horizontal est une ressource d'API standard de Kubernetes qui 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.
Remarques sur l'outil de redimensionnement automatique de pod horizontal
Tenez compte des éléments suivants :
- Le serveur de mesures Kubernetes ne prend en charge que le redimensionnement reposant sur l'utilisation de l'UC et de la mémoire. D'autres implémentations de l'API de mesures Kubernetes prennent en charge le redimensionnement reposant sur des mesures personnalisées. Reportez-vous à la documentation Kubernetes pour obtenir la liste des autres implémentations (section sur les implémentations) et pour obtenir plus d'informations sur le redimensionnement reposant sur des mesures personnalisées (section sur le redimensionnement automatique sur plusieurs mesures et les mesures personnalisées).
- Vous pouvez redimensionner des applications manuellement en mettant à jour les fichiers manifeste, sans utiliser l'outil de redimensionnement automatique de pod horizontal.
- Vous pouvez utiliser l'outil de redimensionnement automatique de pod horizontal Kubernetes avec des pools de noeuds gérés et des pools de noeuds virtuels.
Emploi de l'outil de redimensionnement automatique de pod horizontal
Les instructions ci-dessous sont tirées de la procédure pas à pas de l'outil de redimensionnement automatique de pod horizontal de la documentation Kubernetes. Elles indiquent comment effectuer les tâches suivantes :
- Vérification de l'installation du serveur de mesures Kubernetes sur un cluster
- Déploiement d'un exemple de serveur Web php-apache
- Création d'une ressource d'outil de redimensionnement automatique de pod horizontal qui est redimensionnée en fonction de l'utilisation de l'UC
- Démarrage de la génération d'un exemple de chargement
- Observation de l'opération de redimensionnement en action
- Arrêt de la génération d'exemple de chargement
- Nettoyage en enlevant le serveur Web php-apache et l'outil de redimensionnement automatique de pod horizontal
Etape 1 : vérification de l'installation du serveur de mesures Kubernetes
-
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.
-
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 : déploiement d'une application échantillon
Déployez une application de serveur Web Apache simple en saisissant ce qui suit :
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
La sortie de la commande ci-dessus confirme le déploiement :
deployment.apps/php-apache created
service/php-apache created
Le pod du serveur Web Apache créé à partir du fichier manifeste :
- a une limite d'UC de 500 millièmes de coeur, ce qui garantit que le conteneur n'utilisera jamais plus de 500 millièmes de coeur, ou 1/2 d'un coeur,
- a une allocation de demande d'UC de 200 millièmes de coeur, ce qui permet au conteneur d'utiliser 200 millièmes de coeur de ressources d'UC, ou 1/5 d'un coeur.
Etape 3 : création d'une ressource d'outil de redimensionnement automatique de pod horizontal
-
Créez une ressource d'outil de redimensionnement automatique de pod horizontal qui maintient entre 1 et 10 répliques, et une utilisation moyenne de l'UC de 50 % en saisissant ce qui suit :
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
La sortie de la commande ci-dessus confirme que l'outil de redimensionnement automatique de pod horizontal a été créé.
horizontalpodautoscaler.autoscaling/php-apache autoscaled
La commande crée un outil de redimensionnement automatique de pod horizontal pour le déploiement du serveur Web Apache qui :
- maintient entre 1 et 10 répliques des pods précédemment créés contrôlés par le déploiement du serveur Web Apache,
- augmente et diminue le nombre de répliques du déploiement pour maintenir une utilisation moyenne de l'UC de 50 % sur tous les pods.
Si l'utilisation moyenne de l'UC est inférieure à 50 %, l'outil de redimensionnement automatique de pod horizontal tente de réduire le nombre de pods dans le déploiement au minimum (dans ce cas, 1). Si l'utilisation moyenne de l'UC dépasse 50 %, l'outil de redimensionnement automatique de pod horizontal tente d'augmenter le nombre de pods dans le déploiement au maximum (dans ce cas, 10). Pour plus d'informations, reportez-vous à la section expliquant le fonctionnement de l'outil de redimensionnement automatique de pod horizontal dans la documentation Kubernetes.
Pour plus d'informations sur la commande
kubectl autoscale
, reportez-vous à la commande autoscale dans la documentation Kubernetes. -
Au bout d'une minute, vérifiez le statut en cours de l'outil de redimensionnement automatique de pod horizontal en saisissant ce qui suit :
kubectl get hpa
La sortie de la commande ci-dessus indique le statut en cours :
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 10s
La colonne
TARGETS
indique l'utilisation moyenne de l'UC sur tous les pods contrôlés par le déploiement du serveur Web Apache. Comme aucune demande n'est envoyée au serveur, l'exemple ci-dessus montre que l'utilisation en cours de l'UC est de 0 %, par rapport à l'utilisation cible de 50 %. Vous pouvez voir des nombres différents, en fonction de la durée d'attente avant l'exécution de la commande.
Etape 4 : démarrage de la génération d'exemple de chargement
-
Exécutez un conteneur avec une image busybox afin de créer un chargement pour le serveur Web Apache en saisissant ce qui suit :
kubectl run -it --rm load-generator --image=busybox /bin/sh
-
Générez un chargement pour le serveur Web Apache qui entraînera l'augmentation du déploiement par l'outil de redimensionnement automatique de pod horizontal en saisissant ce qui suit :
while true; do wget -q -O- http://php-apache; done
Etape 5 : observation de l'opération de redimensionnement
-
Au bout d'une minute, ouvrez une nouvelle fenêtre de terminal et vérifiez le statut en cours de l'outil de redimensionnement automatique de pod horizontal en saisissant ce qui suit :
kubectl get hpa
La sortie de la commande ci-dessus indique le statut en cours :
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 250%/50% 1 10 1 1m
Dans l'exemple ci-dessus, vous pouvez constater que l'utilisation en cours de l'UC est passée à 250 %, par rapport à l'utilisation cible de 50 %. Vous pouvez voir des nombres différents, en fonction de la durée d'attente avant l'exécution de la commande.
Pour atteindre la cible d'utilisation de 50 %, l'outil de redimensionnement automatique de pod horizontal doit augmenter le nombre de répliques afin d'augmenter le déploiement.
-
Au bout de quelques minutes supplémentaires, visualisez le nombre de répliques après augmentation en saisissant à nouveau ce qui suit :
kubectl get hpa
La sortie de la commande ci-dessus indique le statut en cours :
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 50%/50% 1 10 5 5m
Dans l'exemple ci-dessus, vous pouvez voir que l'outil de redimensionnement automatique de pod horizontal a redimensionné le déploiement sur 5 répliques et que la cible d'utilisation de 50 % a été atteinte. Vous pouvez voir des nombres différents, en fonction de la durée d'attente avant l'exécution de la commande.
-
Vérifiez que le déploiement a été augmenté en saisissant ce qui suit :
kubectl get deployment php-apache
La sortie de la commande ci-dessus indique le statut en cours :
NAME READY UP-TO-DATE AVAILABLE AGE php-apache 5/5 5 5 5m
Vous pouvez voir des nombres différents, en fonction de la durée d'attente avant l'exécution de la commande.
Etape 6 : arrêt de la génération d'exemple de chargement
- Dans la fenêtre de terminal où vous avez créé le conteneur avec l'image busybox et généré le chargement pour le serveur Web Apache, procédez comme suit :
- Mettez fin à la génération de chargement en appuyant sur
Ctrl+C
. - Fermez l'invite de commande en saisissant ce qui suit :
exit
La sortie de la commande ci-dessus confirme que la session a pris fin :
Session ended, resume using 'kubectl attach load-generator -c load-generator -i -t' command when the pod is running pod "load-generator" deleted
- Mettez fin à la génération de chargement en appuyant sur
- Au bout d'une minute, vérifiez le statut en cours de l'outil de redimensionnement automatique de pod horizontal en saisissant ce qui suit :
kubectl get hpa
La sortie de la commande ci-dessus indique le statut en cours :
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 5 10m
Dans l'exemple ci-dessus, vous pouvez voir que l'utilisation de l'UC en cours a été réduite à 0 %, par rapport à la cible d'utilisation de 50 %. Toutefois, le déploiement comporte encore 5 répliques. Vous pouvez voir des nombres différents, en fonction de la durée d'attente avant l'exécution de la commande.
-
Au bout de quelques minutes supplémentaires, visualisez le nombre de répliques après réduction en saisissant à nouveau ce qui suit :
kubectl get hpa
La sortie de la commande ci-dessus indique le statut en cours :
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache 0%/50% 1 10 1 15m
Dans l'exemple ci-dessus, vous pouvez voir que l'outil de redimensionnement automatique de pod horizontal a redimensionné le déploiement sur 1 réplique.
La réduction du nombre de répliques à 1 prend du temps. La durée par défaut est de cinq minutes pour la réduction. Vous pouvez voir des nombres différents, en fonction de la durée d'attente avant l'exécution de la commande.
-
Vérifiez que le déploiement a été réduit en saisissant ce qui suit :
kubectl get deployment php-apache
La sortie de la commande ci-dessus indique le statut en cours :
NAME READY UP-TO-DATE AVAILABLE AGE php-apache 1/1 1 1 15m
Vous pouvez voir des nombres différents, en fonction de la durée d'attente avant l'exécution de la commande.
Etape 7 : nettoyage
-
Supprimez l'outil de redimensionnement automatique de pod horizontal en saisissant ce qui suit :
kubectl delete horizontalpodautoscaler.autoscaling/php-apache
Lorsque vous supprimez un outil de redimensionnement automatique de pod horizontal, le nombre de répliques reste le même. Un déploiement ne revient pas automatiquement à l'état dans lequel il était avant la création de l'outil de redimensionnement automatique de pod horizontal.
-
Supprimez le déploiement du serveur Web Apache en saisissant ce qui suit :
kubectl delete deployment.apps/php-apache service/php-apache