Statefulset 实战 3

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Statefulset 实战 3

上一部分我们说到如何使用 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. 删除了 1 个pod sta-kubia-1
  2. sta-kubia-1 对应的 卷还是在环境中的,是没有被删除的
  3. Statefulset 通过标签识别到少了 1 个 pod,因此会重新创建 1 个 pod,这个 pod 和原来的 pod 一模一样,标识,状态等等完全一致,新建的 pod sta-kubia-1 仍然直接使用原来的 卷 1

下图是表示修改 Statefulset 的 replicas 进行扩缩容

同样也是分 3 步骤

  1. 环境中 repilicas 副本数 为 3 ,通过编辑 Statefulset ,将副本数修改为 1,此时 k8s 会从最高索引,由大到小的删除,最终剩下 1 个 pod ,也就是 sta-kubia-0
  2. 删除掉 2 个 pod 之后,仍然是保留了原有 pod 的卷,Statefulset 是不会去删除卷的
  3. 人为的将 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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
存储 Kubernetes 网络协议
【K8S系列】深入解析StatefulSet(一)
【K8S系列】深入解析StatefulSet(一)
496 1
|
2月前
|
存储 Kubernetes 开发工具
Kerbernetes的StatefulSet与Operator
文章主要介绍了Kubernetes中StatefulSet的概念、与Operator的关系、应用场景、限制条件、Pod标识符、Pod管理策略、更新策略,并通过实战案例展示了如何使用StatefulSet部署NFS网络文件系统、etcd服务和zookeeper服务,以及如何基于Operator部署etcd。
54 0
Kerbernetes的StatefulSet与Operator
|
3月前
|
存储 Kubernetes 网络协议
在K8S中,Deployment和Statefulset有何区别?
在K8S中,Deployment和Statefulset有何区别?
|
3月前
|
存储 消息中间件 Kubernetes
在K8S中,deploy和Statefulset有何区别?
在K8S中,deploy和Statefulset有何区别?
|
Web App开发 应用服务中间件 nginx
|
Kubernetes Go Docker
【k8s 系列】k8s 学习二十六-3,Statefulset 实战 1
上一部分与大家分享到 Statefulset 与 RplicaSet 的区别,以及 Statefulset 的特点,能做的一些事情及一些注意事项
|
11月前
|
Cloud Native Go Docker
Statefulset 实战 1
Statefulset 实战 1
|
11月前
|
Kubernetes API 索引
Statefulset实战 2
Statefulset实战 2
|
11月前
|
存储 Kubernetes 索引
Statefulset部署应用
Statefulset部署应用
|
存储 Kubernetes 网络协议
【K8S系列】深入解析StatefulSet(二)
【K8S系列】深入解析StatefulSet(二)
68 0