安排 Filestore Enterprise 快照的创建时间


本文档介绍如何使用 Cloud Scheduler 安排和帮助保护 Filestore 快照。

本文档适用于希望了解或创建计划 Filestore 快照的 IT 决策者、备份管理员和灾难恢复 (DR) 管理员。

目标

  • 配置 Cloud Functions 和 JSON 配置文件。
  • 创建 Cloud Scheduler 作业。
  • 创建计划 Filestore 快照并为其添加标签。
  • 监控快照创建过程。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本教程后,您可以删除自己创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. 启用 Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build API。

    启用 API

部署模型

下图显示了支持 Filestore 快照 Cloud Functions 函数的部署模型。

支持 Filestore 快照 Cloud Functions 的部署模型。

Cloud Scheduler 作业与 Cloud Functions 函数协同工作,以安排和生成 Filestore 快照和日志文件。这些快照可在 Filestore 共享中使用。

已知限制

在准备为 Filestore 实例配置快照调度器时,请考虑以下限制:

  • 该函数只会在需要时删除一个快照,即使调度器快照的数量多于保留政策配置文件中定义的数量,或者如果保留政策配置文件已更新为保留的快照数量少于之前的数量,也是如此。
  • 如果您减小 JSON 配置文件中 snapshots 的数值,则系统不会自动删除实例的冗余快照。如果您更改此设置,则需要手动删除冗余快照。
  • 由于快照 ID 的字符数限制为 75 个字符,因此保留政策名称的上限为 50 个字符。

准备环境

在本部分中,您将设置环境变量、克隆代码库,以及创建本教程所需的应用和文件。

设置环境变量

  • 在 Cloud Shell 中,输入以下命令:
gcloud components update
  • 在 Cloud Shell 中,创建以下变量:

    export PROJECT_ID=PROJECT_ID
    export GCP_REGION=GCP_REGION
    export APP_ENGINE_REGION=APP_ENGINE_REGION
    export FUNCTION_NAME=FUNCTION_NAME
    export SCHEDULER_NAME=SCHEDULER_NAME
    export SCHEDULER_EXPRESSION="SCHEDULER_EXPRESSION"
    export SCHEDULER_TZ=SCHEDULER_TZ
    export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
    

    替换以下内容:

    • PROJECT_ID:您要在其中安装 Filestore 企业版实例、Cloud Function 和 Cloud 调度器的 Google Cloud 项目的 ID。
    • GCP_REGION:您要安装 Filestore 企业版实例、Cloud Function 和 Cloud Scheduler 的 Google Cloud 区域。
    • APP_ENGINE_REGION:App Engine 位置列表中要安装 App Engine 的区域。请考虑以下要求:
      • 一个 Google Cloud 项目只能有一个 App Engine 实例,并且此 App Engine 区域以后无法更改。
      • Cloud Scheduler 作业和 App Engine 实例必须位于同一区域中。
        • 例如,如果 Cloud Scheduler 资源使用 us-central1,请使用 App Engine 等效的 us-central
        • App Engine 会对某些区域应用唯一的命名惯例。 如需了解详情,请参阅 App Engine 位置列表
    • FUNCTION_NAME:您要为 Cloud Function 指定的名称。
    • SCHEDULER_NAME:您要为 Cloud Scheduler 指定的名称。
    • SCHEDULER_EXPRESSION:Cloud Scheduler Cron 表达式,例如 10 0 * * *。如需了解详情,请参阅配置 Cron 作业时间表
    • SCHEDULER_TZ:Cloud Scheduler 的时区,采用 tz 数据库时区列表中的名称格式,例如 America/Los_Angeles
    • SERVICE_ACCOUNT_NAME:新创建的服务帐号名称,例如 scheduler-sa

创建服务账号

在本部分中,您将创建一个专用服务帐号,用于创建和管理 Cloud Function 和 Cloud Scheduler 作业。

在此过程中,服务帐号需要以下权限:

  • file.instances.get
  • file.snapshots.list
  • file.snapshots.create
  • file.operations.get
  • file.snapshots.delete
  • cloudfunctions.functions.invoke

如需了解详情,请参阅 Filestore IAM 权限Cloud Functions IAM 权限

要创建服务账号,请执行以下操作:

  1. 在 Cloud Shell 中,为快照调度程序创建一个具有所需权限的专用角色:

    gcloud iam roles create snapshot_scheduler --project $PROJECT_ID --permissions file.instances.get,file.snapshots.list,file.snapshots.create,file.operations.get,file.snapshots.delete,logging.logEntries.create,cloudfunctions.functions.invoke --stage GA
    
  2. 创建服务账号:

    gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --project $PROJECT_ID
    
  3. 将角色绑定到服务帐号:

    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --role projects/$PROJECT_ID/roles/snapshot_scheduler
    

创建 Filestore Enterprise 实例

  1. 如果您还没有为要使用的 Filestore Enterprise 实例创建环境变量,请在 Cloud Shell 中创建以下变量:

    export FILESTORE_INSTANCE_ID=FILESTORE_INSTANCE_ID
    export FILESTORE_SHARE_NAME=SHARE_NAME
    export FILESTORE_SHARE_SIZE=NUMERIC_IN_GB
    export NETWORK_NAME=VPC_NAME
    

    替换以下内容:

    • FILESTORE_INSTANCE_ID:Filestore Enterprise 实例名称
    • SHARE_NAME:Filestore Enterprise 实例共享名称
    • NUMERIC_IN_GB:Filestore Enterprise 实例共享大小,介于 1024 到 10240 之间,以 256 为增量
    • VPC_NAME:您要在其中安装 Filestore Enterprise 实例的 VPC 网络名称
  2. 如果您还没有 Filestore 实例,请创建一个:

    gcloud filestore instances create $FILESTORE_INSTANCE_ID --network name=$NETWORK_NAME --file-share=capacity=$FILESTORE_SHARE_SIZE,name=$FILESTORE_SHARE_NAME --tier ENTERPRISE --project=$PROJECT_ID --location=$GCP_REGION
    

如需了解详情,请参阅创建实例

创建 App Engine

在本部分中,您将为 Google Cloud 项目创建 App Engine。这样,您就可以在本教程的后面部分创建 Cloud Scheduler 作业。

一个 Google Cloud 项目只能有一个 App Engine,并且以后无法更改区域。

  • 如果您还没有 App Engine,请在 Cloud Shell 中创建一个:

    gcloud app create --region=$APP_ENGINE_REGION --project=$PROJECT_ID
    

创建 JSON 配置文件

由于 Cloud Functions 的限制,该 JSON 配置文件最多可以包含 8 个 Filestore 实例。如果您要为超过 8 个 Filestore 实例安排快照,请使用额外的 Cloud Scheduler 作业。

  • 在 Cloud Shell 中,创建一个名为 request.json 的新文件,并根据您的环境修改内容:

    {
                "retention_policy": "RETENTION_NAME",
                "instances": [
                    {"instance_path": "projects/PROJECT_ID/locations/GCP_REGION/instances/FILESTORE_INSTANCE_ID/",
                        "snapshots": NUMBER_OF_SNAPSHOTS
                    }
                ]
    }
    

    替换以下内容:

    • RETENTION_NAME:快照保留类型的名称,会成为快照名称的一部分,例如 daily
    • NUMBER_OF_SNAPSHOTS:快照的数量。

克隆存储库

克隆实验代码库,然后输入目录:

  1. 在 Cloud Shell 中,克隆实验代码库:

    git clone https://github.com/GoogleCloudPlatform/Filestore-Snapshot-Scheduler
    

    输出类似于以下内容:

    Cloning into Filestore-Snapshot-Scheduler
    
  2. 进入目录:

    cd Filestore-Snapshot-Scheduler
    

创建 Cloud Function

在 Cloud Shell 中,创建 Cloud Function 解决方案:

gcloud functions deploy $FUNCTION_NAME --region $GCP_REGION --runtime=python39 --trigger-http --source scheduler/ --timeout 540 --service-account $SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --entry-point main --project $PROJECT_ID

例如:

gcloud functions deploy scheduler_func --region us-central1 --runtime=python39 --trigger-http --source scheduler/ --timeout 540 --service-account scheduler-sa@project1.iam.gserviceaccount.com --entry-point main --project project1

创建 Cloud Scheduler 作业

Cloud Scheduler 作业必须位于与 App Engine 区域等效的区域。

在 Cloud Shell 中,在同一 Filestore 实例上创建一个具有一个或多个调度器的 Cloud Scheduler 作业:

gcloud scheduler jobs create http $SCHEDULER_NAME --schedule "$SCHEDULER_EXPRESSION" --uri "https://$GCP_REGION-$PROJECT_ID.cloudfunctions.net/$FUNCTION_NAME"  --http-method POST --message-body-from-file ../request.json --oidc-service-account-email $SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --time-zone $SCHEDULER_TZ --project $PROJECT_ID

在以下示例中,每日调度器在晚上 8:00 运行:

gcloud scheduler jobs create http daily_scheduler --schedule "0 20 * * *" --uri "https://us-central1-project1.cloudfunctions.net/scheduler_func"  --http-method POST --message-body-from-file ../request.json --oidc-service-account-email scheduler-sa@project1.iam.gserviceaccount.com --time-zone America/Los_angeles --project project1

验证排定的 Filestore 快照

  1. 在 Google Cloud 控制台中,前往 Cloud Scheduler 页面。

    转到 Cloud Scheduler

  2. 在您创建的作业对应的行中,点击 操作 > 强制运行作业

  3. 点击刷新

    • 如果作业成功运行,上次运行结果列会显示上次成功运行作业的时间戳。
    • 如果作业失败,请执行以下操作:

      1. 转到 Cloud Functions 页面。

        转到 Cloud Functions

      2. 在您创建的函数对应的行中,依次点击 操作 > 查看日志

      3. 查看错误消息,并相应地进行问题排查。

  4. 在 Google Cloud 控制台中,前往 Filestore 实例页面。

  5. 实例列表中,选择您的实例,并确保它具有具有以下名称格式的快照:

    sched-RETENTION_NAME-DATE-TIME
    

    例如 sched-daily-20220315-120640

清理

为避免系统因本教程中使用的资源向您的 Cloud Platform 帐号收取费用,请删除包含这些资源的项目。

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤