ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Velero v0.4.0 发布解析:卷备份默认开启、命名空间过滤标志重构与备份日志能力落地

Velero v0.4.0 发布解析:卷备份默认开启、命名空间过滤标志重构与备份日志能力落地 Velero v0.4.0 发布解析卷备份默认开启、命名空间过滤标志重构与备份日志能力落地【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/veleroVelero 的前身 Heptio Ark 于 2017-09-14 发布 v0.4.0这是项目早期一次影响深远的版本卷快照与恢复能力默认开启、--namespaces参数被--include-namespaces/--exclude-namespaces取代、每个备份与恢复首次拥有独立日志文件。本文基于 changelogs/CHANGELOG-0.4.md 逐条解读 v0.4.0 的破坏性变更、新特性与缺陷修复并结合当前仓库源码定位这些能力今天的对应实现帮助读者理解这些设计如何演进为今天 Velero 的核心机制。版本背景与发布信息v0.4.0 发布于 2017-09-14属于 Heptio Ark 时代项目后更名为 Velero 并捐赠给 CNCF。按发布说明该版本源码对应v0.4.0标签分支。需要注意当前仓库中的命令名均为velero但 v0.4.0 时代命令名还是ark例如文中提到的ark backup logs即今天的velero backup logs。本文解读以该发布说明为骨架源码佐证以当前仓库实际内容为准。破坏性变更Breaking Changes1. 卷快照与恢复默认启用发布说明原文“Snapshotting and restoring volumes is now enabled by default”——对 PVC 挂载卷做快照与恢复不再需要额外开关。这一决策的意义在于Kubernetes 应用备份如果不包含持久化数据备份在语义上是不完整的默认开启意味着用户显式排除卷备份时才有责任而非默认丢失数据。这一设计取向在当前代码中依然可见备份流程中的 PV/PVC 快照处理是核心路径例如 pkg/backup/snapshots.go 负责协调 VolumeSnapshot 的创建与等待pkg/podvolume/snapshot_tracker.go 跟踪每个 Pod 卷的快照状态。卷备份从“可选开关”变成“默认行为”构成了 Velero 数据完整性承诺的基础。2.--namespaces被--include-namespaces/--exclude-namespaces取代发布说明原文ark restore create的--namespaces标志被替换为--include-namespaces和--exclude-namespaces。旧标志语义是“只备份这些命名空间”而新设计把“包含”与“排除”拆成两个正交维度允许组合表达更复杂的选取逻辑如“排除 default 和 velero 之外的全部命名空间”。该设计一直保留至今。当前 CLI 帮助文本中的示例即为当时变更后的形态见 pkg/cmd/cli/backup/create.govelero backup create nginx-backup --include-namespaces nginx velero backup create backup2 --exclude-namespaces velero,default同样的标志体系也被应用到恢复与调度命令中分别可在 pkg/cmd/cli/restore/create_test.go 与 pkg/cmd/cli/schedule/create.go 中看到--include-namespaces/--exclude-namespaces的解析与用法。从源码结构看备份与恢复两侧共享同一套命名空间过滤语义这正是 v0.4.0 这次重构确立的约定。新特性New Features1. 支持 S3 SSEKMS 加密“Support for S3 SSE with KMS”备份对象存储为 AWS S3 时可以使用 AWS KMS 密钥做服务器端加密。对备份数据而言静态数据加密encryption at rest是合规底线之一SSE-KMS 相比 SSE-S3 允许用客户自管的 KMS 密钥控制加解密权限。该能力由对象存储插件侧实现配合备份存储位置BackupStorageLocation的配置使用在当前仓库中BSL 相关逻辑见 pkg/apis/velero/ 中的类型定义与 internal/storage/storagelocation.go。2. 云提供商配置在启动时校验“Cloud provider configurations are validated at startup”服务端启动时即校验云配置而非等到第一次备份失败才暴露配置错误。fail-fast 原则配置错误在部署阶段被拦截显著缩短排障路径。3.persistentVolumeProvider变为可选“the persistentVolumeProvider is now optional”不再强制要求为每个备份指定持久卷提供商。这一变更降低了多 PV 提供商集群的使用门槛——当集群中 PV 来自不同底层存储时逐个指定 provider 是繁琐且易错的改为可选后由实现按 PV 实际情况推断。4. 恢复对象Restore objects被垃圾回收“Restore objects are garbage collected”恢复任务对象不再永久堆积在集群中会被自动清理。这是 Velero 今天统一 GC 体系的前身。当前仓库中GC 由 pkg/controller/gc_controller.go 实现gcReconciler周期性默认 60 分钟见 gc_controller.go 中 defaultGCFrequency扫描对象并为过期对象创建DeleteBackupRequests同时定义了BSLNotFound、BSLReadOnly等结构化失败原因gc_controller.go#L43-L50。从源码结构看今天回收的是过期的备份及其对象存储产物而 v0.4.0 引入的“恢复对象 GC”确立了“任务型 CR 应有生命周期”的设计惯例。5. 每个备份拥有独立日志文件ark backup logs发布说明“Each backup now has an associated log file, viewable via ark backup logs”。这是可观测性上的关键一步此前备份失败的排查依赖翻阅服务端日志此后每次备份产生独立日志可直接按备份对象下载。该命令在当前仓库中的实现为 pkg/cmd/cli/backup/logs.go其Run方法logs.go#L65-L80体现了当年设计的延续先按命名空间与名称获取Backup对象只有当备份处于终态或等待插件操作的阶段Completed、PartiallyFailed、Failed、WaitingForPluginOperations等时才允许下载日志否则提示“logs for backup ... are not available until its finished processing”。同时提供--timeout、--cacert、--insecure-skip-tls-verify等标志控制对象存储访问logs.go#L59-L63。6. 每个恢复拥有独立日志文件ark restore logs与备份对称“Each restore now has an associated log file, viewable via ark restore logs”。恢复侧日志同样按对象粒度归档使恢复失败资源冲突、权限不足、PVC 快照不可用等具备可追溯的独立证据链。7. 恢复支持--include-resources/--exclude-resources发布说明“Add --include-resources/--exclude-resources for restores”。此前资源级别过滤只存在于备份侧v0.4.0 将同样能力补齐到恢复侧使得“恢复同一备份中的部分资源子集”成为一等公民操作——例如只恢复该备份中的 Deployment 而不恢复 Service。资源过滤的当前实现位于备份与恢复的请求处理层见 pkg/backup/request.go 与 pkg/restore/request.go 中对IncludedResources/ExcludedResources的解析。缺陷修复Bug Fixes逐条解读 v0.4.0 的 6 项修复它们共同刻画了那个时代备份系统的边界问题修复项说明Only save/use iops for io1 volumes on AWS只在 AWSio1卷上保存/使用 IOPS 参数——io1是唯一允许显式指定 IOPS 的卷类型对其他类型写回该字段会导致恢复时创建 PV 失败When restoring, try to retrieve the Backup directly from object storage if its not found恢复时若集群内找不到 Backup 对象例如对象已被 GC 或与对象存储不同步回退到直接从对象存储读取备份提升恢复的鲁棒性When syncing Backups from object storage to Kubernetes, dont return at the first error对象存储到集群的备份同步过程不再因第一个错误就整体中止改为继续处理其余备份避免单个坏对象卡死同步More closely match how kubectl performs kubeconfig resolutionCLI 的 kubeconfig 解析逻辑向kubectl对齐环境变量优先级、KUBECONFIG多文件合并等减少 CLI 行为与用户既有 kubectl 习惯的不一致Increase default Azure API request timeout to 2 minutesAzure 默认 API 请求超时提升至 2 分钟降低弱网环境下云 API 调用被提前判定失败的概率Update Azure diskURI to match diskName修正 Azure 上恢复卷时 diskURI 与 diskName 不匹配的问题——diskURI 拼接规则与 Azure 资源命名约束不符会导致恢复出的磁盘无法被识别其中“恢复时直接回退对象存储取 Backup”的设计今天仍有回声CLI 通过下载请求DownloadRequest机制从对象存储拉取备份产物相关逻辑见 pkg/cmd/util/downloadrequest/ 目录而 pkg/cmd/cli/backup/logs.go 中对对象存储 TLS 与 CA 证书的处理--cacert、--insecure-skip-tls-verify正是当年这类跨存储边界读取的延续。演进视角v0.4.0 设计在当前仓库中的落点从 v0.4.0 的发布说明可以提炼出四条贯穿至今的设计主线均在当前仓库中有对应实现证据命名空间/资源双维度过滤--include-namespaces/--exclude-namespaces与--include-resources/--exclude-resources正交组合至今仍是 pkg/cmd/cli/backup/create.go 与恢复命令的默认用法。任务对象自带日志备份、恢复各自独立日志文件的思想扩展为今天按对象粒度的日志与下载体系pkg/cmd/cli/backup/logs.go、pkg/controller/download_request_controller.go。任务型 CR 的生命周期管理从“恢复对象 GC”演进为统一的 gc_controller.go周期性为过期备份创建DeleteBackupRequests并结构化记录失败原因。fail-fast 与鲁棒回退并存云配置启动期校验属于 fail-fast而“同步不遇错即止”“恢复时回退对象存储”属于鲁棒性兜底两者共同构成控制器的错误处理基调。适用前提与限制本文解读的对象是 v0.4.02017-09-14Heptio Ark 时期的发布说明命令名为ark当前仓库中的veleroCLI、控制器实现仅作为该设计演进的佐证二者行为细节默认值、阶段名称、超时等以当前源码为准。发布说明中未提供各修复项的详细复现步骤上表说明是基于条目语义与当前实现的解读具体实现细节以对应源码文件为准。文中所有路径均为当前仓库内的相对路径用于定位设计演进证据复现 v0.4.0 行为需使用当时的版本标签不可直接以当前代码推断。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表