本文档面向想要了解或创建预定 Filestore 快照的 IT 决策者、备份管理员和灾难恢复 (DR) 管理员。
目标
- 配置 Cloud Run functions 和 JSON 配置文件。
- 创建 Cloud Scheduler 作业。
- 创建并标记计划 Filestore 快照。
- 监控快照创建过程。
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
如需根据您的预计使用量来估算费用,请使用价格计算器。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - 该函数仅在需要时删除单个快照,即使调度程序快照的数量多于保留政策配置文件中定义的数量,或者保留政策配置文件更新为保留的快照数量少于之前也是如此。
- 如果您在 JSON 配置文件中减小
snapshots
的数值,系统不会自动删除实例中的冗余快照。如果您更改此设置,则需要手动删除冗余快照。 - 由于快照 ID 的长度上限为 75 个字符,因此保留政策名称的长度上限为 50 个字符。
- 在 Cloud Shell 中,输入以下命令:
在 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
:您要在其中安装企业版实例、Cloud Run 函数和 Cloud Scheduler 的 Google Cloud 项目 ID。GCP_REGION
:您要安装企业版实例、Cloud Run 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 位置列表。
- 例如,如果 Cloud Scheduler 资源使用
FUNCTION_NAME
:您要为 Cloud Run 函数指定的名称。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
。
file.instances.get
file.snapshots.list
file.snapshots.create
file.operations.get
file.snapshots.delete
cloudfunctions.functions.invoke
在 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
创建服务账号:
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --project $PROJECT_ID
将角色绑定到服务账号:
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
如果您尚未为要使用的企业版实例创建环境变量,请在 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
:企业实例名称SHARE_NAME
:企业实例共享名称NUMERIC_IN_GB
:企业实例共享大小,一个介于 1024 和 10240 之间的数字,以 256 为增量VPC_NAME
:您要安装企业版实例的 VPC 网络名称
如果您还没有 Filestore 实例,请创建一个:
gcloud filestore instances create $FILESTORE_INSTANCE_ID --network name=$NETWORK_NAME --file-share=capacity=$FILESTORE_SHARE_SIZE,name=$FILESTORE_SHARE_NAME --tier ZONAL --project=$PROJECT_ID --location=$GCP_REGION
如果您还没有 App Engine,请在 Cloud Shell 中创建一个:
gcloud app create --region=$APP_ENGINE_REGION --project=$PROJECT_ID
在 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
:快照的数量。
在 Cloud Shell 中,克隆实验代码库:
git clone https://github.com/GoogleCloudPlatform/Filestore-Snapshot-Scheduler
输出类似于以下内容:
Cloning into Filestore-Snapshot-Scheduler
进入该目录:
cd Filestore-Snapshot-Scheduler
在 Google Cloud 控制台中,前往 Cloud Scheduler 页面。
在您创建的作业所在的行中,依次点击
操作 > 强制运行作业。点击刷新。
- 如果作业成功运行,上次运行结果列会显示上次成功运行作业的时间戳。
如果作业失败,请执行以下操作:
前往 Cloud Functions 页面。
在您创建的函数所在的行中,依次点击
操作 > 查看日志。查找错误消息,然后根据相应消息进行问题排查。
在 Google Cloud 控制台中,前往 Filestore 实例页面。
在实例列表中,选择您的实例,并确保该实例具有以下格式的快照名称:
sched-RETENTION_NAME-DATE-TIME
例如,
sched-daily-20220315-120640
。- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- 详细了解 Filestore 快照。
- 详细了解 Filestore 备份。
- 探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的云架构中心。
部署模型
下图显示了支持 Filestore 快照 Cloud Run 函数的部署模型。
Cloud Scheduler 作业会与 Cloud Run 函数协调,以安排和生成 Filestore 快照和日志文件。快照可在 Filestore 共享中找到。
已知限制
准备为 Filestore 实例配置快照调度器时,请注意以下限制:
准备环境
在本部分中,您将设置环境变量、克隆代码库,并创建本教程所需的应用和文件。
设置环境变量
gcloud components update
创建服务账号
在本部分中,您将创建一个专用服务账号,以便创建和管理 Cloud Run 函数和 Cloud Scheduler 作业。
执行此过程时,服务账号需要具有以下权限:
如需了解详情,请参阅 Filestore IAM 权限或 Cloud Run 函数 IAM 权限。
要创建服务账号,请执行以下操作:
创建企业实例
如需了解详情,请参阅创建实例。
创建 App Engine
在本部分中,您将为Google Cloud 项目创建 App Engine。这样一来,您就可以在本教程的后续步骤中创建 Cloud Scheduler 作业。
一个 Google Cloud 项目只能有一个 App Engine 应用,并且以后无法更改区域。
创建 JSON 配置文件
由于 Cloud Run functions 的限制,JSON 配置文件最多可以包含 8 个 Filestore 实例。如果您需要为八个以上的 Filestore 实例安排快照创建时间,请使用额外的 Cloud Scheduler 作业。
克隆存储库
克隆实验代码库,然后进入该目录:
创建 Cloud Run 函数
在 Cloud Shell 中,创建 Cloud Run 函数解决方案:
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 快照
清理
清理
为避免因本教程中使用的资源导致您的 Cloud Platform 账号产生费用,请删除包含这些资源的项目。