本文档面向想要了解或创建预定 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Filestore, Cloud Scheduler, Cloud Functions, App Engine, and Cloud Build APIs.
部署模型
下图显示了支持 Filestore 快照 Cloud Run 函数的部署模型。
Cloud Scheduler 作业会与 Cloud Run 函数协调,以安排和生成 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 Enterprise 实例、Cloud Run 函数和 Cloud 调度器的 Google Cloud 项目 ID。GCP_REGION
:您要安装 Filestore Enterprise 实例、Cloud Run 函数和 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
。
创建服务账号
在本部分中,您将创建一个专用服务账号,以便创建和管理 Cloud Run 函数和 Cloud Scheduler 作业。
执行此过程时,服务账号需要具有以下权限:
file.instances.get
file.snapshots.list
file.snapshots.create
file.operations.get
file.snapshots.delete
cloudfunctions.functions.invoke
如需了解详情,请参阅 Filestore IAM 权限或 Cloud Run 函数 IAM 权限。
要创建服务账号,请执行以下操作:
在 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
创建 Filestore Enterprise 实例
如果您尚未为要使用的 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 企业版实例的 VPC 网络名称
如果您还没有 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 Run functions 函数的限制,JSON 配置文件最多可以包含 8 个 Filestore 实例。如果您需要为八个以上的 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
:快照数量。
克隆存储库
克隆实验代码库,然后进入该目录:
在 Cloud Shell 中,克隆实验代码库:
git clone https://github.com/GoogleCloudPlatform/Filestore-Snapshot-Scheduler
输出类似于以下内容:
Cloning into Filestore-Snapshot-Scheduler
进入该目录:
cd Filestore-Snapshot-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 快照
在 Google Cloud 控制台中,前往 Cloud Scheduler 页面。
在您创建的作业所在的行中,点击
操作 > 强制运行作业。点击刷新。
- 如果作业成功运行,上次运行结果列会显示上次成功运行作业的时间戳。
如果作业失败,请执行以下操作:
前往 Cloud Functions 页面。
在您创建的函数所在的行中,依次点击
操作 > 查看日志。查找错误消息,然后相应地进行问题排查。
在 Google Cloud 控制台中,前往 Filestore 实例页面。
在实例列表中,选择您的实例,并确保该实例具有以下格式的快照名称:
sched-RETENTION_NAME-DATE-TIME
例如,
sched-daily-20220315-120640
。
清理
为避免因本教程中使用的资源导致您的 Cloud Platform 账号产生费用,请删除包含这些资源的项目。删除项目
- 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 的参考架构、图表和最佳做法。查看我们的云架构中心。