Dimensionner correctement vos charges de travail GKE à grande échelle


Ce tutoriel explique comment dimensionner correctement vos charges de travail Google Kubernetes Engine (GKE) avec des recommandations et des métriques d'utilisation VPA.

Comprendre l'importance du dimensionnement approprié des ressources

Le sous-provisionnement peut priver vos conteneurs des ressources nécessaires pour exécuter vos applications, ce qui les rend lents et peu fiables. Le surprovisionnement n'a aucune incidence sur les performances de vos applications, mais peut augmenter votre facture mensuelle.

Le tableau suivant décrit les implications du sous-provisionnement et du surprovisionnement du processeur et de la mémoire :

Ressource État du provisionnement Risque Explication
Processeur Plus de Coût Augmente le coût de vos charges de travail en réservant des ressources inutiles.
Sous performance Les charges de travail peuvent être ralenties ou ne plus répondre.
Non défini Fiabilité Le processeur peut être limité à 0, ce qui entraîne l'absence de réponse de vos charges de travail.
Mémoire Plus de Coût Augmente le coût de vos charges de travail en réservant des ressources inutiles.
Sous Fiabilité Peut entraîner l'arrêt des applications avec une erreur de mémoire insuffisante.
Non défini Fiabilité kubelet peut arrêter vos pods à tout moment et les marquer comme ayant échoué.

Objectifs

Dans ce tutoriel, vous allez apprendre à effectuer les opérations suivantes :

  • Déployer un exemple d'application
  • Exporter des métriques de recommandations GKE de Monitoring vers BigQuery
  • BigQuery et Looker Studio vous permettent d'afficher les recommandations de conteneurs GKE dans l'ensemble des projets.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

Configurer votre projet

Cloud Shell is preinstalled with the software you need for this tutorial, including Docker, kubectl, gcloud CLI et Terraform. Si vous n'utilisez pas Cloud Shell, vous devez installer la gcloud CLI.

  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. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  6. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  11. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  12. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/serviceusage.serviceUsageAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/iam.securityAdmin, roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.

Configurer votre environnement

Pour configurer votre environnement, procédez comme suit :

  1. Définissez les variables d'environnement :

    export PROJECT_ID=PROJECT_ID
    export REGION=us-central1
    export ZONE=us-central1-f
    export IMAGE=$REGION-docker.pkg.dev/$PROJECT_ID/main/vpa-recs-image:latest
    

    Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

  2. Définissez les variables d'environnement par défaut :

    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    gcloud config set compute/zone $ZONE
    
  3. Clonez le dépôt de code.

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    
  4. Accédez au répertoire de travail.

    cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
    

(Facultatif) Configurer l'exemple d'application

Cette section facultative permet de déployer un exemple d'application. Pour utiliser un cluster existant, assurez-vous que Cloud Monitoring est configuré sur votre cluster.

Pour simuler un environnement réaliste, vous allez utiliser un script de configuration pour déployer Online Boutique.

La procédure suivante permet d'installer l'exemple d'application et de modifier la configuration par défaut. Par exemple, les instructions configurent l'autoscaler horizontal de pods (HPA) pour certaines charges de travail, et modifient les demandes et limites de ressources.

  1. Exécutez le script d'installation :

    ./scripts/setup.sh
    

    Le script de configuration effectue les opérations suivantes :

    • Crée un cluster GKE.
    • Déploie l'exemple d'application Online Boutique.
    • Met à jour les demandes de ressources de processeur et de mémoire du pod.
    • Configure une ressource HorizontalPodAutoscaler pour les charges de travail adservice afin de simuler un environnement réaliste.

    L'exécution du script de configuration peut prendre jusqu'à 10 minutes.

  2. Vérifiez que l'exemple d'application est prêt :

    kubectl get deployment
    

    Le résultat ressemble à ce qui suit :

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    adservice               2/2     2            2           4m54s
    cartservice             1/1     1            1           4m55s
    checkoutservice         1/1     1            1           4m56s
    currencyservice         1/1     1            1           4m55s
    emailservice            1/1     1            1           4m56s
    frontend                1/1     1            1           4m55s
    loadgenerator           1/1     1            1           4m55s
    paymentservice          1/1     1            1           4m55s
    productcatalogservice   1/1     1            1           4m55s
    recommendationservice   1/1     1            1           4m56s
    redis-cart              1/1     1            1           4m54s
    shippingservice         1/1     1            1           4m54s
    

Créer un dépôt

Créez le dépôt pour stocker l'image de l'exportateur de métriques.

  1. Créez un dépôt Docker :

    gcloud artifacts repositories create main --repository-format=docker \
        --location=$REGION \
        --description="docker repository" 
    
  2. Configurez l'authentification sur les dépôts Docker :

    gcloud auth configure-docker $REGION-docker.pkg.dev
    
  3. Déployez l'image en exécutant la commande suivante :

    gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE
    

Déployer l'application

Dans la section suivante, vous allez utiliser Terraform pour effectuer les tâches suivantes :

  • Créer un compte de service et attribuer les autorisations requises pour gérer les ressources Google Cloud et interagir avec elles.
  • Attribuer au compte de service les rôles de lecteur Monitoring, d'éditeur de données BigQuery, de propriétaire de données BigQuery, d'utilisateur de job BigQuery et de demandeur Cloud Run.
  • Déployer un job Cloud Run qui va extraire une image Docker d'Artifact Registry et l'exécuter avec la configuration spécifiée.
  • Créer un job Cloud Scheduler qui déclenche quotidiennement le service Cloud Run.
  • Créer un ensemble de données, une table et une vue BigQuery pour stocker les données et les recommandations de métriques.

Configurer Terraform

  1. Définissez les variables d'environnement de configuration :

    export TF_VAR_BIGQUERY_DATASET=gke_metrics_dataset
    export TF_VAR_BIGQUERY_TABLE=gke_metrics
    export TF_VAR_RECOMMENDATION_WINDOW_SECONDS=1209600
    export TF_VAR_RECOMMENDATION_DISTANCE=86400
    export TF_VAR_LATEST_WINDOW_SECONDS=600
    export TF_VAR_METRIC_WINDOW=259200
    export TF_VAR_METRIC_DISTANCE=600
    

    Cette commande inclut les éléments suivants :

    • TF_VAR_BIGQUERY_DATASET et TF_VAR_BIGQUERY_TABLE : contiennent les données de métrique GKE.
    • TF_VAR_RECOMMENDATION_WINDOW_SECONDS : délai des recommandations du VPA. La valeur par défaut est de 1 209 600 secondes, soit 14 jours.
    • TF_VAR_RECOMMENDATION_DISTANCE : intervalle auquel les points de données de la recommandation du VPA sont renvoyés. La valeur par défaut est de 86 400 secondes, soit tous les jours.
    • TF_VAR_LATEST_WINDOW_SECONDS : délai d'obtention des valeurs de demande les plus récentes et de limite de ressources. La valeur par défaut est de 600 secondes, soit 10 minutes.
    • METRIC_WINDOW : définit la période d'utilisation de GKE et des métriques. La valeur par défaut est de 259 200 secondes, soit 3 jours.
    • METRIC_DISTANCE : intervalle auquel les points de données sont renvoyés. La valeur par défaut est de 600 secondes, soit toutes les 10 minutes.

    Ajustez ces valeurs en fonction des besoins de vos charges de travail. Par exemple, pour les charges de travail par lot exécutées une fois par mois, définissez TF_VAR_RECOMMENDATION_WINDOW_SECONDS et METRIC_WINDOW sur 2592000 secondes (30 jours).

Déployer la configuration Terraform

  1. Initialisez, validez et appliquez votre configuration :

    terraform -chdir=terraform init
    terraform -chdir=terraform validate
    terraform -chdir=terraform apply -var project_id=$PROJECT_ID -var region=$REGION -var image=$IMAGE
    

    Cette commande fournit un plan d'exécution et vous demande votre approbation avant d'apporter des modifications. Examinez le plan et, si tout se passe comme prévu, saisissez yes pour continuer.

    Une fois la commande d'application terminée, vos ressources sont créées et sont désormais gérées par Terraform.

  2. Exécutez manuellement le job Cloud Scheduler :

    gcloud scheduler jobs run recommendation-schedule --location ${REGION}
    

Vérifier le déploiement

  1. Sélectionnez l'onglet Journaux sur la page d'informations workload-recommendations.

  2. Vérifiez que les journaux de métriques sont en cours de traitement dans la console Cloud Run :

    Accédez à Cloud Run

    Les journaux affichent les métriques en cours d'écriture dans BigQuery. La sortie devrait ressembler à ce qui suit :

    INFO - Building Row
    INFO - Successfully wrote 12 rows to BigQuery table [PROJECT_ID].gke_metric_dataset.gke_metrics.
    INFO - Run Completed
    

    Si la sortie ne correspond pas, attendez cinq minutes, puis exécutez la commande gcloud scheduler jobs run recommendation-schedule --location $REGION.

Afficher la recommandation de conteneur dans BigQuery

  1. Accédez à la page "BigQuery" de la console Google Cloud :

    Accéder à BigQuery

  2. Vérifiez que les données sont visibles dans la table gke_metrics et la vue container_recommendations. Selon le nombre de charges de travail, l'écriture de toutes les métriques dans BigQuery peut prendre quelques minutes.

  3. Dans l'éditeur de requête, sélectionnez toutes les lignes de la vue container_recommendations :

    SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`
    

    Ce programme extrait les métriques suivantes de Cloud Monitoring :

    • Détails de la charge de travail : ID du projet, nom du cluster, contrôleur et nom du conteneur.

    • Utilisation CPU/mémoire : quantité de ressources processeur et mémoire utilisées par la charge de travail, et pourcentage d'utilisation.

    • Demandées et limites : quantité de demande de ressources processeur et mémoire pour la charge de travail, et quantité maximale de ressources processeur et mémoire autorisée pour la charge de travail.

    • Recommandations CPU et mémoire de charge de travail : recommandations de quantité de ressources processeur et mémoire à allouer aux charges de travail pour garantir leur bon fonctionnement, en fonction des recommandations du VPA pour les déploiements et des utilisations réelles et cibles pour les objets hors déploiement.

Visualiser les recommandations dans Looker Studio

Looker Studio est une plate-forme d'informatique décisionnelle gratuite et en libre-service qui vous permet de créer et d'utiliser des visualisations de données, des tableaux de bord et des rapports. Avec Looker Studio, vous pouvez vous connecter à vos données, créer des visualisations et partager vos insights avec d'autres utilisateurs.

Utilisez Looker Studio pour visualiser les données de la vue BigQuery container_recommendations :

  1. Ouvrez le modèle de tableau de bord de redimensionnement des charges de travail.
  2. Cliquez sur Utiliser mes propres données.
  3. Sélectionnez votre projet.
  4. Dans le champ "Ensemble de données", sélectionnez gke_metric_dataset.
  5. Dans le champ "Table", sélectionnez container_recommendations.
  6. Cliquez sur Ajouter.
  7. Cliquez sur Ajouter au rapport.

Détails du modèle Looker Studio

La page d'informations du modèle Looker Studio fournit les informations suivantes :

  • Présentation du redimensionnement de charges de travail GKE : fournit une présentation de vos clusters, y compris :
    • Nombre de charges de travail optimisées et extensibles pouvant présenter des problèmes de fiabilité et de performances.
    • Économies potentielles de ressources liées au processeur et à la mémoire. Des valeurs positives indiquent un surprovisionnement, tandis que des valeurs négatives indiquent un sous-provisionnement.
  • Recommandations de charges de travail : fournit des recommandations pour les demandes de CPU/mémoire et les limites de charge de travail.
  • Charges de travail GKE à risque : affiche les charges de travail qui présentent le plus grand risque de rencontrer des problèmes de fiabilité et de performances.
  • Historique - Redimensionnement des charges de travail - Évaluation : Fournit une vue historique du redimensionnement des charges de travail et de la réduction du nombre de charges de travail optimisées permettant d'évaluer l'efficacité de l'opération.

Recommandation de conteneur pour les demandes et limites de ressources processeur

Si les valeurs de la demande et de la limite de ressources processeur des charges de travail sont égales, la qualité de service est considérée comme garantie et la recommandation de processeur est définie sur la valeur maximale dans la période de 14 jours. Sinon, le 95e centile de la recommandation de demande de ressources processeur dans les 14 jours est utilisé.

Lorsque les valeurs de la demande et de la limite de ressources processeur sont égales, la recommandation de limite du processeur est définie sur la demande de ressources processeur spécifiée par la recommandation maximale du VPA, pour les objets de déploiement exclusivement, ainsi qu'une utilisation du processeur basée sur une utilisation cible de 70 %. Si la demande et la limite de la charge de travail ne sont pas identiques, le ratio de la limite existante est utilisé.

Recommandation de conteneur pour les demandes et limites de ressources mémoire

Pour garantir la fiabilité des charges de travail, les recommandations de mémoire utilisent la recommandation maximale du VPA, pour les objets de déploiement exclusivement, ainsi qu'une utilisation de mémoire maximale basée sur une utilisation cible de 80 %. Vous pouvez mettre à jour les valeurs d'utilisation cible dans la requête de la vue container_recommendation.

Il est recommandé d'utiliser la même quantité de mémoire pour les demandes et les limites, car la mémoire est une ressource incompressible. Une fois la mémoire épuisée, le pod doit être supprimé. Afin d'éviter la suppression des pods (ainsi qu'un environnement instable), la mémoire demandée doit correspondre à la limite de mémoire.

Hiérarchiser les recommandations

Une valeur de priorité est attribuée à chaque ligne pour afficher les charges de travail qui nécessitent une attention immédiate en fonction des recommandations. Les unités de processeur et de mémoire sont différentes. Pour normaliser les unités, le ratio du prix à la demande du type de machine E2 entre le processeur et la mémoire prédéfinis est utilisé comme approximation pour convertir les unités de mémoire en unités de processeur.

La priorité est calculée à l'aide de la formule suivante :

priority = (CPU requested - CPU recommendation) + ((memory requested -
memory recommendation) / (vCPUs on-demand pricing /memory on-demand pricing ))

Pour Autopilot, le nombre total des ressources demandées par votre configuration de déploiement doit être inférieur aux valeurs minimales et maximales autorisées.

Afficher les recommandations du VPA pour plusieurs projets

Pour afficher les recommandations de conteneurs du VPA pour plusieurs projets, utilisez un nouveau projet en tant que projet effectuant une surveillance.

Lorsque vous déployez ce projet dans votre environnement de production, ajoutez tous les projets que vous souhaitez analyser au champ d'application des métriques du nouveau projet.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

Étape suivante