南京研发技术分享——Web应用在K8s中的架构和存储设计

 

JDNJ...







上图中涉及了一些K8s的术语,如service, rc, pod, pv, pvc等。简单描述这些术语。

Service定义了一组pod所能提供的服务,当需要访问这些pod时,只需要访问该服务所开放的IP和端口。

RC即为Replication Controller。它确保特定一组pod能够同时工作。其能随时增减pod的数量规模,也能当某个pod出错时重新启动新的pod继续承担工作。

Pod是指一组协同工作的容器和存储。

PV为Persistent Volume。它是集群中的一块网络存储。支持NFS,ISCSI和云存储。

PVC全称是Persistent Volume Claim。它是用户请求的一块存储空间。类似Pod和Node的关系。Pod占用Node的资源;PVC占用PV的资源。Pod可以指定其CPU及内存的大小;PVC也可以指定存储空间大小和存取模式,例如只读或读写。

回到正题。上图描述了一个简单的大型Web应用在K8s中的模型。

由上图可知,Service for Web A对外提供服务。Service for Web A会将收到的用户请求分发到各个Pod for Web A中。RC for Web A保证了当某个Pod for Web A宕机时启用新的Pod为Web A服务。并且RC for Web A可以帮助业务根据业务量来扩容或缩减。Web A服务通过RC达到高可用的特点。每个Pod for Web A挂载PV中相同的PVC,该PVC用于存放Web程序及其资源。需要注意的是,该PVC并不是必须创建。假如业务将Web程序及资源做到容器镜像中,那就没有必要为Pod for Web A创建PVC了。

通常的Web服务大都包含内容管理功能。那么Web服务需要与数据库通信用于读写内容信息。Service for Database A为数据库对Web A提供的服务。其在K8s内部网络中可被访问,并不暴露到外网中。同样,Database A也使用RC为其保障续航。Database A的RC为一组Sql Node用于处理Web A的sql请求。图中一组Pod for SQL node使用同样的PVC,用于存放SQL node的一些配置信息。该PVC也不是必须要创建的。由于MySql集群对SQL node的配置信息均相同,所以这些配置文件均可以打包在SQL node的容器镜像中。需要注意的是,Pod for SQL node并不保存任何数据库的数据。它仅对外提供数据库连接、查询等操作。

MySql集群不仅需要Sql node对外支撑,也需要Data node用来保存数据。图中Pod for Mysql management为MySql集群管理结点。可以不为其单独创建PVC,将程序及配置数据打包在镜像中。图中之所以为每个Pod创建并挂载PVC是为了介绍基于PV的存储设计。具体是否为Pod创建PVC需要根据需求和场景来深入分析。

为了满足数据库高可用的特点,MySql集群将每一份数据复制到不同的Pod for Data node中。那么每个Pod for Data node就不可以挂载同样的PVC。需要为每一个Pod for Data node创建单独的PVC为其服务。如图所示,每个Data node在PV中拥有不同的PVC。依据MySql集群配置信息,每个Data node的PVC将保存相同份数的复制数据。

更多精彩,请关注【JD南京研发】

投稿请发送至wangmeiting@jd.com


    关注 JD南京研发


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册