无状态 or 有状态容器应用

什么是无状态或有状态容器呢?所谓无状态容器应用,意味着容器上应用所使用的历史数据或运行状态不需要进行持久化,重新拉起这个应用时,无需关注这些历史输入。简单来说,例如你要运行一个计算器(而且这个计算器不需要支持历史记录功能),当你重新拉起这个计算器时,之前的数据不需要重新被加载上来,计算器可以认为是一个无状态应用。其它类似的无状态容器应用还包括一些协议转换、请求转发等应用,大体都可以认为是无状态的。

那什么是有状态容器应用呢?有状态容器应用的特征是应用中处理的历史请求或操作,对现在或未来的操作是有影响的,那历史数据就必须被记录下来,这种应用就被称之为有状态容器应用。最典型的有状态应用莫过于数据库了,当数据库重新拉起时,你当然“要求”之前写入数据库的记录必须能被正确无误地加载出来。其实同样地,很多的消息队列(例如RabbitMQ等),为了不使消息丢失,消息队列中间件也会将消息进行持久化。

当然,随着容器应用的边界越发广阔,越来越多的有状态应用正在容器化,我们看到很多的AI、自动驾驶、HPC任务都在进行容器化。

如何使用YRCloudFile支持有状态容器应用

YRCloudFile为Kubernetes提供了标准的CSI接口,通过这个接口,用户不需要对Kubernetes进行任何侵入,就可以通过Kubernetes调度和使用YRCloudFile中的存储能力。

在Kubernetes中要使用YRCloudFile只需要简单的几个步骤:

1. 确保Kubernetes的Master节点和计算节点能够访问YRCloudFile的存储网络

2. 在Master节点和计算节点上,导入YRCloudFile CSI插件镜像,使用YRCloudFile提供的yrfs-csi.yaml模板,创建YRCloudFile-CSI Pod

有状态容器应用,从入门到实践_云原生

3. 验证创建的YRCloudFile-CSI POD 全部为 “Running”

有状态容器应用,从入门到实践_云原生_02

4. 使用我们提供的storageclass样例yaml创建YRCloudFile storageclass

5. 使用storageClassName: yrcloudfile-sc直接创建PVC,并将PVC关联至需要使用持久化存储的Pod

整个过程就完成了。

除此之外,我们还可以通过YRCloudFile的管理界面添加多个Kubernetes集群,在YRCloudFile界面上实现对PVC、PV等资源的QoS、Quota等属性的设置,对PV进行IO监控以及查看PV中的数据热点分布情况。

AI应用通过容器,使用YRCloudFile的效果

在实际的客户环境中,我们使用三台x86服务器,基于100Gb InfiniBand网络,搭建了YRCloudFile集群,与客户现有的10多台服务器组成的存储集群进行了基于业务的实际测试对比。

有状态容器应用,从入门到实践_Kubernetes_03

语音降噪测试:

有状态容器应用,从入门到实践_容器_04

在实际测试中,YRCloudFile不但提供了多种读写模式、方便的接入方式,同时呈现出的性能以及对AI应用效率的提升,都比原有存储方案有了大幅提升。

容器存储未来之路

未来,容器存储的发展将不光只是接口层面的支撑,还将要求性能、QoS、Quota、全方位监控、数据冷热生命周期管理等功能,同时,面向大数据分析、数据库的针对性优化、数据的容灾备份等都会显得越来越重要,最终帮助用户逐步把大部分业务实现容器化。