为磁盘快照创建时间表


您可以创建快照时间表,以定期自动备份可用区级和区域级永久性磁盘以及 Google Cloud Hyperdisk。 您可以将快照时间表用作备份 Compute Engine 工作负载的最佳做法。

如果要创建快照时间表以在备份时截取应用数据状态,也称为应用一致性、客机刷新或 VSS 快照,请参阅创建 Linux 应用一致性磁盘快照创建 Windows 应用一致性磁盘快照

如需详细了解快照时间表属性,请参阅快照时间表属性

准备工作

  • 查看快照时间表的限制
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

所需的角色和权限

如需获得创建快照时间表所需的权限,请让管理员向您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含创建快照时间表所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

创建快照时间表需要以下权限:

  • 如需创建快照时间表:针对项目或组织的 compute.resourcePolicies.create 权限
  • 将快照时间表挂接到磁盘需要以下权限:
    • 针对磁盘的 compute.disks.addResourcePolicies 权限
    • 针对资源政策的 compute.resourcePolicies.use 权限
  • 同时创建磁盘和快照时间表需要以下权限:
    • 针对项目的 compute.disks.create 权限
    • 针对项目的 compute.resourcePolicies.create 权限
    • 针对磁盘的 compute.disks.addResourcePolicies 权限

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

创建快照时间表的概览

创建快照时间表时,您需要创建一项可应用于一个或多个永久性磁盘或 Hyperdisk 卷的资源政策

您可以通过以下方式创建快照时间表:

将加密与快照时间表搭配使用

如果磁盘使用客户管理的加密密钥 (CMEK),则当您使用快照时间表创建该磁盘的快照时,所有创建的快照都将自动使用同一密钥加密。

您不能将快照时间表用于使用客户提供的加密密钥 (CSEK) 的磁盘。

创建快照时间表

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 REST 为磁盘创建快照时间表。您必须在磁盘所在的同一个区域中创建快照时间表。例如,如果您的磁盘位于可用区 us-west1-a 中,您必须在 us-west1 区域中创建快照时间表。但是,您可以选择将快照时间表生成的快照存储在其他位置。

控制台

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

    进入“虚拟机实例”
    其余步骤将自动显示在 Google Cloud 控制台中。

  2. 选择包含您的虚拟机实例的项目。
  3. 名称列中,点击包含要为其创建快照时间表的永久性磁盘的虚拟机。
  4. 存储部分,点击要为其创建快照时间表的启动磁盘额外磁盘的名称。
  5. 点击 修改。您可能需要点击 更多操作菜单,然后再点击 修改
  6. 快照时间表中,选择创建时间表
  7. 名称中,为快照时间表输入以下名称之一:
    • boot-disk-snapshot-schedule
    • attached-persistent-disk-snapshot-schedule
  8. 位置部分,选择快照存储位置。系统会自动选择快照设置中定义的预定义或自定义默认位置。(可选)您可以通过执行以下操作来替换快照设置并将快照存储在自定义存储位置:

    1. 选择快照的存储位置类型。

      • 选择多区域,该选项以更高的费用实现更高的可用性。
      • 选择区域级快照,该选项使您能够更好地控制数据的实际位置,并且费用也会更低。
    2. 选择位置字段中,选择要使用的具体区域或多区域。如需使用最靠近源磁盘的区域或多区域,请选择基于磁盘的位置

  9. 如需完成快照时间表的创建,请点击创建
  10. 如需将此快照时间表挂接到永久性磁盘,请点击保存

gcloud

如需为磁盘创建快照时间表,请使用 gcloud compute resource-policies create snapshot-schedule 命令。 并将时间表频率设为每小时、每天或每周。

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
    --description "SCHEDULE_DESCRIPTION" \
    --max-retention-days MAX_RETENTION_DAYS \
    --start-time START_TIME \
    --hourly-schedule SNAPSHOT_INTERVAL \
    --daily-schedule \
    [--weekly-schedule SNAPSHOT_INTERVAL or \
    --weekly-schedule-from-file FILE_NAME] \
    --on-source-disk-delete DELETION_OPTION \
    --storage-location=STORAGE_LOCATION

替换以下内容:

  • SCHEDULE_NAME:快照时间表的名称。
  • SCHEDULE_DESCRIPTION:快照时间表的说明。请使用引号将您的说明括起来。
  • MAX_RETENTION_DAYS:保留快照的天数。

    例如,值为 3 表示快照在删除之前会保留 3 天。您必须使用值 1 或更高的值。

  • START_TIME:开始时间,采用世界协调时间 (UTC) 时区该时间必须从整点开始。

    例如:

    • 太平洋标准时间 (PST) 下午 2:00 必须指定为 22:00
    • 如果您将开始时间设置为 22:13,则会收到错误消息。

    如果您使用 --weekly-schedule-from-file 标志并在该文件中指定开始时间,则无需添加此标志。

  • SNAPSHOT_INTERVAL:创建连续快照之间的时间间隔。hourly-scheduledaily-scheduleweekly-scheduleweekly-schedule-from-file 这三种快照频率标志是互斥的。您只能将其中一个标志用于快照时间表。

    • 通过添加不带任何值的 --daily-schedule 标志来设置每日时间表。
    • 设置每小时时间表,并将 --hourly-schedule 标志设置为 1 到 23 之间的整数值。如需在每天同一时间生成快照,请选择一个可以整除 24 的小时数。例如,将 --hourly-schedule 设置为 12 表示每 12 小时创建一次快照。
    • 设置每周时间表,并将 --weekly-schedule 标志设置为您希望在星期几创建快照。 您必须写清楚是周几;值不区分大小写。例如,如需每周五备份磁盘,您的命令应包含 --weekly-schedule=friday
    • 设置高级每周时间表,通过添加 --weekly-schedule-from-file 标志来指定一周中的不同天数和不同的开始时间。将 FILE_NAME 替换为包含每周快照时间表的文件名。虽然您可以使用文件指定一周中的不同天数和不同的开始时间,但您不能直接在命令行上指定多个每周时间表。例如,您的文件可能会在星期一和星期三指定两个每周时间表,但不能在命令行中复制此设置:

      [
        {"day": "MONDAY", "startTime": "04:00"},
        {"day": "WEDNESDAY", "startTime": "02:00"}
      ]
      

      如果您在文件中添加开始时间,则无需在命令行中设置 --start-time 标志。时间表使用世界协调时间 (UTC) 时区。

  • DELETION_OPTION:确定在来源磁盘删除后系统对快照执行的操作。如果要保留所有生成的快照,则可以省略此标志。否则,请指定 apply-retention-policy 以使用保留政策中的设置。

  • STORAGE_LOCATION:可选:存储位置。如果省略此标志,则系统会使用默认存储位置。

示例

在下面的所有示例中:

  • 包含了磁盘删除规则;--on-source-disk-delete 标志设为默认值 keep-auto-snapshots,以永久保留所有自动生成的快照。另一种方法是将此标志设为 apply-retention-policy,以使用您的快照保留政策。
  • 存储位置手动设置为 US,因此所有生成的快照都存储在 美国多区域中。
  • 向所有生成的快照应用了标签 env=devmedia=images
  • 保留政策设为 10 天。

每小时时间表:在此示例中,快照时间表的开始时间为世界协调时间 (UTC) 晚上 10 点 (14:00 PST),每 4 小时运行 1 次。

  gcloud compute resource-policies create snapshot-schedule hourly-schedule1 \
      --description "MY HOURLY SNAPSHOT SCHEDULE" \
      --max-retention-days 10 \
      --start-time 22:00 \
      --hourly-schedule 4 \
      --region us-west1 \
      --on-source-disk-delete keep-auto-snapshots \
      --snapshot-labels env=dev,media=images \
      --storage-location US

每日时间表:在此示例中,快照时间表的开始时间为世界协调时间 (UTC) 晚上 10 点 (14:00 PST),并在每天同一时间运行 1 次。--daily-schedule 标志必须存在,但没有关联的值。

gcloud compute resource-policies create snapshot-schedule daily-schedule2 \
    --description "MY DAILY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 22:00 \
    --daily-schedule \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

每周时间表:在此示例中,快照时间表的开始时间为世界协调时间 (UTC) 晚上 10 点 (14:00 PST),并在每个星期二运行 1 次。

gcloud compute resource-policies create snapshot-schedule weekly-schedule3 \
    --description "MY WEEKLY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 22:00 \
    --weekly-schedule tuesday \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

REST

如需创建快照时间表,请构建一个对 resourcePolicies.insertPOST 请求。 您必须添加快照时间表名称和快照频率。

您还可以手动指定快照存储位置并在请求中添加资源标签

默认情况下,onSourceDiskDelete 参数设置为 keepAutoSnapshots。这意味着,如果来源磁盘遭到删除,系统会无限期地保留为该磁盘自动生成的快照。此外,您也可以将该标志设为 applyRetentionPolicy,以应用您的保留政策。

在以下示例中,每日快照时间表的开始时间设为世界协调时间 (UTC) 中午 12 点 (04:00),并每天重复。该示例还设置了 5 天的保留政策;5 天后,系统将自动移除快照。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

    {
     "name": "SCHEDULE_NAME",
     "description": "SCHEDULE_DESCRIPTION",
     "snapshotSchedulePolicy": {
       "schedule": {
         "dailySchedule": {
           "startTime": "12:00",
           "daysInCycle": "1"
         }
       },
       "retentionPolicy": {
         "maxRetentionDays": "5"
       },
       "snapshotProperties": {
         "guestFlush": "False",
         "labels": {
           "env": "dev",
           "media": "images"
         },
         "storageLocations": "STORAGE_LOCATION"
       }
     }
    }

替换以下内容:

  • PROJECT_ID:项目名称
  • REGION:快照时间表资源政策的位置
  • SCHEDULE_DESCRIPTION:快照时间表的说明
  • SCHEDULE_NAME:快照时间表的名称
  • STORAGE_LOCATION:可选:存储位置。如果省略此标志,则系统会使用默认存储位置。

同样,您也可以创建每周或每月时间表。请查看 resourcePolicies.insert 方法,以了解有关设置每周或每月时间表的详细信息。

例如,以下请求将创建一个每个星期二上午 9:00(世界协调时间 [UTC])运行的每周时间表。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies

{
   "name": "SCHEDULE_NAME",
   "description": "SCHEDULE_DESCRIPTION",
   "snapshotSchedulePolicy": {
      "schedule": {
        "weeklySchedule": {
          "dayOfWeeks": [
          {
            "day": "Tuesday",
            "startTime": "9:00"
          }
          ]
        }
      },
      "retentionPolicy": {
          "maxRetentionDays": "5"
      },
      "snapshotProperties": {
          "guestFlush": "False",
          "labels": {
               "production": "webserver"
          },
          "storageLocations": "US"
      }
  }
}

将快照时间表挂接到磁盘

创建时间表后,您可以将其挂接到现有磁盘。使用控制台、gcloud CLI 或 Compute Engine API。

控制台

将快照时间表挂接到现有磁盘。

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

    打开“磁盘”

  2. 选择要挂接快照时间表的磁盘的名称。此时会打开管理磁盘页面。

  3. 管理磁盘页面上,点击 修改。 您可能需要先点击 更多操作菜单。

  4. 使用快照时间表下拉菜单将时间表添加到对应磁盘,或者创建一个新的时间表。

  5. 如果您创建了新的时间表,请点击创建

  6. 点击保存,以完成该任务。

gcloud

如需将快照时间表附加到磁盘,请使用 gcloud disks add-resource-policies 命令

gcloud compute disks add-resource-policies DISK_NAME \
    --resource-policies SCHEDULE_NAME \
    --zone ZONE

请替换以下内容:

  • DISK_NAME:现有磁盘的名称
  • SCHEDULE_NAME:快照时间表的名称
  • ZONE:磁盘的位置

REST

构建对 disks.addResourcePoliciesPOST 请求,以将快照时间表挂接到现有磁盘。

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

{
  "resourcePolicies": [
    "regions/REGION/resourcePolicies/SCHEDULE_NAME"
  ]
}

替换以下内容:

  • PROJECT_ID:项目名称
  • ZONE:磁盘所在的可用区。
  • REGION:创建快照时间表的区域
  • DISK_NAME:磁盘的名称
  • SCHEDULE_NAME:要应用于此磁盘的快照时间表的名称

同时创建磁盘和快照时间表

您可以使用 Google Cloud 控制台或 gcloud CLI 同时创建磁盘和快照时间表。

控制台

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

    打开“磁盘”

  2. 点击创建磁盘

  3. 填写必填字段,以创建可用区级磁盘或区域级磁盘。

  4. 在与快照时间表相同的区域中创建磁盘。

  5. 填充快照时间表的各个字段。

  6. 使用下拉菜单并填写用于创建时间表的各个字段。

  7. 点击创建以创建时间表。

  8. 点击创建以创建磁盘。

gcloud

使用 gcloud disks create 命令创建可用区级或区域级永久性磁盘或 Hyperdisk,然后向其附加快照时间表。

gcloud compute disks create DISK_NAME \
     --resource-policies SCHEDULE_NAME \
     --zone ZONE

替换以下内容:

  • DISK_NAME:新磁盘的名称
  • SCHEDULE_NAME:快照时间表的名称
  • ZONE:您要在其中创建磁盘的位置。该磁盘所在的可用区必须与快照时间表位于同一区域。

后续步骤