
Velero v1.16 版本特性深度解读Windows 集群支持、并行备份与数据移动增强【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/veleroVelero v1.16 是 Kubernetes 备份迁移工具 Velero 的一个重要里程碑版本核心主题是 Windows 集群支持、备份吞吐量提升并行 Item Block 备份、数据移动器data mover的可扩展性与可观测性增强以及备份仓库维护的弹性提升。阅读本文后你将掌握 v1.16 各核心特性的使用方式、关键配置参数如--item-block-worker-count、ignoreDelayBinding、fullMaintenanceInterval及其底层实现原理能够据此升级、配置和调优你的 Velero 环境。v1.16 版本概览Velero v1.16 的发布信息与运行时依赖如下来源于 changelogs/CHANGELOG-1.16.md容器镜像velero/velero:v1.16.0Golang 运行时1.23.7kopia0.19.0本版本的亮点可归纳为六大主题Windows 集群支持、并行 Item Block 备份、数据移动器恢复的可扩展性、数据移动器可观测性、CSI 快照备份/恢复易用性、备份仓库维护的弹性与可观测性以及 Volume Policy 与对象级资源状态恢复等周边增强。下文逐一展开。Windows 集群支持v1.16 让 Velero 首次具备了在 Windows 集群中运行并备份/恢复 Windows 工作负载无论有状态还是无状态的能力具体包含三个层面。混合构建与全合一镜像构建流程被增强为支持混合 CPU 架构 混合平台的 all-in-one 镜像一个镜像同时涵盖 Linux/Windows 节点与多 CPU 架构相关设计文档可参考 design/CLI/PoC 目录外的实现文档如 design/volume-snapshot-data-movement 所属体系中的多架构构建演进对应的构建实现位于仓库根目录 Dockerfile 与 Makefile。在 Windows 集群中部署Velero 的 node-agent、数据移动器 Pod 和维护作业maintenance job现在既可以在 Linux 节点运行也可以在 Windows 节点运行。这意味着一个混合节点集群中各组件能够按节点平台自动调度到正确的节点组。数据移动器对 Windows 工作负载的全流程支持Velero 内置数据移动器基于 kopia/fs-backup 与块上传支持 Windows 工作负载的完整生命周期包括资源发现discovery、备份、恢复、pre/post hook 等环节。其核心机制是自动识别 Windows 工作负载并将数据移动器 Pod 调度到正确的节点组。从源码实现看这一能力由 node-agent 的数据路径组件完成相关实现可参考 pkg/nodeagent/node_agent.go 以及上传器对 Windows 节点的支持逻辑pkg/uploader。同时维护作业被改造为支持在 Windows 节点上运行对应变更 support repo maintenance job to run on Windows nodes数据移动器 Pod 也增加了 Windows 容忍度toleration见 pkg/install/deployment.go。并行 Item Block 备份v1.16 支持并行备份 Item Block这是本版本中提升备份吞吐量的关键特性尤其在资源规模较大时收益显著。工作原理备份期间Velero 会把相互关联的资源如 Deployment 及其 ReplicaSet、Pod、PVC 等分组为 Item Block。v1.16 之前这些块被串行处理v1.16 起备份引擎会创建一个线程池worker pool并行处理各 Item Block。pre/post hook 也归属于 Item Block因此它们会与 Item Block 并行执行。此外备份后置 hookpost hook在 Item Block 内同步执行并保证在所有 Pod Volume BackupPVB处理完成之后才运行从而修复了此前 post hook 执行时序问题。配置参数并行度通过 Velero server 参数--item-block-worker-count配置默认值为1即不开启并行。该参数在安装与 server 启动两个入口均可设置安装命令velero install --item-block-worker-countNserver 启动参数--item-block-worker-countN对应源码位置参数默认值与定义pkg/cmd/server/config/config.goDefaultItemBlockWorkerCount 1install 命令的 flag 绑定pkg/cmd/cli/install/install.goserver 启动时注入 controllerpkg/cmd/server/server.goDeployment 模板渲染pkg/install/deployment.go底层实现线程池实现在 pkg/backup/item_block_worker_pool.go核心结构ItemBlockWorkerPool维护一个输入 channel 与 WaitGroupStartItemBlockWorkerPool根据workers数量启动对应数量的processItemBlockWorkergoroutine输入 channel 的缓冲区最多容纳 10 个待处理 ItemBlock。该 worker pool 由 pkg/controller/backup_controller.go 在备份处理流程中创建并注入同时BackedUpItems映射被改造为线程安全见 pkg/backup/backed_up_items_map.go被排除excluded的资源也不会进入 ItemBlock 参与并行处理。数据移动器恢复的可扩展性增强ignoreDelayBinding此前版本中对于WaitForFirstConsumer延迟绑定模式的卷数据移动器恢复只允许在卷被绑定的节点上发生这会严重损害并行度与节点资源CPU、内存、网络带宽消耗的均衡性。v1.16 允许用户配置数据移动器恢复在所有节点上均匀分布运行配置方式是 node-agent 配置中新增的ignoreDelayBinding标志。其含义与数据结构定义于 pkg/types/node_agent.goIgnoreDelayBinding表示当 restorePVC 处于WaitForFirstConsumer模式时是否忽略对 restorePVC 的延迟绑定从而允许 DataDownload Pod 调度到任意节点。该配置通过 node-agent 的 configmap即 node-agent 配置安装时以--node-agent-configmap指定下发形如restorePVC: ignoreDelayBinding: true对应数据移动器恢复端在 pkg/exposer/generic_restore.go 读取该参数并作用于 restorePVC 的创建。与之配套的还有DataDownload 的acceptedByNode与acceptedTimestamp被迁移到 DU/DD CRD 的 Status 中相关类型定义见 pkg/apis/velero/v1 下的 data_upload/data_download 类型以更准确地计算 prepare 超时。数据移动器的可观测性增强v1.16 为数据移动器备份/恢复失败场景增加了两类可观测性输出备份/恢复失败时输出各种中间对象intermediate objects如 DataUpload/DataDownload、exposer Pod、中间 PVC 等的状态Velero 在清理中间对象失败时输出具体错误信息。这两类输出均写入 node-agent 日志且自动启用无需额外配置。其底层与 exposer 的暴露expose流程相关对应实现可参考 pkg/exposer如 pkg/exposer/snapshot.go、pkg/exposer/generic_restore.go失败时还会检查数据移动器 Pod 终止消息中的ErrCancelled后缀以区分主动取消与真实失败。CSI 快照备份/恢复易用性增强此前版本中每次备份都会保留一个不必要的 VolumeSnapshotContent 对象并在共享同一备份存储位置BackupStorageLocation的其他集群间同步恢复时这个保留的 VolumeSnapshotContent 也会被不必要地恢复。v1.16 将保留的 VolumeSnapshotContent 从备份中移除因此不再有冗余的 CSI 对象被同步或恢复。同时v1.16 还增强了 CSI 流程的清理能力清理 CSI 备份/恢复过程中产生的临时制品artifacts并清理不完整备份遗留的 CSI 快照泄漏leaked CSI snapshot。相关逻辑可参考 pkg/backup/actions 与 pkg/restore/actions 中的 CSI 相关 action以及 exposer 中的 pkg/exposer/csi_snapshot.go。备份仓库维护的弹性与可观测性增强v1.16 对备份仓库BackupRepository维护做了系统性增强涵盖可观测性与弹性两个维度RecentMaintenance 维护历史BackupRepository CR 新增RecentMaintenance状态字段记录每个仓库最近若干次维护历史包括开始/完成时间、完成状态与错误信息。其类型定义见 pkg/apis/velero/v1/backup_repository_types.go维护历史的具体更新与合并逻辑updateRepoMaintenanceHistory、consolidateHistory位于 pkg/controller/backup_repository_controller.go历史队列长度由maintenanceStatusQueueLength限制。你可以通过kubectl get backuprepository name -o yaml查看该字段来诊断维护失败原因。维护作业在 server 重启后被重新捕获此前 Velero server 重启会导致运行中的维护作业状态丢失v1.16 会在重启后重新捕获recall维护历史与进行中的维护作业避免重复执行或状态悬挂。对应的同步/合并逻辑同样位于 pkg/controller/backup_repository_controller.go 的 reconcile 流程中。只读 BackupStorageLocation 不再触发维护与建仓两项修复值得注意维护作业不会在只读readOnlyBackupStorageLocation 上启动备份仓库不会为只读 BackupStorageLocation 尝试初始化新仓库。这避免了只读存储上无意义的写入失败与资源浪费。可配置的维护间隔fullMaintenanceInterval用户现在可以通过backupRepository配置即 backup-repository 的 configmap中的fullMaintenanceInterval参数配置有效维护effective maintenance的间隔支持三档取值含义对应间隔源码常量normalGC常规 GC删除的数据更晚被回收24 小时fastGC快速 GC12 小时eagerGC急切 GC删除的 Velero 备份最快从 kopia 仓库移除6 小时上述间隔常量定义于 pkg/repository/udmrepo/repo_options.go该参数会覆盖 kopia 自身的维护间隔其生效链路为 pkg/repository/udmrepo/kopialib/repo_init.go 读取fullMaintenanceInterval选项并应用到 kopia 仓库初始化。配置方式示例backup-repository configmap 的kopia数据项apiVersion: v1 kind: ConfigMap metadata: name: backup-repositories-config namespace: velero data: kopia: | fullMaintenanceInterval: fastGC如果你希望删除的备份更快从 kopia 仓库中被 GC 回收例如减少存储占用、加速存储成本回收可将间隔调为fastGC或eagerGC。其他维护相关增强维护作业 Pod 支持声明第三方注解third party annotations维护作业创建时复制 Velero server 的envFrom修复维护作业在无容器状态container statuses时的 panic。Volume Policy 增强按 PVC 标签过滤卷v1.16 将 Volume Policy 扩展为支持按PVC 标签labels过滤卷。Volume Policy 允许用户通过声明式规则决定哪些卷使用哪种备份/恢复方式如 fs-backup、块上传、CSI 快照等。从 internal/resourcepolicies/resource_policies.go 的解析逻辑可以看到pvcLabels条件必须是一个 string 到 string 的映射map[string]string会被转换为pvcLabelsCondition参与卷匹配。同时该文件还定义了PolicyLabelSelector含matchLabels与matchExpressions并支持orLabelSelectors组合条件用于在策略中表达更复杂的标签选择器。一个使用 PVC 标签条件的 VolumePolicy 示例配合--volume-policy-configmap使用格式参考 internal/resourcepolicies/resource_policies.go 中的解析结构apiVersion: v1 kind: ConfigMap metadata: name: volume-policy namespace: velero data: volume-policy: | volumePolicies: - conditions: pvcLabels: backup-tier: gold action: type: snapshot这样带有backup-tiergold标签的 PVC 所对应的卷将被规则命中并执行快照动作。校验逻辑validatePolicyLabelSelector保证非法选择器会在配置加载阶段被拒绝。对象级资源状态恢复velero.io/restore-statusv1.16 允许用户通过设置在对象上的注解velero.io/restore-status来决定是否恢复该对象的资源状态status。该注解的常量定义于 pkg/restore/restore.goObjectStatusRestoreAnnotationKey velero.io/restore-status。这为对象级per-object的粒度控制提供了补充既有恢复流程已支持通过restore --status-include-resources/--status-exclude-resources等方式批量控制相关 Spec 字段RestoreStatus定义于 pkg/apis/velero/v1/restore_types.gov1.16 进一步允许在单个对象上打注解实现精确到对象的覆盖。恢复时Velero 会读取目标对象来自备份清单上的该注解据此决定是否将备份中的 status 写回。恢复流程中还会处理状态更新冲突并在恢复失败的操作最终化finalization时跳过对 PV 的修补以避免卡死。Velero Restore Helper 二进制合并进 Velero 镜像v1.16 将 Velero 的所有二进制——velero、velero-helper、velero-restore-helper——全部合并进单个 Velero 镜像。此前 restore helper 需要独立镜像现在不再需要单独拉取简化了部署与离线分发。镜像构建入口见 Dockerfile 与 cmd/velero-restore-helper/velero-restore-helper.go。其他值得关注的修复与增强v1.16 的完整变更清单包含 80 余项见 changelogs/CHANGELOG-1.16.md 的 All Changes 小节除上述主题外以下改动同样值得关注运行时与依赖升级client-go 与 controller-runtime 升级go.mod 中 k8s.io 依赖升级到 v0.31.3并统一了 client-go 与 controller-runtime 的日志配置保证日志格式与级别在全系统内一致生效CLI 增强velero backup create/restore create新增--annotations参数--from-schedule增加空值/空白校验备份正确性修复备份后置 hook 的执行时序在 PVB 处理之后、ItemBlock 内同步执行、修复调度器 pause/unpause 失效、通过 PodVolume Backupper 直接检查 PVB 状态而非调用 API server 以避免 API server 故障时的误判恢复流程重构restoreItem及其相关函数区分备份资源名与恢复目标资源名增加被删除命名空间的状态检查跟踪PV 删除先于 VS 删除以保证一致性网络与注册表支持向不安全的镜像仓库insecure registry推送镜像GetBucketRegion支持设置 hinting region聚合发现使用聚合发现 APIaggregated discovery API来发现 API 组与资源减少 API server 压力事件与日志提升事件突发率event burst防止事件被过滤器丢弃修复日志不显示 PV 名的问题。限制与已知问题使用 Windows 支持功能时需要注意以下限制fs-backup 不支持 Windows 工作负载fs-backup 仅对 Linux 工作负载在 Linux 节点上运行Windows 工作负载的数据移动只能走块上传block uploader / data mover路径NTFS 扩展属性/高级特性不支持备份/恢复包括安全描述符Security Descriptors、System/Hidden/ReadOnly 属性、创建时间Creation Time、NTFS 流NTFS Streams等。另外并行 Item Block 备份的默认并行度为 1若需提升吞吐请显式配置--item-block-worker-count该值会同时写入 Velero server Deployment 的参数可在velero install时一并指定。升级建议升级到 v1.16 时请关注以下要点备份仓库配置backup-repositories-config中可按需增加fullMaintenanceInterval以控制 GC 节奏如需跨节点均衡数据移动器恢复在 node-agent 配置中设置restorePVC.ignoreDelayBinding: true大集群高吞吐场景评估--item-block-worker-count并配合 node-agent 的资源配额进行压测Windows 混合集群部署时确认 fs-backup 仅面向 Linux 工作负载Windows 卷使用 data mover 块上传路径由于 restore helper 已并入主镜像可简化相关部署清单无需再单独维护 restore-helper 镜像。参考资源完整变更列表changelogs/CHANGELOG-1.16.md并行 Item Block 设计design/concurrent-backup-processing.md对象级状态恢复设计design/resource-status-restore.md备份性能改进设计design/backup-performance-improvements.md数据移动器实现pkg/datamover、pkg/exposer仓库维护实现与测试pkg/controller/backup_repository_controller.go 与 pkg/controller/backup_repository_controller_test.go【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考