![860c9407f03c9f9a50baad5c5207d974.png](https://img-blog.csdnimg.cn/img_convert/860c9407f03c9f9a50baad5c5207d974.png)
Kubernetes
对无状态服务有完善的支持,但是对于有状态的服务,是从1.3版本开始,才逐渐支持的。
有状态的应用程序
一般情况下,nginx
或者web server
(不包含MySQL
)自身都是不需要保存数据的,对于 web server
,数据会保存在专门做持久化的节点上。所以这些节点可以随意扩容或者缩容,只要简单的增加或减少副本的数量就可以。但是很多有状态的程序都需要集群式的部署,意味着节点需要形成群组关系,每个节点需要一个唯一的ID(例如Kafka BrokerId, Zookeeper myid)来作为集群内部每个成员的标识,集群内节点之间进行内部通信时需要用到这些标识。传统的做法是管理员会把这些程序部署到稳定的,长期存活的节点上去,这些节点有持久化的存储和静态的IP地址。这样某个应用的实例就跟底层物理基础设施比如某台机器,某个IP地址耦合在一起了。Kubernets
中StatefulSet
的目标是通过把标识分配给应用程序的某个不依赖于底层物理基础设施的特定实例来解耦这种依赖关系。(消费方不使用静态的IP
,而是通过DNS
域名去找到某台特定机器)
StatefulSet
StatefulSet
(1.5版本之前叫做PetSet