乐趣区

关于集群:在-TKE-中使用-Velero-迁移复制集群资源

概述

Velero(以前称为 Heptio Ark)是一个开源工具,能够平安地备份和还原,执行劫难复原以及迁徙 Kubernetes 群集资源和长久卷,能够在 TKE 集群或自建 Kubernetes 集群中部署 Velero 用于:

  • 备份集群并在失落的状况下进行还原。
  • 将集群资源迁徙到其余集群。
  • 将生产集群复制到开发和测试集群。

更多对于 Velero 介绍,请参阅 Velero 官网,本文将介绍应用 Velero 实现 TKE 集群间的无缝迁徙复制集群资源的操作步骤。

迁徙原理

在须要被迁徙的集群和指标集群上都装置 Velero 实例,并且两个集群的 Velero 实例指向雷同的腾讯云 COS 对象存储地位,应用 Velero 在须要被迁徙的集群执行备份操作生成备份数据存储到腾讯云 COS,而后在指标集群上应用 Velero 执行数据的还原操作实现迁徙,迁徙原理如下:

前提条件

  • 已 注册腾讯云账户。
  • 已开明腾讯云 COS 服务。
  • 已有须要被迁徙的 TKE 集群(以下称作集群 A),已创立迁徙指标的 TKE 集群(以下称作集群 B),创立 TKE 集群请参阅 创立集群。
  • 集群 A 和 集群 B 都须要装置 Velero 实例(1.5 版本以上),并且共用同一个腾讯云 COS 存储桶作为 Velero 后端存储,装置步骤请参阅 配置存储和装置 Velero。

注意事项

  1. 从 1.5 版本开始,Velero 能够应用 Restic 备份所有 pod 卷,而不用独自正文每个 pod。默认状况下,此性能容许用户应用 restic 备份所有 pod 卷,但以下卷状况除外:

    • 挂载默认 Service Account Secret 的卷
    • 挂载的 hostPath 类型卷
    • 挂载 Kubernetes secretsconfigmaps 的卷

    本示例须要 Velero 1.5 以上版本且启用 restic 来备份长久卷数据,请确保在装置 Velero 阶段开启 --use-restic--default-volumes-to-restic 参数,装置步骤请参阅 配置存储和装置 Velero。

  2. 在执行迁徙过程中,请不要对两边集群资源做任何 CRUD 操作,免得在迁徙过程中造成数据差别,最终导致迁徙后的数据不统一。
  3. 尽量保障集群 B 和集群 A 工作节点的 CPU、内存等规格配置雷同或不要相差太大,免得呈现迁徙后的 Pods 因资源起因无奈调度导致 Pending 的状况。

操作步骤

在集群 A 创立备份

能够手动执行备份操作,也能够给 velero 设置定期主动备份,设置办法能够应用 velero schedule -h 查看。本示例将以 default、default2 命名空间的资源状况作比拟验证,下图能够看到集群 A 中两个命名空间下的 Pods 和 PVC 资源状况:

提醒:能够指定在备份期间执行一些自定义 Hook 操作。比方,须要在备份之前将运行应用程序的内存中的数据长久化到磁盘。无关备份 Hook 的更多信息请参阅 备份 Hook。

其中,集群中的 minio 对象存储服务应用了长久卷,并且曾经上传了一些图片数据,如下图所示:

执行上面命令来备份集群中不蕴含 velero 命名空间(velero 装置的默认命名空间)资源的其余所有资源,如果想自定义须要备份的集群资源范畴,可应用 velero create backup -h 查看反对的资源筛选参数。

velero backup create <BACKUP-NAME> --exclude-namespaces <NAMESPACE>

本示例咱们创立一个“default-all”的集群备份,备份过程如下图所示:

备份工作状态显示是“Completed”时,阐明备份工作实现,能够通过 velero backup logs | grep error 命令查看是否有备份操作产生谬误,没有输入则阐明备份过程无谬误产生,如下图所示:

留神:请确保备份过程未产生任何谬误,如果 velero 在执行备份过程中产生谬误,请排查解决后从新执行备份。

备份实现后,长期将备份存储地位更新为只读模式(非必须,这能够避免在还原过程中 Velero 在备份存储地位中创立或删除备份对象):

kubectl patch backupstoragelocation default --namespace velero \
    --type merge \
    --patch '{"spec":{"accessMode":"ReadOnly"}}'

在集群 B 执行还原

在执行还原操作前集群 B 中 default、default2 命名空间下没有任何工作负载资源,查看后果如下图:

长期将集群 B 中 Velero 备份存储地位也更新为只读模式(非必须,这能够避免在还原过程中 Velero 在备份存储地位中创立或删除备份对象):

kubectl patch backupstoragelocation default --namespace velero \
    --type merge \
    --patch '{"spec":{"accessMode":"ReadOnly"}}'

提醒:能够抉择指定在还原期间或还原资源后执行自定义 Hook 操作。例如,可能须要在数据库应用程序容器启动之前执行自定义数据库还原操作。无关还原 Hook 的更多信息请参阅 还原 Hook。

在还原操作之前,需确保集群 B 中 的 Velero 资源与云存储中的备份文件同步。默认同步距离是 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”日志,如果有非凡状况能够剖析下日志看看。

迁徙后果核验

查看校验集群 B 执行迁徙操作后的集群资源,能够看到 default、default2 命名空间下的 pods 和 PVC 资源已按预期迁徙胜利:

再通过 Web 治理页面登录集群 B 中的 monio 服务,能够看到 minio 服务中的图片数据没有失落,阐明长久卷数据也已按预期迁徙胜利。

至此,咱们实现了 TKE 集群间资源的迁徙,迁徙操作实现后,请不要遗记把备份存储地位复原为读写模式(集群 A 和 集群 B),以便下次备份工作能够胜利应用:

kubectl patch backupstoragelocation default --namespace velero \
   --type merge \
   --patch '{"spec":{"accessMode":"ReadWrite"}}'

总结

本文次要介绍了在 TKE 集群间应用 Velero 迁徙集群资源的原理、注意事项和操作方法,胜利的将示例集群 A 中的集群资源无缝迁徙到集群 B 中,整个迁徙过程非常简单不便,是一种十分敌对的集群资源迁徙计划。

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

退出移动版