【k8s 系列】k8s 学习二十六-5,Statefulset 实战 3

简介: 上一部分我们说到如何使用 Statefulset 部署有状态的应用,Statefulset 可以做到部署的 每一个 pod 能够独立的拥有一个持久卷声明和持久卷

【k8s 系列】k8s 学习二十六-5,Statefulset 实战 3

上一部分我们说到如何使用 Statefulset 部署有状态的应用,Statefulset 可以做到部署的 每一个 pod 能够独立的拥有一个持久卷声明和持久卷

之前我们 用 Statefulset  和 ReplicaSet 对比,自然他们是有相似之处和不同之处,不同之处前面的文章已经分享了,我们来看看他们的相似之处,那么那就是对于管理副本数的扩容和缩容了

Statefulset 扩容和缩容

查看我们环境中拥有的 1 个 Statefulset  和其管理的 2 个 pod

image.png

以及 2 个持久卷声明 pvc  和 2 个持久卷 pv

image.png

开始手动删除一个 pod

image.png

当我们手动删除 sta-kubia-0 的时候,由于 Statefulset  自身管理的副本数是 2 个,通过标签发现环境中少了一个 pod,因此 Statefulset 会立马创建一个和刚才少的那个一模一样的 pod

通过我们查看 pod 的名称和索引值是我们所期望的,并且是 curl 访问 pod 的提供的接口,获取的相应数据也是我们所期望的

修改副本个数为 3

修改副本数,只需要 kubectl get statefulset 修改 spec 下的 replicas 字段即可

image.png

修改副本数之后,通过如下命令查看相应资源情况

kubectl get statefulset
kubectl edit statefulset sta-kubia
kubectl get po | grep sta
kubectl get pv
kubectl get pvc

image.png

副本数修改为 3 后,Statefulset 进行了扩容,我们发现确实是创建了一个 pod,索引为 2 ,也同时创建 1 给 pvc 和 pv,实际操作后,效果和我们理论的效果是一致的

将副本数修改为 1

那么我们现在开始缩容,效果会不会和我们理论上的还是一样的呢?


操作和上述类似,将副本数修改为 1 即可

image.png

进行缩容之后,我们可以看到 索引为 3 和 2 的 两个 pod 都被删掉了,但是他们的 持久化卷声明和持久化卷仍然还在,当然里面的数据也是还在的,感兴趣的小伙伴可以尝试使用 curl 命令去请求一下,结果会如你所愿

将副本数修改回 3

那么现在我们再进行扩容,Statefulset 是否会将刚才删除的 2 个 pod全部恢复回来呢?要恢复成一模一样的哦?

image.png

咱们查看到效果果然和我们理论的一毛一样,没有偏差哦

sta-kubia-1 和 sta-kubia-2 又回来了,有没有失而复得的喜悦呢?

Statefulset 说,我说到做到,之前给你说是啥样子的,现在我就会做成啥样子给你看,还不错吧

图解上述案例

如图,分为 3 步骤,该图是用来表示我们手动或者由于异常删除了一个 pod,此时 Statefulset 的副本数是 2

image.png

  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 步骤

image.png

  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 升级应用

今天就到这里,学习所得,若有偏差,还请斧正


欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
63
分享
相关文章
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
阿里云ACK+GitLab企业级部署实战教程
GitLab 是一个功能强大的基于 Web 的 DevOps 生命周期平台,整合了源代码管理、持续集成/持续部署(CI/CD)、项目管理等多种工具。其一体化设计使得开发团队能够在同一平台上进行代码协作、自动化构建与部署及全面的项目监控,极大提升了开发效率和项目透明度。 GitLab 的优势在于其作为一体化平台减少了工具切换,高度可定制以满足不同项目需求,并拥有活跃的开源社区和企业级功能,如高级权限管理和专业的技术支持。借助这些优势,GitLab 成为许多开发团队首选的 DevOps 工具,实现从代码编写到生产部署的全流程自动化和优化。
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
容器化技术:Docker与Kubernetes的实战应用
容器化技术:Docker与Kubernetes的实战应用
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
118 0
【赵渝强老师】K8s中Deployment控制器与StatefulSet控制器的区别
K8s中的Deployment控制器用于管理无状态应用程序,关注Pod数量、更新方式等;而StatefulSets控制器则管理有状态应用程序,提供持久存储和唯一标识符,适用于需要稳定网络标识符和持久化存储的场景。两者的主要区别在于是否维护状态和顺序。
136 0
【赵渝强老师】K8s的有状态控制器StatefulSet
在Kubernetes中,StatefulSets用于部署有状态应用程序,提供持久存储和唯一标识符。与Deployment不同,StatefulSets确保Pod的标识符在重新调度后保持不变,适用于需要稳定网络标识符和持久存储的场景。本文介绍了StatefulSets的创建、扩容与缩容、更新与回滚等操作,并提供了具体示例和视频讲解。
202 0
k8s学习
【10月更文挑战第1天】
176 4
Kubernetes入门到进阶实战
Kubernetes入门到进阶实战
155 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等