kubernetes -- helm charts 开发: 14、编写statefulset

本文详细介绍了Kubernetes StatefulSet的基础知识,包括它的引入原因、特点、与Deployment的区别,以及如何在实战中创建和使用StatefulSet。StatefulSet主要用于有状态服务,如数据库集群,确保每个Pod拥有唯一的网络标识、稳定的存储和有序的部署及删除。它通过headless service实现稳定的网络标识,并使用volumeClaimTemplate为每个Pod提供独立的持久化存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 statefulset基础

1.1 引入原因

deployment, daemonset, job无状态,但是数据库集群的相关服务一般都是有状态的

1.2 statefulset特点

1) 每个pod有唯一网络标识,可用于发现集群内其他成员.
每个结点有固定id,集群中成员可通过该id互相发现并通信。集群规模固定。
2) statefulset控制的pod启停顺序是受控的,操作第n个pod时,
前n-1个pod已经是运行且准备好的状态
3) statefuleset中的pod采用持久化存储卷,通过PV/PVC来实现,
删除pod默认不会删除与statefulset相关的存储卷。
4) statefulset搭配使用headless service,在statefulset中要
声明其属于哪个headless service。
headless service没有Cluster IP,解析headless service的DNS域名,
返回的是该service对应的全部pod的endpoint列表。
5) 每个satefulset的pod的域名格式如下:
$(podname).(headless server name)   
FQDN: $(podname).(headless server name).namespace.svc.cluster.local

1.3 statefulset和deployment的区别

deployment的名字是随机的,无法产生固定身份id,并且pod的ip是运行才会产生的。

1.4 statefulset的存储

集群中的pod需要挂接共享存储。

1.5 statefulset应用

1) 持久化存储,pod重新调度后:     还能访问到相同的持久化数据,基于pvc实现
2) 稳定的网络标志,pod重新调度后:其podname和hostname不变,基于headless service(无cluster ip)
3) 有序部署,pod按照顺序启动,按照从0到N-1顺序
4) 逆序删除,删除pod,按照从N-1到0的顺序

1.6 statefulset组成

headless service + 用于创建PersistentVolumes的volumeClaimTemplates + 定语具体应用的statefulset

1.7 statefulset的每个pod的DNS格式

statefulsetName-{0...N-1}.serviceName.namespace.svc.cluster.local
解释:
serviceName: 是headless service名字
statefulsetName:是statefuleSet的名字
namespace: 是服务锁在的namespace, headless service和statefulset必须在同一个namespace下面
.cluster.local: 是cluster domain

注意:
1)StatefulSet 在节点丢失之后不迁移到其它节点,是 work as design
2)删除statefulset不会删除与该statefulset相关联的volume
3)给pod的存储是通过PersistentVo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值