ARTICLE DETAIL

资讯详情

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

Velero 私有化部署指南:对象存储选型、卷快照方案与离线(Air-Gapped)镜像准备

Velero 私有化部署指南:对象存储选型、卷快照方案与离线(Air-Gapped)镜像准备 Velero 私有化部署指南对象存储选型、卷快照方案与离线Air-Gapped镜像准备【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文围绕 Velero 官方文档 On-Premises Environments 展开系统讲解在无法依赖公有云服务的私有集群中运行 Velero 的三类关键决策如何选择对象存储后端含 MinIO 评估安装实操、如何选择持久卷数据备份方案原生快照插件或文件级备份 FSB以及离线Air-Gapped环境下如何将 Velero 核心镜像、插件镜像和恢复辅助镜像迁移到内部镜像仓库。读完本文你可以独立完成一套私有化 Velero 备份栈的选型、安装与镜像自托管配置并从源码层面理解velero install各参数背后的实现逻辑。一、私有化部署的三个核心决策点Velero 的设计假设备份数据最终要落到对象存储卷数据要么依赖存储平台的原生快照要么走平台无关的文件级备份。因此在一台不接入公有云的集群上落地 Velero需要依次回答三个问题对象存储后端选什么Velero 必须有一个可访问的对象存储来存放备份归档backup tarball 及附属文件持久卷数据怎么备份要么选一个有原生快照插件的存储如 Portworx要么使用 Velero 内置的文件系统备份File System Backup下称 FSB镜像从哪来如果集群完全离线Air-Gapped无法访问公共镜像仓库就必须把所有 Velero 相关镜像搬进内部镜像仓库。下面按这三个决策点逐一展开并结合当前仓库源码与示例配置加以印证。二、选择对象存储提供商2.1 支持的存储提供商Velero 的对象存储与卷快照能力都通过插件体系扩展任何人无需修改 Velero 主仓库即可接入新的存储平台。官方文档 Supported Providers 列出的由 Velero 维护者维护的提供商插件包括提供商对象存储卷快照Amazon Web Services (AWS)AWS S3AWS EBSGoogle Cloud Platform (GCP)Google Cloud StorageGoogle Compute Engine 磁盘Microsoft AzureAzure Blob StorageAzure 托管磁盘VMware vSphere不支持vSphere 卷Container Storage Interface (CSI)不支持CSI 卷此外社区还维护了 AlibabaCloudOSS、DigitalOcean、HPE、OpenEBS、OpenStackSwift/Cinder、Portworx、Storj 等插件。对私有化场景更关键的是S3 兼容存储这一条路线Velero 的 AWS 对象存储插件基于 Amazon 的 Go SDK 连接 S3 API因此任何实现了 S3 API 的存储都可以直接作为备份目标。用户报告可用但 Velero 团队不定期测试的 S3 兼容存储包括IBM Cloud、Oracle Cloud、MinIO、DigitalOcean、NooBaa、Tencent Cloud、Ceph RADOSv12.2.7 及以上、Quobyte、Cloudian HyperStore 等。注意部分存储如 Quobyte可能需要不同的签名算法版本signature algorithm version具体参数见 AWS 插件的 BackupStorageLocation 文档。2.2 没有对象存储用 MinIO 快速搭一套如果你还没有对象存储系统MinIO 是官方推荐的开源 S3 兼容方案它可以部署在你的集群内部且已被验证与 Velero 兼容。该文档明确说明MinIO 的生产级配置高可用、加密、多副本等不在 Velero 文档范围内仓库提供的是评估安装evaluation install级别的指引生产环境请自行完成 MinIO 的可靠性建设。仓库中附带了现成的 MinIO 部署清单 examples/minio/00-minio-deployment.yaml它由三部分组成值得逐一看懂Deployment组件minio运行minio/minio:latest监听 9000 端口通过环境变量MINIO_ACCESS_KEYminio、MINIO_SECRET_KEYminio123写入账号数据目录挂在emptyDir卷/storage上Service默认ClusterIP类型清单注释明确建议生产用 ClusterIP仅 Minikube 等试验环境才改成 NodePortJobminio-setup用minio/mc客户端执行mc alias set velero http://minio:9000 minio minio123 mc mb -p velero/velero即自动创建名为velero的存储桶bucket——这正是后续velero install --bucket velero能直接对上的原因。官方评估安装流程摘自 MinIO 快速上手如下前提条件一个 Kubernetes 1.7 集群若日后启用文件级备份需 1.10 或开启了 MountPropagation 特性的更低版本集群内有可用的 DNS 服务器与kubectlMinIO 所在节点有足够磁盘空间备份数据量 至少 1GB 余量MinIO 在剩余空间低于 1GB 时无法工作。第一步部署 MinIOkubectl apply -f examples/minio/00-minio-deployment.yaml示例清单使用emptyDir若节点空间不足可修改清单改用 Persistent Volume。第二步创建 Velero 凭证文件在本地 Velero 目录创建credentials-velero内容对应 MinIO 的账号即部署清单中的环境变量[default] aws_access_key_id minio aws_secret_access_key minio123第三步安装 Velero 服务端velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.2.1 \ --bucket velero \ --secret-file ./credentials-velero \ --use-volume-snapshotsfalse \ --backup-location-config regionminio,s3ForcePathStyletrue,s3Urlhttp://minio.velero.svc:9000参数要点--provider aws私有集群没有云厂商对象存储插件统一选 AWS 插件走 S3 API插件版本需与你安装的 Velero 版本兼容--backup-location-config中s3ForcePathStyletrue与s3Urlhttp://minio.velero.svc:9000是让 S3 客户端指向集群内 MinIO 服务的关键MinIO 不支持虚拟主机风格的 endpoint--use-volume-snapshotsfalse在没有支持快照的存储时避免创建无用的VolumeSnapshotLocation若需要文件级备份能力追加--use-node-agent想等待部署就绪再加--wait。第四步部署示例应用并验证kubectl apply -f examples/nginx-app/base.yaml kubectl get deployments -l componentvelero --namespacevelero kubectl get deployments --namespacenginx-example第五步演练一次备份与恢复# 按标签选择器创建备份 velero backup create nginx-backup --selector appnginx # 可选定时备份支持标准 cron 表达式与 daily 等简写 velero schedule create nginx-daily --schedule0 1 * * * --selector appnginx # 模拟故障删掉业务命名空间 kubectl delete namespace nginx-example # 从备份恢复 velero restore create --from-backup nginx-backup velero restore get恢复完成后velero restore get中STATUS应为Completed、WARNINGS与ERRORS均为 0如有异常用velero restore describe RESTORE_NAME查看详情。两个私有化高频问题让velero logs/velero describe能读到备份内容Velero 服务端会为备份对象生成预签名 URLpre-signed URL供客户端下载因此 MinIO 必须对客户端可达。三种做法把 Service 从ClusterIP改为NodePort并在BackupStorageLocation.spec.config中配置publicUrl或配置 Ingress保持 ClusterIPKinD 环境因不支持 NodePort可用kubectl port-forward转发 MinIO Pod 的 9000 端口后配置publicUrl: http://localhost:9000。MinIO 走 HTTPS 时velero describe输出乱码通过kubectl patch -n velero backupstoragelocation default --type merge -p {spec:{config:{publicUrl:https://MinIO 公网地址:9000}}}补充公共 URL 即可。三、可选选择卷快照/卷数据备份方案如果需要备份持久卷数据而非仅备份 K8s 资源对象有两条路3.1 原生快照插件在 Supported Providers 中查找你的存储平台对应的卷快照插件。例如使用 Portworx 做持久存储时可以安装 Portworx 的 Velero 插件在 Velero 备份中获得 Portworx 原生卷快照。3.2 没有原生插件用 File System Backup文档明确指出如果存储平台没有可用的原生快照插件可以使用 Velero 的 File System Backup。FSB 是一个平台无关的文件级卷备份方案通过运行在节点上的 Velero Node AgentDaemonSet直接访问 Pod 卷数据底层数据搬运由 restic 或 kopia 两个开源备份引擎完成当前仓库中uploader-type安装参数的合法值即restic或kopia见 install.go 的uploader-typeflag 定义。从源码结构看FSB 与本文私有化主题有直接关系启用 FSB 会引入额外的容器镜像restore helper见第四节并依赖 Node Agent DaemonSet 挂载节点 hostPath。当前仓库 pkg/install/daemonset.go 中可以看到 node-agent 的构建逻辑基于kubeletRootDir拼出kubeletRoot/pods与kubeletRoot/plugins两个 hostPath 卷分别挂到容器内的/var/lib/kubelet/pods与/var/lib/kubelet/plugins挂载方式强制为MountPropagationHostToContainerHostToContainer 传播模式这正是 FSB 文档要求 Kubernetes 具备 MountPropagation 特性的原因额外挂了一个emptyDir的/scratch暂存目录。FSB 的选型权衡摘自官方文档优点几乎支持所有卷类型EFS、AzureFile、NFS、emptyDir、local 等无原生快照概念的卷均可备份数据可存放到与卷底层不同的存储平台缺点从活文件系统拷贝一致性弱于快照需以 root/特权模式访问宿主目录hostPath卷不被支持local PV 支持限制Pod 必须正在运行并挂载卷才能备份孤儿 PVC/PV 需先起一个 staging Pod 挂载。启用方式为在velero install时加--use-node-agentinstall.go 中该 flag 的描述为 Create Velero node-agent daemonset发现 Pod 卷有两种模式Opt-in默认在需要备份的 Pod 上打注解backup.velero.io/backup-volumes卷名1,卷名2Opt-out备份所有 Pod 卷自动排除默认 SA token、Secret、ConfigMap 与 hostPath 卷可配合--default-volumes-to-fs-backup或备份级参数全局启用并用backup.velero.io/backup-volumes-excludes注解排除个别卷。注意 install.go 中的校验逻辑--default-volumes-to-fs-backup与--use-node-agent必须配套使用单独开启前者会直接报错——这是私有化安装时容易踩的坑。四、Air-Gapped离线部署镜像准备全流程在 Air-Gapped 环境中集群没有任何公网访问能力自然也无法拉取公共容器镜像仓库如 Docker Hub中的velero/velero等镜像。官方文档给出的标准做法是在集群外准备一台可联网的跳板机先部署一个内部镜像仓库如 Harbor然后把三类镜像逐一 pull → tag → push 进内部仓库4.1 准备 Velero 核心镜像PRIVATE_REGyour private registry VELERO_VERSIONversion of Velero youre targeting, for example v1.4.0 docker pull velero/velero:$VELERO_VERSION docker tag velero/velero:$VELERO_VERSION $PRIVATE_REG/velero:$VELERO_VERSION docker push $PRIVATE_REG/velero:$VELERO_VERSION4.2 准备插件镜像对每个需要的插件重复同样操作。文档以 AWS 插件为例实际替换为你所需的插件名PRIVATE_REGyour private registry PLUGIN_VERSIONversion of plugin youre targeting, for example v1.0.2 docker pull velero/velero-plugin-for-aws:$PLUGIN_VERSION docker tag velero/velero-plugin-for-aws:$PLUGIN_VERSION $PRIVATE_REG/velero-plugin-for-aws:$PLUGIN_VERSION docker push $PRIVATE_REG/velero-plugin-for-aws:$PLUGIN_VERSION4.3 准备恢复辅助镜像使用 FSB 时必做如果你启用了 File System Backup还需要上传 restore helper 镜像——FSB 恢复时 Velero 会向 Pod 注入一个基于该镜像的 init 容器来等待卷数据恢复完成当前仓库中该镜像引用见 pod_volume_restore_action.goPRIVATE_REGyour private registry VELERO_VERSIONversion of Velero youre targeting, for example v1.4.0 docker pull velero/velero-restore-helper:$VELERO_VERSION docker tag velero/velero-restore-helper:$VELERO_VERSION $PRIVATE_REG/velero-restore-helper:$VELERO_VERSION docker push $PRIVATE_REG/velero-restore-helper:$VELERO_VERSION4.4 拉取特定架构的镜像可选Velero 的镜像使用 Docker manifest 列表multi-arch manifestDocker 会按客户端机器架构自动选择对应镜像。如果离线环境需要手工指定架构版本应把velero/velero替换为特定架构镜像名例如 ARM 平台用velero/velero-arm。查看当前支持哪些架构的官方方法需在可联网机器上开启 Docker 实验特性docker manifest inspect velero/velero返回的 manifest 列表中每种架构对应一个镜像名把架构字符串用-拼接到镜像名后即可直接 pull。4.5 用内部仓库镜像安装 Velero默认velero install使用公共的velero/velero镜像离线部署时必须通过--image和--plugins显式指定私有仓库镜像当前仓库 internal/velero/images.go 中DefaultVeleroImage()提供默认公共镜像velero install的--image参数会覆盖它velero install \ --image$PRIVATE_REG/velero:$VELERO_VERSION \ --plugins$PRIVATE_REG/velero-plugin-for-aws:$PLUGIN_VERSION \ ....提示--plugins可重复指定多个插件镜像如果同时使用 FSBnode-agent DaemonSet 与核心 Deployment 共用--image指定的镜像pkg/install/daemonset.go 中 DaemonSet 默认取DefaultVeleroImage()同样受安装选项覆盖。因此核心镜像、插件镜像、restore helper 镜像三者缺一不可漏掉任何一个都可能导致备份或 FSB 恢复失败。五、验证与排障清单私有化安装完成后建议按以下顺序验证命令均摘自仓库文档与示例# 1. 服务端与 MinIO 组件状态 kubectl get pods -n velero # 2. 备份存储位置是否就绪 velero backup-location get # 3. 端到端演练对应 2.2 节 velero backup create nginx-backup --selector appnginx velero restore create --from-backup nginx-backup velero restore get若启用 FSB还要检查每命名空间的备份仓库velero repo get、PodVolumeBackup/PodVolumeRestore资源状态以及 node-agent Pod 日志kubectl -n velero logs DAEMON_POD_NAMEvelero describe输出异常时优先按 2.2 节排查 MinIO 可达性与publicUrl配置。六、小结Velero 的私有化部署本质上是一组存储选型 镜像自托管的工程决策对象存储优先 S3 兼容方案MinIO/Ceph 等AWS 插件 s3Url/s3ForcePathStyle参数即可对接卷数据有原生快照插件就走插件没有就启用 FSB--use-node-agent注意其与--default-volumes-to-fs-backup的配套约束离线环境核心镜像、插件镜像、restore helper 镜像全部预置进内部仓库ARM 等特定架构用docker manifest inspect确认后按架构名拉取最后用velero install --image ... --plugins ...完成指向私有仓库的安装。相关文档与源码入口On-Premises Environments、Supported Providers、File System Backup、MinIO 评估安装、MinIO 部署清单、install 命令实现、node-agent DaemonSet 构建。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表