什么是StatefulSet

141 阅读1分钟

概念

StatefulSet 则是Kubernetes中专门用于管理有状态服务的资源对象

应用场景

现实中有很多服务是有状态的,特别是 一些复杂的中间件集群,例如 MySQL 集群、MongoDB 集群、Akka 集 群、ZooKeeper 集群等,这些应用集群有 4 个共同点:

  1. 每个节点都有固定的身份 ID,通过这个 ID,集群中的成员可 以相互发现并通信
  2. 集群的规模是比较固定的,集群规模不能随意变动
  3. 集群中的每个节点都是有状态的,通常会持久化数据到永久 存储中
  4. 如果磁盘损坏,则集群里的某个节点无法正常运行,集群功 能受损

实现

  • StatefulSet 里的每个 Pod 都有稳定、唯一的网络标识,可以用来 发现集群内的其他成员。假设 StatefulSet 的名称为 kafka,那么第 1 个 Pod 叫 kafka-0,第 2 个叫 kafka-1,以此类推。
  • StatefulSet 控制的 Pod 副本的启停顺序是受控的,操作第 n 个 Pod 时,前 n-1 个 Pod 已经是运行且准备好的状态。
  • StatefulSet 里的 Pod 采用稳定的持久化存储卷,通过 PV 或 PVC 来 实现,删除 Pod 时默认不会删除与 StatefulSet 相关的存储卷(为了保证数 据的安全)。
  • StatefulSet 除了要与 PV 卷捆绑使用以存储 Pod 的状态数据,还要与 Headless Service 配合使用。