Deployment和StatefulSet的区别详解
创作时间:
作者:
@小白创作中心
Deployment和StatefulSet的区别详解
引用
CSDN
1.
https://blog.csdn.net/unbuntu_luo/article/details/143977843
在 Kubernetes 中,Deployment 和 StatefulSet 是两种常见的工作负载资源类型,用于管理和部署应用程序的 Pod。它们在功能和应用场景上有一些显著的区别。以下是两者的主要区别:
1. 用途和应用场景
- Deployment :
- 用途 : 主要用于无状态应用程序的部署和管理,例如 web 服务器、API 服务等。
- 应用场景 : 适用于需要快速扩展、无状态的服务,即使 Pod 在不同的节点上重启或被重新调度,也不会影响应用的正常运行。
- StatefulSet :
- 用途 : 用于有状态应用程序的部署和管理,例如数据库、分布式存储系统等。
- 应用场景 : 适用于需要稳定标识(例如网络标识)、持久化存储,以及对启动顺序有严格要求的应用。
2. Pod 标识
- Deployment :
- Pod 是无状态的。每次重新调度时,Pod 都会获得一个新的标识,Pod 名称也会随之变化。
- 不保留特定的 Pod 标识,Pod 的 IP 和名称在重启后可能会改变。
- StatefulSet :
- Pod 是有状态的。StatefulSet 中的每个 Pod 都有一个固定的标识(包括一个稳定的网络标识)。
- 每个 Pod 都有一个唯一的名称,名称格式为 -,如 myapp-0,myapp-1。
- 即使 Pod 被删除或重新调度,新的 Pod 也会保留相同的标识和名称。
3. 存储持久性
- Deployment :
- 默认情况下,Deployment 创建的 Pod 通常使用临时存储(emptyDir),除非显式配置持久卷。
- Pod 被删除后,临时存储的数据会丢失,通常用于无状态应用。
- StatefulSet :
- 每个 Pod 都可以关联一个持久化的存储卷(PersistentVolume)。这些卷可以绑定到特定的 Pod,即使 Pod 被删除或重新调度,数据仍然保留。
- StatefulSet 保证了每个 Pod 使用的存储卷是唯一且专属的。
4. Pod 启动和终止顺序
- Deployment :
- Deployment 对 Pod 的启动和终止顺序没有严格的要求。Pod 可以并行启动和终止。
- 适用于无状态应用,Pod 的顺序无关紧要。
- StatefulSet :
- StatefulSet 确保 Pod 按照严格的顺序启动和终止。例如,myapp-0 必须在 myapp-1 之前启动,并且 myapp-1 只能在 myapp-0 准备就绪后才会启动。
- 这种机制适用于需要按照特定顺序启动的有状态应用,例如主从数据库配置。
5. 滚动更新策略
- Deployment :
- 支持滚动更新策略,在更新过程中,可以指定 maxUnavailable 和 maxSurge 来控制更新时的最大不可用 Pod 数量和同时创建的额外 Pod 数量。
- 滚动更新过程是无序的,Pod 更新顺序可以是任意的。
- StatefulSet :
- 滚动更新时,StatefulSet 会按照 Pod 的序号顺序(从高到低)逐个更新。确保每个 Pod 在下一个 Pod 开始更新之前已经准备就绪。
- 这种更新方式适合于需要维护应用顺序性和一致性的场景。
6. 服务发现和网络身份
- Deployment :
- Deployment 中的 Pod 通常通过 Kubernetes Service 进行服务发现。Pod 的 IP 是动态分配的,不保证稳定性。
- StatefulSet :
- StatefulSet 为每个 Pod 提供稳定的网络标识,通常通过 Headless Service 来实现,这样每个 Pod 都有一个 DNS 记录(例如 myapp-0.myservice.default.svc.cluster.local)。
- 这种机制对需要特定网络标识的应用程序非常有用,例如需要彼此直接通信的分布式数据库。
7. 扩展和缩减行为
- Deployment :
- 在扩展或缩减时,Pod 的数量增加或减少,不保证特定 Pod 的身份和顺序。
- StatefulSet :
- 扩展时,新创建的 Pod 会按照顺序附加到现有 Pod 之后。
- 缩减时,StatefulSet 会按照逆序终止 Pod,确保高序号的 Pod 先被删除。
总结
- Deployment 适用于无状态、易扩展的应用程序,提供灵活且快速的部署、更新和扩展能力。
- StatefulSet 适用于有状态的应用程序,提供稳定的网络标识、持久化存储,以及对启动和终止顺序有严格要求的场景。
根据应用的需求选择适当的工作负载类型,有助于确保应用的稳定性和正确性。
热门推荐
工控芯片级电路板维修技巧
吡格列酮的作用机理是什么
ESC故障灯亮了重启后消失
地西泮片的作用
倘若左宗棠当年没收复新疆,今天的中国将会面临怎样棘手的问题?
躯体化症状有哪些
最全用药对比来了!7点讲清常用“地平”类降压药有何不同
固化剂的用途及作用:提升产品性能与价值
天突穴位:位置、功效与操作方法详解
30岁以上的项目经理,少奋斗20年的职业规划路线图及应对策略
卫星影像的获取是否能够在任何时候都有数据
危险化学品目录:石油溶剂油
怎样检查高钾血症
脊柱侧弯会导致肋骨有哪些改变
腱鞘炎的药物治疗方法
手机维修工具热风枪 修手机风枪温度和风速
制造业职位足量释放 上海零工市场招聘“开门火”
紫砂壶泡茶全攻略:六大茶类如何选择紫砂壶?
北证50指数大幅上涨超20%:现象解析与市场影响
醒酒汤用什么煮?最简单的方法,最有效果!
挑战极限!走进军校学员野战生存训练现场
【碳板跑鞋揭秘】从材料构成到运动表现,全方位解析高性能跑鞋设计秘诀
增重健身如何饮食调理好
鼻小柱延长手术的效果如何?
开奥迪A6都是什么人
一文详解:如何彻底清理C盘碎片,优化电脑性能
慢性胃窦炎什么症状能跑步锻炼
AMD主板等级划分:入门、中端、高端、旗舰,性能与价格全面解析
恭喜TES!成功1穿5,拿下LPL第一赛段冠军!复仇AL,晋级先锋赛
分娩后是否还需要做血糖检测