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

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

控制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进行。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐