PaaS平台概述
PaaS平台通常是基于IaaS平台构建的,PaaS平台和IaaS平台最大的差别是需求即服务。所有的管理都是以服务为粒度的,在IaaS以资源管理为中心的平台上提供了更高层次的抽象。
PaaS的本质
(1)运维自动化,故障的自动恢复,在不需要人为干涉的情况下能够自愈;
(2)面向服务化的管理,围绕服务的发布、升级、调用、监控、日志及服务域名等;
(3)软件开发流程化,代码自动编译打包及更新,持续发布,持续集成和更新。
PaaS平台分层
首先是资源调度层,这一层是直接在构建在物理资源之上的,完成资源调度、集群管理、存储管理等基础服务;
中间层是一些服务的依赖中间件服务和监控日志服务
CI/CD自动构建
最上面的层是开放给平台用户的能力,提供应用服务管理、权限管理及日志检索等功能。
PaaS平台化如何实现?
平台的实现有多种方式,并不一定需要Kubernetes或者Docker,只不过当前大多数PaaS平台都是基于“Kubernetes+容器”的方案的,这里还需要区分清楚。
个人拙见: 目前k8s已经成为PaaS平台建设最重要的组成,甚至是标准,自己实现维护那一套,大概率不如k8s稳定,且k8s提供了很强的扩展性。
服务和应用管理
PaaS平台和IaaS平台最大的区别是面向服务管理的,所有的资源也都是以服务为最小管理单元。用户不用担心基础资源配置(部署在哪台机器、IP地址多少、配置的内存多大等),所有的操作都是针对服务的。服务管理包括服务列表查询、服务创建和删除、服务的副本数修改、服务自动伸缩、服务的滚动升级和灰度发布等。
应用是将多个服务组合到一起维护的。一个应用包含了多个服务,譬如,一个网站是一个应用,这个应用是由MySQL、Spring Boot等多个服务组成。可以针对一个应用启动和关闭,以及编排。应用和服务逻辑关系图如图
监控告警
日志管理
针对一个Kubernetes集群的日志,则需要借助一套针对日志的采集、检索、分析及预警系统。
●Fluentd主要负责日志采集,通常和应用服务安装在一起,读取日志文件或者从网络流中接收文本日志并发送到Kafka中。除了Fluentd以外,还有很多采集插件,如Fluent Bit、Filebeat、Flume Agent等。
●Kafka主要负责汇聚数据,并提供数据整流,避免突发日志流量直接冲击后端系统。在实际生产环境中,Kafka是集群部署,通过将数据分区到不同节点实现数据的负载均衡。
●Logstash负责日志整理,可以过滤、修改日志内容,比如过滤日志中的敏感信息。
●Elasticsearch负责日志的存储和检索。自带分布式存储,可以将采集的日志分片存储。为保证数据的高可用性,Elasticsearch引入多副本概念,并通过Lucene实现日志的索引和查询。
●Kibana是一个日志查询组件,负责日志展现。
日志具备的功能
(1)多租户隔离,每个用户只能读取自己的业务容器;
(2)实时日志查看,读取当前最新实时日志,而非从Elasticsearch中检索;
(3)基于日志的告警,当多次出现某个写关键字后触发告警;
(4)基于服务的日志查询,不仅可以查询单个容器的日志,还可以针对这一组容器进行检索。
镜像管理
Harbor
CICD
CICD全称为Continuous Integration Continuous Delivery(持续集成持续交付),CICD整体流程图如图,如同一个流水线一样持续运行,循环反馈,不断迭代更新。
持续集成
所谓持续集成是不断进行代码提交、构建和测试。传统的软件开发是每个人或者团队单独负责一个模块,在产品即将发布时,才将各个模块组合到一起。但这种开发模式只适用于产品迭代周期比较长的情况,无法满足当前互联网快速产品迭代的需求。
持续集成允许开发工程师将代码不断提交,然后自动触发构建流程,确保代码可以顺利构建(编译),并执行自动单元测试确保功能完善。
持续集成需要做好版本控制和自动化构建,每个用户在功能分支(feature分支)上面开发后,可以随时合并到主干分支中。构建并发布到测试环境,期间以自动化单元测试、功能测试、性能测试工具进行测试,发现问题后及时回滚版本,并进行反馈。构建的过程不单单是代码的编译,还包括依赖、配置及环境。
持续部署
持续交付也叫做持续部署,是指在构建和测试完成通过后,将部署包发布到生产环境中运行。部署的方式可以通过Ansible、Puppet等部署工具,也可以通过容器的方式发布。让最新的功能能够尽快地更新到生产环境中,并通过运营反馈需求,促进产品进一步迭代。持续部署需要保障整个过程的平滑和安全,通常借助蓝绿发布或者金丝雀发布确保过程的平滑和安全。
CICD本身和PaaS平台的关系
CICD本身和PaaS平台没有必然关系,它是在容器兴起之前就已经存在,只不过在缺乏容器的时代,CICD很难落地。通过容器可以很好地完成应用从测试环境到生产环境的快速迁移,所以,CICD也成为容器平台的标配。
Jenkins目前已经成为CICD中最流行的构建工具,通过CICD系统构建任务,并将镜像推送到Harbor镜像仓库,最后触发Kubernetes滚动升级。