欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

有状态服务vs无状态服务-k8s部署对象

程序员文章站 2022-03-12 10:20:54
...

切入正题之前,先引入一个小知识点。什么是副本控制器?

对于副本控制器的基本理解就是:

控制pod集群副本的数量,永远与预期设定的数量保持一致
截止到当前版本,k8s副本控制器有两种类型:

  1. replicationcontroller
  2. 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进行。

相关标签: k8s k8s