对于企业级容器云PaaS平台,在多集群管理的模式下,每一个功能都会变得非常复杂。对于建设中的重点和难点,从以下多个方面进行了详细的方案分析和设计实现。主要包含安全集中控制、资源统一管理、镜像统一管理、应用统一管理、配置统一管理、统一的监控管理和智能运维,以及企业基础服务的提供。
1、安全治理
在容器云PaaS平台中,通过租户、集群、用户三级安全管理,实现多集群管理的安全集中管控。首先要控制对集群的安全访问,每个集群都采用安全模式启动,使用CA证书的安全认证方式对集群进行SSL安全访问。没有证书不允许访问任何一个集群。
在多集群管理中,租户为一个虚拟的单位概念,每个项目可定义为一个租户,如项目A即为一个租户,每个租户下可建立多个集群,租户拥有一个或者多个集群的访问证书,租户实现对自己名下资源的管理和分配。租户再通过用户组绑定不同集群和分区资源,属于某用户组下的用户即可获得对资源的访问权限。用户本身只能部署和监控自己的应用,保证应用的独立性和安全性。
2、从资源管理到资源调度
容器云PaaS平台资源管理与调度中心利用先进、成熟的云计算技术实现资源整合,在资源池提供资源供应(支持私有云资源池、公有云及混合云提供的计算资源、存储资源、网络资源等各类物理资源和虚拟资源)的基础上,实现对资源的统一管理和动态调配。向用户提供可弹性扩展的云化服务。
基于以上资源模型,资源管理的流程如下:
- 经过证书的安全认证之后,通过Kubernetes API Server对集群进行纳管,把集群的Node的数量、配置等信息导入,同时补充机房、机架等信息。
- 将纳管集群和租户进行绑定,把集群分配给指定租户。
- 租户可以继续对集群资源进行分区,比如分成WEB区、DB区等,便于部署不同的应用,并且可以实现不同配置的主机的共存。
容器云PaaS平台资源管理与调度中心具备如下能力:
- 通过云化技术,将所有物理主机资源合并成统一的资源池,在此基础上实现计算、存储、网络资源的动态按需分配,形成云化服务提供给用户使用。
- 具有对其他云环境的接入能力,统一进行IT运维与监控,支持自助服务,提供多租户环境支持,并对租户之间的数据和配置进行安全隔离,支持运维监控能力。
- 标准化并具开放性,安全可靠,有容灾容错方案,并具扩展性,满足未来业务负载的支撑能力,方便维护,并具有可视化自助服务管理能力。
3、镜像的全生命周期管理
在主镜像库实现镜像的全生命周期的管理,镜像的入库、出库和版本更新都在主镜像库中统一集中管理,并和DevOps整合在一起,进行应用镜像统一的开发和持续运营管理。
每个集群都有一个子库或者几个集群共享一个子库。子库可以设定同步规则,只同步一部分镜像到子库,因此,每个项目可以只同步自己的镜像到自己的集群中,提高集群应用部署的效率,并实现镜像的跨地域、跨IP承载网同步和更新,支持全量同步和增量同步。
在镜像管理中,我们提供对应用镜像进行全生命周期的统一管理,提供镜像模板规划、设计、生成、入库及部署、生成容器应用实例等管理流程。
4、应用灰度发布和流水线部署
用户定义完应用之后,选择匹配的镜像包,启动部署,会显示该用户具有权限的集群和分区的列表,用户可以选择在哪个集群的哪个分区上部署应用,即可实现用户一键式部署应用到多个集群上。
容器云PaaS平台自动化部署模块统一对各数据中心进行服务自动化安装部署。通过多集群统一调度引擎,引入“智能调度”机制,实现应用的多集群统一部署,可以实现:
- 智能感知不同集群中资源的利用率。
- 根据算法指定同一应用在不同集群上部署容器数量的比例。
- 在某一集群故障或割接时,实现应用在集群间的无缝迁移。
- 在应用升级时,用户可以选择按集群和分区进行灰度发布和滚动升级,保证上线时系统业务不中断。
该方案解决了系统分布在不同地域的跨IP承载网的多个集群、跨多个网络域智能的应用部署和调度。统一调度引擎支持一键式自动化滚动发布。
5、配置分离,才能灵活管理
对于支撑多项目多应用共存的容器云PaaS平台,应用在多集群中的部署必须实现应用和配置分离,才能保证应用的独立性,最大限度的减少对镜像包的重复更新。我们通过对Kubernetes ConfigMap的增强,实现了“非侵入式”的应用配置管理框架和配置的统一管理。可以:
- 实现配置数据在多集群的统一定义。
- 用户可以上传任意格式的多个配置文件,绑定成一个配置库。
- 应用部署时,通过名字选择配置数据即可实现应用和配置的绑定。
该方案既实现了应用镜像和配置数据的分离,又保证了配置的集中管理和灵活更新。否则如果要求应用只是因为配置问题,就修改程序和更新镜像包,那么PaaS平台适应性则太差,无法满足大规模应用的快速部署。
6、从服务视角的综合监控
在多集群多租户模式下,每个租户会关心自己的资源和服务的运行状况,因此容器云PaaS平台通过综合监控管理实现对所有租户、集群、资源、应用的集中数据采集、分析和展示,并能在发生故障时及时获取告警信息,快速进行故障隔离和恢复。
容器云PaaS平台能够提供对集群的综合监控、以主机视图的监控和以服务视图的监控。
- 集群综合监控:直观展示集群的综合监控信息,包含资源的使用情况、应用服务的资源使用情况、公共服务中间件对资源的占用情况、系统关键事件等信息。
- 主机视图监控:从设备的角度,采集主机CPU、内存资源占用情况,提供设备资源的实时综合监控和历史性能数据监控,并支持监控信息展示更新的频率。
- 服务视图监控:从业务的角度,监控每个业务的Docker容器对CPU、内存的关键性能指标,业务对总体资源的占用情况。提供业务服务、容器的综合监控,业务服务所占CPU、内存关键性能的实时综合监控和历史性能数据监控。
7、智能,让运维更简单
容器云PaaS平台管理海量的机器设备,运行海量的应用、容器和微服务,业务变更频繁,运维工作量增大,人力运维和简单的监控工具已远远不足以应对,且在传统的开发模式下,开发人员和运维人员工作流程角色之间存在脱节。针对运维方面的问题,我们从智能运维架构设计和团队组织两方面入手,提高运维效率,提升运维质量,来应对容器云PaaS平台中多租户、多项目集中统一的运维管理工作。
在架构设计方面,我们建立基于机器学习的智能运维框架,通过采集、建模、测量、分析、决策、控制来形成有效闭环不断改进的运维框架体系。提炼实际运维过程中的知识经验,设计自动化运维流程,建立多条自动化机器运维流水线,自动化运维流程。
8、企业基础服务的提供
容器云PaaS平台作为基础技术设施平台,应预置各种常用开源的、稳定的基础类服务,以满足用户应用的快速部署需求。基础类的软件大部分是集群类的软件,容器化难度较高,要满足业务的高可用和高可靠要求,需要做很多的技术改造和性能提升。
- 提供数据库类基础服务(如MySQL、PostgreSQL、MongoDB等):实现初始化脚本挂载、数据服务高可用和数据备份高可用等功能。
- 提供共享存储类基础服务(如GlusterFS、Ceph等):实现初始化脚本挂载、数据高可用和支持Volume的定义等功能。
- 提供缓存类基础服务(如Redis、Memcache等):实现初始化脚本挂载,保证Master应用服务高可用,并能够根据容量需求实现快速水平扩展。
- 提供消息中间件类基础服务(如Kafka、RabbitMQ、ActiveMQ等):实现初始化脚本挂载,支持高可用,单点故障不会影响服务的正常使用,支持管理工具的集成。
- 提供统一日志采集和查询类基础服务(如ElasticSearch等):采集系统日志和应用日志,集成到ElasticSearch,进行日志的统一存储和分析,并支持高可用。
- 提供大数据分析类基础服务(如Spark等),实现海量数据的查询和分析。
9、打造高可用的数据中心
容器云PaaS平台除具有良好的管理能力与水平可扩展能力外,还必须具备可靠的稳定性,应能够提供故障恢复、高可用性、灰度升级、弹性支撑等业务连续性保障措施,关键场景包括:
容器云PaaS平台自动化部署模块统一对各数据中心进行服务自动化安装部署。可以定义同一个服务在不同数据中心的Kubernetes集群统一部署,并且可以定义在每个集群部署服务的容器实例的比例。比如按6:4的比例在集群A和集群B上部署服务。在进行自动化服务升级时,通用的做法是先在一部分集群部署新版本,稳定之后再平滑升级全部的节点,以实现服务不中断的灰度发布与版本升级。
当生产数据中心的应用主机高负载运行产生告警,或业务高峰期当一个数据中心容量不足时,容器云PaaS平台自动进行服务的动态扩展,根据扩展策略(如CPU/内存使用率、交易延时、业务量阈值等指标),自动启动容灾数据中心的部分服务来支撑业务。
容器云PaaS管理平台可以自动实现容灾切换,例如,当生产数据中心发生网络整体故障时,监控模块自动探测网络连通性,由容灾数据中心集群自动接管所有业务服务,故障恢复后,切换到容灾集群的容器服务再根据优先策略进行恢复切回。