Afficher les événements de l'autoscaler horizontal de pods

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 insights sur la façon dont le contrôleur de l'autoscaler horizontal de pods gère le scaling de votre charge de travail et comprendre le processus de prise de décision qui sous-tend ses actions.

L'autoscaler horizontal de pods émet des événements de décision, qui sont stockés en tant qu'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.

  1. Connectez-vous à votre Google Cloud compte. Si vous n'avez jamais utilisé Google Cloud, créez un compte pour évaluer les performances de nos produits dans des scénarios réels. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

Activer les API

Activez les API GKE et Cloud Logging.

Rôles requis pour activer les API

Pour activer les API, vous avez besoin du rôle IAM Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

Activer les API

Configurer Cloud Shell

Dans ce tutoriel, vous utilisez Cloud Shell pour exécuter gcloud et kubectl commandes. 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 kubectl l'outil de ligne de commande.

Dans la Google Cloud console, activez Cloud Shell.

Activer 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 de projet.

Rôles et autorisations requis

Pour obtenir les autorisations nécessaires pour activer la génération de journaux, ainsi que pour accéder aux journaux et les traiter, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :

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.1090000 ou une version ultérieure, ou la version 1.32.1-gke.1260000 ou une version ultérieure.
  • Activez Cloud Logging dans votre cluster GKE. Les tarifs de Cloud Logging s'appliquent.

Activer les événements de décision de l'autoscaler horizontal de pods

Pour créer un cluster avec les journaux de décision KCP_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.

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 KCP_HPA journal 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 Google Cloud console

Vous pouvez surveiller le comportement de l'autoscaler horizontal de pods dans la Google Cloud console. Cette vue constitue un moyen pratique de consulter les mêmes journaux de recommandations atomiques et finales 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 Google Cloud console, procédez comme suit :

  1. Dans la Google Cloud console, accédez à la page Charges de travail :

    Accéder à la page Charges de travail

  2. Sélectionnez la charge de travail gérée par l'autoscaler horizontal de pods.

  3. Cliquez sur l'onglet Scaling.

Dans cet onglet, vous trouverez des informations sur le scaling, y compris 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 et pourrez 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

Mettez à jour un cluster pour supprimer le composant KCP_HPA de l'indicateur --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.

Cette commande désactive l'exportation des journaux générés par KCP_HPA. Vous ne pouvez pas récupérer les à l'aide du logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" filtre 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 KCP_HPA journal 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'logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" emplacement qui se trouve dans le bucket _Default du même projet que votre cluster GKE. Tous les événements journalisé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, en plus des 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 comporte deux objets AHP et que chacun d'eux surveille trois métriques, six recommandations atomiques seront enregistrées toutes les 15 secondes.

  • Recommandation finale : l'autoscaler horizontal de 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 comporte 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 KCP_HPA journal recevra huit entrées d'événements de décision toutes les 15 secondes.

Recommandation atomique

Un journal de recommandation atomique décrit une recommandation basée sur une métrique individuelle spécifiée dans votre autoscaler horizontal de pods.

Un journal atomique comprend les champs suivants :

Champ Description
start_time Indique quand le 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 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 :
  • index : index de la métrique dans le tableau Spec metrics.
  • type : type de métrique avec des valeurs issues de MetricSourceType (par exemple, Resource, External).
  • spec : nom de la métrique et ensemble cible défini sur cette métrique.
  • status : Conditions d'état concernant l'évolutivité et les limites de scaling.
  • newest_sample_time : code temporel de l'échantillon de métrique le plus récent.
  • newest_sample_age_seconds : âge de l'échantillon le plus récent, mesuré en secondes, depuis le début du calcul de la recommandation. Une valeur négative signifie que l'échantillon de métriques est antérieur au début du calcul.
summary Le champ "summary" contient des informations sur le résultat de la recommandation, y compris le nombre d'instances dupliqué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 :
  • dampening : le AHP applique un amortissement à la recommandation et à sa direction pour tenter de réduire l'ampleur d'un scaling potentiel. L'amortissement peut se produire de différentes manières :
    • up : une direction d'amortissement à la hausse signifie que le AHP suppose que les pods de métriques manquantes utilisent 100% de la métrique.
    • down : une direction d'amortissement à la baisse signifie que le AHP suppose que les pods de métriques manquantes ou les pods non prêts consomment 0% de la métrique.
    • none : aucun amortissement n'est appliqué.
  • override : message qui fournit une raison lorsque la recommandation proposée par le AHP n'est pas appliquée (par exemple, en raison d'une tolérance) ; ou none si aucun remplacement ne se produit.
  • result : résultat de la recommandation. Il propose un nombre recommandé d'instances dupliquées ou affiche un message d'erreur si la recommandation ne peut pas être calculée.

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 recommandation finale décrit une recommandation consolidée proposée par l'autoscaler horizontal de pods. L'autoscaler horizontal de pods combine toutes les recommandations atomiques de différentes métriques pour créer une recommandation finale et l'applique. L'application signifie que le AHP demande au déploiement d'ajuster le nombre d'instances dupliquées 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 horizontal de pods 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 le AHP a commencé à calculer une recommandation.
hpa Nom de l'objet AHP associé à la recommandation.
target_ref Indique l'objet AHP ScaleTargetRef associé à une recommandation.
configured_size Dernier nombre d'instances dupliquées enregistré avant que le AHP ne calcule et n'applique cette recommandation.
top_level_override Fournit une raison si la recommandation proposée par le AHP n'est pas appliquée (par exemple, en raison d'une tolérance) ; ou none si aucun remplacement ne se produit.
top_level_limit Fournit une raison si la recommandation proposée par le AHP doit être ajustée (par exemple, en raison du nombre d'instances dupliquées définies par les champs MinReplicas ou MaxReplicas dans la spécification AHP).
leading_metric_index L'index de métrique principal 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 de la limitation, comme suit, le cas échéant :

stabilization : décrit l'état de stabilisation s'il a été appliqué. La stabilisation est utilisée pour limiter les fluctuations du nombre d'instances dupliquées lorsque les métriques utilisées pour le scaling continuent de fluctuer. Le champ stabilization comprend les sous-champs suivants :

  • replicas : nombre d'instances dupliquées après la stabilisation.
  • reason : type de stabilisation appliqué : scaleUp ou scaleDown.
  • stabilization_window : période de stabilisation associée, en secondes.
  • replicas_before_stabilization : nombre d'instances dupliquées recommandé avant la stabilisation.

limitation : décrit la manière dont les limites de scaling sont gérées si elles sont appliquées. Ce comportement modifie les recommandations proposées par le AHP en fonction des limites en place. Le champ limitation comprend les sous-champs suivants :

  • replicas : nombre d'instances dupliquées après la limitation.
  • reason : raison pour laquelle le scaling ne dépasse pas le nombre minimal ou maximal d'instances dupliquées.
  • scaling_policy : la règle de scaling appliquée.
  • selectPolicy : spécifie comment une règle est sélectionnée lors du scaling dans une direction donnée. MaxChange correspond à MaxChangePolicySelect ; MinChange correspond à MinChangePolicySelect. Si le scaling est désactivé, le champ selectPolicy n'est pas présent.
  • replicas_before_limitation : nombre d'instances dupliquées recommandé avant la limitation.
replicas Nombre d'instances dupliquées recommandé.
actuation_error Message d'erreur associé à l'échec, si l'application a échoué.
actuation_time Code temporel de l'application 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'application.

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 aucun événement de décision de l'autoscaler horizontal de pods ne s'affiche, assurez-vous d'avoir effectué toutes les opérations suivantes :

  • Vous avez activé Cloud Logging pour le cluster.
  • Vous avez activé les journaux KCP_HPA pour le cluster.
  • Vous avez déployé au moins un objet hpa correctement configuré dans votre cluster.

Pour afficher la configuration de votre objet hpa, exécutez la commande suivante :

  kubectl describe hpa $HPA_NAME

Si aucun journal KCP_HPA ne s'affiche, contactez l&#3}Google Cloud assistance.

Étape suivante