Cette page explique comment analyser et ajuster les demandes de ressources de processeur et de mémoire d'un conteneur dans Google Kubernetes Engine (GKE) à l'aide de l'autoscaling de pods verticaux.
Vous pouvez faire évoluer les ressources de conteneur manuellement via la console Google Cloud, analyser les ressources à l'aide d'un objet VerticalPodAutoscaler
ou configurer le scaling automatique à l'aide de l'autoscaling de pods vertical.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
Analyser les demandes de ressources
L'autoscaler de pods vertical analyse automatiquement vos conteneurs et fournit des demandes de ressources suggérées. Vous pouvez afficher ces demandes de ressources à l'aide de la console Google Cloud, de Cloud Monitoring ou de Google Cloud CLI.
Console
Pour afficher les demandes de ressources suggérées dans la console Google Cloud, vous devez déployer une charge de travail existante datant d'au moins 24 heures. Certaines suggestions peuvent ne pas être disponibles ou pertinentes pour certaines charges de travail, telles que celles créées au cours des dernières 24 heures, les pods autonomes et les applications écrites en Java.
Accédez à la page Charges de travail dans la console Google Cloud.
Dans la liste des charges de travail, cliquez sur le nom de la charge de travail que vous souhaitez faire évoluer.
Cliquez sur listActions> Effectuer le scaling> Modifier les demandes de ressources.
La section "Analyser les données d'utilisation des ressources" affiche l'historique des données d'utilisation que le contrôleur de l'autoscaler de pods vertical a analysé pour créer les demandes de ressources suggérées dans la section "Ajuster les demandes et les limites de ressources".
Cloud Monitoring
Pour afficher les demandes de ressources suggérées dans Cloud Monitoring, vous devez déployer une charge de travail existante.
Accédez à la page Explorateur de métriques dans la console Google Cloud.
Cliquez sur Configuration
Développez le menu Sélectionner une métrique.
Dans le menu Ressource, sélectionnez Scaling Kubernetes.
Dans le menu Catégorie de métrique, sélectionnez Autoscaler.
Dans le menu Métrique, sélectionnez Recommandée par octets de requête d'instance répliquée et Recommandé par cœur de requête d'instance répliquée.
Cliquez sur Appliquer.
CLI gcloud
Pour afficher les demandes de ressources suggérées, vous devez créer un objet VerticalPodAutoscaler
et un Déploiement.
Pour les clusters standards, activez l'autoscaling de pods vertical de votre cluster. Sur les clusters Autopilot, l'autoscaling de pods vertical est activé par défaut.
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Remplacez
CLUSTER_NAME
par le nom de votre cluster.Enregistrez le manifeste suivant sous le nom
my-rec-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx
Ce fichier manifeste décrit un
Deployment
qui ne dispose pas de demandes de ressources de mémoire ou de processeur. La valeurcontainers.name
demy-rec-deployment
indique que tous les pods du déploiement appartiennent àVerticalPodAutoscaler
.Appliquez le fichier manifeste au cluster :
kubectl create -f my-rec-deployment.yaml
Enregistrez le manifeste suivant sous le nom
my-rec-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-rec-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-rec-deployment updatePolicy: updateMode: "Off"
Ce fichier manifeste décrit un
VerticalPodAutoscaler
. La valeurupdateMode
deOff
signifie que lors de la création des pods, le contrôleur de l'autoscaler de pods vertical analyse les besoins en ressources de mémoire et de processeur, puis enregistre ces recommandations dans le champstatus
de la ressource. Le contrôleur de l'autoscaler de pods vertical ne met pas automatiquement à jour les demandes de ressources pour les conteneurs en cours d'exécution.Appliquez le fichier manifeste au cluster :
kubectl create -f my-rec-vpa.yaml
Attendez un certain temps, puis affichez
VerticalPodAutoscaler
:kubectl get vpa my-rec-vpa --output yaml
Le résultat ressemble à ce qui suit :
... recommendation: containerRecommendations: - containerName: my-rec-container lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k upperBound: cpu: 7931m memory: 8291500k ...
Cette sortie affiche des recommandations pour les demandes de ressources de mémoire et de processeur.
Définir manuellement les demandes de ressources des pods
Vous pouvez définir manuellement des demandes de ressources de pod à l'aide de Google Cloud CLI ou de la console Google Cloud.
Console
Accédez à la page Charges de travail dans la console Google Cloud.
Dans la liste des charges de travail, cliquez sur le nom de la charge de travail que vous souhaitez faire évoluer.
Cliquez sur listActions> Effectuer le scaling> Modifier les demandes de ressources.
- La section Ajuster les demandes et les limites de ressources indique les demandes actuelles de ressources mémoire et de processeur pour chaque conteneur, ainsi que les demandes de ressources mémoire et de processeur suggérées.
Cliquez sur Appliquer les dernières suggestions pour afficher les requêtes suggérées pour chaque conteneur.
Cliquez sur Enregistrer les modifications.
Cliquez sur Confirmer.
gcloud
Pour définir les demandes de ressources pour un pod, définissez les valeurs "requests.cpu" et "memory.cpu" dans votre fichier manifeste du Déploiement. Dans cet exemple, vous modifiez manuellement le Déploiement créé dansAnalyser les demandes de ressources avec des demandes de ressources suggérées.
Enregistrez l'exemple de fichier manifeste suivant sous le nom
my-adjusted-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx resources: requests: cpu: 25m memory: 256Mi
Ce fichier manifeste décrit un Déploiement comportant deux pods. Chaque pod contient un conteneur qui demande 25 milliprocesseurs et 256 Mio de mémoire.
Appliquez le fichier manifeste au cluster :
kubectl apply -f my-adjusted-deployment.yaml
Vous pouvez également appliquer des modifications manuellement en procédant comme suit :
Accédez à la page Charges de travail dans la console Google Cloud.
Dans la liste des charges de travail, cliquez sur le nom de la charge de travail que vous souhaitez faire évoluer.
Cliquez sur listActions> Effectuer le scaling> Modifier les demandes de ressources.
Configurez vos requêtes de conteneur.
Cliquez sur Obtenir l'équivalent au format YAML.
Cliquez sur Télécharger la charge de travail ou copiez et collez le fichier manifeste dans un fichier nommé
resource-adjusted.yaml
.Appliquez le fichier manifeste à votre cluster :
kubectl create -f resource-adjusted.yaml
Définir automatiquement les demandes de ressources des pods
L'autoscaling de pods vertical utilise l'objet VerticalPodAutoscaler
pour définir automatiquement les demandes de ressources sur les pods lorsque updateMode
est défini sur Auto
. Vous pouvez configurer un objet VerticalPodAutoscaler
à l'aide de gcloud CLI ou de la console Google Cloud.
Console
Pour définir automatiquement les demandes de ressources, vous devez disposer d'un cluster sur lequel la fonctionnalité d'autoscaling vertical des pods est activée. La fonctionnalité d'autoscaling vertical des pods est activée par défaut sur les clusters Autopilot.
Activer l'autoscaling vertical des pods
Accédez à la page Google Kubernetes Engine dans la console Google Cloud.
Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.
Dans la section Automatisation, cliquez sur edit Modifier pour l'option Autoscaling des pods vertical.
Cochez la case Activer l'autoscaling de pods verticaux.
Cliquez sur Enregistrer les modifications.
Configurer l'autoscaling vertical des pods
Accédez à la page Charges de travail dans Google Cloud Console.
Dans la liste des charges de travail, cliquez sur le nom du déploiement pour lequel vous souhaitez configurer l'autoscaling vertical des pods.
Cliquez sur listActions > Autoscaling > Autoscaling de pods vertical.
Choisissez un mode d'autoscaling :
- Mode automatique : l'autoscaling vertical des pods met à jour les demandes de ressources mémoire et processeur pendant toute la durée de vie d'un pod.
- Mode initial : l'autoscaling vertical des pods n'attribue des demandes de ressources que lors de la création du pod et ne les modifie jamais ultérieurement.
(Facultatif) Définissez des stratégies sur les conteneurs. Cette option vous permet de vous assurer que la recommandation n'est jamais définie au-dessus ou en dessous d'une demande de ressources spécifiée.
- Cliquez sur expand_more Ajouter une stratégie.
- Sélectionnez Auto (Automatique) pour Modifier le mode de conteneur.
- Dans Ressources contrôlées, sélectionnez les ressources pour lesquelles vous souhaitez mettre en place l'autoscaling du conteneur.
- Cliquez sur Ajouter une stratégie pour définir une ou plusieurs plages minimales ou maximales pour les demandes de ressources du conteneur :
- Mémoire min. allouée : quantité minimale de mémoire dont le conteneur doit toujours disposer, en Mio.
- CPU min. alloué : quantité minimale de CPU dont le conteneur doit toujours disposer, en mCPU.
- Mémoire max. allouée : quantité maximale de mémoire dont le conteneur doit toujours disposer, en Mio.
- CPU max. alloué : quantité maximale de processeurs dont le conteneur doit toujours disposer, en mCPU.
Cliquez sur OK.
Cliquez sur Enregistrer.
gcloud
Pour définir automatiquement les demandes de ressources, vous devez disposer d'un cluster sur lequel la fonctionnalité d'autoscaling vertical des pods est activée. Cette fonctionnalité est activée par défaut sur les clusters Autopilot.
Pour les clusters standards, activez l'autoscaling vertical des pods de votre cluster :
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Remplacez
CLUSTER_NAME
par le nom de votre cluster.Enregistrez le manifeste suivant sous le nom
my-auto-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-auto-deployment spec: replicas: 2 selector: matchLabels: app: my-auto-deployment template: metadata: labels: app: my-auto-deployment spec: containers: - name: my-container image: registry.k8s.io/ubuntu-slim:0.1 resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
Ce fichier manifeste décrit un Déploiement comportant deux pods. Chaque pod contient un conteneur qui demande 100 milliprocesseurs et 50 Mio de mémoire.
Appliquez le fichier manifeste au cluster :
kubectl create -f my-auto-deployment.yaml
Établissez la liste des pods en cours d'exécution :
kubectl get pods
Le résultat affiche le nom des pods dans
my-deployment
:NAME READY STATUS RESTARTS AGE my-auto-deployment-cbcdd49fb-d6bf9 1/1 Running 0 8s my-auto-deployment-cbcdd49fb-th288 1/1 Running 0 8s
Enregistrez le manifeste suivant sous le nom
my-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-auto-deployment updatePolicy: updateMode: "Auto"
Ce fichier manifeste décrit un objet
VerticalPodAutoscaler
avec les propriétés suivantes :targetRef.name
: indique que tout pod contrôlé par un déploiement nommémy-deployment
appartient à cet objetVerticalPodAutoscaler
.updateMode: Auto
: indique que le contrôleur de l'autoscaler vertical de pods peut supprimer un pod, ajuster les demandes de ressources mémoire et de processeur, puis démarrer un nouveau pod.
Vous pouvez également configurer l'autoscaling vertical des pods pour n'attribuer des demandes de ressources qu'au moment de la création du pod, à l'aide de
updateMode: "Initial"
.Appliquez le fichier manifeste au cluster :
kubectl create -f my-vpa.yaml
Attendez quelques minutes et affichez à nouveau les pods en cours d'exécution :
kubectl get pods
Le résultat indique que les noms des pods ont changé :
NAME READY STATUS RESTARTS AGE my-auto-deployment-89dc45f48-5bzqp 1/1 Running 0 8s my-auto-deployment-89dc45f48-scm66 1/1 Running 0 8s
Si les noms des pods n'ont pas changé, attendez un peu plus longtemps, puis affichez à nouveau les pods en cours d'exécution.
Afficher les informations sur un autoscaling vertical des pods
Pour afficher les informations détaillées sur un autoscaling vertical des pods, procédez comme suit :
Pour obtenir des informations détaillées sur l'un de vos pods en cours d'exécution, saisissez :
kubectl get pod POD_NAME --output yaml
Remplacez
POD_NAME
par le nom de l'un de vos pods que vous avez récupéré à l'étape précédente.Le résultat ressemble à ce qui suit :
apiVersion: v1 kind: Pod metadata: annotations: vpaUpdates: 'Pod resources updated by my-vpa: container 0: cpu capped to node capacity, memory capped to node capacity, cpu request, memory request' ... spec: containers: ... resources: requests: cpu: 510m memory: 262144k ...
Ce résultat montre que le contrôleur de l'autoscaling vertical des pods demande 262 144 Ko de mémoire et 510 milliCPU de processeur.
Obtenez des informations détaillées sur
VerticalPodAutoscaler
:kubectl get vpa my-vpa --output yaml
Le résultat ressemble à ce qui suit :
... recommendation: containerRecommendations: - containerName: my-container lowerBound: cpu: 536m memory: 262144k target: cpu: 587m memory: 262144k upperBound: cpu: 27854m memory: "545693548"
Cette sortie affiche des recommandations pour les demandes de ressources de mémoire et de CPU et inclut les propriétés suivantes :
target
: indique que le conteneur doit fonctionner de manière optimale avec 587 milliCPU et 262 144 Ko de mémoire.lowerBound
etupperBound
: l'autoscaling vertical des pods utilise ces propriétés pour décider de supprimer un pod et de le remplacer par un nouveau. Si les demandes d'un pod sont en dessous de la limite inférieure ou au-dessus de la limite supérieure, l'autoscaler vertical des pods le supprime et le remplace par un pod ayant l'attribut cible.
Désactiver des conteneurs spécifiques
Vous pouvez désactiver des conteneurs spécifiques de l'autoscaling vertical des pods à l'aide de gcloud CLI ou de la console Google Cloud.
Console
Pour désactiver des conteneurs spécifiques de l'autoscaling vertical des pods, vous devez disposer d'un cluster sur lequel la fonctionnalité d'autoscaling vertical de pods est activée. La fonctionnalité d'autoscaling vertical des pods est activée par défaut sur les clusters Autopilot.
Activer l'autoscaling vertical des pods
Accédez à la page Google Kubernetes Engine dans la console Google Cloud.
Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.
Dans la section Automatisation, cliquez sur edit Modifier pour l'option Autoscaling des pods vertical.
Cochez la case Activer l'autoscaling de pods verticaux.
Cliquez sur Enregistrer les modifications.
Configurer l'autoscaling vertical des pods
Accédez à la page Charges de travail dans Google Cloud Console.
Dans la liste des charges de travail, cliquez sur le nom du déploiement pour lequel vous souhaitez configurer l'autoscaling vertical des pods.
Cliquez sur listActions > Autoscaling > Autoscaling de pods vertical.
Choisissez un mode d'autoscaling :
- Mode automatique : l'autoscaling vertical des pods met à jour les demandes de ressources mémoire et processeur pendant toute la durée de vie d'un pod.
- Mode initial : l'autoscaling vertical des pods n'attribue des demandes de ressources que lors de la création du pod et ne les modifie jamais ultérieurement.
Cliquez sur expand_more Ajouter une stratégie.
Sélectionnez le conteneur que vous souhaitez désactiver.
Dans le champ Modifier le mode de conteneur, sélectionnez Désactiver.
Cliquez sur OK.
Cliquez sur Enregistrer.
gcloud
Pour désactiver des conteneurs spécifiques de l'autoscaling vertical des pods, procédez comme suit :
Enregistrez le manifeste suivant sous le nom
my-opt-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-opt-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-opt-deployment updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: my-opt-sidecar mode: "Off"
Ce fichier manifeste décrit un
VerticalPodAutoscaler
. La valeurmode: "Off"
désactive les recommandations pour le conteneurmy-opt-sidecar
.Appliquez le fichier manifeste au cluster :
kubectl apply -f my-opt-vpa.yaml
Enregistrez le manifeste suivant sous le nom
my-opt-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-opt-deployment spec: replicas: 1 selector: matchLabels: app: my-opt-deployment template: metadata: labels: app: my-opt-deployment spec: containers: - name: my-opt-container image: nginx - name: my-opt-sidecar image: busybox command: ["sh","-c","while true; do echo Doing sidecar stuff!; sleep 60; done"]
Appliquez le fichier manifeste au cluster :
kubectl apply -f my-opt-deployment.yaml
Après quelque temps, affichez l'autoscaler vertical des pods :
kubectl get vpa my-opt-vpa --output yaml
La sortie affiche des recommandations pour les demandes de ressources mémoire et de processeur :
... recommendation: containerRecommendations: - containerName: my-opt-container ...
Sur cette sortie, il n'existe de recommandations que pour un seul conteneur. Il n'existe aucune recommandation pour
my-opt-sidecar
.L'autoscaler de pods verticaux ne met jamais à jour les ressources sur les conteneurs désactivés. Si vous attendez quelques minutes, le pod se recrée, mais les demandes de ressources n'ont été mises à jour que sur un seul conteneur.
Étapes suivantes
- En savoir plus sur l'autoscaling de pods vertical
- Découvrez comment attribuer des ressources de processeur aux conteneurs et aux pods.
- Découvrez comment attribuer des ressources mémoire aux conteneurs et aux pods.