搭建或使用云平台的一个主要目的是在企业内部提供PaaS功能,由PaaS 平台来支撑应用从开发、发布到运维的过程(应用全生命周期)中需要的存储、负载均衡、容错等通用功能,很多PaaS平台是基于Mesos和Kubernetes这样的分布式平台搭建的,下表1以 Mesos 和 Kubernetes 为基础的云原生 PaaS 平台相比传统 IT 架构的优势:
云原生PaaS平台提供的功能 | 传统IT架构解决方案 | |
资源管理 | 无须事先分配资源.共享资源池,粒度小,资源利用髙 | 每个应用必须事先分配所需资源,粒度大,无法共享 |
应用发布 | 提供统一的发布管理界面,可査看发布历史 | 应用自主管理发布或回滚流程 |
应用调度 | 无须事先指定运行主机,可根据资源使用率情况自动分配 | 应用只能运行在事先指定的主机上 |
中间件集成 | 系统提供大员常用中间件的集 成,一键安装,并且为系统中间件自动提供高可用及监控功能 | 应用必须自行安装所需中间件,额外配置高可用及监控等必需功能 |
弹性扩容 | 应用可弹性扩容和缩容,无须额外配置 | 应用扩容和缩容必须更改配置,费时费力 |
系统容错 | 从系统层面解决负载迁移,失效自动重启,确保无单点失效 | 各应用必须自主处理容错和高可用机制 |
应用监控报警 | 应用有统一监控接口,提供默认的健康检査 | 很多企业没有必要的监控措施,即便有,也需要复杂的人工配置 |
日志管理 | 提供统一日志管理,自动日志釆集,通过图形界面査看日志 | 日志采集须单独配置,査看日志通常须通过命令行登录多台主机 |
安全管理 | 提供安全组及权限管理,灵活控制不同部门、机构、人员对应用的访问 | 依赖于操作系统提供的权限管理,配置复杂,无法灵活进行全局变化 |
负载均衡 | 自动提供高可用负载均衡,无须 自行配置,不同应用间的调用在负载迁移的情况下无须重新配置 | 各应用自己配置负载均衡,在系统迁移时经常需要更改配置或重新启动 |
大数据组件、数据应用和数据服务归根到底都是应用,所有应用的运行和管理最终必须由PaaS平台支撑,而不应由各个应用自行解决。随着云原生技术的成熟,绝大部分大数据应用会以云原生的方式在平台上运行,下面简单介绍一下 PaaS 层提供的一些主要功能:
1.资源管理
PaaS 平台的一个核心功能是分布式集群管理系统负责管理和分配集群资源,包括CPU 资源、内存资源、存储资源、网络资源等。例如,在 Mesos 集群上可以运行Marathon、Kubernetes、Hadoop、Spark、Kafka、Hive等多种框架,如下图 Mesos 管理的平台所示,Mesos 本身只提供资源的分配,并不涉及存储、任务调度等功能,所以要将其与其他软件或系统搭配使用才能构成完整的分布式系统。Mesos、Docker、Marathon/Chronos、ZooKeeper、HDFS/Ceph 构成了一个完整的分布式系统,分别负责资源分配、进程管理、任务调度、进程间通信和文件管理。
Mesos 管理的平台
Mesos 的资源分配是通过两级调度来实现的。Mesos 主节点首先从 Mesos 从节点收集空闲可用资源信息(CPU、内存、存储),然后将主机上的资源封装成资源 offer,并根据资源分配算法选择 offer 发送到应用框架,这称为第一级调度。应用框架收到资源 offer 后,根据自己的调度策略决定如何使用这些资源,并将运行任务的决策发回给 Mesos 主节点,Mesos 主节点收到调度任务信息后,将任务发送给指定目标节点上的 Mesos 从节点,Mesos 从节点完成任务的执行,这称为第二级调度。
2.应用全生命周期管理
应用发布模块负责为运行的应用提供标准化的分发流程,用户可以按照标准化的发布方式自助进行应用发布。应用发布模块功能包括∶
- 所有应用可以一键安装,用户可通过 Docker image 方式自主安装和发布应用
- 应用配置全部通过 Web UI 方式实现;
- 应用实例由集群动态分配资源,无须绑定服务器
- 应用负载均衡由系统自动实现,无须配置
- 应用的运维由系统自动实现,包括自动弹性扩容、迁移和重启。
微服务和容器技术显示出它们在敏捷性、可移植性等方面的巨大优势,同时也为交付和运维带来了新的挑战∶单体式的架构被拆分成越来越多细小的服务,运行在各自的容器中,必须解决它们之间的依赖管理、服务发现、资源管理、高可用等问题。
云原生系统在应用管理方面提供应用编排及调度管理,可以管理由数十乃至数百个松散结合的容器式组件构成的应用,而这些组件遵照统一的发布规范,可以完成各组件相互间的协同合作,使既定的应用按照设计运作,按顺序在网络级别进行组织,能够按照计划运行。一般来说,应用编排及调度管理可以提供以下常用系统功能:
- 快速部署∶实现应用的创建、发布、部署、启动、停止等功能。
- 弹性伸缩:在预计应用流量达到高峰前,只需要在页面上调整应用的实例数,就可以在后台自动复制并启动多个实例。
- 策略约束:如果应用对机器有特殊要求,不能在集群中随时任意地迁移,平台也支持添加机器约束,比如只允许应用运行在某些机器上,或者不允许运行在部分机器上。
- 健康检查∶应用在发布的时候,TCP/HTTP服务可以自动检测端口或者 HTTP 服务是否可用。如果在指定时间内服务没有响应,调度平台可以自动启动新的实例,判断新的实例正常运行后,剔除非正常的实例。
3.高可用和容错
云原生架构下,系统是没有单点失效的。首先,集群管理软件本身提供高可用模式,遭遇软件或硬件故障时,依然可以进行正常的集群管理工作。其次,应用系统遭遇软件失效时,应用可以被自动重启遭遇硬件故障时,应用可自动迁移到其他服务器,如下图应用的故障迁移所示,容器化保证应用之间不会出现资源冲突(端口、存储、第三方库)。
应用的故障迁移
PaaS 平台的容错机制包括主节点的高可用、应用框架和从节点的容错、故障应用迁移,Kubernetes 同样提供集群的高可用模式,并实现了微服务的容错机制。Kubernetes 对工作节点故障的处理比较简单,它会把失效节点上运行的Pod(容器的集合)重新编排到其他可用的工作节点上。
4.运维平台
在云原生架构下,运维平台可以实现所有系统组件和应用状态的自动监控和告警,支持主机级及容器级资源监控,有统一监控面板查看系统和应用状态,并支持监控 API 扩展应用级指标。云原生系统一般对应用任务和程序进行主动式状态监控,分布式地获取执行任务或程序的资源占用和运行状态,这种对运维的支持称为可观察性。可观察性涉及的对象包括基础资源(主机)、容器编排工具和应用系统。一般来说,基础资源和容器编排工具的健康检查都是集群管理软件自带的,而应用系统的可观察性则是由应用系统及其周边生态产品提供的。