控制备份范围:命名空间、标签和资源过滤
备份范围决定恢复时能拿到哪些资源。范围过大影响速度和容量,范围过小会导致恢复缺资源。
推荐顺序
- 先按命名空间定义应用边界。
- 再用标签选择器排除非应用资源。
- 最后使用资源包含/排除规则处理特殊资源。
命名空间范围
优先选择一个应用对应的命名空间集合。例如微服务被拆在多个命名空间时,可以选择:
includedNamespaces:
- demo-bookinfo
- demo-bookinfo-data
不要在生产环境直接备份所有命名空间,除非已经明确排除 kube-system、监控、日志和临时任务命名空间。
标签选择器
适用于一个命名空间内多个应用混部的场景:
labelSelector:
matchLabels:
app: bookinfo
使用标签选择器前,先确认 Service、Deployment、PVC、ConfigMap、Secret 等关键资源标签一致。
资源过滤
常见过滤策略:
- 包含 Deployment、StatefulSet、Service、Ingress、ConfigMap、Secret、PVC。
- 排除 Event、Pod、ReplicaSet 等可重建资源。
- 对集群级资源显式评估,避免恢复时影响目标集群全局配置。
控制台入口
在创建应用备份时,先用集群和命名空间确定应用边界,再在 高级选项 / Resource Policies 配置 中控制资源类型。


Resource Policies 中的关键选项:
| 选项 | 用途 |
|---|---|
| All Resources | 纳入所有集群级资源,适合需要同步 CRD、ClusterRole 等全局对象的场景。 |
| Scoped Resources | 只纳入归属于特定命名空间的资源,适合大多数应用级备份。 |
| Included Namespace Scoped Resources | 只包含指定命名空间级资源类型。 |
| Excluded Namespace Scoped Resources | 排除指定命名空间级资源类型,排除优先级高于包含。 |
| Included Cluster Scoped Resources | 只包含指定集群级资源类型。 |
| Excluded Cluster Scoped Resources | 排除指定集群级资源类型,避免恢复时影响目标集群全局配置。 |
Resource Policies 传参格式
通过 server API 创建或更新应用备份时,这四个字段都按字符串数组传递,位于请求 body 顶层;不要把多个资源类型拼成一个逗号分隔字符串。
{
"includedNamespaceScopedResources": [
"deployments.apps",
"statefulsets.apps",
"services",
"configmaps",
"secrets",
"persistentvolumeclaims",
"ingresses.networking.k8s.io"
],
"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"
]
}
完整创建示例:
POST /apis/appbackups.testudo.softcdata.com/v1/appbackups
Content-Type: application/json
{
"name": "bookinfo-daily",
"cluster": "prod-a",
"schedule": "@daily",
"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"
]
}
资源类型填写 Kubernetes API resource 名称,建议使用 kubectl api-resources 的 NAME 列,必要时带上 API group,例如 deployments.apps、ingresses.networking.k8s.io、storageclasses.storage.k8s.io。同一组 include/exclude 不要写入同一个资源类型;如果填写了 scoped 字段,不要再混用旧字段 includedResources、excludedResources、includeClusterResources。
如果需要按标签继续缩小范围,切换到 Labels Selector 配置 并启用标签选择器。

验证范围
备份完成后,可以查看 Velero Backup 内容:
velero backup describe <backup-name> --details
也可以使用 server API 查看包含资源:
GET /apis/appbackups.testudo.softcdata.com/v1/velero/backups/:backupName/includes?cluster=prod-a
常见错误
- 只给 Deployment 打标签,PVC 没有标签,导致数据没备份。
- 排除了 Secret,恢复后镜像拉取失败。
- 备份了 Ingress,但目标集群没有对应 IngressClass。
- 包含了集群级资源,恢复时与目标集群已有资源冲突。