资讯详情

资讯详情

Ark(Velero 前身)v0.8.1 快速上手:基于 Minio 与 nginx 示例的 Kubernetes 备份/恢复实战指南

ArkVelero 前身v0.8.1 快速上手基于 Minio 与 nginx 示例的 Kubernetes 备份/恢复实战指南【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本指南以仓库中保留的历史文档 site/content/docs/v0.8.1/_index.md 为骨架完整讲解 Heptio ArkVelero 的前身v0.8.1 的快速上手指南如何在一个本地 MinioS3 兼容对象存储之上部署 Ark 服务端与命令行客户端备份一个 nginx 示例应用模拟灾难后完成恢复并在最后安全清理环境。读完本文你将掌握 Ark/Velero 核心工作流部署 → 备份 → 灾难演练 → 恢复 → 清理的每一步操作并理解ark backup create、ark restore create等命令的关键参数与背后的实现原理。项目背景Ark 是什么与 Velero 的关系文档开篇即以 Heptio Ark 命名Ark 提供了备份与恢复 Kubernetes 集群资源cluster resources和持久化卷persistent volumes的工具。它是 Velero 的前身当前仓库即 Velero 项目而site/content/docs/v0.8.1/目录则完整保留了 v0.8.1 时代以ark为命令前缀的官方文档。理解这段历史有助于你阅读旧教程、迁移到新版本命令ark→velero、命名空间heptio-ark→velero时快速对照。按原文档Ark 允许你对集群进行备份并在集群丢失loss时恢复跨云厂商复制集群资源注意云卷迁移 Cloud volume migrations 尚未支持复制生产环境到开发与测试环境。Ark 由两部分组成一个运行在集群上的服务端server负责编排备份与恢复流程一个运行在本地的工作站客户端command-line client即ark命令行工具。从当前仓库源码结构可以印证这一架构命令行入口位于 cmd/velero/velero.go服务端控制器backup/restore controller位于 pkg/controller/而 Backup、Restore 等自定义资源CRD定义位于 pkg/apis/velero/。备份恢复的完整流程正是以客户端创建自定义资源对象 → 服务端控制器 watch 并执行的方式实现的。环境准备Prerequisites原文档列出的前提条件如下可访问一个Kubernetes 集群版本 1.7 或更高其中要运行ark backup delete命令需要1.7.5 或更高版本该命令依赖较新的 CRD 删除机制旧版本存在兼容性问题集群内配置DNS 服务Ark 服务端与 Minio 之间的服务发现依赖集群 DNS本地已安装kubectl。获取源码与版本选择原文档推荐克隆或 fork Ark 仓库git clone gitgithub.com:heptio/ark.git注意务必 checkout 到合适的版本。官方建议 checkout 最新的 tagged release因为 main 分支处于活跃开发中可能不稳定。当前仓库对应的示例资源位于 examples/ 目录examples/minio/用于快速搭建本地对象存储examples/nginx-app/提供用于演练备份/恢复的示例应用二者与本文主题一一对应。部署服务端与本地对象存储为了快速演示Ark 需要对象存储作为备份的存放后端。原文档使用Minio——一个运行在集群内部的 S3 兼容存储服务因此无需绑定任何云厂商账号即可完成全流程演练。原文档在 Ark 仓库根目录下执行kubectl apply -f examples/common/00-prereqs.yaml kubectl apply -f examples/minio/提示如果遇到 Config creation 相关的报错等待一分钟后再重新执行上述命令这是 Kubernetes API 配置传播存在短暂延迟所致。需要说明的是v0.8.1 时代的示例使用heptio-ark命名空间而当前仓库中的 Minio 示例文件已演进为 examples/minio/00-minio-deployment.yaml其中创建的资源如下资源类型说明Namespacevelerov1/Namespace部署命名空间旧版本为heptio-arkDeploymentminioapps/v1Minio 服务端镜像minio/minio:latest监听 9000 端口Serviceminiov1/ServiceClusterIP 类型暴露 9000 端口供集群内部访问Jobminio-setupbatch/v1用minio/mc客户端创建名为velero的 bucket该文件中的关键配置片段# examples/minio/00-minio-deployment.yaml节选 apiVersion: v1 kind: Namespace metadata: name: velero --- apiVersion: apps/v1 kind: Deployment metadata: namespace: velero name: minio labels: component: minio spec: containers: - name: minio image: minio/minio:latest args: - server - /storage - --config-dir/config env: - name: MINIO_ACCESS_KEY value: minio - name: MINIO_SECRET_KEY value: minio123 ports: - containerPort: 9000随后部署示例 nginx 应用kubectl apply -f examples/nginx-app/base.yaml该文件examples/nginx-app/base.yaml定义了命名空间nginx-example带标签app: nginx、2 副本的 nginx Deploymentnginx:1.17.6与一个 LoadBalancer 类型的 Servicemy-nginx是演练备份/恢复的完美载体——因为整个命名空间的所有对象都带有appnginx标签可以直接用标签选择器做定向备份。检查服务端与应用是否部署成功kubectl get deployments -l componentark --namespaceheptio-ark kubectl get deployments --namespacenginx-example安装客户端本例中官方推荐下载预编译的 release 二进制其中 ark.md 是命令总入口。创建备份并模拟灾难第一步创建备份为任何匹配appnginx标签选择器的对象创建备份ark backup create nginx-backup --selector appnginx这里--selector appnginx是标签选择器过滤只有带appnginx标签的对象才会被纳入备份。除标签选择器外ark backup create还支持命名空间过滤、资源类型过滤、卷快照控制等参数详见下文CLI 参数详解一节。第二步模拟灾难删除整个示例命名空间kubectl delete namespace nginx-example第三步确认资源已消失kubectl get deployments --namespacenginx-example kubectl get services --namespacenginx-example kubectl get namespace/nginx-example此时应无任何输出结果。提示命名空间的彻底清理可能需要等待几分钟删除过程是异步的。恢复执行恢复ark restore create --from-backup nginx-backup该命令从nginx-backup备份创建一次恢复。可选的RESTORE_NAME参数用于指定恢复名称若不指定将自动生成形如nginx-backup-时间戳的名称见 site/content/docs/v0.8.1/cli-reference/ark_restore_create.md 中的示例说明。查看恢复状态ark 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各列含义NAME恢复对象的名称BACKUP本次恢复所依据的备份STATUS恢复阶段执行期间为InProgress完成后为CompletedWARNINGS/ERRORS恢复过程中的告警与错误计数CREATED创建时间SELECTOR若恢复时指定了标签选择器则显示。注意恢复可能耗时片刻期间STATUS列显示为InProgress。成功完成后STATUS为Completed且WARNINGS与ERRORS均为 0。届时nginx-example命名空间中的所有对象都应恢复到删除前的状态。排查恢复中的告警与错误如果WARNINGS或ERRORS不为 0可以查看详细内容ark restore describe RESTORE_NAME关于告警与错误的详细结构site/content/docs/v0.8.1/debugging-restores.md 给出了权威解释STATUS 为Completed并不代表恢复过程零问题——只要恢复流程走完状态就会置为Completed而问题多少体现在WARNINGS/ERRORS计数中Errors表示恢复不完整或部分失败的阻塞性问题Warnings表示非阻塞性告警例如备份中引用的资源已以某种形式存在导致已存在类告警。告警与错误均按相同三级结构组织ArkArk 服务端自身遇到的系统性问题如无法读取目录Cluster与集群级cluster-scoped资源恢复相关的问题Namespaces以命名空间 → 该命名空间内资源恢复问题列表形式组织的映射。清理环境删除备份数据如果要删除已创建的备份包括对象存储中的数据与持久化卷快照ark backup delete BACKUP_NAME该命令会请求 Ark 服务端删除与BACKUP_NAME关联的全部备份数据。每个备份都需要单独执行一次原文档指出未来的版本将支持按名称或标签选择器批量删除多个备份这一能力在后继 Velero 版本中已实现。当备份被彻底移除后再执行ark backup get BACKUP_NAME将不再看到该备份。卸载 Ark 但保留数据如果想卸载 Ark 但保留对象存储与持久化卷快照中的备份数据可以安全地删除heptio-ark命名空间及本例创建的其他资源kubectl delete -f examples/common/ kubectl delete -f examples/minio/ kubectl delete -f examples/nginx-app/base.yaml在当前仓库布局下对应的对象为examples/minio/00-minio-deployment.yaml与examples/nginx-app/base.yaml。进阶接入云厂商对象存储与 PV 快照快速上手示例用 Minio 屏蔽了云厂商差异。在真实环境中需要将对象存储指向云厂商服务具体见 site/content/docs/v0.8.1/cloud-common.md该文档分场景提供了 AWS、GCP、Azure、IBM Cloud Object Store 的配置指引并提到自 0.7.0 起 Ark 可运行在任意命名空间需额外定制见 namespace.md。云厂商场景下还支持PV 快照。文档中的快照示例使用 examples/nginx-app/with-pv.yaml它额外定义了一个 50Mi 的 PVCnginx-logs将其挂载到 nginx 容器的/var/log/nginx目录并利用fsfreeze hooks备份前冻结文件系统、备份后解冻保证快照一致性# examples/nginx-app/with-pv.yaml节选 metadata: annotations: pre.hook.backup.velero.io/container: fsfreeze pre.hook.backup.velero.io/command: [/sbin/fsfreeze, --freeze, /var/log/nginx] post.hook.backup.velero.io/container: fsfreeze post.hook.backup.velero.io/command: [/sbin/fsfreeze, --unfreeze, /var/log/nginx]快照演练流程与基础示例几乎一致区别在于部署examples/nginx-app/with-pv.yaml而非base.yaml备份命令同样使用ark backup create nginx-backup --include-namespaces nginx-example但由于资源中带有 PVC默认--snapshot-volumestrue会触发云厂商的卷快照模拟灾难时需注意动态制备的 PV 默认 reclaim policy 为Delete删除命名空间会异步触发云厂商删除底层磁盘务必在下一步恢复前到云厂商控制台确认磁盘已不存在恢复命令相同ark restore create --from-backup nginx-backup。特别提示Azure使用 Azure 托管磁盘做 PV 快照集群版本需为 1.7.2。CLI 参数详解backup create 与 restore create原文档主页面只演示了最基本的用法仓库中的 CLI 参考文档给出了完整参数清单。下表整理自 site/content/docs/v0.8.1/cli-reference/ark_backup_create.mdark backup create NAME [flags]主要参数参数类型/默认值说明--include-namespacesstringArray默认*备份包含的命名空间*表示全部--exclude-namespacesstringArray备份排除的命名空间--include-resourcesstringArray备份包含的资源格式resource.group如storageclasses.storage.k8s.io--exclude-resourcesstringArray备份排除的资源格式同上--include-cluster-resourcesoptionalBool默认true是否包含集群级资源-l, --selectorlabelSelector默认none仅备份匹配该标签选择器的资源本文示例即使用此参数--snapshot-volumesoptionalBool默认true备份时是否对 PersistentVolume 拍摄快照--ttlduration默认720h0m0s30 天备份可被垃圾回收前保留的时长--labelsmapStringString应用到备份对象上的标签--label-columns/--show-labels-结果展示时的标签列控制-o, --outputstring输出格式table/json/yaml对 create 命令而言仅显示对象而不发送到服务端ark restore create [RESTORE_NAME] --from-backup BACKUP_NAME [flags]主要参数见 ark_restore_create.md参数类型/默认值说明--from-backupstring必填恢复所依据的备份名称--namespace-mappingsmapStringString命名空间映射格式src1:dst1,src2:dst2,...可将备份中的命名空间恢复到新名称--include-namespaces/--exclude-namespacesstringArray恢复包含/排除的命名空间--include-resources/--exclude-resourcesstringArray恢复包含/排除的资源类型--include-cluster-resourcesoptionalBool默认true是否包含集群级资源--restore-volumesoptionalBool默认true是否从快照恢复卷-l, --selectorlabelSelector仅恢复匹配该标签选择器的资源两个命令都继承自父命令的通用参数其中-n, --namespace默认heptio-ark用于指定 Ark 自身操作所在的命名空间与部署时保持一致--kubeconfig、--kubecontext控制与 Kubernetes API server 的连接方式。排障指引原文档将排障归纳为三类分别对应仓库中的专题文档安装/配置问题见 site/content/docs/v0.8.1/debugging-install.md命名空间与备份删除问题见 site/content/docs/v0.8.1/debugging-deletes.md恢复问题见 site/content/docs/v0.8.1/debugging-restores.md重点理解上文所述的Ark/Cluster/Namespaces三级告警与错误结构。综合排障入口为 site/content/docs/v0.8.1/troubleshooting.md此外也可以向项目提交 issue 或加入官方 Slack 的#ark-dr频道讨论外部链接此处不展开。小结通过本指南你已完整走通了一条 Ark v0.8.1 的本地演练链路借助 Minio 在集群内搭建 S3 兼容对象存储 → 部署 Ark 服务端与 nginx 示例应用 → 用ark backup create --selector做标签定向备份 → 删除命名空间模拟灾难 → 用ark restore create --from-backup完成恢复并用ark restore get/describe校验结果 → 通过ark backup delete清理数据。这套备份-灾难演练-恢复-清理的闭环方法论与命令心智模型在 Velero 后续版本中一脉相承命令前缀ark演化为velero命名空间heptio-ark演化为velero是理解整个 Kubernetes 备份生态最扎实的起点。如需深入架构细节、扩展插件机制hooks 与 plugins见 hooks.md 与 plugins.md或输出文件格式output-file-format.md仓库内的 v0.8.1 文档目录是完整的第一手资料。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →