Dans ce tutoriel, vous pouvez configurer l'autoscaling en fonction de l'une des métriques suivantes :
Pub/Sub
Tâches en attente Pub/Sub
Scaling basé sur une métrique externe qui signale le nombre de messages non confirmés restant dans un abonnement Pub/Sub. Cela peut véritablement réduire la latence avant que cela ne devienne un problème, mais cela peut utiliser relativement plus de ressources que l'autocaling basé sur l'utilisation du processeur.
Métrique personnalisée
Métrique Prometheus personnalisée
Scaling basé sur une métrique personnalisée définie par l'utilisateur, exportée au format Prometheus via le service Prometheus géré par Google. Votre métrique Prometheus doit être de type Gauge.
L'autoscaling consiste essentiellement à trouver un juste équilibre entre coût et latence. Vous pouvez tester une combinaison de ces métriques et d'autres pour identifier une stratégie adaptée à vos besoins.
Déployer l'adaptateur de métriques personnalisées
L'adaptateur de métriques personnalisées permet à votre cluster d'échanger des métriques avec Cloud Monitoring.
Pub/Sub
La procédure d'installation de l'adaptateur de métriques personnalisées diffère selon que la fédération d'identité de charge de travail pour GKE est activée ou non sur le cluster. Sélectionnez l'option correspondant à la configuration que vous avez choisie lorsque vous avez créé votre cluster.
Workload Identity
Accordez à votre utilisateur la possibilité de créer les rôles d'autorisation requis :
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Déployez l'adaptateur de métriques personnalisées sur votre cluster :
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
L'adaptateur utilise le compte de service Kubernetes custom-metrics-stackdriver-adapter
dans l'espace de noms custom-metrics
. Autorisez ce compte de service à lire les métriques Cloud Monitoring en lui attribuant le rôle Lecteur Monitoring :
gcloud projects add-iam-policy-binding projects/$PROJECT_ID \
--role roles/monitoring.viewer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Ancienne méthode d'authentification
Accordez à votre utilisateur la possibilité de créer les rôles d'autorisation requis :
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Déployez l'adaptateur de métriques personnalisées sur votre cluster :
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Métrique personnalisée
La procédure d'installation de l'adaptateur de métriques personnalisées diffère selon que la fédération d'identité de charge de travail pour GKE est activée ou non sur le cluster. Sélectionnez l'option correspondant à la configuration que vous avez choisie lorsque vous avez créé votre cluster.
Workload Identity
Accordez à votre utilisateur la possibilité de créer les rôles d'autorisation requis :
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Déployez l'adaptateur de métriques personnalisées sur votre cluster :
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
L'adaptateur utilise le compte de service Kubernetes custom-metrics-stackdriver-adapter
dans l'espace de noms custom-metrics
. Autorisez ce compte de service à lire les métriques Cloud Monitoring en lui attribuant le rôle Lecteur Monitoring :
gcloud projects add-iam-policy-binding projects/$PROJECT_ID \
--role roles/monitoring.viewer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Ancienne méthode d'authentification
Accordez à votre utilisateur la possibilité de créer les rôles d'autorisation requis :
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Déployez l'adaptateur de métriques personnalisées sur votre cluster :
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Déployer une application avec des métriques
Téléchargez le dépôt contenant le code de l'application pour ce tutoriel :
Pub/Sub
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/databases/cloud-pubsub
Métrique personnalisée
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/observability/custom-metrics-autoscaling/google-managed-prometheus
Le dépôt contient du code qui exporte les métriques vers Cloud Monitoring :
Pub/Sub
Cette application interroge un abonnement Pub/Sub pour rechercher de nouveaux messages, en les confirmant à leur arrivée. Les métriques d'abonnement Pub/Sub sont automatiquement collectées par Cloud Monitoring.
Métrique personnalisée
Cette application répond à toute requête Web sur le chemin /metrics
avec une métrique de valeur constante au format Prometheus.
Le dépôt contient également un fichier manifeste Kubernetes pour déployer l'application sur votre cluster. Un déploiement est un objet de l'API Kubernetes qui vous permet d'exécuter plusieurs instances dupliquées de pods répartis entre les nœuds d'un cluster :
Pub/Sub
Le fichier manifeste n'est pas le même pour les clusters sur lesquels la fédération d'identité de charge de travail pour GKE est activée que pour ceux où elle est désactivée. Sélectionnez l'option correspondant à la configuration choisie lorsque vous avez créé votre cluster.
Workload Identity
Ancienne méthode d'authentification
Métrique personnalisée
Avec la ressource PodMonitoring, Google Cloud Managed Service pour Prometheus exporte les métriques Prometheus vers Cloud Monitoring :
À compter de la version 1.27 de GKE Standard ou de la version 1.25 de GKE Autopilot, Google Cloud Managed Service pour Prometheus est activé par défaut. Pour activer Google Cloud Managed Service pour Prometheus dans les clusters de versions antérieures, consultez Activer la collecte gérée.
Déployez l'application sur votre cluster :
Pub/Sub
La procédure de déploiement de votre application diffère pour les clusters avec ou sans fédération d'identité de charge de travail pour GKE activée. Sélectionnez l'option correspondant à la configuration que vous avez choisie lorsque vous avez créé votre cluster.
Workload Identity
Activez l'API Pub/Sub sur votre projet :
gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com
Créez un sujet et un abonnement Pub/Sub :
gcloud pubsub topics create echo gcloud pubsub subscriptions create echo-read --topic=echo
Déployez l'application sur votre cluster :
kubectl apply -f deployment/pubsub-with-workload-identity.yaml
Cette application définit un compte de service Kubernetes
pubsub-sa
. Attribuez-lui le rôle Abonné Pub/Sub afin que l'application puisse publier des messages sur le sujet Pub/Sub.gcloud projects add-iam-policy-binding projects/$PROJECT_ID \ --role=roles/pubsub.subscriber \ --member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/pubsub-sa
La commande précédente utilise un identifiant principal, qui permet à IAM de faire directement référence à un compte de service Kubernetes.
Bonne pratique: Utilisez des identifiants de comptes principaux, mais tenez compte de la limite précisée dans la description d'une autre méthode.
Ancienne méthode d'authentification
Activez l'API Pub/Sub sur votre projet :
gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com
Créez un sujet et un abonnement Pub/Sub :
gcloud pubsub topics create echo gcloud pubsub subscriptions create echo-read --topic=echo
Créez un compte de service avec accès à Pub/Sub :
gcloud iam service-accounts create autoscaling-pubsub-sa gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber"
Téléchargez le fichier de clé du compte de service :
gcloud iam service-accounts keys create key.json \ --iam-account autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com
Importez la clé du compte de service dans votre cluster en tant que secret :
kubectl create secret generic pubsub-key --from-file=key.json=./key.json
Déployez l'application sur votre cluster :
kubectl apply -f deployment/pubsub-with-secret.yaml
Métrique personnalisée
kubectl apply -f custom-metrics-gmp.yaml
Après avoir attendu que l'application soit déployée, tous les pods passent à l'état Ready
:
Pub/Sub
kubectl get pods
Sortie :
NAME READY STATUS RESTARTS AGE
pubsub-8cd995d7c-bdhqz 1/1 Running 0 58s
Métrique personnalisée
kubectl get pods
Sortie :
NAME READY STATUS RESTARTS AGE
custom-metrics-gmp-865dffdff9-x2cg9 1/1 Running 0 49s
Afficher les métriques dans Cloud Monitoring
À mesure que votre application s'exécute, elle écrit vos métriques dans Cloud Monitoring.
Pour afficher les métriques d'une ressource surveillée à l'aide de l'explorateur de métriques, procédez comme suit :
-
Dans la console Google Cloud , accédez à la page leaderboard Explorateur de métriques :
Accéder à l'explorateur de métriques
Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Monitoring.
- Dans l'élément Métrique, développez le menu Sélectionner une métrique, puis sélectionnez un type de ressource et un type de métrique. Par exemple, pour représenter graphiquement l'utilisation du processeur d'une machine virtuelle, procédez comme suit :
- (Facultatif) Pour réduire le nombre d'options du menu, saisissez une partie du nom de la métrique dans la barre de filtre. Pour cet exemple, saisissez
utilization
. - Dans le menu Ressources actives, sélectionnez Instance de VM.
- Dans le menu Catégories de métriques actives, sélectionnez Instance.
- Dans le menu Métriques actives, sélectionnez Utilisation du processeur, puis cliquez sur Appliquer.
- (Facultatif) Pour réduire le nombre d'options du menu, saisissez une partie du nom de la métrique dans la barre de filtre. Pour cet exemple, saisissez
Pour filtrer les séries temporelles affichées, utilisez l'élément Filtre.
Pour combiner des séries temporelles, utilisez les menus de l'élément Agrégation. Par exemple, pour afficher l'utilisation du processeur pour vos VM en fonction de leur zone, définissez le premier menu sur Moyenne et le second sur zone.
Toutes les séries temporelles sont affichées lorsque le premier menu de l'élément Agrégation est défini sur Non agrégé. Les paramètres par défaut de l'élément Aggregation (Agrégation) sont déterminés par le type de métrique que vous avez sélectionné.
Le type de ressource et les métriques sont les suivants :
Pub/Sub
Type de ressource : pubsub_subscription
Métrique : pubsub.googleapis.com/subscription/num_undelivered_messages
Métrique personnalisée
Type de ressource : prometheus_target
Métrique : prometheus.googleapis.com/custom_prometheus/gauge
Selon la métrique, vous ne verrez peut-être pas beaucoup d'activité dans l'explorateur de métriques Cloud Monitoring. Ne soyez pas étonné si votre statistique ne se met pas à jour.
Créer un objet HorizontalPodAutoscaler
Une fois que vous avez vu votre métrique dans Cloud Monitoring, vous pouvez déployer un objet HorizontalPodAutoscaler
pour redimensionner votre déploiement en fonction de votre métrique.
Pub/Sub
Métrique personnalisée
Déployez HorizontalPodAutoscaler
sur votre cluster :
Pub/Sub
kubectl apply -f deployment/pubsub-hpa.yaml
Métrique personnalisée
kubectl apply -f custom-metrics-gmp-hpa.yaml
Générer la charge
Pour certaines métriques, vous devrez peut-être générer une charge pour surveiller l'autoscaling :
Pub/Sub
Publiez 200 messages dans le sujet Pub/Sub :
for i in {1..200}; do gcloud pubsub topics publish echo --message="Autoscaling #${i}"; done
Métrique personnalisée
Non applicable : le code utilisé dans cet exemple exporte une valeur constante de 40
pour la métrique personnalisée. L'objet HorizontalPodAutoscaler est défini avec une valeur cible de 20
. Il tente donc de faire évoluer automatiquement le déploiement à la hausse.
Vous devrez peut-être patienter quelques minutes, le temps que l'outil HorizontalPodAutoscaler réponde aux changements de métriques.
Observer le scaling à la hausse de HorizontalPodAutoscaler
Vous pouvez vérifier le nombre d'instances répliquées que comporte actuellement votre déploiement en exécutant la commande suivante :
kubectl get deployments
Après avoir laissé le temps à la métrique de se propager, le déploiement crée cinq pods pour gérer les tâches en attente.
Vous pouvez également inspecter l'état et l'activité récente de l'outil HorizontalPodAutoscaler en exécutant la commande suivante :
kubectl describe hpa