Cette page explique comment faire évoluer une application déployée dans Google Kubernetes Engine.
Présentation
Lorsque vous déployez une application dans GKE, vous définissez le nombre d'instances dupliquées de cette application que vous souhaitez exécuter. Le scaling d'une application consiste à augmenter ou diminuer ce nombre d'instances dupliquées.
Chaque instance dupliquée de votre application représente un pod Kubernetes qui encapsule le ou les conteneurs de votre application.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Assurez-vous d'avoir activé l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Assurez-vous d'avoir installé le SDK Cloud.
Configurez les paramètres gcloud
par défaut à l'aide de l'une des méthodes suivantes :
- Utilisez
gcloud init
pour suivre les instructions permettant de définir les paramètres par défaut. - Utilisez
gcloud config
pour définir individuellement l'ID, la zone et la région de votre projet.
Utiliser gcloud init
Si le message d'erreur One of [--zone, --region] must be supplied: Please specify
location
s'affiche, effectuez les tâches ci-dessous.
-
Exécutez
gcloud init
et suivez les instructions :gcloud init
Si vous utilisez SSH sur un serveur distant, utilisez l'option
--console-only
pour empêcher la commande d'ouvrir un navigateur :gcloud init --console-only
- Suivez les instructions pour autoriser
gcloud
à utiliser votre compte Google Cloud. - Créez ou sélectionnez une configuration.
- Choisissez un projet Google Cloud.
- Choisissez une zone Compute Engine par défaut pour les clusters zonaux ou une région pour les clusters régionaux ou Autopilot.
Utiliser gcloud config
- Définissez votre ID de projet par défaut :
gcloud config set project PROJECT_ID
- Si vous utilisez des clusters zonaux, définissez votre zone de calcul par défaut :
gcloud config set compute/zone COMPUTE_ZONE
- Si vous utilisez des clusters Autopilot ou régionaux, définissez votre région de calcul par défaut :
gcloud config set compute/region COMPUTE_REGION
- Mettez à jour
gcloud
vers la dernière version :gcloud components update
Inspecter une application
Avant de procéder au scaling de votre application, vous devez inspecter celle-ci afin de vérifier son état.
Pour voir toutes les applications déployées sur votre cluster, exécutez la commande suivante :
kubectl get controller
Remplacez controller par deployments
, statefulsets
ou un autre type d'objet contrôleur.
Par exemple, si vous exécutez kubectl get deployments
alors que vous avez créé un seul déploiement, le résultat de la commande devrait ressembler à ce qui suit :
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 1 1 1 1 10m
Cette commande génère des résultats similaires pour tous les objets à de légères différences près. Pour les objets Deployment, la sortie comporte six colonnes :
NAME
répertorie les noms des objets Deployment présents dans le cluster.DESIRED
affiche le nombre d'instances dupliquées souhaité, c'est-à-dire l'état souhaité de l'application tel que vous l'avez défini lors de la création de l'objet Deployment.CURRENT
affiche le nombre d'instances dupliquées en cours d'exécution.UP-TO-DATE
affiche le nombre d'instances dupliquées qui ont été mises à jour pour atteindre l'état souhaité.AVAILABLE
indique le nombre d'instances dupliquées de l'application qui sont disponibles pour vos utilisateurs.AGE
affiche la durée d'exécution de l'application dans le cluster.
Dans cet exemple, il n'y a qu'un seul objet Deployment, nommé my-app
. Celui-ci n'a qu'une seule instance dupliquée, car son état souhaité a été défini sur une instance dupliquée. Vous définissez l'état souhaité au moment de la création, et vous pouvez le modifier à tout moment en faisant le scaling de l'application.
Inspecter les objets StatefulSet
Avant d'effectuer le scaling d'un objet StatefulSet, vous devez l'inspecter en exécutant la commande suivante :
kubectl describe statefulset my-app
Dans le résultat de cette commande, vérifiez le champ Pods Status. Si la valeur Failed
est supérieure à 0
, le scaling risque d'échouer.
Si un objet StatefulSet semble non opérationnel, procédez comme suit :
Obtenez la liste des pods et identifiez ceux qui ne sont pas opérationnels :
kubectl get pods
Supprimez le pod non opérationnel :
kubectl delete pod-name
Toute tentative de scaling d'un objet StatefulSet non opérationnel peut entraîner l'indisponibilité de celui-ci.
Procéder au scaling d'une application
Les sections suivantes décrivent les différentes méthodes dont vous disposez pour faire le scaling d'une application.
La commande kubectl scale
est la méthode de scaling la plus rapide. Une autre méthode peut cependant vous sembler préférable dans certaines situations, par exemple lors de la mise à jour de fichiers de configuration ou en cas de modifications effectuées sur place.
kubectl scale
La commande kubectl scale
vous permet de modifier instantanément le nombre d'instances dupliquées dont vous souhaitez disposer pour exécuter votre application.
Avec la commande kubectl scale
, vous spécifiez le nouveau nombre d'instances dupliquées en définissant l'option --replicas
. Par exemple, pour procéder au scaling de l'objet my-app
afin de le porter à quatre instances dupliquées, exécutez la commande suivante en remplaçant controller par deployment
, statefulset
ou un autre type d'objet contrôleur :
kubectl scale controller my-app --replicas 4
Si l'opération aboutit, la sortie de cette commande doit ressembler à ceci : deployment
"my-app" scaled
.
Ensuite, exécutez la commande suivante :
kubectl get controller my-app
Le résultat devrait ressembler à ce qui suit :
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 4 4 4 4 15m
kubectl apply
La commande kubectl apply
permet d'appliquer un nouveau fichier de configuration à un objet contrôleur existant. kubectl
apply
est utile pour apporter plusieurs modifications à une ressource, et convient tout particulièrement aux utilisateurs qui préfèrent gérer leurs ressources dans des fichiers de configuration.
Lorsque vous effectuez un scaling à l'aide de kubectl apply
, le fichier de configuration que vous fournissez doit inclure un nouveau nombre d'instances dupliquées dans le champ replicas
de la spécification de l'objet.
Voici une version mise à jour du fichier de configuration pour l'exemple d'objet my-app
. Cet exemple présente un objet Deployment : si vous utilisez un autre type de contrôleur, tel qu'un objet StatefulSet, modifiez le champ kind
en conséquence. Cet exemple fonctionne mieux sur un cluster comportant au moins trois nœuds.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: my-container
image: gcr.io/google-samples/hello-app:2.0
Dans ce fichier, la valeur du champ replicas
est 3
. L'application de ce fichier de configuration fera évoluer l'objet my-app
jusqu'à trois instances dupliquées.
Pour appliquer un fichier de configuration mis à jour, exécutez la commande suivante :
kubectl apply -f config.yaml
Ensuite, exécutez la commande suivante :
kubectl get controller my-app
Le résultat devrait ressembler à ce qui suit :
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 3 3 3 3 15m
Console
Pour effectuer le scaling d'une charge de travail dans Google Cloud Console, procédez comme suit :
Accédez au menu "Charges de travail" de Google Kubernetes Engine dans Cloud Console.
Dans la liste des charges de travail, cliquez sur le nom de la charge de travail que vous souhaitez faire évoluer.
Cliquez sur fullscreen Faire évoluer, ou sur listActions > Faire évoluer.
Saisissez le nouveau nombre d'instances dupliquées pour la charge de travail.
Cliquez sur Faire évoluer.
Activer l'autoscaling des déploiements
Vous pouvez activer l'autoscaling des déploiements en fonction de l'utilisation du processeur par les pods, à l'aide de la commande kubectl
autoscale
ou à partir du menu "Charges de travail" de GKE dans Cloud Console.
kubectl autoscale
La commande kubectl autoscale
crée un objet HorizontalPodAutoscaler
(ou HPA) qui cible une ressource spécifiée (appelée objectif de scaling) et la fait évoluer si nécessaire. Le HPA ajuste périodiquement le nombre d'instances dupliquées de l'objectif de scaling de façon à respecter la valeur d'utilisation moyenne du processeur que vous spécifiez.
Lorsque vous exécutez la commande kubectl autoscale
, vous spécifiez un nombre maximal et un nombre minimal d'instances dupliquées pour votre application, ainsi qu'un objectif d'utilisation du processeur. Par exemple, pour définir les nombres maximal et minimal d'instances dupliquées sur 6 et 4, avec un objectif d'utilisation du processeur de 50 %, exécutez la commande suivante :
kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50
Dans cette commande, l'option --max
est obligatoire. L'option --cpu-percent
correspond à l'objectif d'utilisation du processeur sur l'ensemble des pods. Cette commande ne fait pas évoluer immédiatement le déploiement jusqu'à six instances dupliquées, sauf en cas d'exigence systémique préalable.
Après l'exécution de la commande kubectl autoscale
, l'objet HorizontalPodAutoscaler
est créé et commence à cibler l'application. En cas de modification de la charge, cet objet augmente ou réduit le nombre d'instances dupliquées de l'application.
Pour obtenir la liste des objets HorizontalPodAutoscaler
de votre cluster, exécutez la commande suivante :
kubectl get hpa
Pour afficher un objet HorizontalPodAutoscaler
spécifique dans votre cluster, exécutez la commande suivante :
kubectl get hpa hpa-name
où hpa-name est le nom de votre objet HorizontalPodAutoscaler
.
Pour afficher la configuration d'un objet HorizontalPodAutoscaler
, procédez comme suit :
kubectl get hpa hpa-name -o yaml
La sortie de la commande ressemble à ceci :
apiVersion: v1
items:
- apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
creationTimestamp: ...
name: hpa-name
namespace: default
resourceVersion: "664"
selfLink: ...
uid: ...
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-name
targetCPUUtilizationPercentage: 50
status:
currentReplicas: 0
desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""
Dans cet exemple de sortie, le champ targetCPUUtilizationPercentage
contient la valeur de pourcentage 50
spécifiée dans l'exemple concernant la commande kubectl autoscale
.
Pour afficher une description détaillée d'un objet HorizontalPodAutoscaler
spécifique du cluster, procédez comme suit :
kubectl describe hpa hpa-name
Vous pouvez modifier l'objet HorizontalPodAutoscaler
en appliquant un nouveau fichier de configuration via la commande kubectl apply
, ou en exécutant les commandes kubectl edit
ou kubectl patch
.
Pour supprimer un objet HorizontalPodAutoscaler
, procédez comme suit :
kubectl delete hpa hpa-name
Console
Pour activer l'autoscaling d'un déploiement, procédez comme suit :
Accédez au menu "Charges de travail" de Google Kubernetes Engine dans Cloud Console.
Dans la liste des charges de travail, cliquez sur le nom du déploiement que vous souhaitez faire évoluer automatiquement.
Cliquez sur list Actions > Évoluer automatiquement.
Saisissez le nombre maximal d'instances dupliquées et, le cas échéant, le nombre minimal d'instances dupliquées du déploiement.
Sous Métriques d'autoscaling, sélectionnez et configurez les métriques selon vos besoins.
Cliquez sur Évoluer automatiquement.
Utiliser l'autoscaling en fonction de métriques personnalisées
Vous pouvez procéder au scaling de vos objets Déploiement en fonction de métriques personnalisées exportées à partir de Kubernetes Engine Monitoring.
Pour apprendre à utiliser des métriques personnalisées à des fins d'autoscaling des déploiements, consultez le tutoriel Procéder à un autoscaling des déploiements avec des métriques personnalisées.