十六、k8s有状态应用部署

一、有状态与无状态

二、StatefulSet控制器概述

三、StatefulSet控制器:网络标识

四、StatefulSet控制器:独享存储

五、 StatefulSet 小结


一、有状态与无状态

无状态:

deployment控制器设计原则:管理的所有pod一模一样,提供同一个服务,也不考虑在那台Node运行,科随意扩容和缩容。这种应用称为:无状态,如web服务。

有状态:

在实际的场景中,并不能满足所有应用,尤其是分布式应用,会部署多个实例,这些实例之间往往有依赖关系,如主从关系、主备关系、这种应用称为有状态。如mysql主从,etcd集群。

有状态举例:

如在k8s中部署一个mysql主从,需要考虑哪些问题

1、主从实例启动的顺序

2、主从实例是独立数据存储

3、主从连接使用ip地址还是主机名


二、StatefulSet控制器概述

StatefulSet控制器用于部署有状态应用,满足一些有状态应用的需求:

1、Pod有序的部署、扩容、删除和停止

2、Pod分配一个稳定的且唯一的网络标识

3、Pod分配一个独享的存储

三、StatefulSet控制器:网络标识

稳定的网络标识:使用Headless Service(相比普通Service只是将spec.clusterIP定义为None)来维护Pod网络身份,会为每个Pod分配一个数字编号并且按照编号顺序部署。还需要在StatefulSet添加serviceName: “nginx”字段指定StatefulSet控制器要使用这个Headless Service。

稳定主要体现在主机名和Pod A记录:

1、主机名: <statefulset名称>-<编号>

2、Pod DNS A记录:<statefulset名称-编号>.<service-name>.<namespace>.svc.cluster.local   用这个进行连接


主机名:

Pod DNS A记录:

示例二:

四、StatefulSet控制器:独享存储

SstatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板。当StatefulSet使用volumeClaimtemplate创建一个PersistentVolume时,同样也会为每个Pod分配并创建一个编号的PVC,每个PVC绑定对应的PV,从而保证每个Pod都拥有独立的存储。

每个pod都有独立存储


## kubectl get pods

五、 StatefulSet 小结

StatefulSet与Deployment区别:有身份的

身份三要素:

1、域名

2、主机名

3、存储(pvc)


在k8s里部署应用集群参考资料:

https://kubernetes.io/zh-cn/docs/tutorials/stateful-application/zookeeper/

https://kubernetes.io/zh-cn/docs/tutorials/stateful-application/cassandra/

https://github.com/lizhenliang/k8s-statefulset


分布式系统部署步骤:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容