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


Cette page fournit des informations sur les événements de décision émis par l'autoscaler horizontal des 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 Horizontal Pod Autoscaler gère le scaling de votre charge de travail et comprendre le processus de prise de décision derrière ses actions.

L'autoscaler horizontal des 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.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure 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.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

Activer les API

Enable the GKE, and Cloud Logging APIs.

Enable the APIs

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.

In the Google Cloud console, activate Cloud Shell.

Activate 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 requis

Pour obtenir les autorisations nécessaires pour activer la génération de journaux, et pour y accéder 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 la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises via 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 ultérieure, ou 1.32.1-gke.1260000 ou 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 des 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 Google Cloud projet.
  • 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 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

Désactiver les événements de décision de l'autoscaler horizontal des 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 Google Cloud projet.
  • 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 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 des pods sont stockés dans Cloud Logging, à l'emplacement logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" situé 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 comprendre les besoins de stockage des volumes de journaux potentiels, ainsi que les conséquences sur les performances ou les coûts. Les exemples suivants expliquent la fréquence à laquelle l'autoscaler horizontal des 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 HPA de votre cluster. Par exemple, si votre cluster contient deux objets HPA 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 HPA de votre cluster. Par exemple, si votre cluster comporte deux objets HPA, deux recommandations finales seront enregistrées toutes les 15 secondes.

Au total, avec deux objets HPA qui surveillent chacun trois métriques, votre journal KCP_HPA recevra huit entrées d'événements de décision au total 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 sur votre autoscaler horizontal de pods.

Un journal atomique comprend les champs suivants:

Champ Description
start_time Indique quand l'HPA a commencé à calculer une recommandation.
hpa Nom de l'objet HPA associé à la recommandation.
pod_count Indique le nombre total de pods associés au HPA au moment de la recommandation. Ce nombre inclut également les pods prêts, non prêts et ignorés.
metric Fournit des informations sur les spécifications 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 provenant de MetricSourceType (par exemple, "Resource", "External").
  • spec: nom de la métrique et cible définie 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 des recommandations. Une valeur négative signifie que l'échantillon de métriques date d'avant le début du calcul.
summary Le champ "Summary" (Résumé) contient des informations sur le résultat de la recommandation, y compris le nombre de réplicas 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 HPA applique un amortissement à la recommandation et à sa direction pour essayer de réduire l'ampleur d'un scaling potentiel. L'atténuation peut se produire de différentes manières :
    • up: une direction d'atténuation à la hausse signifie que l'HPA suppose que les pods manquants utilisent la métrique à 100 %.
    • down: une direction d'atténuation à la baisse signifie que l'HPA suppose que les pods sans métriques ou les pods non prêts consomment 0% de la métrique.
    • none: aucune atténuation n'est appliquée.
  • override: message indiquant pourquoi la recommandation proposée par l'HPA n'est pas appliquée (par exemple, en raison de la tolérance) ; ou none si aucun forçage ne se produit.
  • result: résultat de la recommandation. Il propose un nombre recommandé de réplicas 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 final décrit une recommandation consolidée proposée par l'autoscaler de pods horizontaux. L'autoscaler de pods horizontaux combine toutes les recommandations atomiques de différentes métriques pour créer une recommandation finale et les implémenter. L'action signifie que le HPA demande au déploiement d'ajuster le nombre de réplicas pour qu'il corresponde à la valeur recommandée. Si la recommandation finale suggère un nombre de pods différent de celui des pods en cours d'exécution, l'autoscaler horizontal des pods déclenche un événement d'ajustement à la hausse ou à la baisse pour ajuster le déploiement en conséquence.

Un journal de recommandation final comprend les champs suivants:

Champ Description
start_time Indique quand l'HPA a commencé à calculer une recommandation.
hpa Nom de l'objet HPA associé à la recommandation.
target_ref Indique l'objet ScaleTargetRef HPA associé à une recommandation.
configured_size Dernier nombre de réplicas enregistré avant que l'HPA ne calcule et applique cette recommandation.
top_level_override Indique la raison pour laquelle la recommandation proposée par l'autoscaler horizontal de pods n'est pas appliquée (par exemple, en raison de la tolérance) ou none si aucun forçage ne se produit.
top_level_limit Indique pourquoi la recommandation proposée par le HPA doit être ajustée (par exemple, en raison du nombre de réplicas définis par les champs MinReplicas ou MaxReplicas dans la spécification HPA).
leading_metric_index L'indice de métrique principal du 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:

stabilization: décrit l'état de stabilisation s'il a été appliqué. La stabilisation permet de limiter les fluctuations du nombre de réplicas lorsque les métriques utilisées pour le scaling continuent de fluctuer. Le champ stabilization se compose des sous-champs suivants:

  • replicas: numéro de réplication après 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 mise à l'échelle sont gérées si elles sont appliquées. Ce comportement modifie les recommandations proposées par l'API HPA en fonction des limites en place. Le champ limitation se compose des sous-champs suivants:

  • replicas: numéro de l'instance dupliquée après la limitation.
  • reason: raison pour laquelle la mise à l'échelle ne dépasse pas le nombre minimal ou maximal de réplicas.
  • scaling_policy: règle de mise à l'échelle appliquée.
  • selectPolicy: spécifie comment une stratégie est sélectionnée lors de la mise à l'échelle dans une certaine direction. MaxChange correspond à MaxChangePolicySelect, et MinChange à MinChangePolicySelect. Si la mise à l'échelle est désactivée, le champ selectPolicy n'est pas présent.
  • replicas_before_limitation: nombre de réplications recommandé avant la limitation.
replicas Nombre de réplicas recommandé.
actuation_error Message d'erreur associé à l'échec, si l'actionnement a échoué.
actuation_time Code temporel de l'action en cas de réussite.
actuation_latency_seconds Durée écoulée, 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_HPA pour le cluster.
  • Vous avez déployé au moins un objet hpa correctement configuré sur 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'assistanceGoogle Cloud .

Étape suivante