Velero 存储与快照支持矩阵Support Matrix备份存储、卷快照提供方与插件扩展机制详解【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本篇文章基于 Velero 官方 v0.11.0 文档 support-matrix.md 编写系统梳理 Velero 支持的后备存储提供方Backup Storage Providers、S3 兼容存储、卷快照提供方Volume Snapshot Providers以及插件化扩展机制并结合当前仓库源码与配套配置文档深入讲解BackupStorageLocation、VolumeSnapshotLocation的配置参数与接入新存储平台的完整路径。读完本文你将掌握如何为 Velero 选择、配置并扩展备份存储与卷快照能力。一、Velero 存储兼容性总览插件系统带来的开放性自 v0.6.0 起Velero 引入了插件系统plugin system允许任何人在不修改 Velero 核心代码的前提下为备份backup和卷快照volume snapshot操作增加对额外存储平台的支持。这一设计决定了 Velero 的兼容性矩阵分为两大块备份存储Backup Storage保存备份文件、备份日志与恢复日志的对象存储卷快照Volume Snapshot对持久卷进行快照的块存储能力。从仓库源码 pkg/plugin/framework/common/plugin_kinds.go 可以看到Velero 定义了若干PluginKind常量其中PluginKindObjectStoreObjectStore与PluginKindVolumeSnapshotterVolumeSnapshotter正是支撑上述两类能力的插件类型此外还有BackupItemAction、RestoreItemAction、DeleteItemAction等用于在备份/恢复过程中对单个资源执行自定义逻辑的插件类型。也就是说官方提供的 AWS、GCP、Azure 支持本质上也是以插件形式实现的第三方则可以在不修改主仓库的情况下添加新的实现。二、官方支持的备份存储提供方Backup Storage ProvidersVelero 团队原生维护以下三家备份存储提供方负责持久化备份文件、备份日志与恢复日志ProviderOwnerContactAWS S3Velero TeamSlack、GitHub IssueAzure Blob StorageVelero TeamSlack、GitHub IssueGoogle Cloud StorageVelero TeamSlack、GitHub Issue这三家提供方的对象存储能力分别对应仓库中的配置文档 aws-config.md、azure-config.md 与 gcp-config.md。以 AWS 为例部署时需要在BackupStorageLocation中声明provider: aws与objectStorage.bucket并创建包含aws_access_key_id/aws_secret_access_key的cloud-credentialsSecret。三、S3 兼容备份存储连接协议与社区验证列表Velero 使用 Amazon 官方 Go SDKaws-sdk-go 连接 S3 API。由于这一协议被广泛采用部分第三方存储也实现了 S3 接口用户实测以下提供方可以与 Velero 配合使用IBM Cloudibm-config.mdMinioget-started.mdCeph RADOS v12.2.7DigitalOceanQuobyte需要特别说明的是以上第三方提供方未经 Velero 团队定期测试属于社区验证范畴。此外部分存储如 Quobyte可能需要不同的签名算法版本signature algorithm version这一点在下一节结合BackupStorageLocation参数详细说明。仓库中自带了 Minio 的完整部署示例 examples/minio/00-minio-deployment.yaml它通过一个Deployment启动 Minio 服务、一个Service暴露 9000 端口并用一个Job通过mc客户端完成 bucketvelero/velero的自动创建便于本地快速验证 Velero 与 S3 兼容存储的对接。四、官方支持的卷快照提供方Volume Snapshot Providers卷快照提供方负责在备份时创建持久卷快照、在恢复时从快照重建卷ProviderOwnerContactAWS EBSVelero TeamSlack、GitHub IssueAzure Managed DisksVelero TeamSlack、GitHub IssueGoogle Compute Engine DisksVelero TeamSlack、GitHub IssueResticVelero TeamSlack、GitHub IssuePortworxPortworxSlack、GitHub IssueDigitalOceanStackPointCloud—其中 Restic 是值得展开的能力Velero 自 v0.9.0 起集成开源备份工具 restic为没有原生快照概念的卷类型如 EFS、AzureFile、NFS、emptyDir、local 卷等提供文件级备份/恢复方案。它是 Velero 新增能力而非替代品——如果已经通过 AWS EBS 快照完成备份无需切换到 restic但若存储平台缺乏快照插件restic 则是一种开箱即用的选择。restic 的完整使用与内部工作机制参见 restic.md其三大自定义资源ResticRepository、PodVolumeBackup、PodVolumeRestore分别负责仓库生命周期管理、卷数据备份与卷数据恢复。五、核心配置BackupStorageLocation 与 VolumeSnapshotLocation存储与快照位置在集群中分别通过BackupStorageLocation与VolumeSnapshotLocation两个 CRD 表示完整参数说明见 backupstoragelocation.md 与 volumesnapshotlocation.md。5.1 BackupStorageLocation备份存储位置Velero 至少需要一个BackupStorageLocation默认名称为default可通过velero server的--default-backup-storage-location参数修改。未显式指定存储位置的备份将被保存到该位置。注意自 v0.10.0 起BackupStorageLocation取代了原先的Config.backupStorageProvider配置项。一个典型的BackupStorageLocation示例如下apiVersion: velero.io/v1 kind: BackupStorageLocation metadata: name: default namespace: velero spec: provider: aws objectStorage: bucket: myBucket config: region: us-west-2主配置参数KeyTypeDefaultMeaningproviderStringVelero 原生支持aws、gcp、azure其他可通过外部插件提供必填实际用于存储备份的云提供方名称objectStorageObjectStorageLocation—指定该提供方的对象存储信息objectStorage/bucketString必填备份上传的存储桶objectStorage/prefixString可选存储桶内用于存放备份的目录前缀configmap[string]string无可选传递给云提供方用于备份存储的配置键值对不同提供方有各自的config参数5.2 S3 兼容存储含 AWS的 config 参数KeyTypeDefaultMeaningregionstring空例us-east-1。未提供时向 AWS S3 API 查询s3ForcePathStyleboolfalse使用 Minio 等本地存储服务时设为trues3Urlstring非 AWS 托管存储必填例http://minio:9000。AWS S3 URL 可由region、bucket自动生成该字段主要用于 Minio 等本地存储服务publicUrlstring空例https://minio.mycluster.com。指定后生成下载 URL如日志下载时使用它代替s3Url主要用于 Minio 等本地存储服务kmsKeyIdstring空例502b409c-4da1-419f-a16e-eif453b3i49f 或 alias/KMS-Key-Alias-Name。为存储在 S3 中的备份指定 AWS KMS 密钥以启用加密仅适用于 AWS S3且可能需要显式授予密钥使用权限signatureVersionstring4创建签名 URL供 velero CLI 下载备份或获取日志所用的签名算法版本可选 1 或 4。默认版本 4 通常正确但部分 S3 兼容提供方如 Quobyte仅支持版本 1其中signatureVersion正是支撑矩阵中部分存储需要不同签名算法版本提示的具体落地参数——当对接 Quobyte 这类仅支持签名版本 1 的存储时需要在config中显式设置为1。而s3ForcePathStyle: true与s3Url: http://minio:9000的组合则是 Minio 本地环境接入的关键配置可对照 examples/minio/00-minio-deployment.yaml 中 Minio 的访问地址使用。5.3 Azure 备份存储的 config 参数KeyTypeDefaultMeaningresourceGroupstring必填包含该备份存储位置所用存储账户的资源组名称storageAccountstring必填该备份存储位置所用的存储账户名称5.4 GCP 备份存储的 config 参数GCP 无需任何config参数。5.5 VolumeSnapshotLocation卷快照位置卷快照位置是备份所创建卷快照的存放位置。Velero 允许每个提供方配置多个VolumeSnapshotLocation但每次备份时每个提供方只能选择一个位置每个云提供方至少需要配置一个VolumeSnapshotLocation。apiVersion: velero.io/v1 kind: VolumeSnapshotLocation metadata: name: aws-default namespace: velero spec: provider: aws config: region: us-west-2各提供方的config参数AWSregionstring默认空例 us-east-1未提供时向 AWS S3 API 查询AzureapiTimeoutmetav1.Duration默认2m0sAzure API 请求超时时间、resourceGroupstring可选快照存放的资源组默认与集群资源组相同GCP无需任何参数。六、如何添加一个新的存储插件若需支持新的备份存储或卷存储系统官方推荐的路径如下参考示例仓库编写插件以 velero-plugin-example。发布并合入官方列表插件发布后向本仓库提交 PR将新插件加入support-matrix.md对应的提供方列表中。从源码层面看插件按PluginKind注册与分发服务端通过 clientmgmt/manager.go 的GetObjectStore(name)等方法获取指定名称的ObjectStore插件插件进程由clientmgmt/process中的RestartableProcess管理支持按需重启以应对插件崩溃通信采用 gRPCframework目录下的object_store.go、volume_snapshotter.go等文件定义了插件需要实现的接口与客户端/服务端桩代码。这解释了为何在 plugin_kinds.go 中PluginKindObjectStore与PluginKindVolumeSnapshotter会被单独列出——它们正是支撑矩阵中备份存储与卷快照两条扩展线的插件契约。七、接入 S3 兼容本地存储的实操示例Minio结合仓库自带示例在本地如 Minikube体验 S3 兼容存储接入的完整流程部署 Minio 与自动建桶 Jobkubectl apply -f examples/minio/00-minio-deployment.yaml按 get-started.md 创建带 Minio 凭据的cloud-credentialsSecret并配置BackupStorageLocation关键参数如下spec: provider: aws objectStorage: bucket: velero config: s3ForcePathStyle: true s3Url: http://minio:9000 region: minios3ForcePathStyle: true告诉 aws-sdk-go 以路径方式而非虚拟主机方式访问桶地址s3Url指向 Minio 服务。验证执行velero backup create name创建备份再通过velero backup describe name与velero backup logs name检查备份状态与日志是否正常写入对象存储。八、选型建议与注意事项原生提供方优先AWS S3 / Azure Blob / GCP GCS 与 AWS EBS / Azure Managed Disks / GCE Disks 由 Velero 团队维护并持续测试生产环境优先选择S3 兼容存储注意签署差异第三方 S3 兼容提供方未经过官方定期测试接入前应在测试环境验证若遇到签名问题如 Quobyte尝试将signatureVersion调整为1无快照概念的卷类型用 resticEFS、AzureFile、NFS、emptyDir、local 等没有原生快照的卷可启用 restic 文件级备份注意 hostPath 卷不受支持local 卷受支持多集群共享 bucket 需谨慎AWS 配置文档强调 bucket 最好对单一 Kubernetes 集群唯一跨集群迁移场景需配合AWS_CLUSTER_NAME环境变量与卷所有权设置详见 aws-config.md扩展新平台走插件而非改核心通过示例插件仓库实现并发布插件再以 PR 方式补充到本支撑矩阵保持与官方演进同步。九、延伸阅读aws-config.mdAWS 完整安装、IAM 权限与 kube2iam 方案azure-config.mdAzure 配置指南gcp-config.mdGCP 配置指南ibm-config.mdIBM Cloud Object Storage 接入S3 兼容restic.mdrestic 文件级备份/恢复plugins.md插件架构与插件种类backupstoragelocation.md 与 volumesnapshotlocation.mdCRD 参数参考examples/minio/00-minio-deployment.yamlMinio 本地部署示例源码参考pkg/plugin/framework/common/plugin_kinds.go、pkg/plugin/clientmgmt/manager.go【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考