kubernetes学习笔记3:statefulset

deployment认为管理的所有同版本的pod都是一模一样的副本,也就是在deployment controller看来,所有同版本的pod,不管里面部署的应用还是行为,都是完全相同,满足了无状态应用,但是不满足有状态应用。

这时需要statefulset,支持pod之间并非相同的副本,每一个pod有独立的标识(通过headless service实现),支持pod独立标识能够对应到一个固定的网络标识(hostname=pod name),并在发布升级后继续保持,支持每一个pod有独立存储盘(通过配置PVC template实现),并在发布升级后还能继续挂载到原来的磁盘,保留了原来的数据,数据可以理解为有状态应用的一部分,支持应用发布是按固定顺序升级pod,支持一定数量的灰度发布。

deployment通过replicaset管理pod版本和pod期望数量,statefulset通过statefulset controller管理pod,pod中用label表示版本controller-revision-hash。

statefulset会创建三种类型的资源:controllerrevision(可以管理不同版本的template模板),PVC(会通过volumeclaimtemplates创建PVC,并把PVC加到pod volume中),pod(按照顺序创建,删除,更新pod,每一个pod有唯一的序号)。

statefulset包含属性:replicas(期望数量),selector(选择器,必须匹配spec.template.metadata.labels),template(pod模板),volumeclaimtemplate(PVC模板列表),servicename(对应headless service的名字,用于生成pod唯一网络标识),podmanagement(pod管理策略,有orderedready默认,就是从0开始扩容pod0,必须按照顺序扩容,parallel不需要等前面的pod都ready就处理下一个pod),updatestrategy(升级策略),revisionhistorylimit(保留历史controllerrevision的数量限制,默认10)。

statefulset滚滚动升级跟deployment滚动升级类似,但是多了一个partition字段,意思是保留旧版本的数量,不是灰度版本的数量。

posted @   ppjj  阅读(33)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示