微服务、DevOps、Docker相关PaaS三者逻辑可以分开建设
1.微服务:首先考虑必要性,灵活度需求和开发团队成熟度需求真是否到了需要微服务化的地步。始终觉得,无状态服务是必要的,但微服务不是必要的。
2.DevOps:同样存在成熟度陷阱。首先CI/CD做好了么?CD部分生产切换灰度等方案完善了么?传统针对VM同样可以通过定义模型和脚本进行与容器类似的自动化批量部署。
3.Docker:与2有点类似,只是通过更加方便的手段来构建黑盒。与1中的无状态性比较相关(有状态应用你可以通过Stateful相关容器实现,但是我始终觉得这违背了容器的初衷)。但需要注意平台构建对于下层计算资源和网络的要求。
我觉得在建立PaaS平台的时候,要做好日志收集和监控。因为PaaS上的应用都是基于容器来运行的,而且都是多个节点运行,这就造成了获取日志文件的难度。很多情况下,如果系统有报错,需要调阅日志文件的时候,不知道取哪个容器里面的日志。目前我们是基于fluentd+elasticsearch(hdfs)+kibana的方式来进行日志收集。fluentd负责收集容器日志并上送到elasticsearch以及hdfs里面(HDFS主要是做日志持久化存储便于后续审计),elasticsearch里面的日志只保留7天。Kibana用于日志的检索和可视化。
对于监控平台,我们使用了heapster+influxdb+grafana的技术栈。heapster用于收集节点cAdvisor上的监控指标,上送到influxdb,由Grafana查询influxdb做可视化展现和监控预警。