ARTICLE DETAIL

资讯详情

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

Velero v1.4 版本详解:CSI Beta 快照、自定义 CA 证书与备份进度报告

Velero v1.4 版本详解:CSI Beta 快照、自定义 CA 证书与备份进度报告 Velero v1.4 版本详解CSI Beta 快照、自定义 CA 证书与备份进度报告【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本篇文章以 Velero 官方 changelogs/CHANGELOG-1.4.md 为主体结合当前仓库源码系统解读 Velero v1.4 系列版本v1.4.0 / v1.4.1 / v1.4.2的核心能力beta 级 CSI 卷快照支持、对象存储自定义 CA 证书校验、备份进度上报、以及备份 tarball 格式升级到 1.1.0 后对多版本资源EnableAPIGroupVersions的支持。读完本文你将掌握这些特性的启用方式feature flag 与 CLI 参数、底层实现原理涉及哪些源码文件、以及升级到 v1.4 时的注意事项与已知问题。版本发布概览Velero v1.4 主线版本为v1.4.02020-05-26随后发布两个补丁版本版本日期容器镜像说明v1.4.02020-05-26velero/velero:v1.4.0引入 CSI、CA 证书、进度报告、tarball 1.1.0 等核心特性v1.4.1—无镜像仅创建了代码 tag因构建基础设施配置错误未产出 Docker 镜像v1.4.22020-07-13velero/velero:v1.4.2修复 v1.4.1 构建问题并携带若干 bug fix 与 restic 参数调整重要提醒v1.4.1 这个 tag 是在代码中创建的但没有对应的 Docker 镜像原因是在构建基础设施配置错误。v1.4.2 修复了这一问题并补上了镜像发布。因此在实际生产环境中部署或升级时请直接使用velero/velero:v1.4.2及后续版本不要使用 v1.4.1。v1.4.0 四大 Highlightsv1.4.0 的官方亮点Highlights共有四项beta 级 CSI 支持通过 CSI 快照 API 备份恢复 CSI 卷自定义 CA 证书支持在验证对象存储 TLS 连接时使用自定义 CA bundle备份进度报告备份执行期间实时上报已备份/预估总数备份 tarball 格式变更支持备份同一资源的全部 API 版本格式升级到 1.1.0。下面逐一深入展开。Beta 级 CSI 快照支持EnableCSI特性定位与设计意图在 v1.4 之前Velero 的持久卷快照依赖各云厂商编写专属的VolumeSnapshotter插件覆盖面有限。而 Kubernetes CSI 提供了通用的VolumeSnapshot/VolumeSnapshotContent/VolumeSnapshotClass快照 API任何遵循 CSI 规范的驱动都可以实现从而让 Velero 无需为每家存储厂商单独写插件即可支持其卷快照。仓库内的设计文档 design/Implemented/csi-snapshots.md 明确指出该特性的目标Goal让 Velero 通过 Kubernetes CSI CRD API 备份与恢复 CSI 卷Non-Goal不替代现有VolumeSnapshotter插件 API也不替代 restic 支持。启用方式CSI 支持默认关闭需要显式开启EnableCSIfeature flag。在 pkg/apis/velero/v1/constants.go 中定义// CSIFeatureFlag is the feature flag string that defines whether or not CSI features are being used. CSIFeatureFlag EnableCSI启用方式为在velero install时通过--features传入v1.4 起 install CLI 支持透传 feature flags见 [#2503]velero install \ --provider provider \ --bucket bucket \ --featuresEnableCSI--features参数在 pkg/cmd/cli/install/install.go 中定义为Comma separated list of Velero feature flags to be set on the Velero deployment功能开关的底层实现位于 pkg/features/feature_flags.go它维护一个进程级 flag 集合并提供IsEnabled(name)、Enable(names...)、Serialize()等接口服务端与插件侧均通过它判断是否启用 CSI 路径。实现原理源码级CSI 快照路径主要由一组插件与状态跟踪字段构成设计文档 design/Implemented/csi-snapshots.md 描述的核心插件包括velero.io/csi-pvcBackupItemAction作用于 PVC检查关联 PV 是否设置了PersistentVolume.Spec.PersistentVolumeSource.CSI若为 nil、或Backup.Spec.SnapshotVolumes为 false、或该卷已由 restic 备份通过backup.velero.io/backup-volumes注解判断则直接返回不动作。否则创建VolumeSnapshot对象打上velero.io/backup-name标签并设置 ownerRef这样删除 Backup 时会级联删除关联 VolumeSnapshot。VolumeSnapshot、VolumeSnapshotContent、VolumeSnapshotClass会作为 additional items 一并备份。需要注意插件不会等待VolumeSnapshot.Status.readyToUsetrue只要CreationTime被设置应用即可继续从而保持应用 quiesce/resume 的短暂中断。velero.io/csi-vscRestoreItemAction作用于 VolumeSnapshotContent恢复时清理 VSC 对象使其能与目标集群新分配的 ID 重新关联只处理带velero.io/backup-name标签的对象。velero.io/csi-vsRestoreItemAction作用于 VolumeSnapshot处理 VolumeSnapshot 的恢复关联。在服务端EnableCSI还影响快照机制的选路。在 pkg/backup/item_backupper.go 中如果未启用EnableCSI来自 CSI 插件的 action 会被跳过并打日志同时该文件在takePVSnapshot中做了防重复快照处理#4758引入见该文件L615-L616启用 CSI 特性且 PV 为 CSI 卷时不再走 Velero-native 快照避免重复快照。在velero backup describe --details中启用EnableCSI后velero 客户端需同样传入该 flag见 [#2448]会展示与备份关联的 CSIVolumeSnapshotContent明细。备份的status上也新增了统计字段定义见 pkg/apis/velero/v1/backup_types.go// CSIVolumeSnapshotsAttempted is the total number of attempted // CSI VolumeSnapshots for this backup. CSIVolumeSnapshotsAttempted int json:csiVolumeSnapshotsAttempted,omitempty // CSIVolumeSnapshotsCompleted is the total number of successfully // completed CSI VolumeSnapshots for this backup. CSIVolumeSnapshotsCompleted int json:csiVolumeSnapshotsCompleted,omitempty备份删除路径上v1.4 也补齐了 CSI 对象的清理逻辑删除备份时同步删除该备份创建的 CSIVolumeSnapshot#2411以及关联VolumeSnapshot对象已不存在的VolumeSnapshotContent#2480backup sync controller 会同步备份的 CSI API 对象进集群#2496。注意点CSI 是 beta 级能力启用前请确认集群 CSI 快照 API 可用且已部署 CSI 驱动客户端执行velero backup describe查看 CSI 明细时同样需要给 velero 客户端加EnableCSI插件服务端会忽略未知 flag#2479旧插件不识别--features时不会收到该参数避免兼容性问题。自定义 CA 证书支持对象存储 TLS 校验v1.4 全面支持为对象存储的自签/私有 CA 场景配置自定义 CA bundle涉及三个层面1. 在 BackupStorageLocation 上配置 CA通过 BSL 上的 CA 证书字段Velero 服务器在访问对象存储时使用自定义 CA 校验 TLS 连接#2353。可用velero backup-location create/set相关命令维护仓库中对应的 CA 参数解析逻辑位于 pkg/cmd/util/cacert/bsl_cacert.go 及 pkg/cmd/cli/backuplocation/create.go、pkg/cmd/cli/backuplocation/set.go。2. install 命令的 --cacert 参数velero install \ --provider provider \ --bucket bucket \ --cacert path-to-ca-bundle该参数用于在安装 Velero 时提供 CA bundle供验证对象存储 TLS 连接使用#2368。定义见 pkg/cmd/cli/install/install.goFile containing a certificate bundle to use when verifying TLS connections to the object store. Optional.3. velero 客户端命令的 --cacert 与客户端配置文件velero backup describe、velero backup download、velero backup logs、velero restore describe、velero restore logs等命令均新增了--cacert参数用于传递验证对象存储 TLS 连接的证书路径#2364。相关实现可参见 pkg/cmd/cli/backup/describe.go、pkg/cmd/cli/backup/download.go、pkg/cmd/cli/backup/logs.go 等文件。同时客户端配置文件~/.config/velero/config.json之类的 VeleroConfig新增cacert键作为默认值当命令行未显式传--cacert时使用该配置。相关实现见 pkg/client/config.goConfigKeyCACert cacert以及CACertFile()方法pkg/client/config.go用于从客户端配置中取出 CA bundle 路径作为默认值。组合使用场景典型的私有对象存储如自建 MinIO 自签证书场景# 1) 服务端安装时注入 CA bundle velero install --provider aws --bucket velero \ --secret-file ./credentials-velero \ --cacert ./ca-bundle.pem # 2) 客户端写入配置文件作为默认 CA # config.json: { cacert: /path/to/ca-bundle.pem } # 3) 或临时指定 velero backup describe backup-name --cacert ./ca-bundle.pem备份进度报告v1.4 引入备份进度上报#2440备份执行期间Velero 会把“已备份条目数 / 预估总条目数”写入日志并更新 Backup 自定义资源的status.progress字段。字段定义BackupProgress 定义了两个字段// BackupProgress stores information about the progress of a Backups execution. type BackupProgress struct { // TotalItems is the total number of items to be backed up. This number may change // throughout the execution of the backup due to plugins that return additional related // items to back up, the velero.io/exclude-from-backup label, and various other // filters that happen as items are processed. TotalItems int json:totalItems,omitempty // ItemsBackedUp is the number of items that have actually been written to the // backup tarball so far. ItemsBackedUp int json:itemsBackedUp,omitempty }注意注释中的关键语义TotalItems 是预估总数在执行过程中会动态变化——因为插件可能返回额外的相关条目、velero.io/exclude-from-backup标签过滤、以及其他处理期过滤都会改变总数。实现位置进度上报的运行时逻辑位于 pkg/backup/backup.go。核心机制backedUpGroupResources与itemsMap记录待备份条目启动一个 goroutine 监听 worker pool 返回的ItemBlockReturn每次处理完一个 ItemBlock 就调用BackedUpAndTotalLen()计算已备份数与总数并通过updatechannel 上报更新时同步写backupRequest.Status.Progress见 pkg/backup/backup.go并打印日志Backed up %d items out of an estimated total of %d (estimate will change throughout the backup)。使用方式备份执行期间直接查看 Backup CR 或日志即可kubectl -n velero get backup backup-name -o jsonpath{.status.progress} # 示例输出{totalItems:42,itemsBackedUp:17}也可以实时观察 velero 服务端日志中的progress字段。官方提醒该信息是 best-effort 的——如果备份过程中 Velero 更新失败progress可能不准确或过期见 backup_types.go 注释。备份 tarball 格式 1.1.0 与多版本资源支持EnableAPIGroupVersions背景为什么要改格式在 v1.4 之前Velero 备份 tarball 中每种资源默认只保存首选版本preferred version。当集群升级导致 CRD 首选版本变化时旧备份中缺少的历史版本资源可能导致恢复内容不完整或与目标集群版本不匹配。v1.4 将 tarball 格式升级到1.1.0#2373改为保存某个资源的所有 API 版本。格式版本常量当前仓库 pkg/backup/backup.go 中的常量即为 v1.4 引入的格式版本// BackupFormatVersion is the current backup version for Velero, including major, minor, and patch. const BackupFormatVersion 1.1.0该版本号会被写入备份包的metadata/version文件pkg/backup/backup.go恢复时据此判断格式兼容性。启用方式默认仍只备份首选版本保存全部版本需要启用EnableAPIGroupVersionsfeature flagvelero install ... --featuresEnableAPIGroupVersionsflag 字符串常量定义于 pkg/apis/velero/v1/constants.go// APIGroupVersionsFeatureFlag is the feature flag string that defines whether or not to handle multiple API Group Versions APIGroupVersionsFeatureFlag EnableAPIGroupVersions源码中的多版本处理开启该 flag 后同一资源可能对应多个待备份版本代码中专门做了处理pkg/backup/backup.goitemsMap的值设计为切片注释明确说明“如果启用了 EnableAPIGroupVersions同一个 item 可能有多个资源需要备份”pkg/backup/backup.go构建 ItemBlock 时“如果启用了 EnableAPIGroupVersions该 item 可能有多个版本把所有这些版本放进同一个 ItemBlock”pkg/itemblock/itemblock.goFindItem注释说明“如果启用 EnableAPIGroupVersions 可能返回多个 item匹配 preferredGVR 的 item 排在最前”。tarball 中非首选版本资源的目录以-preferredversion后缀区分常量见 pkg/apis/velero/v1/constants.go// PreferredVersionDir is the suffix name of the directory containing the preferred version of the API group // resource within a Velero backup. PreferredVersionDir -preferredversion同时恢复代码也做了配套重构#2248改为通过 discovery惰性解析资源消除了为恢复 CRD 实例而进行的第二次恢复循环保证多版本资源能按目标集群实际支持的能力恢复。配套变更CRD 备份时如果某个 CRD 是通过 v1beta1 endpoint 创建的则从 v1beta1 endpoint 获取而非仅改 APIVersion#2478备份 CRD 之前先记录其版本供remap_crd_versionbackup item action 使用#2683v1.4.2为 Backup CRD 增加记录 k8s major/minor/git 版本的注解#2346。v1.4.2 补丁内容详解v1.4.22020-07-13除修复 v1.4.1 的镜像构建问题外还包含以下变更1. 插件返回额外条目找不到时的降级处理#2595此前如果插件返回的 additional item 在 Kubernetes API 中找不到备份会报错v1.4.2 改为记录warning 而不是 error。这是因为插件声明的额外条目可能已经被并发删除或被过滤直接报错会让整个备份失败降级为告警更合理。2. restic 默认超时与资源请求调整#2696PodVolumeBackup 默认超时从原来的较短值调整为4 小时避免大卷备份因超时被误杀restic 相关 Pod 的基础资源请求调整为500m CPU / 512Mi 内存作为更贴合真实使用的基础值。如需自定义可在安装时通过相应参数覆盖默认值以上述调整为基准。3. 记录 CRD 版本再执行 remap 动作#2683在调用remap_crd_versionbackup item action 之前先捕获 CRD 的版本见上文“配套变更”确保多版本场景下 remap 操作基于准确的版本信息执行。v1.4.0 其余变更速览除四大亮点外v1.4.0 还包含一批值得关注的修复与增强bug fix 类CRD restore 插件不再使用runtime.DefaultUnstructuredConverter.FromUnstructured(...)规避 float64 字段含整数值时的转换问题#2484include/exclude 资源列表中出现无法解析的条目时不再将其从列表中移除避免列表意外退化成“匹配所有资源”#2462空卷也保存 PodVolumeBackup 清单到对象存储使恢复时能按需动态重建 PV#2390为备份错误日志补上 namespace 字段#2438error location 日志 hook 中若error键下的对象未实现error接口不再返回错误#2487restic volume snapshot 计数在 PVB 成功创建后再递增#2542。增强与重构新增 PVC 的 restoreItemAction用于恢复时更新selected-node注解#2377Azure支持直接从环境变量获取 restic 用的 storage account key#2455--snapshot-volumesfalse的备份可跳过 VSLVolumeSnapshotLocation校验#2450升级到 Go 1.14并从dep迁移到 go modules#2214Kubernetes 依赖模块升级到 v0.17.4获取上游 bug fix#2407基础镜像从ubuntu:bionic升级到ubuntu:focal#2471重构所有 informer cache 同步完成后再启动 controller#2299恢复 describe 中 namespace 的措辞澄清#2214 相关。升级到 v1.4 的注意事项综合 changelog 与源码升级到 v1.4 需关注以下几点容器镜像请使用velero/velero:v1.4.2或更高版本跳过没有镜像的 v1.4.1备份格式版本v1.4 起备份 tarball 格式为 1.1.0。若已启用EnableAPIGroupVersions新备份将包含资源全部版本旧版本 Velero 可能无法完整读取这类备份升级前请确认恢复端版本feature flags 统一透传velero install已支持--features服务端与客户端在查看 CSI 明细时需保持一致的 flag 配置restic 参数变化默认超时变为 4 小时、基础资源请求变为 500m CPU / 512Mi生产环境建议结合实际卷规模评估是否需要覆盖默认值构建链变化Go 版本升级到 1.14 且改用 go modules社区贡献者重新编译时需同步升级工具链。延伸阅读发布说明全文changelogs/CHANGELOG-1.4.mdCSI 快照支持设计文档design/Implemented/csi-snapshots.md功能开关实现pkg/features/feature_flags.go备份进度字段定义pkg/apis/velero/v1/backup_types.go备份格式版本与进度上报逻辑pkg/backup/backup.go客户端 CA 配置pkg/client/config.go安装命令参数定义pkg/cmd/cli/install/install.go【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表