对于用状态应用来讲,有三个方面跟无状态应用有着本质区别:
- 首先就是数据的持久化。这个需要存储的支持,OpenShift支持K8S的volume plugin以及最新CSI(Container Storage Interface),能够支持多种存储后端,比如NFS, iSCSI, Ceph RBD, GlusterFS, VMWAre vSphere VMDK等。用户可以通过创建PV来创建存储资源,pod通过PVC绑定到对应的PV.我们可以根据对存储的使用情况(比如单读写,多读写,IOPS)等来选择不同的存储后端。这里顺便要提一句,红帽将会在明年1月份发布容器原生存储OpenShift Container Storage 4.2, 就是为了针对有状态应用的存储场景。 OpenShift Container Storage 4.2基于Ceph, Rook和Noobaa三大技术打造,是一个容器原生的存储系统。
- 其次,pod不具有对称性,每个pod不能互相替换(这里可以是配置不同,数据不同等),在这种情况下,需要采用statefulset。
- 最好,对于用状态应用,启动和停止不是简单启停pod,可能还需要做一些额外的事情。这时候,Operator framework就出场。我们可以采用Operator Framework的Operator-SDK为有状态应用创建它的运维逻辑。