开源工具 Velero(旧版本名称为 Heptio Ark)可以安全地备份和还原、执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷。在容器服务 TKE 集群或自建 Kubenetes 集群中部署 Velero 可以实现以下功能:
更多关于 Velero 介绍,请参见 Velero 官网文档。本文将介绍如何使用 Velero 实现 TKE 集群间的无缝迁移复制集群资源。
在需要被迁移的集群和目标集群上都安装 Velero 实例,并且两个集群的 Velero 实例指向相同的腾讯云 对象存储 COS 位置,流程如下:
迁移原理如下图示:
Service Account Secret
的卷hostPath
的类型卷secrets
和 configmaps
的卷--use-restic
和 --default-volumes-to-restic
参数,安装步骤请参见 配置存储和安装 Velero。在备份集群 A 之前,您可以查看集群 A 资源和服务情况,以便在还原集群之后用于 迁移结果核验。
说明:您可以在备份期间指定执行一些自定义 Hook 操作。例如,需要在备份之前将运行应用程序的内存中的数据持久化到磁盘。 了解 Hook 更多信息,请参见 备份 Hook。
执行以下命令,备份集群中不包含 Velero 命名空间(Velero 安装的默认命名空间)资源的其他所有资源,如果需要自定义备份的集群资源范围,可使用命令 velero create backup -h
查看支持的资源筛选参数。
velero backup create <BACKUP-NAME> --exclude-namespaces <NAMESPACE>
本示例以创建一个 “default-all” 集群备份为例,备份过程如下图所示。若备份任务状态显示 “Completed” 时,说明备份成功。
说明:您还可以为 Velero 设置定期自动备份,设置方法可以使用命令
velero schedule -h
查看。
执行以下命令,检查是否有备份操作发生错误,若命令无任何输出结果,则说明备份过程未发生任何错误。示例如下:
velero backup logs <BACKUP-NAME> | grep error
注意:请确保备份过程未发生任何错误,若 Velero 在执行备份过程中发生错误,请排查解决后重新执行备份。
备份完成后执行以下命令,将备份存储位置临时更新为只读模式(非必须,可以防止在还原过程时, Velero 在备份存储位置中创建或删除备份对象)。示例如下:
kubectl patch backupstoragelocation default --namespace velero \
--type merge \
--patch '{"spec":{"accessMode":"ReadOnly"}}'
在集群 B 执行还原前,您可以查看集群 B 资源和服务情况,以便在还原集群之后用于 迁移结果核验。
在执行还原操作前,集群 B 中 default 、default2 命名空间下无任何工作负载资源。执行以下命令,可以查看集群 B 中两个命名空间下的 Pods 和 PVC 资源情况。如下图所示:
执行以下命令,将集群 B 中 Velero 备份存储位置临时也更新为只读模式(非必须,可以防止在还原过程时 Velero 在备份存储位置中创建或删除备份对象)。示例如下:
kubectl patch backupstoragelocation default --namespace velero \
--type merge \
--patch '{"spec":{"accessMode":"ReadOnly"}}'
说明:您可以指定在还原期间或还原资源后执行自定义 Hook 操作。例如,可能需要在数据库应用程序容器启动之前执行自定义数据库还原操作。了解 Hook 更多信息,请参见 还原 Hook。
在还原操作之前,需确保集群 B 中 的 Velero 资源与对象存储 COS 中的备份文件同步。默认同步间隔是1分钟,可以使用 --backup-sync-period
来配置同步间隔。可以执行以下命令,查看集群 A 的备份是否已同步。
velero backup get <BACKUP-NAME>
获取备份成功检查无误后,执行以下命令还原所有内容到集群 B 中。
velero restore create --from-backup <BACKUP-NAME>
还原过程如下图所示:
等待还原任务完成后查看还原日志,执行以下命令查看还原是否有报错和跳过信息。示例如下:
# 查看迁移时是否有错误的还原信息
velero restore logs <BACKUP-NAME> | grep error
# 查看迁移时跳过的还原操作
velero restore logs <BACKUP-NAME> | grep skip
如下图所示,可以查看还原步骤未发生错误,但出现部分 “skipped” 步骤,因为在备份集群资源时备份了不包含 Velero 命名空间的所有集群资源,有一些同类型同名的集群资源已经存在,例如 kube-system下的集群资源。当还原过程中有资源冲突时,Velero 会跳过该还原步骤,实际上该还原过程正常,可以忽略 “skipped” 日志(在特殊情况可以分析该日志)。
kubectl patch backupstoragelocation default --namespace velero \
--type merge \
--patch '{"spec":{"accessMode":"ReadWrite"}}'
本文主要介绍了在 TKE 集群间使用 Velero 迁移集群资源的原理、注意事项和操作方法,成功的将集群 A 中的集群资源无缝迁移到集群 B 中,整个迁移过程简单快捷,是一种非常友好的集群资源迁移方案。
本页内容是否解决了您的问题?