切入正题之前,先引入一个小知识点。什么是副本控制器?
对于副本控制器的基本理解就是:
控制pod集群副本的数量,永远与预期设定的数量保持一致
截止到当前版本,k8s副本控制器有两种类型:
- replicationcontroller
- replicaset
区别在于:
1、标签选择器功能不一样:
replicaset: 可以使用标签选择器进行复合选择
*单选
*复合选择
replicationcontroller: 仅支持单选
*单选
建议: 新版k8s中建议使用replicaset作为副本控制器
现在切入正题:
什么是有状态服务?有状态与无状态服务的区别是什么,主要判断是:是否
有实时的数据需要存储
无状态服务对象-Deployment
服务部署结构模型
Deployment->ReplicaSet->Pod
Deployment工作在ReplicaSet之上,用于管理无状态应用,通过“控制器模式”,来操作 ReplicaSet 的个数和属性,进而实现“水平扩展 / 收缩”和“滚动更新”这两个编排动作,也就是说,Deployment 控制器实际操纵的是ReplicaSet 对象,而不是 Pod 对象
关于滚动更新
相信大部分同学选择k8s的致命诱惑力来源于此,实现服务不停机更新。
该功能内部实现逻辑是:
Deployment内部重新建立新的replicaset–>重新建立新的pod,实际上就是控制旧的replicaset中的pod逐渐减少到0,新的replicaset中的pod逐渐增加到目标数量
操作指令:
kubectl rolling-update redis-master --image=redis-master:2.0
有状态服务-statefuleset
为了解决有状态服务使用容器化部署的一个问题,保证pod的hostname重启/重建后不变,通过hostname维护关联数据。
服务部署结构模型
Statefulset->ReplicaSet->Pod
Statefulset也是工作在Replicaset之上,用于管理有状态服务。
总结
对k8s来说,不能使用deployment部署模型部署有状态服务。通常情况下,deployment用来部署无状态服务。有状态服务的部署,使用statefulset进行。
本文介绍了Kubernetes(k8s)中的副本控制器,包括replicationcontroller和replicaset,并强调了在新版k8s中推荐使用replicaset。 Deployment用于管理无状态应用,提供滚动更新能力,而Statefulset则适用于有状态服务,确保pod的hostname在重启或重建后保持不变。总结来说,Deployment适合部署无状态服务,而Statefulset则用于有状态服务的部署。
1万+

被折叠的 条评论
为什么被折叠?



