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字段,意思是保留旧版本的数量,不是灰度版本的数量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 中如何实现缓存的预热?