焱融科技 · 2021年08月10日

有状态应用如何在Kubernetes平台上快速迁移和重建

封面.jpeg

有状态应用(Stateful Application)通常是指有持久化存储需求的各种应用,各种数据库就是最常见的有状态应用。而无状态应用则与有状态应用相对应,常见的无状态应用包括各种页面前端、Httpd、Nginx中间件等。

在Docker刚出现的若干年,容器并不是Stateful Application Ready的, 直至后来Docker 增加了Volume机制用以将本地宿主的文件系统暴露给上层的容器,有状态应用才开始逐步地在容器平台上得以实现。有状态应用在容器平台上运行起来之后,容器平台随即面临另一个问题,在应用需要的情况下,容器可以快速地在集群内的任意节点启动,这对于有状态应用来说,必须要能做到持久化数据与容器跟随,否则原有数据将会丢失或无法访问。因此,支持有状态应用在平台内平滑迁移和切换节点,是优秀的容器存储必须具备的能力。(虽然Kubernetes也对Local Persistent Volume做了支持,但它不是让数据跟随,而是让容器跟随,让容器在数据原来的位置上重建。)

有状态Pod在容器平台内不同节点之间进行平滑迁移和重建的实际需求,可以用于应对节点故障等场景,这种需求在实际生产环境的集群中会更加频繁和迫切。当前市场上的一些基于块存储(例如原生的CephRBD容器存储方案)提供的容器存储解决方案,在应对Pod跨节点迁移和重建时需要完成下面的一系列操作:

  • 从受影响的容器中umount
  • 将volumes在受影响的计算节点上detach
  • 在新的计算节点上重新attach volumes
  • 将volumes mount到新节点的容器上

以上操作是一个相对耗时的过程,且需要在每一个受影响的容器上执行,中间任何一步出现故障和异常(例如在挂载过程中经常会遇到卷已被挂载,无法再挂载的错误),都会使整个Pod驱逐的过程受到影响,进而对业务造成影响。且在生产环境中,整个过程是很难通过人工介入的。

焱融YRCloudFile作为专业的容器存储,通过FlexVolume和CSI接口充分支持Kubernetes等容器编排平台(https://kubernetes-csi.github...)。

11.jpeg

YRCloudFile在设计之初就充分考虑到支持有状态容器在Kubernetes集群内的平滑迁移场景。对于焱融容器存储卷而言,数据在整个K8S平台各个计算节点上,都是随时可用的。当管理员执行Pod驱逐操作后,K8S平台会调用YRCloudFile提供的接口,完成Pod和存储卷的umount/mount操作,Pod驱逐和重建过程会在数秒内自动完成。从下图可以看出,焱融容器存储卷在Pod重建后是立即可用的,不需要任何人为的介入。

22.jpeg

我们以运行MySQL为例来展示如何使用YRCloudFile,并完成Pod在新节点上的重建。我们用MySQL yaml文件创建一个MySQL实例,从中我们可以看到,Kubernetes是利用CSI driver,通过动态创建的方式获得存储卷,并绑定到数据库的/var/lib/mysql目录

33.jpeg

相关Pod、PV、PVC创建完成后如下图所示:

44.jpeg

随后我们插入一些测试数据:

55.jpeg

下面我们看看如果MySQL实例或者所在的节点出现故障后,在其他计算节点上进行重建,效果如何。

66.jpeg

我们看到数据库实例在node3.yr上被删除,同时在新的节点 node1.yr 上被快速重新启动起来,且原有数据在新的Pod实例上可以迅速读取,中间无需任何人工的umount/detach/attach/mount操作,极大地降低了运维难度和风险。

77.jpeg

如何更好地支持有状态容器failover、驱逐和重建,缩短操作过程,从而降低运维难度和风险,是云原生容器存储必须解决的重要问题。YRCloudFile在某运营商的容器云平台中大规模实践了容器驱逐和重建的功能,通过实践验证了该功能的稳定性和可靠性,凸显了YRCloudFile容器存储相对于其它存储方案的独特价值。接下来,我们还将在其它方面介绍更多YRCloudFile在容器平台上的应用场景和优势。

推荐阅读
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息