十五、k8s有状态应用部署

一、有状态与无状态

无状态:

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

分布式系统部署步骤:

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值