跳到主要内容

控制备份范围:命名空间、标签和资源过滤

备份范围决定恢复时能拿到哪些资源。范围过大影响速度和容量,范围过小会导致恢复缺资源。

推荐顺序

  1. 先按命名空间定义应用边界。
  2. 再用标签选择器排除非应用资源。
  3. 最后使用资源包含/排除规则处理特殊资源。

命名空间范围

优先选择一个应用对应的命名空间集合。例如微服务被拆在多个命名空间时,可以选择:

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

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-resourcesNAME 列,必要时带上 API group,例如 deployments.appsingresses.networking.k8s.iostorageclasses.storage.k8s.io。同一组 include/exclude 不要写入同一个资源类型;如果填写了 scoped 字段,不要再混用旧字段 includedResourcesexcludedResourcesincludeClusterResources

如果需要按标签继续缩小范围,切换到 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。
  • 包含了集群级资源,恢复时与目标集群已有资源冲突。