跳到主要内容

创建应用备份:选择集群、命名空间和存储仓库

AppBackup 是平台对 Velero Backup 的封装。它把集群、命名空间、资源范围、存储仓库、调度策略和操作历史统一记录在一个对象中。

什么时候创建手动备份

  • 首次验证新集群和新仓库。
  • 升级应用或数据库前做保护点。
  • 容灾切换前执行最终同步。
  • 排查周期备份失败时单独复现。

控制台步骤

  1. 进入 备份恢复 / 应用备份
  2. 点击 创建备份
  3. 选择源集群。
  4. 选择一个或多个命名空间。
  5. 选择存储仓库。
  6. 按需设置标签选择器、资源包含和排除规则。
  7. 保存并观察状态。

选择集群和命名空间

先选择实际持有工作负载的源集群。选中集群后,右侧命名空间列表会按该集群实时加载,列表中的资源数量用于判断命名空间内是否有可保护资源。

选择应用备份的集群和命名空间

选项说明建议
选择集群本次备份读取资源的 Kubernetes 集群。一次只能选择一个集群。选择真实运行应用的源集群,不要选目标演练集群。
搜索集群名称或标签按集群名称或标签过滤集群列表。多集群环境先用标签区分生产、测试、地域。
选择命名空间本次备份纳入的 namespace 范围。按应用边界选择一个或多个命名空间,避免直接备份系统命名空间。
全选 / 清空快速选择或清除当前集群下的命名空间。只在已经明确排除系统、监控、日志等非业务命名空间时使用全选。
搜索命名空间在当前集群命名空间列表中查找。命名空间较多时先搜索业务前缀,再勾选。

基础配置和存储配置

向下滚动弹窗,配置备份类型、备份名称、TTL 和存储位置。未保存前不会创建 AppBackup

配置应用备份的基础信息和存储位置

选项说明建议
备份类型手动备份 会立即执行;自动备份 需要选择 AutoBackup 调度策略,后续按策略执行。临时保护点选择手动备份;周期保护选择自动备份。
备份策略(Cron)自动备份时出现,决定执行周期。先在 资源配置 / 灾备策略管理 创建并启用 AutoBackup 策略。
备份名称平台 AppBackup 对象名称。使用业务、环境和时间语义,例如 bookinfo-prod-a-manual
备份描述记录备份目的、范围或变更窗口。写清楚为什么创建,便于后续审计和恢复选择。
备份生命周期(TTL)备份数据保留时间,到期后由 Velero 清理。常规演练保留较短时间;生产关键保护点按合规和容量要求设置。
备份存储位置备份写入的 BSL / 存储仓库。选择源集群和未来恢复目标集群都能访问的仓库。

高级选项:卷备份和 Resource Policies

高级选项用于控制卷备份方式和资源过滤范围。配置项较多,弹窗需要继续向下滚动查看。

配置应用备份的 Resource Policies

选项说明建议
默认全部卷使用文件系统级的方式进行备份对卷数据使用文件系统级备份方式,而不是依赖快照后端。没有可用 CSI 快照能力、或希望跨集群恢复更通用时启用;大数据卷会更慢。
Resource Policies 配置用于声明包含或排除哪些资源类型。生产环境先在测试命名空间验证,确认恢复结果符合预期。
All Resources纳入所有集群级资源,并可通过 Included / Excluded Resources 控制资源类型。只有需要 CRD、ClusterRole 等集群级资源时使用。
Scoped Resources仅纳入归属于特定命名空间的集群资源,并分别控制 namespace-scoped 与 cluster-scoped 资源。应用级备份优先使用该模式,减少对目标集群全局资源的影响。
Included Namespace Scoped Resources只包含指定的命名空间级资源类型。留空表示默认范围;需要精确控制时填写如 deploymentsservicespersistentvolumeclaims
Excluded Namespace Scoped Resources排除指定的命名空间级资源类型。排除优先级高于包含;常用于排除 events、临时 Pod 等可重建资源。
Included Cluster Scoped Resources只包含指定集群级资源类型。跨集群恢复前确认目标集群允许创建这些资源。
Excluded Cluster Scoped Resources排除指定集群级资源类型。通常排除目标集群已有且不应覆盖的 storageclassesingressclasses 等。

接口传参时,这四个字段都位于应用备份请求 body 顶层,并按字符串数组传递:

{
"includedNamespaceScopedResources": [
"deployments.apps",
"statefulsets.apps",
"services",
"configmaps",
"secrets",
"persistentvolumeclaims"
],
"excludedNamespaceScopedResources": ["events", "pods", "replicasets.apps"],
"includedClusterScopedResources": ["storageclasses.storage.k8s.io"],
"excludedClusterScopedResources": [
"ingressclasses.networking.k8s.io",
"clusterroles.rbac.authorization.k8s.io",
"clusterrolebindings.rbac.authorization.k8s.io"
]
}

资源类型使用 Kubernetes API resource 名称,推荐从 kubectl api-resourcesNAME 列获取。数组为空或省略表示不对该类资源做显式包含/排除;同一组 include/exclude 不能包含同一个资源类型,也不要和旧字段 includedResourcesexcludedResourcesincludeClusterResources 混用。

高级选项:Labels Selector

如果同一个命名空间内混合了多个应用,可以启用标签选择器进一步缩小备份范围。

配置应用备份的标签选择器

选项说明建议
启用标签选择器开启后才会按标签过滤资源。只有确认应用资源标签完整一致时启用。
Label Selectors输入 key=value 标签条件,回车确认。多个条件按 AND 逻辑组合。先用 kubectl get all,pvc,secret,configmap -l key=value 验证能覆盖完整应用资源。
标签选择器与命名空间标签选择器只在已选择命名空间范围内继续过滤。不要只给 Deployment 打标签,PVC、Service、Secret、ConfigMap 等也要检查。
标签选择器与资源排除同时配置 Resource Policies 和 Labels Selector 时,两者共同收窄范围。恢复前通过 Velero Backup 详情检查实际进入备份的资源。

CRD 示例

apiVersion: testudo.softcdata.com/v1
kind: AppBackup
metadata:
name: bookinfo-manual
spec:
cluster: prod-a
schedule: "@daily"
template:
storageLocation: minio-dr
includedNamespaces:
- demo-bookinfo
includedNamespaceScopedResources:
- deployments.apps
- statefulsets.apps
- services
- configmaps
- secrets
- persistentvolumeclaims
excludedNamespaceScopedResources:
- events
- pods
- replicasets.apps
includedClusterScopedResources: []
excludedClusterScopedResources:
- storageclasses.storage.k8s.io
- ingressclasses.networking.k8s.io
paused: false
skipImmediately: false

控制台会把表单转换为 server DTO,再由 server 写入 CRD。注意 server API 请求中这些字段位于 body 顶层,写入 CRD 后对应到 spec.template 下。

验证

kubectl get appbackup bookinfo-manual -o yaml
kubectl --context prod-a -n velero get backup

如果 Velero Backup 成功但 AppBackup 没有更新,重点检查 operator 日志和 CRD status 写权限。