虚拟机托管实例组容量 Recommender

虚拟机实例组容量 Recommender 可帮助优化 Compute Engine 虚拟机托管实例的资源利用率。这些建议是根据 Cloud Monitoring 服务在过去 8 天中收集的指标或系统指标自动生成的。请采用这些建议调整实例组的机器类型的容量,以便更有效地使用虚拟机资源。

“容量建议”也称为“合理容量建议”。

如需了解详情,请参阅为托管实例组应用容量建议

Recommender ID

虚拟机实例组容量 Recommender ID 为:

google.compute.instanceGroupManager.MachineTypeRecommender

使用 gcloud 命令RESTRPC API 来查看和修改建议时,可使用此 ID。

位置

使用 Recommender gcloud 命令和 API 时,你需要为要查看或修改的建议指定位置。对于虚拟机实例组容量建议,请使用 Compute Engine 区域作为 gcloud 和 API 互动的位置。

权限

所需权限

如需查看实例组容量建议,请执行以下操作:

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

如需修改实例组容量建议的状态,请执行以下操作:

  • recommender.computeInstanceGroupManagerMachineTypeRecommendations.update

授予权限

如要授予这些权限,请按以下方式分配角色:

  • 如仅查看建议,请授予 Compute Recommender Viewer (roles/recommender.computeViewer) 角色。
  • 如需查看和修改建议,请授予 Compute Recommender Admin (roles/recommender.computeAdmin) 角色。
  • 如需授予 serviceusage.services.use 权限,请授予 Service Usage Consumer 角色 (roles/serviceusage.serviceUsageConsumer)。

或者,您也可以授予以下基本角色:

  • 如仅查看建议,请授予Viewer (roles/viewer) 角色。
  • 如要查看和修改建议,请授予 Owner (roles/owner) 或 Editor (roles/editor) 角色。
    • 这些角色还拥有 serviceusage.services.use 权限。

建议子类型

此 Recommender 支持以下子类型:

  • CHANGE_MACHINE_TYPE - 建议根据当前使用情况更改虚拟机托管实例组的当前机器类型。

操作组

虚拟机实例容量 Recommender 生成的每个建议都有一个操作组,用于描述一组应用该建议的依序操作。

托管实例组中虚拟机实例的容量建议

针对虚拟机实例组的容量建议包含两个 OperationGroup 实体。

第一项操作是为 compute.googleapis.com/InstanceTemplate 资源指定三个操作:

  1. test 操作,用于确保当前机器类型与提出建议时的机器类型相同。例如:

    {
     "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. 创建新实例模板资源的 copy 操作。例如:

    {
       "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 是新实例模板名称。

  3. 将新实例模板上的机器类型替换为建议类型的 replace 操作:

    {
      "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 是新实例模板名称。

第二项操作是为 compute.googleapis.com/InstanceGroupManager 资源指定 replace 操作。此操作会将当前实例模板 it-name 替换为上述操作指定的使用建议机器类型的新实例模板:

 {
   "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 是新实例模板名称。

示例

以下示例展示了如何列出托管实例组的容量建议:

  1. 设置所需的环境变量:

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

    其中:

    • TARGET_PROJECT_ID 是要列出其建议的项目。该项目可以是当前项目以外的项目。

      • 对于 gcloud 命令,您必须使用项目 ID
      • 对于 API 请求,您可以使用项目编号或项目 ID。建议使用项目编号。

      项目编号在 API 和 gcloud 命令返回的响应中返回。

    • LOCATION_ID 是与建议关联的资源所在的 Google Cloud 区域(例如 us-central1-a)。

  2. 列出虚拟机实例组容量建议:

    gcloud

    输入以下内容:

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

    REST

    输入以下内容:

    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"
    

输出内容类似如下:

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

如需了解如何使用 Recommender gcloud 命令和 API 对建议执行其他任务,请参阅使用 API