445
社区成员




上一部分我们分享到了使用 RS 没有办法让自己管理的多个 pod 都有一个独立的持久化声明,RS 没有办法在指定模板中对不同的 pod 做差异化处理
使用多个 RS 来分别管理自己的的一个 pod,当我们扩缩容的时候,也会出现问题,老的 pod 有遗留数据,pod 里面的有残留状态,这个时候,若创建了一个新的 pod 来替换,那么可能是会出现问题的,因为此时的 pod 是一个全新的 pod,他和老的 pod 的状态可能是不一致的
那么接下来,我们来分享 K8S 的一种解决方式 ,使用 Statefulset
Statefulset 也是和 ReplicaSet 一样的属于 K8S 中的一种资源,可以管理 pod 的,但是 Statefulset 是可以专门定制一类应用,并且这些应用每一个实例都是不可替代的,可以说是独一无二
正因为 ReplicaSet 无法解决上述的问题,Statefulset 就来帮忙解决了,那么我们来看一下 Statefulset 为什么能解决,我们可以来对比一波
ReplicaSet | Statefulset |
---|---|
管理的 pod 是无状态的 | 管理的 pod 是有状态的 |
任何时候所管理的 pod 都可以被替换 | 若有一个 pod 挂掉,这个 pod 是需要被重建的, 意味着必须与原来的 pod 实例拥有相同的名称,网络,标识,状态 |
可以填写期望的副本数 | 可以填写期望的副本数 |
生成的 pod 名字后缀是随机的 | 生成的 pod 名字,后缀是按索引顺序的 |
就像上述说到的,我们使用 Statefulset 创建的每一个 pod,都是按照索引顺序创建的,通过创建的 pod 名字我们就可以很清晰的看得出来,举个例子
咱们 ReplicaSet 创建出来的 pod 是类似于这样的名称,后缀都是随机的
点我查看原文
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774