Vous pouvez configurer l'autoscaler pour procéder au scaling en fonction des types de métriques suivants :
- Scaling à l'aide de métriques par instance, où la métrique sélectionnée fournit pour chaque instance du groupe d'instances géré des données qui indiquent l'utilisation des ressources
- Scaling à l'aide de métriques par groupe (bêta), où le scaling du groupe est basé sur une métrique qui fournit une valeur liée à l'ensemble du groupe d'instances géré
Ces métriques peuvent être des métriques standards fournies par le service Stackdriver Monitoring ou des métriques Stackdriver Monitoring personnalisées que vous créez.
Avant de commencer
- Si vous souhaitez utiliser les exemples de lignes de commande de ce guide, procédez comme suit :
- Installez la dernière version de l'outil de ligne de commande gcloud ou appliquez la mise à jour correspondante.
- Définissez une région et une zone par défaut.
- Si vous voulez utiliser les exemples d'API de ce guide, configurez l'accès aux API.
- Consultez la section Avant de commencer de la section de présentation de l'autoscaling pour connaître les étapes de configuration importantes.
Métriques par instance
Les métriques par instance fournissent des données sur chacune des instances d'un groupe. Les métriques fournissent des données sur chaque instance du groupe d'instances géré, qui indiquent l'utilisation des ressources. Pour les métriques par instance, le groupe d'instances ne peut pas dépasser une taille de 1, car l'autoscaler nécessite des métriques sur au moins une instance en cours d'exécution pour fonctionner.
Si vous devez effectuer un scaling avec d'autres métriques Stackdriver qui ne sont pas spécifiques à des instances individuelles ou réduire parfois vos groupes d'instances à zéro instance, vous pouvez configurer vos instances pour qu'elles évoluent à l'aide de métriques par groupe.
Métriques standards par instance
Stackdriver Monitoring possède un ensemble de métriques standards que vous pouvez utiliser pour surveiller vos instances de machine virtuelle. Cependant, toutes les métriques standards ne constituent pas une métrique valide utilisable par l'autoscaler.
Une métrique valide utilisable pour le scaling répond aux critères suivants :
La métrique standard doit contenir des données pour une ressource surveillée
gce_instance
. Vous pouvez utiliser l'appel d'APItimeSeries.list
pour vérifier si une métrique spécifique exporte des données pour cette ressource.La métrique standard décrit le degré d'occupation d'une instance, et la valeur de la métrique augmente ou diminue proportionnellement au nombre d'instances de machine virtuelle figurant dans le groupe.
Dans l'exemple suivant, la métrique n'est pas valide, car la valeur ne change pas en fonction de l'utilisation, et l'autoscaler ne peut pas l'utiliser pour procéder à un scaling proportionnel :
compute.googleapis.com/instance/cpu/reserved_cores
Après avoir sélectionné une métrique standard que vous souhaitez utiliser pour votre autoscaler, vous pouvez configurer l'autoscaling à l'aide de cette métrique.
Métriques personnalisées
Vous pouvez créer des métriques personnalisées à l'aide de Stackdriver Monitoring et écrire vos propres données de surveillance dans le service Stackdriver Monitoring. Cela vous permet d'accéder aux données Cloud Platform standards et à vos données de surveillance personnalisées, avec une structure de données familière et une syntaxe de requête cohérente. Si vous disposez d'une métrique personnalisée, vous pouvez choisir de procéder au scaling en fonction des données de ces métriques.
Prérequis
Pour utiliser des métriques personnalisées, vous devez avoir effectué les opérations suivantes :
- Créer une métrique personnalisée. Pour en savoir plus sur la création d'une métrique personnalisée, consultez la documentation relative aux métriques personnalisées.
- Configurer votre groupe d'instances géré pour exporter la métrique personnalisée à partir de toutes les instances qu'il contient.
Sélectionner une métrique personnalisée valide
Toutes les métriques personnalisées ne peuvent pas être utilisées par l'autoscaler. Une métrique personnalisée valide possède toutes les propriétés suivantes :
- La métrique doit être une métrique par instance. Elle doit exporter les données correspondant à chacune des instances Compute Engine séparément.
- Les valeurs par instance exportées doivent être associées à une ressource surveillée
gce_instance
, qui contient les étiquettes suivantes :zone
avec le nom de la zone dans laquelle se trouve l'instance.instance_id
avec la valeur de l'ID numérique unique attribué à l'instance.
- La métrique doit exporter des données au moins toutes les 60 secondes. Vous pouvez exporter des données plus souvent afin que l'autoscaler réponde plus rapidement aux changements de charge. Si vous exportez vos données moins souvent, l'autoscaler ne pourra peut-être pas répondre assez rapidement aux changements de charge.
- La métrique doit être une métrique d'utilisation valide, c'est-à-dire que ses données peuvent être utilisées pour augmenter ou diminuer proportionnellement le nombre de machines virtuelles.
- La métrique doit exporter des valeurs de données
int64
oudouble
.
Pour que l'autoscaler fonctionne avec votre métrique personnalisée, vous devez exporter les données de cette métrique personnalisée à partir de toutes les instances du groupe d'instances géré.
curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:GooglePour en savoir plus sur l'utilisation du serveur de métadonnées, consultez la section Serveur de métadonnées.
Configurer l'autoscaling à l'aide de métriques de surveillance par instance
Le processus de configuration d'un autoscaler est le même pour une métrique standard et pour une métrique personnalisée. Pour créer un autoscaler utilisant les métriques Stackdriver Monitoring, vous devez fournir l'identifiant de métrique, le niveau d'utilisation cible souhaité et le type de cible d'utilisation. Chacune de ces propriétés est brièvement décrite ci-dessous :
Identifiant de métrique : nom de la métrique à utiliser. Si vous utilisez une métrique personnalisée, vous avez défini ce nom lors de sa création. L'identifiant apparaît au format suivant :
custom.googleapis.com/path/to/metric
Pour en savoir plus sur la création, la consultation et la lecture de métriques, consultez la section Utiliser des métriques personnalisées.
Niveau d'utilisation cible : niveau d'utilisation cible que l'autoscaler doit maintenir pour cette métrique. Il s'agit d'un nombre positif. Par exemple,
24.5
et1100
sont des valeurs acceptables. Notez que ce niveau d'utilisation est différent de l'utilisation du processeur et de l'équilibrage de charge, qui doit être une valeur flottante comprise entre 0.0 et 1.0.Type de cible : définit la façon dont l'autoscaler calcule les données collectées à partir des instances. Les types de cibles possibles sont les suivants :
GAUGE
: l'autoscaler calcule la valeur moyenne des données collectées au cours des dernières minutes et les compare à sa valeur d'utilisation cible.DELTA_PER_MINUTE
: l'autoscaler calcule le taux moyen de croissance par minute et le compare à l'utilisation cible.DELTA_PER_SECOND
: l'autoscaler calcule le taux moyen de croissance par seconde et le compare à l'utilisation cible.
Si vous avez spécifié le niveau d'utilisation cible souhaité en secondes, vous devez utiliser
DELTA_PER_SECOND
. De même, utilisezDELTA_PER_MINUTE
si vous avez exprimé le niveau d'utilisation cible souhaité en minutes, afin que l'autoscaler puisse effectuer des comparaisons précises.
Console
Les instructions de configuration d'autoscaling sont différentes entre les groupes d'instances gérés d'une seule zone et les groupes d'instances gérés régionaux. Les groupes d'instances gérés régionaux ne sont pas compatibles avec le filtrage des métriques par instance.
Pour configurer l'autoscaling pour un groupe d'instances géré régional (plusieurs zones) :
- Accédez à la page Groupes d'instances.
- Si vous ne disposez pas de groupe d'instances, créez-en un. Sinon, cliquez sur le nom d'un groupe d'instances dans la liste pour ouvrir la page d'informations du groupe d'instances. Le groupe doit être de type régional.
- Sur la page d'informations du groupe d'instances, cliquez sur le bouton Modifier le groupe.
- Sous Autoscaling, sélectionnez Activé pour activer l'autoscaling.
- Dans la section Autoscaling basé sur, sélectionnez Métrique Stackdriver Monitoring.
- Dans la section Identifiant de la métrique, saisissez le nom de la métrique au format suivant :
example.googleapis.com/path/to/metric
. - Dans la section Cible, spécifiez la valeur cible.
- Dans la section Type de cible, spécifiez le type de cible correspondant au type de mesure de la métrique.
- Enregistrez vos modifications lorsque vous êtes prêt.
Pour configurer l'autoscaling pour un groupe d'instances géré d'une seule zone :
- Accédez à la page Groupes d'instances.
- Si vous ne disposez pas de groupe d'instances, créez-en un. Sinon, cliquez sur le nom d'un groupe d'instances pour ouvrir la page d'informations du groupe d'instances. Le groupe d'instances doit concerner une seule zone.
- Sur la page d'informations du groupe d'instances, cliquez sur le bouton Modifier le groupe.
- Sous Autoscaling, sélectionnez Activé pour activer l'autoscaling.
- Dans la section Autoscaling basé sur, sélectionnez Métrique Stackdriver Monitoring.
- Dans la section Champ d'application de l'exportation de la métrique, sélectionnez Série temporelle par instance pour configurer l'autoscaling à l'aide de métriques par instance.
- Dans la section Identifiant de la métrique, saisissez le nom de la métrique au format suivant :
example.googleapis.com/path/to/metric
. - Dans la section Expression de filtre supplémentaire, vous avez la possibilité de saisir un filtre (facultatif) pour utiliser des valeurs individuelles de métriques comportant plusieurs flux ou étiquettes. Pour en savoir plus, consultez la section Filtrer des métriques par instance.
- Dans la section Cible d’utilisation, spécifiez la valeur cible.
- Dans la section Type de cible d'utilisation, vérifiez que le type de cible correspond au type de mesure de la métrique.
- Enregistrez vos modifications lorsque vous êtes prêt.
gcloud
Par exemple, dans gcloud
, la commande suivante crée un autoscaler utilisant le type de cible GAUGE
. Avec le paramètre --custom-metric-utilization
, le paramètre --max-num-replicas
est également nécessaire pour la création d'un autoscaler :
gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
--custom-metric-utilization metric=example.googleapis.com/path/to/metric,utilization-target-type=GAUGE,utilization-target=10 \
--max-num-replicas 20 \
--cool-down-period 90
Vous pouvez éventuellement utiliser l'indicateur --cool-down-period
, qui indique à l'autoscaler le nombre de secondes à attendre après le démarrage d'une nouvelle machine virtuelle avant que l'autoscaler ne commence à collecter les informations d'utilisation. Ce paramètre tient compte de la durée nécessaire à l'initialisation de la machine virtuelle, au cours de laquelle les données d'utilisation collectées ne présentent pas une fiabilité suffisante pour l'autoscaling. Par défaut, l'intervalle entre chaque période d'autoscaling est de 60 secondes.
Pour les groupes d'instances gérés de plusieurs zones, utilisez l'indicateur --region
pour spécifier l'emplacement du groupe d'instances. Exemple :
gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
--custom-metric-utilization metric=example.googleapis.com/path/to/metric,utilization-target-type=GAUGE,utilization-target=10 \
--max-num-replicas 20 \
--cool-down-period 90 \
--region us-central1
Pour afficher la liste complète des commandes et des indicateurs gcloud
disponibles, consultez la documentation de référence de gcloud
.
API
Remarque : Même si l'autoscaling est une fonctionnalité des groupes d'instances gérés, il s'agit d'une ressource d'API distincte. Gardez cela à l'esprit lorsque vous créez des demandes d'API pour l'autoscaling.
Dans l'API, envoyez une demande POST
à l'URL suivante, en remplaçant myproject
par l'ID de votre projet et us-central1-f
par la zone de votre choix :
POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/
Le corps de votre demande doit contenir les champs name
, target
et autoscalingPolicy
. Dans autoscalingPolicy
, fournissez les propriétés maxNumReplicas
et customMetricUtilizations
.
Vous pouvez éventuellement utiliser le paramètre coolDownPeriodSec
, qui indique à l'autoscaler le nombre de secondes à attendre après le démarrage d'une nouvelle instance avant que l'autoscaler ne commence à collecter les informations d'utilisation. Une fois l'intervalle entre chaque période d'autoscaling écoulé, l'autoscaler commence à collecter les informations d'utilisation de la nouvelle instance et détermine si le groupe nécessite des instances supplémentaires. Ce paramètre tient compte de la durée nécessaire à l'initialisation de l'instance, au cours de laquelle les données d'utilisation collectées ne présentent pas une fiabilité suffisante pour l'autoscaling. Par défaut, l'intervalle entre chaque période d'autoscaling est de 60 secondes.
POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers
{
"name": "example-autoscaler",
"target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
"autoscalingPolicy": {
"maxNumReplicas": 10,
"coolDownPeriodSec": 90,
"customMetricUtilizations": [
{
"metric": "example.googleapis.com/some/metric/name",
"utilizationTarget": 10,
"utilizationTargetType": "GAUGE"
} ]
}
}
Filtrer les métriques par instance
Vous pouvez appliquer des filtres aux métriques Stackdriver par instance, ce qui vous permet de procéder au scaling des groupes d'instances gérés d'une seule zone à l'aide de valeurs individuelles de métriques comportant plusieurs flux ou étiquettes.
Exigences relatives au filtrage des métriques par instance
Le filtrage d'autoscaler est compatible avec la syntaxe du filtre de Stackdriver Monitoring. Les filtres des métriques par instance doivent répondre aux exigences suivantes :
- Vous ne pouvez utiliser que l'opérateur
AND
pour effectuer une jointure de sélecteurs. - Vous pouvez utiliser l'opérateur de comparaison d'égalité directe
=
, mais pas avec toutes les fonctions. Par exemple, vous ne pouvez pas utiliser la fonctionstartswith()
avec l'opérateur de comparaison=
. - Vous n'avez pas besoin de définir les sélecteurs
resource.type
ouresource.label.*
. Les métriques par instance utilisent toujours toutes les ressources d'instances du groupe. - Pour que les résultats soient optimaux, le filtre doit être suffisamment précis pour afficher une seule série temporelle par instance. Si le filtre affiche plusieurs séries temporelles, elles sont cumulées.
Configurer les autoscalers pour filtrer les métriques
Utilisez la console Google Cloud Platform, l'outil de ligne de commande gcloud
bêta ou l'API bêta de Compute Engine pour ajouter des filtres de métriques afin de procéder à l'autoscaling d'un groupe d'instances géré d'une seule zone.
Console
Le processus de création d'un autoscaler filtrant une métrique par instance est semblable à celui de la création d'un autoscaler par instance normal, la différence étant que vous devez spécifier un filtre de métriques. Par exemple, la métrique compute.googleapis.com/instance/network/received_bytes_count
comprend les étiquettes instance_name
et loadbalanced
. Pour effectuer un filtrage en fonction du booléen loadbalanced
:
- Accédez à la page Groupes d'instances.
- Si vous ne disposez pas de groupe d'instances, créez-en un. Sinon, cliquez sur le nom d'un groupe d'instances pour ouvrir la page d'informations du groupe d'instances. Le groupe d'instances doit concerner une seule zone.
- Sur la page d'informations du groupe d'instances, cliquez sur le bouton Modifier le groupe.
- Sous Autoscaling, sélectionnez Activé pour activer l'autoscaling.
- Dans la section Autoscaling basé sur, sélectionnez Métrique Stackdriver Monitoring.
- Dans la section Champ d'application de l'exportation de la métrique, sélectionnez Série temporelle par instance pour configurer l'autoscaling à l'aide de métriques par instance.
- Dans la section Identifiant de la métrique, saisissez le nom de la métrique. Par exemple,
compute.googleapis.com/instance/network/received_bytes_count
. - Dans la section Expression de filtre supplémentaire, saisissez un filtre. Par exemple,
'metric.label.loadbalanced = true'
. - Enregistrez vos modifications lorsque vous êtes prêt.
gcloud
Le processus de création d'un autoscaler filtrant une métrique par instance est semblable à celui de la création d'un autoscaler par instance normal, la différence étant que vous devez spécifier un filtre de métriques et des indicateurs individuels pour la cible d'utilisation et le type de cible. Par exemple, la métrique compute.googleapis.com/instance/network/received_bytes_count
comprend les étiquettes instance_name
et loadbalanced
. Pour effectuer un filtrage en fonction du booléen loadbalanced
, spécifiez l'indicateur de filtre --stackdriver-metric-filter
avec la valeur 'metric.label.loadbalanced = true'
. Incluez les indicateurs de cible d'utilisation et de type de cible individuellement.
gcloud beta compute instance-groups managed set-autoscaling example-managed-instance-group \
--update-stackdriver-metric=compute.googleapis.com/instance/network/received_bytes_count \
--stackdriver-metric-utilization-target-utilization-target=10 \
--stackdriver-metric-utilization-target-type=DELTA_PER_SEC \
--stackdriver-metric-filter='metric.label.loadbalanced = true' \
--max-num-replicas 20 \
--cool-down-period 90
Dans cet exemple, l'autoscaling est configuré pour n'utiliser que les données de trafic loadbalanced
dans la cible d'utilisation.
Pour afficher la liste complète des commandes et des indicateurs gcloud
disponibles, consultez la documentation de référence de la version bêta de gcloud
.
API
Remarque : Même si l'autoscaling est une fonctionnalité des groupes d'instances gérés, il s'agit d'une ressource d'API distincte. Gardez cela à l'esprit lorsque vous créez des demandes d'API pour l'autoscaling.
Le processus de création d'un autoscaler filtrant une métrique par instance est semblable à celui de la création d'un autoscaler par instance normal, la différence étant que vous devez spécifier un filtre de métriques et des indicateurs individuels pour la cible d'utilisation et le type de cible. Par exemple, la métrique compute.googleapis.com/instance/network/received_bytes_count
comprend les étiquettes instance_name
et loadbalanced
. Pour effectuer un filtrage en fonction du booléen loadbalanced
, spécifiez l'indicateur de filtre filter
avec la valeur "metric.label.loadbalanced = true"
.
Dans l'API, envoyez une demande POST
à l'URL suivante, en remplaçant myproject
par l'ID de votre projet et us-central1-f
par la zone de votre choix. Le corps de la demande doit contenir les champs name
, target
et autoscalingPolicy
. Dans autoscalingPolicy
, fournissez les propriétés maxNumReplicas
et customMetricUtilizations
.
POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers
{
"name": "example-autoscaler",
"target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
"autoscalingPolicy": {
"maxNumReplicas": 10,
"coolDownPeriodSec": 90,
"customMetricUtilizations": [
{
"metric": "compute.googleapis.com/instance/network/received_bytes_count",
"filter": "metric.label.loadbalanced = true",
"utilizationTarget": 10,
"utilizationTargetType": "DELTA_PER_SEC"
}
]
}
}
Dans cet exemple, l'autoscaling est configuré pour n'utiliser que les données de trafic loadbalanced
dans la cible d'utilisation.
Métriques par groupe
Les métriques par groupe permettent l'autoscaling avec une métrique standard ou personnalisée qui n'exporte pas les données d'utilisation par instance. Au lieu de cela, le groupe évolue en fonction d'une valeur qui s'applique à l'ensemble du groupe et correspond au volume de travail disponible pour le groupe ou à son activité. Le groupe évolue en fonction de la fluctuation de la valeur de la métrique du groupe et de la configuration que vous définissez.
Lorsque vous configurez l'autoscaling sur des métriques par groupe, vous devez indiquer comment vous souhaitez que l'autoscaler provisionne les instances par rapport à la métrique :
- Attribution d'instances : spécifiez une attribution d'instances pour indiquer que l'autoscaler doit ajouter ou supprimer des instances en fonction du volume de travail disponible pour chaque instance. Indiquez une valeur pour ce paramètre qui représente le volume de travail attendu pour chaque instance.
Par exemple, spécifiez
2
pour attribuer deux unités de travail à chaque instance ou spécifiez0.5
pour attribuer une demi-unité de travail à chaque instance. L'autoscaler ajoute suffisamment d'instances au groupe d'instances géré pour terminer le travail disponible, comme indiqué par la métrique. Si la valeur de la métrique est10
et que vous avez attribué0.5
unité de travail à chaque instance, l'autoscaler crée 20 instances dans le groupe d'instances géré. Le scaling avec attribution d'instances permet au groupe d'instances de passer à0
instance lorsque la valeur de la métrique tombe à0
, puis d'augmenter à nouveau le nombre d'instances lorsqu'elle dépasse0
. Le diagramme suivant montre la relation proportionnelle entre la valeur de la métrique et le nombre d'instances lors du scaling avec une règle d'attribution d'instances. - Cible d'utilisation : spécifiez une cible d'utilisation pour indiquer que l'autoscaler doit ajouter ou supprimer des instances afin d'essayer de maintenir la métrique à une valeur spécifiée. Lorsque la métrique est supérieure à la cible spécifiée, l'autoscaler ajoute progressivement des instances jusqu'à ce que la métrique atteigne la valeur cible. Lorsque la métrique est inférieure à la valeur cible spécifiée, l'autoscaler supprime progressivement les instances jusqu'à ce que la métrique atteigne la valeur cible.
Le scaling avec une cible d'utilisation ne peut pas réduire le groupe à
0
instance. Le diagramme suivant montre comment l'autoscaler ajoute et supprime des instances en réponse à une valeur de métrique afin de maintenir une cible d'utilisation.
Chaque option présente les cas d'utilisation suivants :
- Attribution d'instances : adaptez la taille de vos groupes d'instances gérés en fonction du nombre de messages non confirmés dans un abonnement Google Pub/Sub ou du taux de RPS total d'un point de terminaison du réseau.
- Cible d'utilisation : adaptez la taille de vos groupes d'instances gérés en fonction d'une cible d'utilisation pour une métrique personnalisée qui ne provient pas du processeur standard par instance ou des métriques d'utilisation de la mémoire. Par exemple, vous pouvez procéder au scaling du groupe en fonction d'une métrique de latence personnalisée.
Lorsque vous configurez l'autoscaling avec des métriques par groupe et que vous spécifiez une attribution d'instances, vos groupes d'instances peuvent être réduits à 0 instance. Si votre métrique n'indique aucun travail à effectuer pour votre groupe d'instances, le groupe se réduira à 0 instance jusqu'à ce que la métrique détecte la disponibilité d'un nouveau travail. Contrairement à l'attribution d'instances par groupe, l'autoscaling par instance nécessite des métriques d'utilisation des ressources d'au moins une instance, de sorte que le groupe ne puisse pas atteindre une taille inférieure à 1.
Filtrer les métriques par groupe
Vous pouvez appliquer des filtres aux métriques Stackdriver par groupe, ce qui vous permet de procéder au scaling de groupes d'instances gérés à l'aide de valeurs individuelles de métriques comportant plusieurs flux ou étiquettes.
Exigences relatives au filtrage des métriques par groupe
Le filtrage d'autoscaler est compatible avec la syntaxe du filtre de Stackdriver Monitoring. Les filtres des métriques par groupe doivent répondre aux exigences suivantes :
- Vous ne pouvez utiliser que l'opérateur
AND
pour effectuer une jointure de sélecteurs. - Vous ne pouvez pas utiliser l'opérateur de comparaison d'égalité directe
=
avec toutes les fonctions pour chaque sélecteur. - Vous pouvez spécifier un sélecteur de type de métrique
metric.type = "..."
dans le filtre et inclure également le champmetric
d'origine. Si vous le souhaitez, vous ne pouvez utiliser que le champmetric
. La métrique doit répondre aux exigences suivantes :- La métrique doit être spécifiée à au moins un emplacement.
- La métrique peut être spécifiée aux deux emplacements, mais doit être égale.
- Vous devez spécifier le sélecteur
resource.type
, mais vous ne pouvez pas le définir surgce_instance
si vous souhaitez effectuer un scaling à l'aide de métriques par groupe. - Afin que les résultats soient optimaux, le filtre doit être suffisamment précis pour afficher une seule série temporelle pour le groupe. Si le filtre affiche plusieurs séries temporelles, elles sont cumulées.
Configurer l'autoscaling à l'aide de métriques de surveillance par groupe
Utilisez la console Google Cloud Platform, l'outil de ligne de commande gcloud
bêta ou l'API bêta de Compute Engine pour configurer l'autoscaling avec des métriques par groupe pour un groupe d'instances géré d'une seule zone.
Console
- Accédez à la page Groupes d'instances.
- Si vous ne disposez pas de groupe d'instances, créez-en un. Sinon, cliquez sur le nom d'un groupe d'instances pour ouvrir la page d'informations du groupe d'instances. Le groupe d'instances doit concerner une seule zone.
- Sur la page d'informations du groupe d'instances, cliquez sur le bouton Modifier le groupe.
- Sous Autoscaling, sélectionnez Activé pour activer l'autoscaling.
- Dans la section Autoscaling basé sur, sélectionnez Métrique Stackdriver Monitoring.
- Dans la section Champ d'application de l'exportation de la métrique, sélectionnez Série temporelle unique par groupe.
- Dans la section Identifiant de la métrique, saisissez le nom de la métrique au format suivant :
example.googleapis.com/path/to/metric
. - Spécifiez le type de ressource de la métrique.
- Fournissez une expression de filtre supplémentaire pour utiliser des valeurs individuelles de métriques comportant plusieurs flux ou étiquettes. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.
- Dans la section Règle de mise à l'échelle, sélectionnez une attribution d'instances ou une cible d'utilisation.
- Si vous sélectionnez une règle d'attribution d'instances, indiquez une valeur d'attribution d'une seule instance représentant le volume de travail à attribuer à chaque instance du groupe d'instances géré. Par exemple, spécifiez
2
pour attribuer deux unités de travail à chaque instance. L'autoscaler maintient suffisamment d'instances pour terminer le travail disponible (comme indiqué par la métrique). Si la valeur de la métrique est10
et que vous avez attribué2
unités de travail à chaque instance, l'autoscaler crée5
instances dans le groupe d'instances géré. - Si vous sélectionnez une règle de cible d'utilisation :
- Indiquez une valeur cible d'utilisation qui représente la valeur de la métrique que l'autoscaler doit tenter de maintenir.
- Sélectionnez le type de cible d'utilisation qui représente le type de valeur de la métrique.
- Si vous sélectionnez une règle d'attribution d'instances, indiquez une valeur d'attribution d'une seule instance représentant le volume de travail à attribuer à chaque instance du groupe d'instances géré. Par exemple, spécifiez
- Enregistrez vos modifications lorsque vous êtes prêt.
gcloud
Créez un autoscaler pour un groupe d'instances géré de la même manière que l'autoscaler par instance, mais spécifiez l'indicateur --update-stackdriver-metric
. Vous pouvez préciser comment vous voulez que l'autoscaler provisionne les instances en incluant l'un des indicateurs suivants :
- Attribution d'instances : spécifiez l'indicateur
--stackdriver-metric-single-instance-assignment
. - Cible d'utilisation : spécifiez l'indicateur
--stackdriver-metric-utilization-target
.
Attribution d'instances :
Spécifiez une métrique à mesurer, puis l'indicateur --stackdriver-metric-single-instance-assignment
pour indiquer le volume de travail que chaque instance doit gérer. Vous devez également spécifier un filtre pour la métrique à l'aide de l'indicateur --stackdriver-metric-filter
.
gcloud beta compute instance-groups managed set-autoscaling [GROUP_NAME] \
--zone=[ZONE] \
--max-num-replicas=[MAX_INSTANCES] \
--min-num-replicas=[MIN_INSTANCES] \
--update-stackdriver-metric='[METRIC_URL]' \
--stackdriver-metric-filter='[METRIC_FILTER]' \
--stackdriver-metric-single-instance-assignment=[INSTANCE_ASSIGNMENT]
où :
[GROUP_NAME]
correspond au nom du groupe d'instances géré auquel vous souhaitez ajouter un autoscaler.[ZONE]
correspond à la zone où se trouve le groupe d'instances géré. Vous ne pouvez pas spécifier de région pour les autoscalers sur les métriques par groupe.[MAX_INSTANCES]
est le nombre maximal d'instances que l'autoscaler peut ajouter au groupe d'instances géré.[MIN_INSTANCES]
est le nombre minimal d'instances que l'autoscaler peut avoir dans le groupe d'instances géré.[METRIC_URL]
est une URL sans protocole d'une métrique Google Cloud Monitoring.[METRIC_FILTER]
est un filtre Stackdriver Monitoring dans lequel vous spécifiez un filtre de surveillance avec des valeursTimeSeries
etMonitoredResource
appropriées. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.[INSTANCE_ASSIGNMENT]
correspond au volume de travail à attribuer à chaque instance du groupe d'instances géré. Par exemple, spécifiez2
pour attribuer deux unités de travail à chaque instance ou spécifiez0.5
pour attribuer une demi-unité de travail à chaque instance. L'autoscaler ajoute suffisamment d'instances au groupe d'instances géré afin de garantir qu'elles peuvent terminer le travail disponible, comme indiqué par la métrique. Si la valeur de la métrique est10
et que vous avez attribué0.5
unité de travail à chaque instance, l'autoscaler provisionne20
instances dans le groupe d'instances géré.
Cible d'utilisation :
Dans certains cas, il est préférable d'utiliser des cibles d'utilisation avec des métriques par groupe plutôt que de spécifier un nombre d'instances par rapport à la valeur de la métrique mesurée par l'autoscaler. Vous pouvez toujours diriger l'autoscaler vers une métrique par groupe, mais celui-ci tente de conserver la cible d'utilisation spécifiée. Spécifiez la cible et le type de cible avec l'indicateur --stackdriver-metric-utilization-target
.
Vous devez également spécifier un filtre pour la métrique à l'aide de l'indicateur --stackdriver-metric-filter
.
gcloud beta compute instance-groups managed set-autoscaling [GROUP_NAME] \
--zone=[ZONE] \
--max-num-replicas=[MAX_INSTANCES] \
--min-num-replicas=[MIN_INSTANCES] \
--update-stackdriver-metric='[METRIC_URL]' \
--stackdriver-metric-filter='[METRIC_FILTER]' \
--stackdriver-metric-utilization-target=[TARGET_VALUE] \
--stackdriver-metric-utilization-target-type=[TARGET_TYPE]
où :
[GROUP_NAME]
correspond au nom du groupe d'instances géré auquel vous souhaitez ajouter un autoscaler.[ZONE]
correspond à la zone où se trouve le groupe d'instances géré. Vous ne pouvez pas spécifier de région pour les autoscalers sur les métriques par groupe.[MAX_INSTANCES]
est le nombre maximal d'instances que l'autoscaler peut ajouter au groupe d'instances géré.[MIN_INSTANCES]
est le nombre minimal d'instances que l'autoscaler peut avoir dans le groupe d'instances géré.[METRIC_URL]
est une URL sans protocole d'une métrique Google Cloud Monitoring.[METRIC_FILTER]
est un filtre Stackdriver Monitoring dans lequel vous spécifiez un filtre de surveillance avec des valeursTimeSeries
etMonitoredResource
appropriées. Vous devez spécifier une valeurresource.type
, mais vous ne pouvez pas spécifiergce_instance
si vous souhaitez effectuer un scaling à l'aide de métriques par groupe. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.[TARGET_VALUE]
correspond à la valeur de la métrique que l'autoscaler tente de maintenir.[TARGET_TYPE]
correspond au type de valeur de la métrique. Vous pouvez définir l'autoscaler pour surveiller la métrique en tant queGAUGE
, par ledelta-per-minute
de la valeur ou par ledelta-per-second
de la valeur.
Pour afficher la liste complète des commandes et des indicateurs gcloud
de l'autoscaler disponibles qui sont compatibles avec l'autoscaling par groupe, consultez la documentation de référence de la version bêta de gcloud
.
API
Remarque : Même si l'autoscaling est une fonctionnalité des groupes d'instances gérés, les [autoscalers](/compute/docs/reference/beta/autoscalers) constituent une ressource d'API distincte. Gardez cela à l'esprit lorsque vous créez des demandes d'API pour l'autoscaling.
Créez un autoscaler pour un groupe d'instances géré. Vous pouvez préciser comment vous voulez que l'autoscaler provisionne les instances en incluant l'un des paramètres suivants :
- Attribution d'instances : spécifiez le paramètre
singleInstanceAssignment
. - Cible d'utilisation : spécifiez le paramètre
utilizationTarget
.
Attribution d'instances :
Dans l'API, envoyez une demande POST
pour créer un autoscaler.
Dans le corps de la requête, incluez les paramètres normaux que vous utiliseriez pour créer un autoscaler par instance, mais spécifiez le paramètre single-instance-assignment
. Le paramètre indique le volume de travail que chaque instance doit gérer.
POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers
{
"name": "example-autoscaler",
"target": "zones/[ZONE]/instanceGroupManagers/[GROUP_NAME]",
"autoscalingPolicy": {
"maxNumReplicas": [MAX_INSTANCES],
"minNumReplicas": [MIN_INSTANCES],
"customMetricUtilizations": [
{
"metric": "[METRIC_URL]",
"filter": "[METRIC_FILTER]",
"singleInstanceAssignment": [INSTANCE_ASSIGNMENT]
}
],
}
}
où :
[PROJECT_ID]
correspond à votre ID de projet.[ZONE]
correspond à la zone où se trouve le groupe d'instances géré.[GROUP_NAME]
correspond au nom du groupe d'instances géré auquel vous souhaitez ajouter un autoscaler.[MAX_INSTANCES]
est le nombre maximal d'instances que l'autoscaler peut ajouter au groupe d'instances géré.[MIN_INSTANCES]
est le nombre minimal d'instances que l'autoscaler peut avoir dans le groupe d'instances géré.[METRIC_URL]
est une URL sans protocole d'une métrique Google Cloud Monitoring.[METRIC_FILTER]
est un filtre Stackdriver Monitoring dans lequel vous spécifiez un filtre de surveillance avec des valeursTimeSeries
etMonitoredResource
appropriées. Vous devez spécifier une valeurresource.type
, mais vous ne pouvez pas spécifiergce_instance
si vous souhaitez effectuer un scaling à l'aide de métriques par groupe. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.[INSTANCE_ASSIGNMENT]
correspond au volume de travail à attribuer à chaque instance du groupe d'instances géré. Par exemple, spécifiez2
pour attribuer deux unités de travail à chaque instance ou spécifiez0.5
pour attribuer une demi-unité de travail à chaque instance. L'autoscaler ajoute suffisamment d'instances au groupe d'instances géré afin de garantir qu'elles peuvent terminer le travail disponible, comme indiqué par la métrique. Si la valeur de la métrique est10
et que vous avez attribué0.5
unité de travail à chaque instance, l'autoscaler provisionne20
instances dans le groupe d'instances géré.
Cible d'utilisation :
Dans certains cas, il est préférable d'utiliser des cibles d'utilisation avec des métriques par groupe plutôt que de spécifier un nombre d'instances par rapport à la valeur de la métrique mesurée par l'autoscaler. Vous pouvez toujours diriger l'autoscaler vers une métrique par groupe, mais celui-ci tente de conserver la cible d'utilisation spécifiée. Spécifiez ces cibles avec le paramètre utilizationTarget
. Vous devez également spécifier un filtre pour la métrique à l'aide du paramètre filter
.
POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers
{
"name": "example-autoscaler",
"target": "zones/[ZONE]/instanceGroupManagers/[GROUP_NAME]",
"autoscalingPolicy": {
"maxNumReplicas": [MAX_INSTANCES],
"minNumReplicas": [MIN_INSTANCES],
"customMetricUtilizations": [
{
"metric": "[METRIC_URL]",
"filter": "[METRIC_FILTER]",
"utilizationTarget": [TARGET_VALUE],
"utilizationTargetType": [TARGET_TYPE]
}
],
}
}
où :
[GROUP_NAME]
correspond au nom du groupe d'instances géré auquel vous souhaitez ajouter un autoscaler.[ZONE]
correspond à la zone où se trouve le groupe d'instances géré.[MAX_INSTANCES]
est le nombre maximal d'instances que l'autoscaler peut ajouter au groupe d'instances géré.[MIN_INSTANCES]
est le nombre minimal d'instances que l'autoscaler peut avoir dans le groupe d'instances géré.[METRIC_URL]
est une URL sans protocole d'une métrique Google Cloud Monitoring.[METRIC_FILTER]
est un filtre Stackdriver Monitoring dans lequel vous spécifiez un filtre de surveillance avec des valeursTimeSeries
etMonitoredResource
appropriées. Vous devez spécifier une valeurresource.type
, mais vous ne pouvez pas spécifiergce_instance
si vous souhaitez effectuer un scaling à l'aide de métriques par groupe. Le filtre doit répondre aux exigences de filtrage de l'autoscaler.[TARGET_VALUE]
correspond à la valeur de la métrique que l'autoscaler tente de maintenir.[TARGET_TYPE]
correspond au type de valeur de la métrique. Vous pouvez définir l'autoscaler pour surveiller la métrique en tant queGAUGE
, par leDELTA_PER_MINUTE
ou leDELTA_PER_SECOND
de la valeur.
Exemple : utiliser l'attribution d'instances pour effectuer un scaling basé sur une file d'attente Pub/Sub
Prenons la configuration suivante :
- Un thème Google Cloud Pub/Sub actif reçoit des messages de certaines sources.
- Un abonnement Google Cloud Pub/Sub actif est connecté au thème dans une configuration d'extraction. L'abonnement est nommé
our-subscription
. - Un pool de nœuds de calcul extrait les messages de cet abonnement et les traite. Le pool est un groupe d'instances géré d'une seule zone appelé
our-instance-group
et se trouve dans la zoneus-central1-a
. Le pool ne doit pas dépasser 100 nœuds de calcul et doit être réduit à 0 quand aucun message ne figure dans la file d'attente. - En moyenne, un nœud de calcul traite un message en une minute.
Pour déterminer la valeur d'attribution d'instances optimale, envisagez plusieurs méthodes :
- Pour traiter tous les messages de la file d'attente aussi rapidement que possible, vous pouvez choisir
1
comme valeur d'attribution d'instances. Une instance est alors créée pour chaque message de la file d'attente (dans la limite du nombre maximal d'instances de notre groupe). Mais cela peut provoquer un provisionnement excessif. Dans le pire des cas, une instance est créée pour traiter un seul message avant que l'autoscaler ne l'éteigne, ce qui consomme beaucoup plus de ressources que le travail réel.- Notez que si les nœuds de travail pouvaient traiter plusieurs messages en même temps, il serait judicieux d'augmenter la valeur par rapport au nombre de processus simultanés.
- Notez aussi que, dans cet exemple, il n'est pas logique de définir la valeur en dessous de
1
, car un message ne peut pas être traité par plusieurs nœuds de calcul.
- Par ailleurs, si la latence de traitement est moins importante que l'utilisation des ressources et les frais généraux, vous pouvez calculer le nombre de messages que chaque instance doit traiter au cours de sa durée de vie pour être considérée comme efficacement utilisée. Prenez en compte le temps de démarrage et d'arrêt, et le fait que l'autoscaling ne supprime pas immédiatement les instances. Par exemple, en supposant que les temps de démarrage et d'arrêt correspondent à environ cinq minutes au total et que l'autoscaling ne supprime les instances qu'après une période de 10 minutes environ, vous calculez qu'il est efficace de créer une instance supplémentaire dans le groupe tant qu'elle peut traiter au moins 15 messages avant que l'autoscaler ne l'arrête. Il en résulte un coût de 25 % au maximum en raison du temps total de création, de démarrage et d'arrêt de l'instance. Dans ce cas, vous pouvez choisir
15
comme valeur d'attribution d'instance. - Un équilibre peut être trouvé entre ces deux méthodes, ce qui se traduit par un nombre compris entre
1
et15
, en fonction du facteur prioritaire, de la latence de traitement et de l'utilisation des ressources.
En examinant les métriques Pub/Sub disponibles, nous trouvons une métrique qui représente la longueur de la file d'attente de l'abonnement : subscription/num_undelivered_messages
.
Notez que cette métrique exporte le nombre total de messages dans la file d'attente, y compris les messages en cours de traitement, mais pas encore confirmés. Il n'est pas recommandé d'utiliser une métrique qui n'inclut pas les messages en cours de traitement, car une telle métrique peut être réduite à 0 lorsque le travail est en cours, ce qui incite l'autoscaling à réduire voire à interrompre le travail en cours.
Vous pouvez maintenant configurer l'autoscaling pour la file d'attente :
gcloud beta compute instance-groups managed set-autoscaling \
our-instance-group \
--zone=us-central1-a \
--max-num-replicas=100 \
--min-num-replicas=0 \
--update-stackdriver-metric=pubsub.googleapis.com/subscription/num_undelivered_messages \
--stackdriver-metric-filter="resource.type = pubsub_subscription AND resource.label.subscription_id = our-subscription" \
--stackdriver-metric-single-instance-assignment=15
Exemple : utilisation d'une cible d'utilisation pour effectuer un scaling basé sur la latence moyenne
Il peut arriver que la métrique fournissant un signal pertinent ne représente pas le volume total de travail disponible ou une autre ressource applicable au groupe, comme dans l'exemple précédent, mais plutôt une moyenne, un centile ou une autre propriété statistique. Pour cet exemple, supposons que vous effectuez un scaling en fonction de la latence de traitement moyenne du groupe.
Prenons la configuration suivante :
- Un groupe d'instances géré nommé
our-instance-group
est chargé d'exécuter une tâche particulière. Le groupe est situé dans la zoneus-central1-a
. - Vous disposez d'une métrique personnalisée Stackdriver Monitoring qui exporte une valeur que vous souhaitez conserver à un niveau donné. Pour cet exemple, supposons que la métrique représente la latence moyenne des requêtes de traitement attribuées au groupe.
- La métrique personnalisée est nommée :
custom.googleapis.com/example_average_latency
. - La métrique personnalisée possède une étiquette avec une clé nommée
group_name
et une valeur égale au nom du groupe d'instances,our-instance-group
. - La métrique personnalisée exporte des données pour la ressource surveillée globale , c'est-à-dire qu'elle n'est associée à aucune instance spécifique.
- La métrique personnalisée est nommée :
Vous avez établi que lorsque la valeur de la métrique est supérieure à une valeur spécifique, vous devez ajouter d'autres instances au groupe pour gérer la charge, alors que si elle est inférieure à cette valeur, vous pouvez libérer des ressources. L'autoscaling ajoute ou supprime progressivement les instances à un taux proportionnel à la valeur de la métrique qui est supérieure ou inférieure à la cible. Pour cet exemple, supposons que la valeur cible calculée est 100
.
Vous pouvez maintenant configurer l'autoscaling pour le groupe en utilisant une cible d'utilisation par groupe de 100
, qui représente la valeur de la métrique que l'autoscaler doit tenter de maintenir :
gcloud beta compute instance-groups managed set-autoscaling \
our-instance-group \
--zone=us-central1-a \
--max-num-replicas=100 \
--min-num-replicas=0 \
--update-stackdriver-metric=custom.googleapis.com/example_average_latency \
--stackdriver-metric-filter "resource.type = global AND metric.label.group_name = our-instance-group" \
--stackdriver-metric-utilization-target=100 \
--stackdriver-metric-utilization-target-type=delta-per-second