statefulSet

statefulSet

StatefulSet作用

1.为pod提供唯一标识,保障部署和扩容缩容的顺序
2.为了解决有状态服务的问题(对应deployments和replicaSets是为无状态服务而设计),其应用场景包括
    *稳定的持久化存储,即pod死亡后重新调度一个新的pod,还是能访问到之前pod的持久化数据,基于PVC实现
    *稳定的网络标志,即pod重新调度后,其PodName和主机名不变,基于Headless Service(即没有Cluster IP 的service)来实现
    *有序部署,有序扩展,即Pod的启动是有顺序,在部署或者扩展的时候要依据定义的顺序依次进行(即从0到n-1,在下一个pod运行之前所有之前的pod必须都是running和ready状态),基于init containers来实现
    *有序收缩 有序删除(即从n-1到0)

无状态服务是指

1.没有对应的存储需要时时保留,多实例对同一个请求的访问一致
2.多个实例可以共享相同的持久化数据
缩容时从索引号最大的Pod开始删除,而且一次只能删除一个,因此缩容速度不会太快
有实例不健康时,不允许缩容
由其创建的pod将依次启动,前一个pod就绪后才创建第二个

statefulset更新策略

1.OnDelete。当 StatefulSet 的 .spec.updateStrategy.type 设置为 OnDelete 时, 它的控制器将不会自动更新 StatefulSet 中的 Pod。 用户必须手动删除 Pod 以便让控制器创建新的 Pod,以此来对 StatefulSet 的 .spec.template 的变动作出反应。
2.RollingUpdateRollingUpdate 更新策略对 StatefulSet 中的 Pod 执行自动的滚动更新。这是默认的更新策略

关于StatefulSet

匹配Pod name(网络标识)的模式为:(statefulset名称)-(序号),比如上面的示例:web-0、web-1、web-2

StatefulSet为每个Pod副本创建了一个DNS域名,这个域名的格式是:$(podname).(headless servername),也就意味着服务间是通过Pod域名来通信而非Pod IP,因为当Pod所在Node发生故障时,Pod会被飘移到其他Node上,Pod IP会发生变化,但是Pod域名不会有变化

StarefulSet使用Headless服务来控制Pod的域名,这个域名的FQDN为:(servicename).(namespace).svc.cluster.local,其中,“cluster.local”指的是集群的域名

根据volumeClaimTemplates,为每个Pod创建一个pvc,pcv的命名规则匹配模式:(volumeClaimTempaltes.name)-(pod_name),比如上面的volumeMounts.name=www,Pod name=web-[0-2],因此创建出来的PVC是www-web-0        www-web-1  www-web-2

删除Pod不会删除其pvc,手动删除pvc将自动释放pv

Statefulset的启停顺序:

有序部署:部署StatefulSet时,如果有多个Pod副本,它们会被顺序的创建(从0到N-1)并且,在下一个Pod运行之前的Pod必须都是Running和Ready状态

有序删除:当Pod被删除时,它们被终止的顺序是从N-1到0

有序扩展:当对Pod执行扩展操作时,与部署一样,它前面的Pod必须都处于Running和Ready状态

StatefulSet使用场景:

稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现

稳定的网络标识,即Pod重新调度后其PodName和HostName不变

有序部署,有序扩展,基于init containers来实现

有序收缩

posted @   立勋  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示