上一部分我们说到如何使用 Statefulset 部署有状态的应用,Statefulset 可以做到部署的 每一个 pod 能够独立的拥有一个持久卷声明和持久卷
之前我们 用 Statefulset 和 ReplicaSet 对比,自然他们是有相似之处和不同之处,不同之处前面的文章已经分享了,我们来看看他们的相似之处,那么那就是对于管理副本数的扩容和缩容了
Statefulset 扩容和缩容
查看我们环境中拥有的 1 个 Statefulset 和其管理的 2 个 pod
以及 2 个持久卷声明 pvc 和 2 个持久卷 pv
开始手动删除一个 pod
当我们手动删除 sta-kubia-0 的时候,由于 Statefulset 自身管理的副本数是 2 个,通过标签发现环境中少了一个 pod,因此 Statefulset 会立马创建一个和刚才少的那个一模一样的 pod
通过我们查看 pod 的名称和索引值是我们所期望的,并且是 curl 访问 pod 的提供的接口,获取的相应数据也是我们所期望的
修改副本个数为 3
修改副本数,只需要 kubectl get statefulset
修改 spec 下的 replicas 字段即可
修改副本数之后,通过如下命令查看相应资源情况
kubectl get statefulset kubectl edit statefulset sta-kubia kubectl get po | grep sta kubectl get pv kubectl get pvc
副本数修改为 3 后,Statefulset 进行了扩容,我们发现确实是创建了一个 pod,索引为 2 ,也同时创建 1 给 pvc 和 pv,实际操作后,效果和我们理论的效果是一致的
将副本数修改为 1
那么我们现在开始缩容,效果会不会和我们理论上的还是一样的呢?
操作和上述类似,将副本数修改为 1 即可
进行缩容之后,我们可以看到 索引为 3 和 2 的 两个 pod 都被删掉了,但是他们的 持久化卷声明和持久化卷仍然还在,当然里面的数据也是还在的,感兴趣的小伙伴可以尝试使用 curl 命令去请求一下,结果会如你所愿
将副本数修改回 3
那么现在我们再进行扩容,Statefulset 是否会将刚才删除的 2 个 pod全部恢复回来呢?要恢复成一模一样的哦?
咱们查看到效果果然和我们理论的一毛一样,没有偏差哦
sta-kubia-1 和 sta-kubia-2 又回来了,有没有失而复得的喜悦呢?
Statefulset 说,我说到做到,之前给你说是啥样子的,现在我就会做成啥样子给你看,还不错吧
图解上述案例
如图,分为 3 步骤,该图是用来表示我们手动或者由于异常删除了一个 pod,此时 Statefulset 的副本数是 2
- 删除了 1 个pod sta-kubia-1
- sta-kubia-1 对应的 卷还是在环境中的,是没有被删除的
- Statefulset 通过标签识别到少了 1 个 pod,因此会重新创建 1 个 pod,这个 pod 和原来的 pod 一模一样,标识,状态等等完全一致,新建的 pod sta-kubia-1 仍然直接使用原来的 卷 1
下图是表示修改 Statefulset 的 replicas 进行扩缩容
同样也是分 3 步骤
- 环境中 repilicas 副本数 为 3 ,通过编辑 Statefulset ,将副本数修改为 1,此时 k8s 会从最高索引,由大到小的删除,最终剩下 1 个 pod ,也就是 sta-kubia-0
- 删除掉 2 个 pod 之后,仍然是保留了原有 pod 的卷,Statefulset 是不会去删除卷的
- 人为的将 repilicas 副本数从 1 修改为 3,Statefulset 会如何我们所想的重新恢复原有的 2 个 pod,即 sta-kubia-1,和 sta-kubia-2,这俩pod 仍然可以直接使用原来的卷 1 和 卷 2
看到这里了,有没有发现 Statefulset 和 Deployment 有一个共同点,那就是 Statefulset 删除 pod 的时候,不会去删除卷,Deployment 在滚动升级的时候,不会删除 RS/RS
所以我们是否可以联想到 Statefulset 的升级,也是可以像 Deployment 一样可以支持滚动升级呢?
没错,确实是可以的,以前不太行,k8s 从 1.7 版本之后就支持了,操作的方式和 Deployment 类似,如果对于 Deployment 显示升级应用的细节有疑问的,可以查看文章 【k8s 系列】k8s 学习二十五-2,Deployment 升级应用
今天就到这里,学习所得,若有偏差,还请斧正
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774