详解kubernetes备份恢复利器 Velero - 深入了解Carina系列第三期

详解kubernetes备份恢复利器 Velero - 深入了解Carina系列第三期,第1张

传统的数据备份方案主要有两种, 一种是利用存储数据的服务端实现基于快照的备份,另一种是在每台目标服务器上部署专有备份 agent 并指定备份数据目录,定期把数据复制到外部存储上。这两种方式的备份机制相对固化,在云原生时代无法适应容器化后的d性、池化等部署场景。

以云原生存储插件 Carina 为例,数据库等数据敏感场景中每个数据库集群包括多个计算实例,实例可能在集群内任意漂移并实现自动故障恢复。传统数据备份方式在数据库集群快速扩缩容、跨节点漂移等场景下无法自动跟随计算实例迁移从而导致数据备份失效,因此一款贴合 k8s 容器场景的备份工具就十分重要。

Velero 是一款云原生时代的灾难恢复和迁移工具,采用 Go 语言编写,并在 github 上进行了开源,开源地址为:https://github.com/vmware-tanzu/velero。Velero 源于西班牙语,意思为帆船,非常符合 Kubernetes 社区的命名风格。

利用 velero 用户可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷。它的基本原理就是将集群的数据,例如集群资源和持久化数据卷备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来。除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群,这也是 velero 一个非常成功的使用场景。

Velero 主要包括连个核心组件,分别为服务端和客户端。服务端运行在具体的 Kubernetes 集群中,客户端是运行在本地的命令行工具,只要配置好 kubectl 及 kubeconfig 即可使用,非常简单。

Velero 基于其实现的 kubernetes 资源备份能力,可以轻松实现 Kubernetes 集群的数据备份和恢复、复制 kubernetes 集群资源到其他 kubernetes 集群或者快速复制生产环境到测试环境等功能。

在资源备份方面,velero 支持将数据备份到众多的云存储中,例如AWS S3或S3兼容的存储系统、Azure Blob、Google Cloud存储、Aliyun OSS等。与备份整个 kubernetes 的数据存储引擎 etcd 相比,velero 的控制更加细化,可以对 Kubernetes 集群内对象级别进行备份,还可以通过对 Type、Namespace、Label 等对象进行分类备份或者恢复。

以核心的数据备份为例,当执行 velero backup create my-backup 时:

关于备份存储位置和卷快照,Velero 有两个自定义资源 BackupStorageLocation 和 VolumeSnapshotLocation,用于配置 Velero 备份及其关联的持久卷快照的存储位置。

Minio安装Yaml文件如下:

安装Mini,并检查资源创建情况。

待服务都已经启动完毕,可以登录 minio 查看 velero/velero 的 bucket 是否创建成功。

其中,几个重要的参数及其说明如下:

安装命令执行完成后,等待 Velero 和 restic 工作负载就绪后,查看配置的存储位置是否可用。

至此 velero 就已经全部部署完成。

velero 支持备份所有对象,也可以按类型,名称空间和/或标签过滤对象

其中:

--include-namespaces:备份该命名空间下的所有资源,不包括集群资源

--include-resources:要备份的资源类型

--include-cluster-resources:是否备份集群资源 此选项可以具有三个可能的值: true:包括所有集群范围的资源; false:不包括集群范围内的资源; nil (“自动”或不提供)

--selector:通过标签选择匹配的资源备份

--exclude-namespaces:备份时该命名空间下的资源不进行备份

--exclude-resources:备份时该类型的资源不进行备份

http://--velero.io/exclude-from-backup=true:当标签选择器匹配到该资源时,若该资源带有此标签,也不进行备份

同时,也可以通过使用 –ordered-resources 参数,按特定顺序备份特定种类的资源,需要指定资源名称和该资源的对象名称列表,资源对象名称以逗号分隔,其名称格式为“命名空间/资源名称”,对于集群范围资源,只需使用资源名称。映射中的键值对以分号分隔,资源类型是复数形式。

当备份任务状态是 “Completed” ,且错误数为 0 ,说明备份任务完成且没发生任何错误,可以通过以下命令查询:

通过先临时将备份存储位置更新为只读模式,可以防止在还原过程中在备份存储位置中创建或删除备份对象。

还原完成后,不要忘记把备份存储位置恢复为读写模式,以便下次备份任务使用:

Velero 支持还原 hooks,可以在还原任务执行前或还原过程之后执行的自定义 *** 作。有以下两种定义形式:

如进行备份之前,请使用以下命令将注释添加到Pod:

如进行备份之前,请使用以下命令将注释添加到Pod

是的,可以使用--namespace-mappings参数来指定:

Velero 有一个参数,可让用户决定保留原来的 nodePorts。

velero restore create 子命令具有 --preserve-nodeports标志保护服务nodePorts。此标志用于从备份中保留原始的nodePorts,可用作--preserve-nodeports或--preserve-nodeports=true 如果给定此标志,则Velero在还原Service时不会删除nodePorts,而是尝试使用备份时写入的nodePorts。

如果是基于velero实现数据库的一致性,需要用velero的hook,在备份前对数据库进行quiesce *** 作,备份完unquiesce。对于备份本身,可以使用restic来copy数据(但不用快照),或者使用快照的方式。

你这个有点奇怪,一般情况都是2个vip在一个节点上,你这里的情况是2个vip的位置互换了。

虽然根据你提供的信息还不能判断为什么会这样,但是你可以试试crs_stop和crs_start命令,关闭vip再在正确的节点上重启vip资源。然后应该就可以启动监听了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9912413.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存