将存储池中的磁盘添加到虚拟机


您可以在 Hyperdisk 存储池中创建磁盘,然后将磁盘挂接到虚拟机实例,或者,您也可以在创建虚拟机时在存储池中创建磁盘。

预配磁盘容量

如果您创建了高级容量存储池,则可以使用精简预配。您可以在存储池中创建累计大小超过池预配容量的磁盘。存储池的已用容量由使用中的数据总量定义,而不是由您预配的磁盘可用空间量定义。您可以预配总容量为高级容量存储池预配容量的 500% 的磁盘。

如果您要在标准容量存储池中创建磁盘,则需要在存储池中创建磁盘,直到存储池中所有磁盘的总大小达到存储池的预配容量为止。具有标准容量的存储池中的磁盘的行为与非池磁盘类似,在您创建磁盘时会消耗容量。

预配磁盘 IOPS

在存储池中创建磁盘时,为磁盘预配的 IOPS 必须小于 Hyperdisk 存储池中的可用 IOPS。可用 IOPS 是存储池的预配 IOPS 减去存储池中创建的所有磁盘的已用 IOPS。

预配磁盘吞吐量

在存储池中创建磁盘时,为磁盘预配的吞吐量必须小于 Hyperdisk 存储池中的可用吞吐量。可用吞吐量是存储池的预配吞吐量减去存储池中创建的所有磁盘的已用吞吐量。

如果不满足上一段落中的任何条件,则在存储池中创建磁盘的请求将失败,并且不会创建该磁盘。

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

所需的角色和权限

如需获得在存储池中创建 Hyperdisk Balanced 或 Hyperdisk Throughput 磁盘所需的权限,请让管理员向您授予项目的以下 IAM 角色:

  • Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1)
  • 若要连接到能够以服务账号的身份运行的虚拟机实例:Service Account User (v1)(roles/iam.serviceAccountUser 角色)

如需详细了解如何授予角色,请参阅管理访问权限

这些预定义角色包含在存储池中创建 Hyperdisk Balanced 或 Hyperdisk Throughput 磁盘所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

在存储池中创建 Hyperdisk Balanced 或 Hyperdisk Throughput 磁盘需要以下权限:

  • 在存储池中创建磁盘并将磁盘挂接到虚拟机实例:
    • 针对项目的 compute.disks.create 权限
    • 针对虚拟机的 compute.instances.attachDisk 权限
    • 针对您要挂接到虚拟机的卷的 compute.disks.use
    • 针对您要在其中创建磁盘的存储池的 compute.storagePools.use 权限
  • 为了格式化和装载挂接的卷:针对虚拟机的 compute.instances.setMetadata

您也可以使用自定义角色或其他预定义角色来获取这些权限。

如需了解创建实例所需的权限,请参阅所需的权限

限制

查看在 Hyperdisk 存储池中创建磁盘的以下限制:

  • 您只能在 Hyperdisk Balanced 存储池中创建 Hyperdisk Balanced 磁盘,并且只能在 Hyperdisk Throughput 存储池中创建 Hyperdisk Throughput 磁盘。
  • 您只能在存储池中创建与存储池位于同一项目和可用区的新磁盘。
  • 您无法将现有磁盘动态移动到存储池中。
  • 您无法在 Hyperdisk 存储池中创建永久性磁盘。
  • 您最多可以在一个存储池中创建 1,000 个磁盘。
  • 您无法在 Hyperdisk Throughput 存储池中创建启动磁盘。
  • 您无法在存储池中创建区域级磁盘。

在存储池中创建磁盘

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 REST 在存储池中创建磁盘。

控制台

使用 Google Cloud 控制台,您可以通过存储池页面或磁盘页面在存储池中创建新磁盘。

存储池页面上,执行以下操作:

  1. 在 Google Cloud 控制台中,转到存储池页面。

    转到“存储池”页面

  2. 点击要在其中创建磁盘的存储池的名称。

  3. 管理存储池页面上,点击 +创建新磁盘

  4. 添加新磁盘面板中,输入磁盘的名称

  5. 指定或更改您不想使用默认值的任何值。

  6. 指定完磁盘属性后,点击保存

  7. 管理存储池页面上,您应该会看到存储池磁盘部分列出了新磁盘。

创建磁盘页面上,执行以下操作:

  1. 在 Google Cloud 控制台中,转到磁盘 > 创建磁盘页面。

    转到“创建磁盘”页面

  2. 输入磁盘的名称

  3. 选择包含要在其中创建磁盘的存储池的可用区。

  4. 对于磁盘类型,选择与 Hyperdisk 存储池匹配的磁盘类型,即 Hyperdisk Throughput 或 Hyperdisk Balanced。

  5. 根据需要修改大小预配 IOPS预配吞吐量字段中的值。

  6. 存储池部分,选择启用存储池,然后选择要在其中创建磁盘的存储池的名称。列表中仅显示所选可用区中存在的存储池。

  7. 指定完磁盘信息后,点击创建

gcloud

如需在存储池中创建一个或多个磁盘,请使用 gcloud compute disks create 命令

gcloud compute disks create DISK_NAME \
    --zone=ZONE \
    --storage-pool=STORAGE_POOL_NAME \
    --size=SIZE \
    --type=DISK_TYPE \
    --provisioned-iops=PROVISIONED_IOPS \
    --provisioned-throughput=PROVISIONED_THROUGHPUT

替换以下内容:

  • DISK_NAME:磁盘的唯一名称。您可以提供由空间指定的磁盘名称列表,以创建具有相同属性的多个磁盘。
  • ZONE:在其中创建存储池的可用区。采用区域-可用区格式指定此值,例如 us-central1-a
  • STORAGE_POOL_NAME:要在其中创建磁盘的存储池的名称。
  • SIZE(可选):新磁盘的预配容量。该值必须是一个整数,后跟大小单位(GB 表示吉比字节,或 TB 表示太比字节)。如果未指定大小,则使用 100 GB 作为默认值。
  • DISK_TYPE:要创建的磁盘类型。 此值必须与 Hyperdisk 存储池的类型相匹配,即 hyperdisk-balancedhyperdisk-throughput
  • PROVISIONED_IOPS(可选):要为磁盘预配的 IOPS。此标志只能用于 Hyperdisk Balanced 磁盘。
  • PROVISIONED_THROUGHPUT(可选):要为磁盘预配的吞吐量,以兆比字节 (MB)/秒为单位。

REST

如需在存储池中创建一个或多个磁盘,请使用 disks.insert 方法构建 POST。应包含 namesizeGbtypestoragePoolprovisionedIopsprovisionedThroughput 属性。如需创建一个空白且未格式化的非启动磁盘,请不要为此磁盘指定来源映像或来源快照。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks

{
    "name": "DISK_NAME",
    "description": "DESCRIPTION",
    "type": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE",
    "sizeGb": "DISK_SIZE",
    "storagePool": "STORAGE_POOL_NAME",
    "provisionedIops": "IOPS_LIMIT",
    "provisionedThroughput": "THROUGHPUT_LIMIT",
}

替换以下内容:

  • PROJECT_ID:项目 ID
  • ZONE:存储池所在的可用区,例如 us-central1-a。这是将在其中创建磁盘的可用区。
  • DISK_NAME:磁盘的唯一名称。
  • DESCRIPTION(可选):描述磁盘的文本字符串。
  • DISK_TYPE:磁盘类型,必须与存储池类型一致。请使用 hyperdisk-throughputhyperdisk-balanced
  • DISK_SIZE:可选:新磁盘的大小。 该值必须是一个整数,后跟大小单位(GB 表示吉比字节,或 TB 表示太比字节)。如果未指定大小,则使用 100 GB 作为默认值。
  • STORAGE_POOL_NAME:要在其中创建磁盘的存储池的名称。
  • IOPS_LIMIT(可选):要为磁盘预配的 IOPS。此标志只能用于 Hyperdisk Balanced 磁盘。
  • THROUGHPUT_LIMIT(可选):要为磁盘预配的吞吐量,以兆比字节 (MB)/秒为单位。

创建磁盘后,您可以将磁盘挂接到虚拟机

创建使用存储池中磁盘的虚拟机

创建虚拟机时,您可以配置启动磁盘,还可以选择创建自动挂接到虚拟机的其他数据(非启动)磁盘。以下部分介绍了如何在虚拟机创建过程中在存储池中创建每种类型的磁盘。

为存储池中的虚拟机创建启动磁盘

如需创建在存储池中使用启动磁盘的虚拟机,您必须先创建 Hyperdisk Balanced 存储池。然后,您可以创建支持 Hyperdisk Balanced 磁盘的虚拟机。机器类型、磁盘类型和存储池必须在您选择的可用区中可用。

控制台

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 点击创建实例

  3. 输入实例的名称。

  4. 将可用区设置为存储池所在的可用区。

  5. 选择支持 Hyperdisk Balanced 的机器类型,例如 H3。

  6. 启动磁盘部分,点击更改

  7. 启动磁盘面板中,将启动磁盘类型设置为 Hyperdisk Balanced。

  8. 配置磁盘的属性。

  9. 展开显示高级配置

  10. 存储池标题下,选择启用存储池

  11. 从列表中选择要在其中创建磁盘的存储池。

  12. 完成磁盘配置后,点击选择

  13. 完成虚拟机属性的配置。

  14. 点击创建

    控制台会在指定可用区中创建虚拟机,并在所选存储池中创建启动磁盘。

gcloud

你可以为存储池中的新虚拟机创建启动磁盘,方法是使用 gcloud compute instances create 命令并添加启动磁盘的 storage-pool 属性。

gcloud compute instances create VM_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --create-disk=boot=yes,type=hyperdisk-balanced,size=DISK_SIZE,provisioned-throughput=THROUGHPUT, \
    provisioned-iops=IOPS,image=projects/IMAGE_PROJECT/global/images/IMAGE, \
    storage-pool=STORAGE_POOL_NAME

替换以下内容:

  • VM_NAME:虚拟机的名称。
  • ZONE:要在其中创建虚拟机的区域和可用区,格式为 us-central1-a
  • MACHINE_TYPE:虚拟机的机器类型,例如 m3-ultramem-32
  • DISK_SIZE:启动磁盘的大小(以 GiB 为单位)
  • THROUGHPUT:要为磁盘预配的吞吐量
  • IOPS:要为磁盘预配的 IOPS
  • IMAGE_PROJECT:包含映像的项目
  • IMAGE or IMAGE_FAMILY:指定以下其中一项:

    • IMAGE:公共映像的特定版本。例如 debian-12-bookworm-v20240213
    • IMAGE_FAMILY映像系列。 此项表示通过最新的未弃用的操作系统映像创建虚拟机。

    例如,如果您指定 "sourceImage": "projects/debian-cloud/global/images/family/debian-12",则 Compute Engine 会通过 debian-12 映像系列中最新版本的操作系统映像创建虚拟机。

  • STORAGE_POOL_NAME:要在其中创建新磁盘的存储池的名称。

REST

您可以为存储池中的新虚拟机创建启动磁盘,方法是为 instances.insert 方法构建 POST 请求,并添加启动磁盘的 storagePool 属性。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
   "name": "VM_NAME",
   "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
   "disks": [
      {
         "deviceName": "BOOT_DISK_DEVICE_NAME",
         "initializeParams": {
            "diskSizeGb": "DISK_SIZE",
            "diskType": "DISK_TYPE",
            "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
            "boot": true,
            "provisionedIops": "IOPS_LIMIT",
            "provisionedThroughput": "THROUGHPUT_LIMIT",
            "storagePool": "POOL_URL"
         }
      }
   ]
}

替换以下内容:

  • PROJECT_ID:项目 ID
  • ZONE:存储池所在的可用区,例如 us-central1-a。这是在其中创建虚拟机和启动磁盘的可用区。
  • VM_NAME:虚拟机的名称。
  • MACHINE_TYPE:虚拟机的机器类型,例如 m3-ultramem-32
  • BOOT_DISK_DEVICE_NAME:启动磁盘的设备名称
  • DISK_SIZE:启动磁盘的大小(以 GiB 为单位)
  • DISK_TYPE:磁盘类型,指定为 URI
  • IMAGE_PROJECT:包含映像的项目
  • IMAGE or IMAGE_FAMILY:指定以下其中一项:

    • IMAGE:公共映像的特定版本,例如,debian-12-bookworm-v20240213
    • IMAGE_FAMILY映像系列

    此项表示通过最新的未弃用的操作系统映像创建虚拟机。例如,如果您指定 "sourceImage": "projects/debian-cloud/global/images/family/debian-12",则 Compute Engine 会通过 debian-12 映像系列中最新版本的操作系统映像创建虚拟机。

  • IOPS_LIMIT:要为磁盘预配的 IOPS

  • THROUGHPUT_LIMIT:要为磁盘预配的吞吐量

  • POOL_URL:在其中创建新磁盘的存储池。您可以将此网址作为资源的部分或完整网址提供。例如,有效值如下:

    • https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • zones/ZONE/storagePools/STORAGE_POOL_NAME

创建虚拟机期间在存储池中创建额外磁盘

在创建虚拟机期间在存储池中创建磁盘时,机器类型、磁盘类型和存储池必须在您选择的可用区可用。

控制台

按照以下步骤使用控制台创建具有额外的非启动磁盘的新虚拟机:

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 点击创建实例

  3. 输入实例的名称。

  4. 将可用区设置为存储池所在的可用区。

  5. 选择支持存储池使用的磁盘类型的机器类型。

  6. 展开高级选项部分。

  7. 展开磁盘

  8. 点击 + 添加新磁盘

  9. 添加新磁盘面板中,输入磁盘的信息。将磁盘类型设置为与存储池类型匹配。

  10. 存储池下,选择启用存储池

  11. 选择存储池字段中,从列表中选择要在其中创建磁盘的存储池。

  12. 完成磁盘配置后,点击保存

  13. 完成虚拟机属性的配置。

  14. 点击创建

    控制台会在指定可用区中创建虚拟机,并在所选存储池中创建非启动磁盘。

gcloud

您可以在存储池中创建新磁盘,方法是在创建虚拟机期间使用 gcloud compute instances create 命令并添加磁盘的 storage-pool 属性。

gcloud compute instances create VM_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --create-disk=auto-delete=yes,boot=yes,device-name=BOOT_DISK_DEVICE_NAME,image=IMAGE_NAME, \
    size=BOOT_DISK_SIZE,type=BOOT_DISK_TYPE
    --create-disk=auto-delete=yes,boot=no,device-name=DATA_DISK_DEVICE_NAME,size=DATA_DISK_SIZE, \
    type=DATA_DISK_TYPE,provisioned-iops=IOPS,provisioned-throughput=THROUGHPUT, \
    storage_pool=STORAGE_POOL_NAME

替换以下内容:

  • VM_NAME:虚拟机的名称。
  • ZONE:要在其中创建虚拟机的区域和可用区,格式为 us-central1-a
  • MACHINE_TYPE:虚拟机的机器类型
  • BOOT_DISK_DEVICE_NAME:启动磁盘的设备名称
  • IMAGE_NAME:要在启动磁盘上安装的操作系统映像的名称,例如 debian-12-bookworm-v20240213
  • BOOT_DISK_SIZE:启动磁盘的大小(以 GiB 为单位)
  • BOOT_DISK_TYPE:磁盘类型
  • DATA_DISK_DEVICE_NAME:数据磁盘的磁盘设备名称
  • DATA_DISK_SIZE:启动磁盘大小,以 GiB 为单位
  • DATA_DISK_TYPE:数据磁盘类型(hyperdisk-balancedhyperdisk-throughput
  • IOPS:要为磁盘预配的 IOPS
  • THROUGHPUT:要为磁盘预配的吞吐量
  • STORAGE_POOL_NAME:要在其中创建磁盘的存储池的唯一名称。

REST

您可以在创建虚拟机期间在存储池中创建新磁盘,方法是为 instances.insert 方法构建 POST 请求并添加附加磁盘的 storagePool 属性。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
   "name": "VM_NAME",
   "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
   "disks": [
      {
        "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
        },
        "boot":true
      },
      {
        "deviceName": "DEVICE_NAME",
        "initializeParams": {
           "diskSizeGb": "DISK_SIZE",
           "diskType": "DISK_TYPE",
           "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
           "provisionedIops": "IOPS_LIMIT",
           "provisionedThroughput": "THROUGHPUT_LIMIT",
           "storagePool": "POOL_URL"
        }
      }
   ]
}

替换以下内容:

  • PROJECT_ID:项目 ID
  • ZONE:存储池所在的可用区,例如 us-central1-a。这是在其中创建虚拟机和启动磁盘的可用区。
  • VM_NAME:虚拟机的名称。
  • MACHINE_TYPE:虚拟机的机器类型,例如 m3-ultramem-32
  • IMAGE_PROJECT:包含映像的项目
  • IMAGE or IMAGE_FAMILY:指定以下其中一项:

    • IMAGE:公共映像的特定版本,例如,debian-12-bookworm-v20240213
    • IMAGE_FAMILY映像系列

    此项表示通过最新的未弃用的操作系统映像创建虚拟机。例如,如果您指定 "sourceImage": "projects/debian-cloud/global/images/family/debian-12",则 Compute Engine 会通过 debian-12 映像系列中最新版本的操作系统映像创建虚拟机。

  • DEVICE_NAME:数据磁盘的设备名称

  • DISK_SIZE:数据磁盘的大小(以 GiB 为单位)

  • DISK_TYPE:磁盘类型,指定为 URI

  • IOPS_LIMIT:要为磁盘预配的 IOPS

  • THROUGHPUT_LIMIT:要为磁盘预配的吞吐量

  • POOL_URL:在其中创建新磁盘的存储池。您可以将此网址作为资源的部分或完整网址提供。例如,有效值如下:

    • https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME
    • zones/ZONE/storagePools/STORAGE_POOL_NAME

在实例模板中使用存储池

用于创建托管式实例组 (MIG) 的实例模板可以包含存储池信息。使用实例模板创建的磁盘会放置在指定的存储池中。

控制台

  1. 在 Google Cloud 控制台中,打开实例模板页面。

    转到“实例模板”

  2. 点击创建实例模板

  3. 输入实例模板的名称。

  4. 对于位置,选择区域级,然后在区域字段中,选择存储池所在的区域。

  5. 选择支持 Hyperdisk Balanced 的机器类型,例如 C3。

  6. 启动磁盘部分,点击更改

  7. 启动磁盘面板中,将启动磁盘类型设置为 Hyperdisk Balanced。

  8. 配置磁盘的属性。

  9. 展开显示高级配置

  10. 存储池标题下,选择启用存储池

  11. 从列表中选择要在其中创建磁盘的存储池。

  12. 完成磁盘配置后,点击选择

  13. 完成虚拟机属性的配置。

  14. 点击创建

    该模板会在指定可用区中创建虚拟机,并在所选存储池中创建启动磁盘。

gcloud

您可以在实例模板中指定在存储池中创建启动磁盘,方法是使用 gcloud compute instance-templates create 命令并添加启动磁盘的 storage-pool 属性。

gcloud compute instance-templates create TEMPLATE_NAME \
    --instance-template-region=REGION \
    --machine-type=MACHINE_TYPE \
    --create-disk=boot=yes,type=hyperdisk-balanced,size=DISK_SIZE,provisioned-throughput=THROUGHPUT, \
    provisioned-iops=IOPS,image=projects/IMAGE_PROJECT/global/images/IMAGE, \
    storage-pool=STORAGE_POOL_NAME

替换以下内容:

  • TEMPLATE_NAME:实例模板的名称。
  • REGION:用于创建区域实例模板的区域。该区域必须包含存储池所在的可用区。
  • MACHINE_TYPE:创建虚拟机时使用的机器类型,例如 h3-standard-88
  • DISK_SIZE:磁盘的大小(以 GiB 为单位)。
  • THROUGHPUT:要为磁盘预配的吞吐量
  • IOPS:要为磁盘预配的 IOPS
  • IMAGE_PROJECT:包含映像的项目
  • IMAGE or IMAGE_FAMILY:指定以下其中一项:

    • IMAGE:公共映像的特定版本。例如 debian-12-bookworm-v20240213
    • IMAGE_FAMILY映像系列。 此项表示通过最新的未弃用的操作系统映像创建虚拟机。

    例如,如果您指定 "sourceImage": "projects/debian-cloud/global/images/family/debian-12",则 Compute Engine 会通过 debian-12 映像系列中最新版本的操作系统映像创建虚拟机。

  • STORAGE_POOL_NAME:要在其中创建新磁盘的存储池的名称。