Kubernetes学习笔记-StatefulSet:部署有状态的多副本应用(1)20220624

回顾:
之前学习了如何运行一个单实例pod和无状态的多副本pod,如何通过持久化存储运行一个有状态的pod,可以运行多个副本的实例,运行一个提供持久化存储的单数据库pod实例,这个持久化存储可以是简单的pod卷或绑定到持久化卷上的持久卷声明。
是否可以通过ReplicaSet来复制数据库pod呢?答案是否定的
通过ReplicaSet可以复制无状态pod,但是如果每个pod都有独立的持久卷声明,就是有状态的,无法通过ReplicaSet复制多个绑定了持久卷的pod。可以通过StatefulSet来管理有状态pod
可以创建一个StatefulSet资源替代ReplixaSet来运行这类pod


对比StatefulSet和ReplicaSet、ReplicationController
ReplicaSet和ReplicationController管理pod都是无状态的,任何时候他们都可以被一个全新的无状态pod替换。但是有状态的pod挂掉后,需要被替换的实例拥有相同的名称、网络标识、状态,这就需要StatefulSet来管理这类pod。
StatefulSet保证pod在重新调度后保留他们标识和状态,他可以方便的扩容、缩容。与ReplicaSet不同的是,StatefulSet创建的pod每个都拥有一组独立的数据卷(持久化状态),pod名字都是有规律的,而不是每个新pod都是随机获取一个名字


用StatefulSet管理的pod名称
一个StatefulSet创建的每个pod都有一个从零开始的顺序索引,这个会体现在pod的名称和主机名上,还会体现在pos对应的固定存储上。这些pod名称是可预知的,他是由StatefulSet的名称加该实例的顺序索引值组成。
有状态的pod有时候需要通过其主机名来定位,而无状态的pod则不需要,因为每个无状态的pod都是一样的,在需要的时候随便选择一个即可。但对于有状态的pod来说,因为他们彼此不同,通常希望操作的是其中特定的一个。
所以StatefulSet通常要求创建一个用来记录每个pod网络标记的headless Service。通过这个Service每个pos将拥有独立的DNS记录,这个集群里他的伙伴或者客户端可以通过主机名方便的找到他。
也可以通过DNS服务,查找域名对应的SRV服务,获取一个StatefulSet中所有pod名称。

扩缩容StatefulSet

1)扩容

扩容一个StatefulSet会使用下一个还没用到的顺序索引值创建一个新的pod实例。

2)缩容

缩容一个StatefulSet时,比较好的是很明确哪个pod将要被删除,对比Replicaet缩容操作则不同,不知哪个实例会被删除,也不能指定先删除哪个实例。。缩容StatefulSet将会最先删除最高索引值的实例。

因为StatefulSet缩容任何时候只会操作一个pod实例,送一有状态应用的缩容不会很迅速。比如一个分布式存储应用若同时下线多个节点,则可能导致其中数据丢失。

基于以上原因,StatefulSet在有实例不健康的情况下不允许做缩容操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值