mcpField
G
gke-backup-dr

gke-backup-dr

github.com/google云与 DevOps21.6k6.7k 次安装今天更新
代码仓库

关于 gke-backup-dr

这项参考技能指导云平台运维人员使用 Backup for GKE 保护有状态 GKE 工作负载,并涵盖备份计划配置与安全恢复,特别说明卷、密钥纳入选项及可能造成破坏的冲突策略。

主要功能

  1. 01备份计划配置指南
  2. 02明确纳入卷数据和密钥
  3. 03恢复冲突策略说明
  4. 04加密与保留实践
  5. 05跨项目备份指导
  6. 06基于 RPO 的计划调度

适用场景

  1. 01为有状态 GKE 工作负载配置备份
  2. 02规划向运行中集群安全恢复
  3. 03设置加密且带保留期限的备份
  4. 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 会在恢复前删除整个冲突命名空间 (以及其中的所有资源)。

规则:

  1. 先在非生产目标集群中验证恢复操作。
  2. 优先使用安全默认值(use-existing-version + fail-on-conflict), 除非用户明确需要回滚正在运行的资源。
  3. 将恢复操作执行到生产集群之前,务必先获得用户的明确确认,并说明当前采用的冲突策略以及它可能覆盖或删除的内容。

最佳实践

  1. CMEK 加密:使用客户管理的加密密钥加密备份计划: --encryption-key=projects/{project_id}/locations/{location}/keyRings/{ring}/cryptoKeys/{key}。
  2. 范围:优先备份特定命名空间,而非整个集群:--selected-namespaces={ns1},{ns2}(而非 --all-namespaces)。
  3. 应用一致性:建议在备份前暂停数据库或暂停应用写入(例如使用备份前钩子或数据库专用工具),以确保数据完整性。
  4. CSI 卷快照:确保有状态备份使用 GKE 的 CSI(容器存储接口)驱动程序创建卷快照,以捕获持久卷数据。
  5. 服务术语:回复中始终明确将该服务称为 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 插件变为活动状态。 * 操作:提供启用插件的命令,说明该操作将在后台继续进行,然后立即继续编写备份计划配置。不要阻塞。

评论

支持 Markdown