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.
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.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
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 - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
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 -
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.
- Replace
Configurer votre environnement
Pour configurer votre environnement, procédez comme suit :
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.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
Clonez le dépôt de code.
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
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.
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.
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.
Créez un dépôt Docker :
gcloud artifacts repositories create main --repository-format=docker \ --location=$REGION \ --description="docker repository"
Configurez l'authentification sur les dépôts Docker :
gcloud auth configure-docker $REGION-docker.pkg.dev
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
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
etTF_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
etMETRIC_WINDOW
sur2592000
secondes (30 jours).
Déployer la configuration Terraform
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.
Exécutez manuellement le job Cloud Scheduler :
gcloud scheduler jobs run recommendation-schedule --location ${REGION}
Vérifier le déploiement
Sélectionnez l'onglet Journaux sur la page d'informations
workload-recommendations
.Vérifiez que les journaux de métriques sont en cours de traitement dans la console 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
Accédez à la page "BigQuery" de la console Google Cloud :
Vérifiez que les données sont visibles dans la table
gke_metrics
et la vuecontainer_recommendations
. Selon le nombre de charges de travail, l'écriture de toutes les métriques dans BigQuery peut prendre quelques minutes.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
:
- Ouvrez le modèle de tableau de bord de redimensionnement des charges de travail.
- Cliquez sur Utiliser mes propres données.
- Sélectionnez votre projet.
- Dans le champ "Ensemble de données", sélectionnez
gke_metric_dataset
. - Dans le champ "Table", sélectionnez
container_recommendations
. - Cliquez sur Ajouter.
- 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
- Découvrez des recommandations de conception et des bonnes pratiques pour optimiser le coût des charges de travail Google Cloud dans le framework d'architecture Google Cloud : optimisation des coûts.
- Pour en savoir plus sur l'optimisation des coûts de votre cluster lors des périodes de faible demande, consultez la section Réduire les coûts en effectuant un scaling à la baisse des clusters GKE pendant les heures creuses.
- Apprenez-en plus sur l'optimisation des coûts sur GKE dans la section Surveiller des clusters GKE pour optimiser les coûts à l'aide de Monitoring.