美文网首页
容器集群高可用部署实践

容器集群高可用部署实践

作者: PaaS不怕死 | 来源:发表于2020-03-25 00:06 被阅读0次

    随着云原生应用的不断被接受,应用容器化方式部署也越来越普及,下面就如何基于华为CCE kubernetes集群中高可用部署容器应用集群展开探讨。

    容器化集群的基本条件

    1. 集群实例无状态化:这里的“无状态化”指容器实例本身不缓存或永久存储数据,即无论容器本身无论如何重新创建,也不会因为容器被删除之后重新创建而丢失集群数据或状态。

    2. 无依赖本地存储:集群中的容器数据不会保存在某个节点上,即无论容器迁移到何处,也不会因为容器被删除之后重新创建而丢失集群数据或状态。

    容器化集群高可用部署的要求

    要实现容器化集群的基本条件,则集群的缓存与永久性存储都必须放到集群之外,那就需用到分布式缓存、分布式存储、分布式数据库。

    容器高可用还需要考虑的是基础设施的高可用,如果所有容器都部署到同一个节点(虚拟机或物理机)上,即使容器集群本身实现了高可用,一旦节点异常,整个集群也不可用。所以,要求集群的容器分布到不同的节点之上。

    以下是容器化集群高可用部署的基本拓扑图:

    image.png

    容器化集群高可用部署在华为CCE的实现

    1. 如何实现容器必须分散到不同节点上?

      利用华为CCE的亲和性策略,使用得部署的应用集群与自己反亲和,即集群所有的POD都不可能同时部署到一个节点上。

    2. 如果实现数据持久化?

      分布式数据库与分布式缓存,都是通过专门的中间件服务实现,这里就打开讲。这里主要分析应用落盘的数据。

      应用的集群模式分为二类,一种叫多主模式,另一种叫单主模式。

      多主模式指集群中所有实例都同时Active,通过负载均衡把请求分发到集群的不同实例中,集群中任何一个主实例出现故障,不影响其他主实例运行。这种集群适合使用k8s的replicaset(由deployment创建),由于应用实例都是Active状态,所以实例之间需要数据共享,这就要求所以需要一个分布式文件系统(如NFS)提供多读多写。

    image.png
    单主模式指集群中只有一个主能提供服务,有一个或多个备是Standby状态,集群通过主备实例切换或主实例选举来保证高可用。这种集群适合k8s的Statefulset,每个实例都有自己的状态。这样集群需要每个实例单独挂载一个存储(云硬盘),应用集群需要自已实现数据的同步,当主出现故障时,需要选举出新的主实例,同时proxy把流量切换到新的主实例。
    
    ![image.png](https://img.haomeiwen.com/i10630044/744ad53acff7c927.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    1. 如何实现升级?

      集群的高可用,还需要考虑应用升级过程中如何保持业务的可用性。

      kubernetes提供了一种比较方便的方式为滚动升级,在升级过程中,对集群中的实例进行逐渐替换成新版本,保证了服务可的用行。但这种升级模式是理想化的,为什么呢?这里有一个假设是新老版本的接口未发生变化,才能在升级过程中,不会影响上下游的服务。

      一旦大版本的更新(有新业务特性或接口变更),则需要使用灰度发布。通过灰度发布的策略,把流量有区别地分发到新老版本。

    2. 如何对节点进行维护?

    相关文章

      网友评论

          本文标题:容器集群高可用部署实践

          本文链接:https://www.haomeiwen.com/subject/nsuzyhtx.html