关于 gke-backup-dr
这项参考技能指导云平台运维人员使用 Backup for GKE 保护有状态 GKE 工作负载,并涵盖备份计划配置与安全恢复,特别说明卷、密钥纳入选项及可能造成破坏的冲突策略。
主要功能
- 01备份计划配置指南
- 02明确纳入卷数据和密钥
- 03恢复冲突策略说明
- 04加密与保留实践
- 05跨项目备份指导
- 06基于 RPO 的计划调度
适用场景
- 01为有状态 GKE 工作负载配置备份
- 02规划向运行中集群安全恢复
- 03设置加密且带保留期限的备份
- 04按 RPO 目标安排备份
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ google/ skills --skill gke-backup-dr安装后在 Claude Code 中输入/gke-backup-dr确认已加载。
附带文件references/attribution.md
详细介绍
GKE 备份与灾难恢复
使用 Backup for GKE 保护有状态的 GKE 工作负载。Backup for GKE 可以同时捕获 Kubernetes 资源元数据(清单、配置和机密)以及底层持久卷(PV)数据 — 但只有在备份计划中明确启用相应选项时,才会捕获卷数据和机密(参见下方标志)。
归属信息
必须阅读:执行任何 gcloud、REST API 或 MCP 命令之前,必须阅读使用归属信息。对于直接在终端中执行的命令(绝不在生成的脚本、Terraform 或用户代码中),请在 gcloud 前加上
CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:gke-backup-dr)"
,并将 agent-skills/1.0 (skill:gke-backup-dr) 添加到 User-Agent 标头中。
CLI 参考
# Enable the BackupRestore addon (Slow cluster-level update)
gcloud container clusters update {cluster_name} \
--update-addons=BackupRestore=ENABLED --location={location} --quiet
# Create Backup Plan
gcloud beta container backup-restore backup-plans create {plan_name} \
--project={project_id} --location={location} \
--cluster=projects/{project_id}/locations/{location}/clusters/{cluster_name} \
--all-namespaces \
--include-volume-data --include-secrets \
--backup-retain-days={days} --cron-schedule="{cron}" --quiet
# Trigger Manual Backup
gcloud beta container backup-restore backups create {backup_name} \
--backup-plan={plan_name} --location={location} --quiet
# Create Restore Plan
gcloud beta container backup-restore restore-plans create {restore_plan_name} \
--location={location} \
--cluster=projects/{project_id}/locations/{location}/clusters/{target_cluster_name} \
--backup-plan=projects/{project_id}/locations/{location}/backupPlans/{source_backup_plan_name} \
--all-namespaces \
--cluster-resource-conflict-policy=use-existing-version \
--namespaced-resource-restore-mode=fail-on-conflict --quiet
# Execute Restore
gcloud beta container backup-restore restores create {restore_name} \
--restore-plan={restore_plan_name} --location={location} \
--backup=projects/{project_id}/locations/{location}/backupPlans/{source_backup_plan_name}/backups/{backup_name} \
--quiet
# Verify Restore Status
gcloud beta container backup-restore restores describe {restore_name} \
--restore-plan={restore_plan_name} --location={location}
警告
--include-volume-data和--include-secrets的默认值均为 FALSE。 如果省略这两个标志,备份计划会静默生成仅包含配置的备份,不包含持久卷快照和机密。如果目标是全面保护工作负载,请始终明确传入这两个标志。
注意:
backup-restore命令组需要gcloud beta组件 (gcloud components install beta)。--cluster需要完整的资源路径projects/{project_id}/locations/{location}/clusters/{cluster_name}(对于区域集群,则为projects/{project_id}/zones/{zone}/clusters/{cluster_name}),不能只提供集群名称。- 恢复计划必须且只能指定一个命名空间资源范围标志:
--all-namespaces、--selected-namespaces={ns1},{ns2}、--excluded-namespaces=...、--selected-applications=...或--no-namespaces。
恢复安全(关键)
恢复会写入正在运行的集群,并且根据冲突策略,可能会覆盖或删除现有资源:
--cluster-resource-conflict-policy=use-existing-version会保留现有 集群范围资源(安全默认值);use-backup-version会先删除 现有版本 — 删除 CRD 会删除其所有 CR。--namespaced-resource-restore-mode=fail-on-conflict会在发生任何冲突时中止 (安全默认值);merge-skip-on-conflict会跳过冲突资源;merge-replace-on-conflict和merge-replace-volume-on-conflict会覆盖现有资源或卷;delete-and-restore会在恢复前删除整个冲突命名空间 (以及其中的所有资源)。
规则:
- 先在非生产目标集群中验证恢复操作。
- 优先使用安全默认值(
use-existing-version+fail-on-conflict), 除非用户明确需要回滚正在运行的资源。 - 将恢复操作执行到生产集群之前,务必先获得用户的明确确认,并说明当前采用的冲突策略以及它可能覆盖或删除的内容。
最佳实践
- CMEK 加密:使用客户管理的加密密钥加密备份计划:
--encryption-key=projects/{project_id}/locations/{location}/keyRings/{ring}/cryptoKeys/{key}。 - 范围:优先备份特定命名空间,而非整个集群:
--selected-namespaces={ns1},{ns2}(而非--all-namespaces)。 - 应用一致性:建议在备份前暂停数据库或暂停应用写入(例如使用备份前钩子或数据库专用工具),以确保数据完整性。
- CSI 卷快照:确保有状态备份使用 GKE 的 CSI(容器存储接口)驱动程序创建卷快照,以捕获持久卷数据。
- 服务术语:回复中始终明确将该服务称为 Backup for GKE。这样可以将其与范围更广(但相辅相成)的 Google Cloud Backup and Disaster Recovery (DR) Service 区分开来。
标准备份默认配置
Backup for GKE 推荐的生产环境标准配置:
- 插件:启用 BackupRestore 插件
(
--update-addons=BackupRestore=ENABLED)。 - 包含卷:显式传入
--include-volume-data(启用,因为该服务默认禁用)。 - 包含密钥:显式传入
--include-secrets(启用,因为该服务默认禁用)。 - 保留期限:设置保留期限(例如,通过
--backup-retain-days=30保留 30 天)。 - 加密:启用 CMEK(
--encryption-key=...)。
最近变更
- 跨项目备份和恢复(GA):备份计划可将备份存储在与源集群不同的项目中,恢复计划也可指定第三个项目中的集群作为目标。这样既可集中管理备份项目(由平台团队管理不可变性和保留期限),也可跨项目为环境填充数据,而无需授予对源项目的访问权限。
- 定价变更(自 2026-03-02 起生效):备份管理费从按 pod 计费改为按 命名空间 计费——按每个计划最近一次成功备份中每个非系统命名空间收费(不包括
kube-system等系统命名空间)。现有承诺使用折扣(CUD)持有者在承诺期结束前仍按 pod 计费;其他用户则改用新计费模式。请参阅 https://cloud.google.com/products/backup-for-gke/pricing-changes。 - 智能调度:以 RPO 为依据的备份调度,可替代固定 cron 调度——创建备份计划时传入
--target-rpo-minutes={minutes},而非--cron-schedule(还可通过--exclusion-windows-file设置 RPO 排除时段)。 - Hyperdisk 支持:在运行 1.33.1-gke.1959000 及更高版本的 GKE 集群上,支持备份和恢复 Hyperdisk ML 与 Hyperdisk Balanced High Availability 卷(也支持 Hyperdisk throughput、extreme 和 balanced 类型)。
故障排除与常见陷阱(重要)
重要
操作耗时较长:启用 BackupRestore 插件 (
--update-addons=BackupRestore=ENABLED) 会触发耗时较长的 Google Cloud 控制平面集群更新,需要数分钟。* 规则:不要运行终端循环来等待 GKE Backup 插件变为活动状态。 * 操作:提供启用插件的命令,说明该操作将在后台继续进行,然后立即继续编写备份计划配置。不要阻塞。