Recomendador de tamaño de grupos de instancias administrados de VM

El recomendador de tamaño de grupo de instancias de VM te ayuda a optimizar el uso de recursos de tus instancias administradas de máquina virtual de Compute Engine. Estas recomendaciones se generan de manera automática en función de las métricas del sistema o de las métricas recopiladas por el servicio de Cloud Monitoring durante los 8 días anteriores. Puedes usar estas recomendaciones para cambiar el tamaño de los tipos de máquinas de tus grupos a fin de usar de manera más eficiente los recursos de VM.

Las recomendaciones de tamaño también se conocen como recomendaciones de redimensionamiento.

Para obtener más información, consulta la página Aplica recomendaciones de tamaño de instancias para MIG.

ID del recomendador

El ID del recomendador de tamaño de grupos de instancias de VM es el siguiente:

google.compute.instanceGroupManager.MachineTypeRecommender

Usas este ID cuando ves y modificas recomendaciones con los comandos de gcloud o las API de REST y RPC.

Ubicación

Los comandos de gcloud y las API del recomendador requieren que especifiques una ubicación para las recomendaciones que ves o modificas. Para recomendaciones de tamaño del grupo de instancias de VM, usa la zona de Compute Engine como ubicación en gcloud y las interacciones de la API.

Permisos

Permisos necesarios

Para ver las recomendaciones de tamaño del grupo de instancias, sigue estos pasos:

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

Para modificar el estado de las recomendaciones de tamaño del grupo de instancias, haz lo siguiente:

  • recommender.computeInstanceGroupManagerMachineTypeRecommendations.update

Otorga permisos

Para otorgar esos permisos, asigna las funciones de la siguiente manera:

  • Para ver solo las recomendaciones, otorga la función Visualizador de recomendador de Compute (roles/recommender.computeViewer).
  • Para ver y modificar recomendaciones, otorga la función Administrador de recomendaciones de Compute (roles/recommender.computeAdmin).
  • Para otorgar el permiso serviceusage.services.use, otorga la función de Consumidor de Service Usage (roles/serviceusage.serviceUsageConsumer).

Como alternativa, también puedes otorgar las siguientes funciones básicas:

  • Para ver solo las recomendaciones, otorga la función Visualizador (roles/viewer).
  • Para ver y modificar recomendaciones, otorga la función Propietario (roles/owner) o Editor (roles/editor).
    • Estas funciones también incluyen el permiso serviceusage.services.use.

Subtipos de recomendaciones

Este recomendador admite los siguientes subtipos:

  • CHANGE_MACHINE_TYPE: Recomienda cambiar el tipo de máquina actual de un grupo de instancias administrado de máquinas virtuales según el uso actual.

Grupos de operaciones

Cada recomendación que genera el recomendador de tamaño sobre el grupo de instancias de VM tiene grupos de operaciones que describen un conjunto de acciones secuenciales que se deben tomar para aplicar la recomendación.

Recomendación de tamaño para instancias de VM en un grupo de instancias administrado

Una recomendación de tamaño para un grupo de instancias de VM incluye dos entidades OperationGroup.

La primera especifica tres operaciones en el recurso compute.googleapis.com/InstanceTemplate:

  1. Una operación test para asegurarse de que el tipo de máquina actual sea el mismo que cuando se hizo la recomendación. Por ejemplo:

    {
     "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. Una operación copy que crea un nuevo recurso de plantilla de instancias. Por ejemplo:

    {
       "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": "/"
     }
    

    Donde $new-it-name es el nombre nuevo de la plantilla de instancias.

  3. Una operación replace que reemplaza el tipo de máquina en la plantilla de instancias nueva por el tipo recomendado:

    {
      "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"
    }
    

    Donde $new-it-name es el nombre nuevo de la plantilla de instancias.

El segundo especifica una operación replace en el recurso compute.googleapis.com/InstanceGroupManager. En esta operación, se reemplaza la plantilla de instancias actual it-name por la nueva especificada anteriormente que usa el tipo de máquina recomendado:

 {
   "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"
 }

Donde $new-it-name es el nombre nuevo de la plantilla de instancias.

Ejemplos

En el siguiente ejemplo, se muestra cómo generar listas de recomendaciones de tamaño para grupos de instancias administrados:

  1. Configura las variables de entorno necesarias:

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

    Donde:

    • TARGET_PROJECT_ID es el proyecto cuyas recomendaciones deseas mostrar. Este puede ser un proyecto diferente del proyecto actual.

      • Para los comandos de gcloud, debes usar el ID del proyecto
      • Para las solicitudes a la API, puedes usar el número de proyecto o el ID del proyecto. Se recomienda usar el número del proyecto.

      El número de proyecto se muestra en las respuestas de la API y los comandos de gcloud.

    • LOCATION_ID es la zona de Google Cloud en la que se encuentran los recursos asociados con las recomendaciones (por ejemplo, us-central1-a).

  2. Enumera las recomendaciones de tamaño del grupo de instancias de VM:

    gcloud

    Ingrese lo siguiente:

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

    REST

    Ingrese lo siguiente:

    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"
    

El resultado es similar al siguiente:

[
  {
    "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"
  }
]

Consulta Usa la API para obtener instrucciones sobre cómo realizar tareas adicionales en las recomendaciones mediante los comandos de gcloud y las API del recomendador.