Kubernetes(十六)无状态服务和有状态服务

  • A+
所属分类:Kubernetes

无状态服务(Stateless Service)

是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的

借助k8s内部的负载均衡Ingress,当访问该服务的请求到达服务一端后,负载均衡会随机找到一个实例来完成该请求的响应(目前为轮询)。这类服务的实例可能会因为一些原因停止或者重新创建(如扩容时),这些停止的实例里的所有信息(除日志和监控数据外)都将丢失(重启容器即会丢失)。因此如果您的容器实例里需要保留重要的信息,并希望随时可以备份以便于以后可以恢复的话,那么建议您创建有状态服务。

有状态服务(Stateful Service)

是指该服务的实例可以将一部分数据随时进行备份,并且在创建一个新的有状态服务时,可以通过备份恢复这些数据,以达到数据持久化的目的。

无状态服务可以有一个或多个实例,因此支持两种服务容量调节模式;有状态服务只能有一个实例,不允许创建多个实例,因此也不支持服务容量调节模式。

力求无状态

部署在Kubernetes平台的服务,尽量选择无状态服务,比如日志,打印标准输出到持久化存储,通过ELK采集处理。数据库有状态服务不建议部署在容器平台,有状态会限制可扩展性、降低可用性并增加成本。

比如web,无状态服务存储的html和日志文件,这些数据,每个pod访问都是一致的,可以用无状态配合分布式存储ceph、glusterfs、 NFS、NAS等,做数据持久化。

比如db cluster,有状态服务每个数据库节点存的数据都不一致,必须要有自己专用的存储卷,独立的PV和PVC,一定不能共享给其他节点。

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: