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. SpringBoot接入阿里云oss

    1.pom中添加阿里云oss坐标 <?xml version="1.0" encoding="utf-8"?> <dependencies&g ...

  2. 香橙派上的eMMC分区

    准备工作 OrangePi Plus 2E(自带16G的eMMC存储,出厂默认eMMC中附带了Android系统,用于测试板子功能) Ubuntu16.04的TF卡 第一张方式: 该方式可以按需删除指 ...

  3. Oracle 19c RAC自动应用RU补丁过程

    笔者好久没有使用opatchauto打过补丁了,搜了下自己的历史随笔,上次opatchauto打补丁的记录还是Oracle 11g版本: Oracle 11g RAC 自动应用PSU补丁简明版 而11 ...

  4. Java集合篇之深入解析LinkedList

    写在开头 作为ArrayList的同门师兄弟,LinkedList的师门地位逊色不少,除了在做算法题的时候我们会用到它之外,在实际的开发工作中我们极少使用它,就连它的创造者都说:"I wro ...

  5. ES6学习 第六章 数值的扩展

    前言 本章介绍数值的扩展.新增了很多方法,有些不常用的方法了解即可. 本章原文链接:数值的扩展 进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. ...

  6. NC208250 牛牛的最美味和最不美味的零食

    题目链接 题目 题目描述 牛牛为了减(吃)肥(好),希望对他的零食序列有更深刻的了解,所以他把他的零食排成一列,然后对每一个零食的美味程度都打了分,现在他有可能执行两种操作: eat k:吃掉当前的第 ...

  7. 【Android】使用MediaExtractor、MediaMuxer去掉视频文件中的音频数据

    1 简介 ​ 本文以 mp4 文件为例,讲解去音频操作.mp4 是一种视频封装的容器,里面包含音频(audio)和视频(video)数据,对应的数据编码格式分别为 aac 和 h264.在去音频过程中 ...

  8. v-html可能导致的问题

    v-html可能导致的问题 Vue中的v-html指令用以更新元素的innerHTML,其内容按普通HTML插入,不会作为Vue模板进行编译,如果试图使用v-html组合模板,可以重新考虑是否通过使用 ...

  9. spring boot+sqlite+mybatis实现增删改查例子

    主要是更换了下sqlite的数据源而已,其他代码不变. 我都贴一下吧,这个算是比较通用的基础增删改查代码. 1.创建test.db 可以使用Idea自带的Database插件配置,也可以命令行创建,具 ...

  10. 【Android逆向】破解看雪 test1.apk

    1. 获取apk,并安装至手机 apk 获取地址: https://www.kanxue.com/work-task_read-800624.htm adb install -t test1.apk ...