Cette page fournit des informations sur les événements de décision émis par l'autoscaler horizontal de pods dans Google Kubernetes Engine (GKE). En analysant ces événements, vous pouvez à la fois obtenir des informations sur la façon dont le contrôleur d'autoscaling horizontal des pods gère le scaling de votre charge de travail et comprendre le processus de prise de décision à l'origine de ses actions.
L'autoscaler horizontal de pods émet des événements de décision, qui sont stockés sous forme d'entrées de journal dans Cloud Logging.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
Sélectionner ou créer un projet
Vous pouvez utiliser un projet existant ou en créer un pour ce tutoriel.
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Activer les API
Activez les API GKE et Cloud Logging si ce n'est pas déjà fait.
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.
Configurer Cloud Shell
Dans ce tutoriel, vous utilisez Cloud Shell pour exécuter des commandes gcloud et kubectl. Cloud Shell est un environnement shell permettant de gérer les ressources hébergées sur Google Cloud. Il est préinstallé avec Google Cloud CLI et l'outil de ligne de commande kubectl.
Dans la console Google Cloud , activez Cloud Shell.
Une session Cloud Shell s'ouvre dans un cadre situé en bas de la console.
Avant d'exécuter des commandes dans ce tutoriel, assurez-vous que votre projet par défaut est défini sur l'ID du projet dans lequel vous souhaitez déployer l'exemple d'application. Si ce n'est pas déjà fait, exécutez la commande suivante dans Cloud Shell :
gcloud config set project PROJECT_ID
Remplacez PROJECT_ID par votre ID du projet
Rôles et autorisations nécessaires
Pour obtenir les autorisations nécessaires pour activer la génération de journaux, et pour accéder aux journaux et les traiter, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :
-
Pour activer la journalisation des événements de l'autoscaler horizontal de pods dans votre cluster : Administrateur de cluster Kubernetes Engine (
roles/container.clusterAdmin) -
Pour accéder aux journaux et utiliser l'explorateur de journaux et Observability Analytics : Lecteur de journaux (
roles/logging.viewer)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Conditions requises
- Votre cluster GKE doit exécuter la version
1.31.5-gke.1090000ou ultérieure, ou la version1.32.1-gke.1260000ou ultérieure. - Activez Cloud Logging dans votre cluster GKE. Les tarifs de Cloud Logging s'appliquent.
- Assurez-vous de disposer d'un autoscaler horizontal des pods que vous souhaitez surveiller. Assurez-vous que les champs de l'autoscaler horizontal de pods ne contiennent pas de données sensibles.
Coûts
Les tarifs de Cloud Logging s'appliquent lorsque vous activez Cloud Logging et collectez les journaux de décision de l'autoscaler horizontal de pods.
Activer les événements de décision de l'autoscaler horizontal des pods
gcloud
Pour créer un cluster avec les journaux de décisionKCP_HPA activés, exécutez la commande suivante :
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
Pour activer les journaux de décision KCP_HPA sur un cluster existant, exécutez la commande suivante :
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
Remplacez les éléments suivants :
CLUSTER_NAME: nom du cluster que vous souhaitez créer ou mettre à jour.PROJECT_ID: ID de votre projet Google Cloud .LOCATION: régions ou zones de calcul de votre cluster.
Terraform
Pour activer les journaux de décisionKCP_HPA à l'aide de Terraform, mettez à jour votre ressource google_container_cluster. Dans le bloc logging_config, ajoutez la valeur KCP_HPA à la liste du champ enable_components :
resource "google_container_cluster" "primary" {
name = "CLUSTER_NAME"
location = "LOCATION"
# ... other configuration ...
logging_config {
enable_components = ["SYSTEM_COMPONENTS", "KCP_HPA"]
}
}
Remplacez les éléments suivants :
CLUSTER_NAME: nom du cluster que vous souhaitez créer.LOCATION: région ou zone Compute de votre cluster.
Ces commandes permettent d'exporter les journaux générés par KCP_HPA et de les enregistrer à la destination logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" dans Cloud Logging.
Récupérez la configuration de journalisation mise à jour du cluster et examinez la liste des journaux pour vous assurer que le journal KCP_HPA est activé :
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
Le résultat ressemble à ce qui suit :
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_HPA
Afficher les journaux de l'autoscaler horizontal de pods dans la console Google Cloud
Vous pouvez surveiller le comportement de l'autoscaler horizontal de pods dans la consoleGoogle Cloud . Cette vue permet de consulter facilement les mêmes journaux de recommandations atomiques et finaux que ceux disponibles dans Cloud Logging, sans quitter le contexte de votre charge de travail.
Pour afficher les journaux de l'autoscaler horizontal de pods dans la console Google Cloud , procédez comme suit :
Dans la console Google Cloud , accédez à la page Charges de travail :
Sélectionnez la charge de travail gérée par l'autoscaler horizontal des pods.
Cliquez sur l'onglet Scaling.
Dans cet onglet, vous trouverez des informations sur la mise à l'échelle, y compris sur l'utilisation des ressources, les données d'efficacité et les journaux. Les données de cet onglet peuvent vous aider à identifier la configuration la plus efficace pour l'autoscaling de vos charges de travail. Dans la section Journaux, vous trouverez les mêmes informations que dans Journaux. Vous pourrez également filtrer ces journaux par type, y compris "Événement", "Recommandation finale" et "Recommandation atomique". Pour en savoir plus sur les différents journaux, consultez Types de journaux.
Désactiver les événements de décision de l'autoscaler horizontal de pods
gcloud
Mettez à jour un cluster pour supprimer le composantKCP_HPA de l'option --logging :
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM
Remplacez les éléments suivants :
CLUSTER_NAME: nom du cluster que vous souhaitez créer ou mettre à jour.PROJECT_ID: ID de votre projet Google Cloud .LOCATION: régions ou zones de calcul de votre cluster.
Terraform
Pour désactiver les journaux de décisionKCP_HPA à l'aide de Terraform, mettez à jour votre ressource google_container_cluster. Dans le bloc logging_config, supprimez la valeur KCP_HPA de la liste pour le champ enable_components :
resource "google_container_cluster" "primary" {
name = "CLUSTER_NAME"
location = "LOCATION"
# ... other configuration ...
logging_config {
enable_components = ["SYSTEM_COMPONENTS"]
}
}
Remplacez les éléments suivants :
CLUSTER_NAME: nom du cluster que vous souhaitez mettre à jour.LOCATION: région ou zone de calcul de votre cluster.
Cette commande désactive l'exportation des journaux générés par KCP_HPA. Vous ne pouvez pas les récupérer à l'aide du filtre logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" dans Cloud Logging.
Récupérez la configuration de journalisation mise à jour du cluster et examinez la liste des journaux pour vous assurer que le journal KCP_HPA est désactivé :
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
Le résultat ressemble à ce qui suit :
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER
Types de journaux
Les événements de décision de l'autoscaler horizontal de pods sont stockés dans Cloud Logging, à l'emplacement logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" qui se trouve dans le bucket _Default du même projet que votre cluster GKE.
Tous les événements consignés sont au format JSON et se trouvent dans le champ jsonPayload d'une entrée de journal.
Assurez-vous de bien comprendre les besoins de stockage des volumes de journaux potentiels, ainsi que les implications en termes de performances ou de coûts. Les exemples suivants expliquent la fréquence à laquelle l'autoscaler horizontal de pods génère chaque type d'événement de décision :
Recommandation atomique : l'autoscaler horizontal de pods génère un événement de recommandation atomique toutes les 15 secondes pour chaque métrique surveillée par chaque objet AHP de votre cluster. Par exemple, si votre cluster contient deux objets AHP et que chacun d&#AHP;eux surveille trois métriques, six recommandations atomiques seront enregistrées toutes les 15 secondes.
Recommandation finale : l'autoscaler horizontal des pods génère un événement de recommandation finale toutes les 15 secondes pour chaque objet AHP de votre cluster. Par exemple, si votre cluster contient deux objets AHP, deux recommandations finales seront enregistrées toutes les 15 secondes.
Au total, avec deux AHP HPA qui surveillent chacun trois métriques, votre journal KCP_HPA recevra huit entrées d'événements de décision toutes les 15 secondes.
Recommandation atomique
Un journal de recommandations atomiques décrit une recommandation basée sur une métrique individuelle spécifiée sur votre autoscaler horizontal de pods.
Un journal atomique comprend les champs suivants :
| Champ | Description |
|---|---|
start_time |
Indique quand AHP a commencé à calculer une recommandation. |
hpa |
Nom de l'objet AHP associé à la recommandation. |
pod_count |
Indique le nombre total de pods associés au AHP lors de la formulation de la recommandation. Ce nombre inclut également les pods prêts, non prêts et ignorés. |
metric |
Fournit des informations sur la spécification et l'état de la métrique utilisée pour la recommandation. Le champ metric contient les sous-champs suivants :
|
summary |
Le champ "Résumé" contient des informations sur le résultat de la recommandation, y compris le nombre d'instances répliquées suggéré. Si aucune recommandation ne peut être proposée, un message d'erreur s'affiche. Le champ summary contient les sous-champs suivants :
|
Exemple de journal de recommandation atomique :
{
"insertId": "xiu4bty9k5b279wu",
"jsonPayload": {
"instance": {
"vm_name": "my-unique-vm-identifier",
"zone": "us-central1-a"
},
"atomicRecommendation": {
"startTime": "2025-02-06T20:07:00.573419526Z",
"hpa": "gke-managed-cim/kube-state-metrics",
"metric": {
"newestSampleAgeSeconds": -39.573419526,
"status": {
"averageValue": "25849856"
},
"newestSampleTime": "2025-02-06T20:06:21Z",
"type": "Resource",
"spec": {
"target": {
"averageValue": "400Mi"
},
"name": "memory"
}
},
"podCount": {
"ready": 1,
"total": 1
},
"summary": {
"override": "none",
"replicas": 1,
"dampening": "none"
}
}
},
"resource": {
"type": "k8s_control_plane_component",
"labels": {
"project_id": "my-project-id",
"cluster_name": "my-cluster",
"location": "us-central1-a",
"component_location": "us-central1-a",
"component_name": "hpa-controller"
}
},
"timestamp": "2025-02-06T20:07:00.593777835Z",
"severity": "INFO",
"labels": {
"compute.googleapis.com/resource_name": "my-unique-vm-identifier"
},
"logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
"sourceLocation": {
"file": "event_logger.go",
"line": "61"
},
"receiveTimestamp": "2025-02-06T20:07:05.284753647Z"
}
Recommandation finale
Un journal de recommandations finales décrit une recommandation consolidée proposée par l'autoscaler horizontal de pods. L'autoscaler horizontal des pods combine toutes les recommandations atomiques de différentes métriques pour créer une recommandation finale et l'appliquer. L'actionnement signifie que le AHP demande au déploiement d'ajuster le nombre de répliques pour qu'il corresponde à la valeur recommandée. Si la recommandation finale suggère un nombre de pods différent du nombre de pods en cours d'exécution, l'autoscaler de pods horizontaux déclenche un événement de scaling à la hausse ou à la baisse pour ajuster le déploiement en conséquence.
Un journal de recommandation finale comprend les champs suivants :
| Champ | Description |
|---|---|
start_time |
Indique quand AHP a commencé à calculer une recommandation. |
hpa |
Nom de l'objet AHP associé à la recommandation. |
target_ref |
Indique l'objet ScaleTargetRef AHP associé à une recommandation. |
configured_size |
Nombre de répliques enregistré avant que AHP ne calcule et applique cette recommandation. |
top_level_override |
Fournit un motif si la recommandation proposée par AHP n'est pas appliquée (par exemple, en raison de la tolérance) ou none si aucune substitution n'a lieu. |
top_level_limit |
Fournit une raison si la recommandation proposée par AHP doit être ajustée (par exemple, en raison du nombre de répliques définies par les champs MinReplicas ou MaxReplicas dans la spécification AHP). |
leading_metric_index |
L'index de la métrique principale dans le tableau Spec metrics est la métrique dont la recommandation atomique associée est utilisée comme recommandation finale. |
normalization |
Fournit un résumé de la stabilisation et des limites, le cas échéant :
|
replicas |
Nombre de répliques recommandé. |
actuation_error |
Message d'erreur associé à l'échec, si l'activation a échoué. |
actuation_time |
Code temporel de l'activation en cas de réussite. |
actuation_latency_seconds |
Temps écoulé, en secondes, entre le début du calcul de la recommandation et la réussite de l'action. |
Exemple de journal de recommandation finale :
{
"insertId": "qzyv7alfv1sm19ns",
"jsonPayload": {
"finalRecommendation": {
"actuationTime": "2025-02-06T20:06:57.487786873Z",
"targetRef": {
"name": "kube-state-metrics",
"kind": "StatefulSet",
"apiVersion": "apps/v1"
},
"topLevelLimit": "none",
"hpa": "gke-managed-cim/kube-state-metrics",
"topLevelOverride": "noRecommendation",
"replicas": 1,
"configuredSize": 1,
"actuationLatencySeconds": 0.003722451,
"startTime": "2025-02-06T20:06:57.484064422Z"
},
"instance": {
"vm_name": "my-unique-vm-identifier",
"zone": "us-central1-a"
}
},
"resource": {
"type": "k8s_control_plane_component",
"labels": {
"cluster_name": "my-cluster",
"component_location": "us-central1-a",
"component_name": "hpa-controller",
"location": "us-central1-a",
"project_id": "my-project-id"
}
},
"timestamp": "2025-02-06T20:06:57.488193527Z",
"severity": "INFO",
"labels": {
"compute.googleapis.com/resource_name": "my-unique-vm-identifier"
},
"logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
"sourceLocation": {
"file": "event_logger.go",
"line": "61"
},
"receiveTimestamp": "2025-02-06T20:06:57.844898727Z"
}
Dépannage
Cette section décrit les problèmes et les étapes de résolution liés aux événements de l'autoscaler horizontal de pods.
Aucun événement
Si vous ne voyez aucun événement de décision de l'autoscaler horizontal de pods, assurez-vous d'avoir effectué toutes les opérations suivantes :
- Vous avez activé Cloud Logging pour le cluster.
- Vous avez activé les journaux
KCP_HPApour le cluster. - Vous avez déployé au moins un objet
hpacorrectement configuré dans votre cluster.
Pour afficher la configuration de votre objet hpa, exécutez la commande suivante :
kubectl describe hpa $HPA_NAME
Si vous ne voyez toujours pas de journaux KCP_HPA, contactez l'assistanceGoogle Cloud .
Étapes suivantes
- Consultez À propos des journaux GKE.
- Comprendre vos journaux GKE.
- Découvrez comment trouver des journaux GKE spécifiques à l'aide d'exemples de requêtes.
- En savoir plus sur l'autoscaling horizontal des pods