Outil de recommandation de dimensionnement d'un groupe géré d'instances de VM

L'outil de recommandation de dimensionnement d'un groupe géré d'instances de VM vous permet d'optimiser l'utilisation des ressources de vos instances de machine virtuelle Compute Engine. Ces recommandations sont générées automatiquement en fonction des métriques système ou de métriques collectées par le service Cloud Monitoring au cours des huit jours précédant l'émission des recommandations. Vous pouvez suivre ces recommandations pour redimensionner les types de machines de vos groupes afin d'utiliser plus efficacement les ressources de la VM.

Les recommandations de dimensionnement sont également appelées recommandations de redimensionnement.

Pour plus d'informations, consultez la page Appliquer des recommandations de dimensionnement aux groupes d'instances gérés.

ID de l'outil de recommandation

L'ID de l'outil de recommandation de dimensionnement d'un groupe d'instances de VM est le suivant :

google.compute.instanceGroupManager.MachineTypeRecommender

Vous pouvez utiliser cet ID pour afficher et modifier des recommandations à l'aide des commandes gcloud ou des API REST et RPC.

Zone

Les commandes gcloud et les API de l'outil de recommandation exigent que vous spécifiez un emplacement pour les recommandations que vous consultez ou modifiez. Dans le cas de recommandations de dimensionnement d'un groupe d'instances de VM, utilisez la zone Compute Engine comme emplacement dans gcloud et les interactions avec l'API.

Autorisations

Autorisations requises

Pour afficher les recommandations de dimensionnement d'un groupe d'instances :

  • recommender.computeInstanceGroupManagerMachineTypeRecommendations.get
  • recommender.computeInstanceGroupManagerMachineTypeRecommendations.list

Pour modifier l'état des recommandations de dimensionnement d'un groupe d'instances :

  • recommender.computeInstanceGroupManagerMachineTypeRecommendations.update

Accorder des autorisations

Pour accorder des autorisations, attribuez les rôles comme suit :

  • Pour afficher des recommandations seulement, attribuez le rôle de Lecteur de l'outil de recommandation Compute (roles/recommender.computeViewer).
  • Pour afficher et modifier des recommandations, attribuez le rôle d'Administrateur de l'outil de recommandation Compute (roles/recommender.computeAdmin).
  • Pour accorder l'autorisation serviceusage.services.use, attribuez le rôle de Client de Service Usage (roles/serviceusage.serviceUsageConsumer).

Vous pouvez également attribuer les rôles primitifs suivants :

  • Pour afficher des recommandations seulement, attribuez le rôle de Lecteur (roles/viewer).
  • Pour afficher et modifier des recommandations, attribuez le rôle de Propriétaire (roles/owner) ou d'Éditeur (roles/editor).
    • Ces rôles incluent également l'autorisation serviceusage.services.use.

Sous-types de recommandation

Cet outil de recommandation est compatible avec les sous-types suivants :

  • CHANGE_MACHINE_TYPE: recommande de modifier le type de machine actuel d'un groupe géré d'instances de machine virtuelle en fonction de l'utilisation actuelle.

Groupes d'opérations

Chaque recommandation générée par l'outil de recommandation de dimensionnement d'un groupe d'instances de VM comporte des groupes d'opérations décrivant un ensemble d'actions séquentielles à effectuer pour appliquer la recommandation.

Recommandation de dimensionnement des instances de VM d'un groupe géré

Une recommandation de dimensionnement de groupe d'instances de VM comprend deux entités OperationGroup.

La première spécifie trois opérations sur la ressource compute.googleapis.com/InstanceTemplate :

  1. Une opération test qui vérifie que le type de machine actuel est identique à celui de la recommandation. Exemple :

    {
     "action": "test",
     "resourceType": "compute.googleapis.com/InstanceTemplate",
     "resource": "//compute.googleapis.com/projects/example-project/global/instanceTemplates/it-name",
     "path": "/properties/machineType"
     "value": "n1-standard-4"
    }
    
  2. Opération copy qui crée une ressource de modèle d'instance. Exemple :

    {
       "action": "copy",
       "resourceType": "compute.googleapis.com/InstanceTemplate",
       "sourceResource": "//compute.googleapis.com/projects/example-project/global/instanceTemplates/it-name",
       "resource": "//compute.googleapis.com/projects/p1/global/instanceTemplates/$new-it-name",
       "sourcePath": "/",
       "path": "/"
     }
    

    $new-it-name correspond au nom du nouveau modèle d'instance.

  3. Une opération replace qui remplace le type de machine du nouveau modèle d'instance par le type recommandé :

    {
      "action": "replace",
      "resourceType": "compute.googleapis.com/InstanceTemplate",
      "resource": "//compute.googleapis.com/projects/example-project/global/instanceTemplates/$new-it-name",
      "path": "/properties/machineType",
      "value" : "n1-standard-8"
    }
    

    $new-it-name correspond au nom du nouveau modèle d'instance.

La seconde spécifie une opération replace sur la ressource compute.googleapis.com/InstanceGroupManager. Cette opération remplace le modèle d'instance actuel it-name par le nouveau modèle spécifié ci-dessus, qui utilise le type de machine recommandé :

 {
   "action" : "replace",
   "resourceType": "compute.googleapis.com/InstanceGroupManager",
   "resource": "//compute.googleapis.com/projects/example-project/zones/z1/instanceGroupManagers/instance-group",
   "path": "/versions/*/instanceTemplate",
   "pathValueMatchers": {
     "/versions/*/instanceTemplate": {
       "matchesPattern": ".*global/instanceTemplates/it-name"
     }
   }
   "value": "global/instanceTemplates/$new-it-name"
 }

$new-it-name correspond au nom du nouveau modèle d'instance.

Exemples

L'exemple suivant montre comment répertorier des recommandations de dimensionnement de groupes d'instances gérés :

  1. Définissez les variables d'environnement requises :

    PROJECT=TARGET_PROJECT_ID
    LOCATION=LOCATION_ID
    RECOMMENDER=google.compute.instanceGroupManager.MachineTypeRecommender
    

    où :

    • TARGET_PROJECT_ID correspond au projet dont vous souhaitez répertorier les recommandations. Il peut s'agir d'un projet différent de votre projet actuel.

      • Pour les commandes gcloud, vous devez utiliser l'ID de projet.
      • Pour les requêtes API, vous pouvez utiliser le numéro ou l'ID du projet. Il est recommandé d'utiliser le numéro de projet.

      Le numéro de projet est renvoyé dans les réponses des commandes gcloud et de l'API.

    • LOCATION_ID correspond à la zone Google Cloud où se trouvent les ressources associées aux recommandations (par exemple, us-central1-a).

  2. Répertoriez les recommandations de dimensionnement d'un groupe d'instances de VM :

    gcloud

    Saisissez les chaînes suivantes :

    gcloud recommender recommendations list \
        --project=${PROJECT} \
        --location=${LOCATION} \
        --recommender=${RECOMMENDER} \
        --format=json
    

    REST

    Saisissez les chaînes suivantes :

    curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
        -H "x-goog-user-project: ${PROJECT}" \
        "https://recommender.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/recommenders/${RECOMMENDER}/recommendations"
    

Le résultat ressemble à ce qui suit :

[
  {
    "content": {
      "operationGroups": [
        {
          "operations" : [
            {
              "action": "test",
              "resourceType": "compute.googleapis.com/InstanceTemplate",
              "resource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/it-name",
              "path": "/properties/machineType"
              "value": "n1-standard-4"
            },
            {
              "action": "copy",
              "resourceType": "compute.googleapis.com/InstanceTemplate",
              "sourceResource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/it-name",
              "resource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/$new-it-name",
              "sourcePath": "/",
              "path": "/"
            },
            {
              "action": "replace",
              "resourceType": "compute.googleapis.com/InstanceTemplate",
              "resource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/$new-it-name",
              "path": "/name",
              "value" : "$new-it-name"
            },
            {
              "action": "replace",
              "resourceType": "compute.googleapis.com/InstanceTemplate",
              "resource": "//compute.googleapis.com/projects/test-project/global/instanceTemplates/$new-it-name",
              "path": "/properties/machineType",
              "value" : "n1-standard-8"
            }
          ]
        },
        {
          "operations" : [
            {
              "action" : "replace",
              "resourceType": "compute.googleapis.com/InstanceGroupManager",
              "resource": "//compute.googleapis.com/projects/test-project/zones/us-west1-a/instanceGroupManagers/igm-name",
              "path": "/versions/*/instanceTemplate",
              "pathValueMatchers": {
                "/versions/*/instanceTemplate": {
                  "matchesPattern" : ".*global/instanceTemplates/it-name"
                }
              }
              "value": "global/instanceTemplates/$new-it-name"
            }
          ]
        }
      ]
    },
    "description" : "Improve performance by changing machine type from n1-standard-4 to n1-standard-8.",
    "etag": "\"eebe926c12f923da\"",
    "name": "projects/823742397239/locations/us-west1-a/recommenders/google.compute.instanceGroupManager.MachineTypeRecommender/recommendations/0fd31b24-cc05-4132-8431-ed54a22dd4f1",
    "lastRefreshTime": {
      "seconds": 1543912652
    },
    "primaryImpact": {
      "category": "PERFORMANCE"
    },
    "additionalImpact": [
      "category": "COST",
      "costProjection": {
        "cost": {"currencyCode": "USD", "units": 50},
        "duration": { "seconds": 2592000 }
      }
    ],
    "stateInfo": {
      "state": "ACTIVE"
    },
    "recommenderSubtype": "CHANGE_MACHINE_TYPE"
  }
]

Consultez la page Utiliser l'API pour savoir comment effectuer des tâches supplémentaires sur les recommandations à l'aide des commandes gcloud et des API de l'outil de recommandation.