支持全指南:对象存储、卷快照插件与 S3 兼容生态)
Velero 存储与快照提供方Providers支持全指南对象存储、卷快照插件与 S3 兼容生态【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本篇技术指南以 Velero 官方支持的 Provider提供方体系为核心系统梳理由 Velero 维护者与社区维护的对象存储Object Store与卷快照Volume Snapshotter插件清单、S3 兼容存储的接入方案以及在不支持卷快照时使用 File System Backup 的替代路径。读完本文你将掌握如何为 Velero 选择正确的存储插件、配置BackupStorageLocation与VolumeSnapshotLocation并把 Minio、IBM COS、腾讯云 COS 等 S3 兼容存储接入 Velero 的实际操作步骤。Velero 的插件化存储架构Velero 之所以能支持如此多的存储平台核心在于其插件系统任何人或组织都可以在不修改 Velero 主代码库的前提下为新的备份存储与卷存储平台增加兼容性。安装服务器端时至少需要一个插件通过--plugins标志指定插件类型可以是对象存储Object Store、卷快照器Volume Snapshotter或者两者兼具的复合插件唯一的例外是当安装时不配置任何存储位置时该标志为可选。从源码看Velero 通过 gRPC 协议与插件通信定义了明确的服务接口pkg/plugin/proto/ObjectStore.proto中定义了service ObjectStore负责对象存储的读写、列出、删除等操作承载备份元数据与 File System Backup 数据pkg/plugin/proto/VolumeSnapshotter.proto中定义了service VolumeSnapshotter负责云盘快照的创建、删除与恢复。这套接口就是下方所有 Provider 表格背后统一的插座无论 AWS、GCP 还是社区插件都实现同一组 gRPC 服务可进一步参考 overview-plugins.md 与 custom-plugins.md。备份与快照数据最终落在两类自定义资源上BackupStorageLocation备份存储位置简称 BSL与VolumeSnapshotLocation卷快照位置简称 VSL详见 locations.md。由 Velero 维护者维护的 Provider 插件下表为 Velero 官方维护、质量最有保证的插件清单。表中的表示该提供方不提供对应能力例如 VMware vSphere 只支持卷快照没有对象存储插件。Provider对象存储 (Object Store)卷快照器 (Volume Snapshotter)插件仓库安装指南参数文档Amazon Web Services (AWS)AWS S3AWS EBSVelero plugin for AWSAWS Plugin SetupBackupStorageLocation / VolumeSnapshotLocationGoogle Cloud Platform (GCP)Google Cloud StorageGoogle Compute Engine DisksVelero plugin for GCPGCP Plugin SetupBackupStorageLocation / VolumeSnapshotLocationMicrosoft AzureAzure Blob StorageAzure Managed DisksVelero plugin for Microsoft AzureAzure Plugin SetupBackupStorageLocation / VolumeSnapshotLocationVMware vSpherevSphere VolumesVMware vSpherevSphere Plugin Setup使用官方插件时velero install的典型写法以 AWS 为例为velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:兼容版本 \ --bucket 你的S3桶名 \ --secret-file ./credentials-velero \ --backup-location-config region区域,profiledefault需要注意插件版本必须与当前安装的 Velero 版本兼容各插件仓库的 README 中均有兼容性矩阵说明。如果集群没有可用的卷快照能力应显式添加--use-volume-snapshotsfalse避免生成一个无用的默认VolumeSnapshotLocation。插件与安装位置的选择要点对象存储插件负责存储备份元数据以及 File System Backup 产生的卷数据文件卷快照器插件负责调用云厂商 API 创建云盘快照。一个插件可以同时实现两类服务也可以只实现其一。例如 AWS 插件同时支持 S3 与 EBS而 VMware vSphere 插件只有卷快照能力。若需要多个提供方并存例如同时备份 EBS 卷与 Portworx 卷可以同时加载多个插件并在创建备份时按提供方分别指定对应的VolumeSnapshotLocation。由 Velero 社区维护的 Provider 插件除官方插件外Velero 社区为更多平台提供了集成。这些插件由各社区或厂商维护接入前请务必阅读其文档并自行评估可用性。Provider对象存储卷快照器插件文档联系方式AlibabaCloudAlibaba Cloud OSSAlibaba CloudAlibabaCloudGitHub IssueDigitalOceanDigitalOcean Object StorageDigitalOcean Volumes Block StorageStackPointCloud—Hewlett PackardHPE StorageHewlett PackardSlack / GitHub IssueHuaweiCloudHuaweiCloud OBSHuaweiCloudGitHub IssueOpenEBSOpenEBS CStor VolumeOpenEBSSlack / GitHub IssueOpenStackSwiftCinderOpenStackGitHub IssuePortworxPortworx VolumePortworxSlack / GitHub IssueStorjStorj Object StorageStorjGitHub Issue值得关注的是 Portworx它支持typelocal与typecloud两种快照类型可以将部分快照留在集群本地、另一部分存入云端这在后面多位置配置实战中会具体演示。S3 兼容对象存储提供方Velero 的 AWS 对象存储插件基于 Amazon Go SDK 连接 S3 API。许多第三方存储平台同样实现了 S3 协议以下提供方已被用户验证可与 Velero 配合使用注意这些存储并非由 Velero 团队定期测试IBM Cloud见 ibm-config.mdOracle Cloud见 oracle-config.mdMinio见 minio.mdDigitalOceanNooBaaTencent Cloud见 tencent-config.mdCeph RADOS v12.2.7QuobyteCloudian HyperStore其中部分存储如 Quobyte可能需要不同的签名算法版本signature algorithm version此时需要在BackupStorageLocation的config中做相应调整细节见 AWS 插件的 BackupStorageLocation 参数文档。接入 S3 兼容存储的通用公式由于 Velero 通过 AWS 插件的 S3 客户端访问这些平台接入方式高度统一--provider aws 正确的s3Urls3ForcePathStyle。下面结合仓库中的 contributions 系列文档给出三个典型场景。场景一本地 Minio最快上手的评估环境仓库自带了 Minio 部署清单 examples/minio/00-minio-deployment.yaml先在 Velero 目录下准备凭据文件[default] aws_access_key_id minio aws_secret_access_key minio123启动本地 Minio 后执行安装本仓库环境下的对应写法kubectl apply -f examples/minio/00-minio-deployment.yaml velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:兼容版本 \ --bucket velero \ --secret-file ./credentials-velero \ --use-volume-snapshotsfalse \ --backup-location-config regionminio,s3ForcePathStyletrue,s3Urlhttp://minio.velero.svc:9000关键坑点s3ForcePathStyle必须显式设置为true。AWS SDK 默认采用 virtual-host 风格地址而 MinIO 默认只支持 path-style 地址两者不匹配会导致 Velero能上传但不能从 MinIO 下载数据。如果坚持用 virtual-host 风格则需要给 MinIO 服务端配置MINIO_DOMAIN环境变量。另外若需要在集群外执行velero describe、velero logs等命令这些命令依赖 Minio 生成的预签名 URL还需要通过 NodePort、Ingress 或publicUrl配置把 Minio 暴露到集群外。场景二IBM Cloud Object StorageIBM COS 同样走 S3 兼容 API需要创建带 HMAC 凭据的服务凭证取其中的access_key_id/secret_access_key写入credentials-velero然后安装velero install \ --provider aws \ --bucket YOUR_BUCKET \ --secret-file ./credentials-velero \ --plugins velero/velero-plugin-for-aws:兼容版本 \ --use-volume-snapshotsfalse \ --backup-location-config regionYOUR_REGION,s3ForcePathStyletrue,s3UrlYOUR_URL_ACCESS_POINT,checksumAlgorithmIBM Cloud 没有对应的卷快照插件因此必须--use-volume-snapshotsfalse安装完成后还需删除velero install自动创建的、仅适用于 AWS 的默认卷快照位置kubectl -n velero delete volumesnapshotlocation.velero.io default场景三腾讯云 COS腾讯云 COS 的SecretId/SecretKey分别对应 S3 API 的access_key_id/secret_access_key写入credentials-velero后安装TKE 或自建 K8s 均可velero install --provider aws --plugins velero/velero-plugin-for-aws:兼容版本 --bucket BucketName \ --secret-file ./credentials-velero \ --use-node-agent \ --default-volumes-to-fs-backup \ --backup-location-config \ regionap-guangzhou,s3ForcePathStyletrue,s3Urlhttps://cos.ap-guangzhou.myqcloud.com参数说明regionCOS 桶所在区域例如广州为ap-guangzhous3UrlCOS 兼容 S3 的访问地址格式必须是https://cos.region.myqcloud.com不能使用桶的公网访问域名--use-node-agent启用 node-agent DaemonSetFile System Backup 的前置要求--default-volumes-to-fs-backup让所有 Pod 卷默认走 File System Backup前提是已开启--use-node-agent其它可用参数通过velero install --help查看例如--use-volume-snapshotsfalse可关闭卷数据快照。安装完成后用velero backup-location get验证状态为Available即表示与 COS 的连通性正常。场景四Oracle Cloud Object StorageOracle 也通过 S3 兼容 API 接入需要先创建 Customer Secret Key 并写入凭据文件然后安装velero install \ --provider aws \ --bucket velero \ --prefix tenancy名称 \ --use-volume-snapshotsfalse \ --secret-file ./credentials-velero \ --backup-location-config region区域,s3ForcePathStyletrue,s3Urlhttps://tenancy.compat.objectstorage.区域.oraclecloud.com其中--prefix使用你的 Oracle Cloud tenancy 名称s3Url是区域对应的 S3 兼容 API 端点。Oracle Cloud 也没有卷快照插件因此需关闭卷快照功能。存储位置配置实战BSL 与 VSL 的多位置编排理解了 Provider 之后接下来解决备份存到哪里、快照打到哪里的问题。这两个问题分别由BackupStorageLocationBSL与VolumeSnapshotLocationVSL两类 CRD 描述API 参数完整参考见 backupstoragelocation.md 与 volumesnapshotlocation.mdBSL 一个桶或桶内前缀 一组提供方特定字段AWS region、Azure storage account 等。Velero 假定它对该位置拥有完全控制权因此应使用专用桶或专用前缀VSL 完全由提供方特定字段定义AWS region、Azure resource group、Portworx snapshot type 等。用户可以预配置一个或多个 BSL、每个提供方一个或多个 VSL并在创建备份时选择要使用的存储位置。这一设计支撑了以下典型场景单个 Velero 备份中同时为多种卷如 EBS 与 Portworx打快照部分备份存到美东桶、部分存到美西桶甚至存到不同存储提供方对支持多快照类型的提供方如 Portworx部分快照留在集群本地、部分存入云端。示例一同一备份为多种卷打快照# 服务器配置阶段 velero snapshot-location create ebs-us-east-1 \ --provider aws \ --config regionus-east-1 velero snapshot-location create portworx-cloud \ --provider portworx \ --config typecloud # 备份创建阶段 velero backup create full-cluster-backup \ --volume-snapshot-locations ebs-us-east-1,portworx-cloud如果每个提供方只配置了一个 VSL则创建备份时无需显式指定Velero 会自动使用唯一位置。示例二默认 BSL 备用 BSL美东默认、美西备用velero backup-location create backups-primary \ --provider aws \ --bucket velero-backups \ --config regionus-east-1 \ --default velero backup-location create backups-secondary \ --provider aws \ --bucket velero-backups \ --config regionus-west-1 # 不指定则用默认位置backups-primary velero backup create full-cluster-backup # 或显式指定备用位置 velero backup create full-cluster-alternate-location-backup \ --storage-location backups-secondary默认 BSL是指创建备份时未指定位置时数据落盘的位置可随时通过velero backup-location set 名称 --default切换。示例三Portworx 本地快照与云端快照并存velero snapshot-location create portworx-local \ --provider portworx \ --config typelocal velero snapshot-location create portworx-cloud \ --provider portworx \ --config typecloud velero backup create local-snapshot-backup \ --volume-snapshot-locations portworx-local velero backup create cloud-snapshot-backup \ --volume-snapshot-locations portworx-cloud当某个提供方配置了多个 VSL 时创建备份时必须显式指定其一除非通过velero server --default-volume-snapshot-locations为该提供方设置了默认位置。示例四为 BSL/VSL 配置独立凭据默认情况下 BSL 与 VSL 使用安装时提供的cloud-credentialsSecret 中的凭据。若需让某个存储位置使用自己的凭据例如备份到另一个账号先创建凭据 Secretkubectl create secret generic -n velero credentials --from-filebsl/path/to/credentialsfile再在创建存储位置时通过--credentialsecret-namekey-within-secret指定velero backup-location create bsl-name \ --provider provider \ --bucket bucket \ --config regionregion \ --credentialsecret-namekey-within-secretVSL 的独立凭据做法相同用--from-filevsl...创建 Secret再用velero snapshot-location create ... --credential...。该能力要求所用插件支持多凭据——Velero 官方维护的所有插件均支持第三方插件需查阅其文档确认。存储位置的限制与注意事项每个备份只能有一个 BSL每个卷提供方只能有一个 VSL。目前无法把单个备份同时写入多个备份存储位置若需跨位置冗余可以配置多个仅存储位置不同的定时备份。跨提供方快照不受支持集群同时存在 EBS 与 Portworx 卷、但只配置了 EBS 的 VSL 时Velero 只对 EBS 卷打快照。卷快照仍受云厂商限制AWS、Azure 不允许跨区域创建卷快照VSL 区域与卷所在区域不一致时备份会失败。File System Backup 数据存放在 BSL 所选桶的一个前缀/子目录下随用户为备份选择的 BSL 走。Velero 自身不加密备份的元数据与快照数据而是依赖对象存储与快照系统的原生加密能力File System Backup 是例外——它以文件系统级备份卷数据并写入对象存储。元数据压缩能力有限基于 Go 的 tar 实现File System Backup 目前尚未实现压缩但具备**去重de-duplication**能力。没有卷快照插件怎么办File System Backup如果希望为卷打快照但你的存储平台没有对应插件Velero 提供了File System BackupFSB方案详见 file-system-backup.md。它借助开源备份工具 kopia 的模块从文件系统层面备份/恢复挂载在 Pod 上的卷。FSB 与原生/CSI 快照对同一卷是互斥的对某卷执行 FSB 时Velero 会跳过对该卷的快照对某卷未启用 FSB 时Velero 会尝试打快照若已配置该行为自动生效避免同一份数据的重复备份。FSB 的优势与代价优势几乎支持所有 Kubernetes 卷类型EFS、AzureFile、NFS、emptyDir、local 等没有原生快照概念的卷不绑定特定存储平台可把备份数据存到与源卷不同的平台上代价从在线文件系统备份数据不在同一时间点捕获一致性弱于快照方案node-agent Pod 需要通过挂载的 hostPath 访问文件系统因此需要以 root 运行部分环境还需特权模式。启用方式需 Kubernetes v1.16.0依赖 MountPropagation 特性velero install --use-node-agent若所用存储完全没有快照插件可追加--use-volume-snapshotsfalse避免生成无用的 VSL。FSB 目前仅支持对象存储作为备份存储参数从 BSL 的config中获取以拼装备份存储 URL若使用非内置存储需确保其 S3 兼容并在 BSL 中正确提供桶名与端点。Velero 按命名空间创建独立的备份仓库如 AWS S3 上的.../bucket/kopia/ns1、.../bucket/kopia/ns2并在安装命名空间中创建名为velero-repo-credentials的 Secret 存放默认仓库密码——建议在首次备份前用自定义密码base64 编码键为repository-password替换它若在仓库创建后再改密码将无法连接旧备份。在 RancherOS、Nutanix、OpenShift、VMware Tanzu、Azure 等平台上还需按 file-system-backup.md 调整 node-agent DaemonSet 的 hostPath 或开启特权模式例如 OpenShift 下执行oc adm policy add-scc-to-user privileged -z velero -n velero并用velero install --use-node-agent --privileged-node-agent安装。附BackupStorageLocation 参数速查接入任意 Provider 时BSL 的主要配置参数如下完整定义见 api-types/backupstoragelocation.mdYAML 示例如下apiVersion: velero.io/v1 kind: BackupStorageLocation metadata: name: default namespace: velero spec: backupSyncPeriod: 2m0s provider: aws objectStorage: bucket: myBucket credential: name: secret-name key: key-in-secret config: region: us-west-2 profile: defaultKeyType默认值含义providerString必填对象存储提供方名称取值见对应插件的文档objectStorageObjectStorageLocation必填提供方的对象存储规格objectStorage/bucketString必填备份上传的存储桶objectStorage/prefixString可选桶内用于存放备份的目录前缀objectStorage/caCertString可选已弃用base64 编码的 CA 证书包用于 TLS 校验建议改用caCertRefobjectStorage/caCertRefSecretKeySelector可选引用包含 CA 证书包的 SecretSecret 必须与 BSL 同命名空间objectStorage/caCertRef/nameString使用 caCertRef 时必填存放 CA 证书包的 Secret 名称objectStorage/caCertRef/keyString使用 caCertRef 时必填Secret 中存放 CA 证书包的键configmap[string]string无传给对象存储插件的提供方特定配置键值对accessModeStringReadWriteVelero 访问该位置的方式可取ReadWrite、ReadOnly恢复期间临时置为ReadOnly可防止备份对象被改动backupSyncPeriodmetav1.Duration可选从对象存储同步备份的周期默认跟随服务器配置设为0s可禁用同步validationFrequencymetav1.Duration可选校验对象存储的频率默认 1 分钟0s禁用credentialSecretKeySelector可选该位置使用的凭据信息credential/nameString可选Velero 命名空间内含凭据的 Secret 名称credential/keyString可选Secret 中使用的键同样地VSL 的参数更简洁provider必填卷快照提供方名称、config可选传给卷快照插件的地域/类型等键值对、credential可选独立凭据引用YAML 示例见 api-types/volumesnapshotlocation.md。所有参数的具体取值如 AWS 的region/profile、Azure 的resourceGroup/storageAccount/subscriptionId、Portworx 的type都以所用插件仓库中的 BackupStorageLocation/VolumeSnapshotLocation 文档为准。总结选择插件优先使用 Velero 维护者维护的官方插件AWS / GCP / Azure / vSphere社区插件按需选用并自行评估只有对象存储、没有快照能力的平台如 vSphere、HPE、OpenEBS、Portworx 等注意其在两种能力上的分工。S3 兼容生态AWS 插件 正确的s3Url与s3ForcePathStyletrue即可把 Minio、IBM COS、腾讯云 COS、Oracle OSS、Ceph、Quobyte 等接入 Velero。位置编排通过 BSL/VSL 实现多区域、多账号、多快照类型的灵活路由每个备份一个 BSL、每个提供方一个 VSL默认位置可用--default与--default-volume-snapshot-locations管理。无快照插件时启用 File System Backup--use-node-agent借助 kopia 以文件系统级完成卷数据的备份与恢复。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考