StatefulSet是Kubernetes中用于管理有状态应用的标准实现。与Deployment不同,StatefulSet为每个Pod提供了一个唯一的、稳定的网络标识符,并且Pod的启动和停止顺序是受控的。这使得StatefulSet非常适合于需要持久化存储、稳定网络标识符或有序部署、扩展、删除和终止的应用场景。

StatefulSet的实现主要依赖于以下几个关键组件:

  1. Headless Service:Headless Service是一种没有Cluster IP的Service,它为Pod提供了一个稳定的DNS名称,格式为<pod-name>.<service-name>.<namespace>.svc.cluster.local。由于StatefulSet中的每个Pod都有一个唯一的名称,因此可以通过这个DNS名称来访问特定的Pod。这使得StatefulSet中的Pod之间可以相互通信,并且外部客户端也可以通过这个DNS名称来访问StatefulSet中的Pod。
  2. Volume Claim Templates:StatefulSet使用Volume Claim Templates来动态创建PersistentVolumes(PV)和PersistentVolumeClaims(PVC)。每个Pod都会根据模板创建一个与之关联的PVC,Kubernetes会根据PVC的存储需求和存储类的配置动态分配适当的PV给Pod。这样,即使Pod被重新调度或删除后重建,它仍然能够访问到相同的持久化存储资源。
  3. StatefulSet Controller:StatefulSet Controller是Kubernetes中的一个控制循环,它负责确保StatefulSet的当前状态与期望状态一致。它会定期检查StatefulSet中的Pod数量、状态、标识符等是否符合预期,如果不符合预期,则会采取相应的措施进行调整。例如,如果某个Pod故障或删除了,StatefulSet Controller会创建一个新的Pod来替代它,并确保新的Pod具有正确的标识符和存储配置。

在StatefulSet中,Pod的创建和删除是按照编号顺序进行的。例如,如果StatefulSet中有3个Pod,它们的名称可能是web-0、web-1和web-2。在创建这些Pod时,Kubernetes会先创建web-0,然后是web-1,最后是web-2。同样地,在删除这些Pod时,Kubernetes也会按照这个顺序进行删除。这种有序性保证了有状态应用中的每个实例都能够按照正确的顺序启动和停止,从而避免了可能的数据一致性问题。

总的来说,StatefulSet通过Headless Service、Volume Claim Templates和StatefulSet Controller等组件的协同工作,实现了对有状态应用的稳定、可靠和高效的管理。这使得Kubernetes能够更好地支持诸如数据库、缓存、消息队列等需要持久化存储和稳定网络标识符的有状态应用。

StatefulSet是怎样实现的的更多相关文章

  1. [Kubernetes]深入理解StatefulSet

    前面我写的一系列博客,如果你能够耐心看到这一篇,那你应该对一个概念就不是太陌生了:Deployment. 为什么提这个概念呢,这就要说到Deployment的一个不足了.Deployment不足以覆盖 ...

  2. kubernetes进阶之六:StatefulSet & DaemonSet

    StatefulSet(有状态): StatefulSet适合持久性的应用程序,有唯一的网络标识符(IP),持久存储,有序的部署,拓展,删除和滚动更新. 在Kubernetes系统中,Pod的管理对象 ...

  3. StatefulSet(一):拓扑状态

    Deployment 实际上并不足以覆盖所有的应用编排问题. 造成这个问题的根本原因,在于 Deployment 对应用做了一个简单化假设. 它认为,一个应用的所有 Pod,是完全一样的.所以,它们互 ...

  4. Kubernetes之StatefulSet

    什么是StatefulSet StatefulSet 是Kubernetes中的一种控制器,他解决的什么问题呢?我们知道Deployment是对应用做了一个简化设置,Deployment认为一个应用的 ...

  5. StatefulSet

    StatefulSet: 1.稳点且唯一的网络标识符 2.稳点且持久的存储 3.有序.平滑的部署和扩展 4.有序.平滑的删除和终止 5.有序的滚动更新 三个组件组成:headless(无头服务)    ...

  6. 14.statefulset服务

    有状态的控制器有以下几个特点 稳定,独特的网络标识符. 稳定,持久的存储. 有序,优雅的部署和扩展. 有序的自动滚动更新. 使用限制 StatefulSet是1.9之前的beta资源,在1.5之前的任 ...

  7. kubernetes statefulset kafka 部署后, 外部访问超时问题解决

    k8s 内部的kafka要映射到外网,直接把 kafka 通过 expose 把pod 映射成服务,使用nodeport 连接,出现超时问题, 解决思路: 1.  查看zk中,kafka的注册信息,P ...

  8. 用statefulSet 部署持久化的OA(Tomcat)

    1.部署多个副本的OA(Tomcat)集群,其中一个Tomcat的需要加一个定时器,其他代码跟其他的Tomcat的代码一样.需要重启后也还是保持这个状态.代码如下: apiVersion: v1 ki ...

  9. statefulSet 原理理解

    1.  svc(vip)                       --              deployment 2.headless(none)                --     ...

  10. [k8s]k8s配置nfs做后端存储&配置多nginx共享存储&&statefulset配置

    所有节点安装nfs yum install nfs-utils rpcbind -y mkdir -p /ifs/kubernetes echo "/ifs/kubernetes 192.1 ...

随机推荐

  1. Linux系统NTP校时的微调模式

    前言: Linux系统有两个时间同步服务:ntpd和chrony,一般较低版本的系统使用ntpd,新版本系统使用chrony. ntpd有两种校时策略slew和step: slew是平滑.缓慢的渐进式 ...

  2. 给textarea添加行号,textarea使用代码风格的一些思考

    背景 项目有个需求是 在textarea中编辑脚本并显示为代码风格样式,显示行号: textarea显示行号 思路: 1.监听textarea内容变化,执行一个change函数,解析内容里面有多少个换 ...

  3. 山泽Typec扩展坞M.2移动固态硬盘盒拓展 - 我的硬件配置

  4. Vue +Spring Boot 前后端分离 的 项目 笔记

    Vue +Spring Boot 前后端分离 的 项目 笔记 前端部分 Vue 脚手架的搭建 1.在创建目录的上一目录执行命令 命令为 vue init webpack 项目名 再创建项目的时候会自动 ...

  5. ElasticSearch7.3学习(十六)----RestHighLevelClient Java api实现索引的创建、删除、是否存在、关闭、开启

    1.写在前面 注意:导入的包区别,不同的包创建索引的方式不同.博主亲身实践,具体体现在createIndexRequest.mapping()里面.读者可自行试验. import org.elasti ...

  6. Linux防火墙操作命令(开放或关闭端口)

    在外部访问CentOS中部署应用时,需要通过防火墙管理软件,开端口,或者直接关闭防火墙进行解决(不建议) 常用命令:systemctl start firewalld               #启 ...

  7. HBase-Hbase启动异常java.lang.IllegalArgumentException: object is not an instance of declaring class

    1.问题描述 HBase启动时异常如下: java.lang.IllegalArgumentException: object is not an instance of declaring clas ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (197)-- 算法导论14.3 5题

    五.用go语言,对区间树 T 和一个区间 i ,请修改有关区间树的过程来支持新的操作 INTERVALSEARCH-EXACTLY(T,i) ,它返回一个指向 T 中结点 x 的指针,使得 x.int ...

  9. NC15976 小C的周末

    题目链接 题目 题目描述 愉快的周末到了,小C和他的N-1个朋友买了M个游戏,游戏编号从1~M.每个游戏都是多人游戏,他们打算周末一起打游戏. 小C的每个朋友都决定好了要玩哪一款游戏(会有一组人打同一 ...

  10. zabbix-server.service failed解决方法

    1.问题描述 centos7中安装的zabbix server在重启系统后无法启动了,查看状态报错如下: 2.问题原因 selinux没有关闭! 3.解决 永久关闭selinux, 将SELINUX值 ...