尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Velero 快速上手:使用本地 Minio 完成备份与恢复全流程实操

Velero 快速上手:使用本地 Minio 完成备份与恢复全流程实操 Velero 快速上手使用本地 Minio 完成备份与恢复全流程实操【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文基于 Velero 官方文档《Quick start evaluation install with Minio》完整演示如何在 Kubernetes 集群中用 MinioS3 兼容的本地对象存储搭建一套可直接体验的 Velero 环境安装客户端、启动服务器与本地存储、部署示例应用、创建备份与定时策略、模拟灾难并恢复数据最后完成清理。读完后你将掌握 Velero 从安装到备份/恢复的完整操作链路并能结合仓库源码理解velero install各参数的实际作用。需要说明的是该示例的目的是让你快速体验 Velero 的基本功能不适用于生产环境Minio 的生产化配置不在本文范围内。文档适用于 v1.11 版本线参数说明以当前仓库 velero install 命令源码 为准。前置条件开始前请确认以下条件均已满足可访问的 Kubernetes 集群版本 1.7 或更高。注意文件系统备份File System Backup需要 Kubernetes 1.10 及以上或开启了 mount propagation 特性的更早版本。本示例不依赖文件系统备份但后续可能需要参考 文件系统备份文档。集群内可用的 DNS 服务器。已安装kubectl。Minio 所在节点有足够的磁盘空间足以存放所有备份数据且额外保留至少 1GB 空闲空间——Minio 在空闲磁盘低于 1GB 时会停止工作。安装 Velero CLI方式一macOS Homebrew在 macOS 上可以直接用 Homebrew 安装velero客户端brew install velero方式二从官方 Release 下载下载与你客户端平台匹配的官方 Release 压缩包tarball。建议使用官方发布的 Release 版本。每个 Release 的 tarball 中均包含velero命令行客户端。仓库 main 分支的代码处于活跃开发状态不保证稳定。解压 tarballtar -xvf RELEASE-TARBALL-NAME.tar.gz -C /dir/to/extract/to解压后的目录在后续步骤中称为“Velero 目录”。将velero二进制从 Velero 目录移动到PATH中的某个位置。部署本地 Minio 存储Velero 需要一个对象存储来存放备份数据。示例提供了完整的 Minio 部署清单 00-minio-deployment.yaml包含三个对象NamespaceveleroVelero 与 Minio 共用。Deploymentcomponent: minio运行minio/minio:latest镜像监听 9000 端口访问密钥由环境变量MINIO_ACCESS_KEYminio与MINIO_SECRET_KEYminio123定义数据目录使用emptyDir卷挂载到/storage。Serviceminio默认类型为ClusterIP仅集群内可访问暴露 9000 端口。注释中明确提示生产环境保持ClusterIP仅在 Minikube 等试验环境才改为NodePort。Jobminio-setup使用minio/mc客户端初始化存储命令为mc alias set velero http://minio:9000 minio minio123 mc mb -p velero/velero即创建名为velero的 bucket——这正是后续velero install --bucket velero所引用的 bucket且mb -p参数表示在 bucket 上禁用公共访问。应用该清单kubectl apply -f examples/minio/00-minio-deployment.yaml注意示例 Minio 清单使用emptyDir存储所在节点必须同时满足“备份数据 1GB 空闲空间”的要求。如果节点空间不足可以修改清单改用 Persistent Volume 替代emptyDir。部署 Velero 服务器第一步创建 Velero 专用凭据文件在你的 Velero 目录下创建credentials-velero文件AWS 风格的 S3 凭据格式供 AWS 插件解析[default] aws_access_key_id minio aws_secret_access_key minio123其中的minio/minio123与 Minio Deployment 的MINIO_ACCESS_KEY/MINIO_SECRET_KEY环境变量一致。第二步执行 velero install在 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各参数的含义结合 install.go 中的BindFlags定义参数取值说明--provideraws备份与卷存储的提供者名称。由于 Minio 兼容 S3这里按 AWS 处理--pluginsvelero/velero-plugin-for-aws:v1.2.1要装入 Velero Deployment 的插件镜像。AWS 插件版本需与 Velero 版本兼容安装时请自行核对--bucketvelero备份存放的 bucket 名称即 Minio setup Job 创建的velero--secret-file./credentials-velero凭据文件路径内容会读取后创建为名为cloud-credentials的 Secret--use-volume-snapshotsfalse不自动创建VolumeSnapshotLocation。示例假设集群没有支持快照的卷提供者--backup-location-configregionminio,s3ForcePathStyletrue,s3Urlhttp://minio.velero.svc:9000BackupStorageLocation的键值配置s3Url指向集群内 Minio Service 地址s3ForcePathStyletrue让 S3 客户端使用 path-style 寻址Minio 要求源码层面的补充说明在 pkg/cmd/cli/install/install.go 的Validate方法中可以看到参数校验规则未使用--no-default-backup-location时--provider和--bucket均为必填--secret-file与--no-secret必须二选一且不可同时使用当--use-volume-snapshotsfalse时--snapshot-location-config必须为空非--no-default-backup-location场景下--plugins为必填。AsVeleroOptions会用os.ReadFile读取--secret-file指向的文件字节内容作为SecretData传入资源生成逻辑pkg/install/resources.go 中的BackupStorageLocation函数据此构建BackupStorageLocation对象并将凭据组装为cloud-credentialsSecret。该 Secret 随后被挂载到 Velero 服务器 Deployment见 pkg/install/deployment.go。此外还可以追加--use-node-agent开启文件系统备份支持会创建 node-agent DaemonSet以及--wait等待 Deployment 就绪源码中Run方法会对 Velero Deployment、node-agent DaemonSet 逐一执行就绪检查。也可以组合使用--dry-run -o yaml只生成资源清单而不提交到集群便于定制安装。第三步部署示例 nginx 应用kubectl apply -f examples/nginx-app/base.yaml该清单base.yaml创建了nginx-example命名空间标签app: nginx、2 副本的nginx-deployment标签app: nginx、以及LoadBalancer类型的 Servicemy-nginx。第四步验证部署kubectl get deployments -l componentvelero --namespacevelero kubectl get deployments --namespacenginx-example确认 Velero 与 nginx 两个 Deployment 均已成功创建。创建备份按标签选择器创建一次性备份备份所有匹配appnginx标签选择器的对象velero backup create nginx-backup --selector appnginx如果希望备份所有对象、但排除匹配backupignore标签的对象可使用velero backup create nginx-backup --selector backup notin (ignore)可选创建定时备份基于 cron 表达式每天凌晨 1 点执行一次velero schedule create nginx-daily --schedule0 1 * * * --selector appnginx也可以直接使用的非标准简写 cron 表达式velero schedule create nginx-daily --scheduledaily --selector appnginx更多 cron 用法可参考 Velero 所依赖的 cron 包的文档。模拟灾难删除示例命名空间模拟应用彻底丢失kubectl delete namespace nginx-example确认 Deployment 与 Service 均已消失kubectl get deployments --namespacenginx-example kubectl get services --namespacenginx-example kubectl get namespace/nginx-example以上命令应无任何结果返回。注意命名空间的完整清理可能需要等待几分钟。执行恢复基于之前的备份创建恢复velero restore create --from-backup nginx-backup查看恢复状态velero restore get恢复完成后输出形如NAME BACKUP STATUS WARNINGS ERRORS CREATED SELECTOR nginx-backup-20170727200524 nginx-backup Completed 0 0 2017-07-27 20:05:24 0000 UTC none注意恢复可能需要一段时间期间STATUS列显示InProgress。恢复成功后STATUS变为CompletedWARNINGS与ERRORS均为 0nginx-example命名空间中的所有对象应恢复到删除前的状态。如出现错误或警告可查看详情更多排查信息见 恢复问题排查文档velero restore describe RESTORE_NAME清理删除备份删除指定备份包括对象存储中的数据和卷快照velero backup delete BACKUP_NAME该命令会让 Velero 服务器删除与BACKUP_NAME关联的全部备份数据需要对每个要彻底删除的备份分别执行。完全删除后执行velero backup get BACKUP_NAME将看不到该备份。彻底卸载 Velero、Minio 与示例应用kubectl delete namespace/velero clusterrolebinding/velero kubectl delete crds -l componentvelero kubectl delete -f examples/nginx-app/base.yaml将 Minio 暴露到集群外执行velero describe或获取日志等命令时Velero 服务器会生成预签名 URL 供客户端下载所请求的对象。要让集群外的 Velero 客户端访问这些 URL就必须把 Minio 暴露到集群外。有两种方式将 Minio Service 类型从ClusterIP改为NodePort为集群配置 IngressMinio Service 保持ClusterIP不变。两种方式都可以进一步在BackupStorageLocation的配置中指定publicUrl字段用于生成预签名 URL。方式一NodePort ServiceMinio 部署默认为ClusterIP类型。如果从客户端可以直达集群节点可以改为NodePort轻松对外暴露服务。在 00-minio-deployment.yaml 中把 Service 的spec.type从ClusterIP改为NodePort。获取 Minio 的完整 URL如果使用 Minikubeminikube service minio --namespacevelero --url其他环境获取集群任意节点的对外 IP 或 DNS 名称确保 Velero 客户端能访问该地址追加 NodePort 端口号组成完整 URL端口号通过以下命令获取kubectl -n velero get svc/minio -o jsonpath{.spec.ports[0].nodePort}编辑BackupStorageLocationYAML在spec.config下添加publicUrl: 上一步获得的 URL。URL 必须包含http://或https://前缀。通过 HTTPS 端点访问日志如果使用 HTTPS 的 Miniovelero describe或velero logs的输出可能是一堆不可读的乱码。解决办法是为BackupStorageLocation添加公共 URLkubectl patch -n velero backupstoragelocation default --type merge -p {spec:{config:{publicUrl:https://a public IP for your Minio instance:9000}}}如果证书是自签名的请参考 自签名证书文档。方式二KinDKubernetes in Docker环境KinD 不支持 NodePort Service此时可以用端口转发访问 Minio bucket。在终端中执行MINIO_POD$(kubectl get pods -n velero -l componentminio -o jsonpath{.items[0].metadata.name}) kubectl port-forward $MINIO_POD -n velero 9000:9000然后在另一个终端编辑BackupStorageLocationkubectl edit backupstoragelocation default -n velero在spec.config部分添加publicUrl: http://localhost:9000。方式三Ingress为集群配置 Ingress 超出了 Velero 文档的范围但如果你已经配置好了 Ingress在跑 Minio 示例时继续沿用它也是合理的选择Service 类型保持ClusterIP编辑BackupStorageLocationYAML在spec.config下添加publicUrl: Ingress 的 URL 和端口。相关链接生产环境安装与平台定制自定义安装安装与配置问题排查安装问题调试文件系统备份本示例未启用可通过--use-node-agent开启File System Backup恢复问题排查Debugging Restores仓库内的示例资源Minio 部署清单、nginx 示例应用velero install命令实现与参数校验pkg/cmd/cli/install/install.go资源生成逻辑见 pkg/install/resources.go【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表