背景说明
项目基本完成容器化与vpc迁移,完成架构改造的第一步。之后计划将服务逐步迁移到k8s上管理,依赖docker+k8s这样的PAAS平台,做到“更轻量的运维,人人都是devops”。
首先项目运行在阿里云的vpc内,需要使用阿里云的k8s容器服务,需要做所有系统的二次迁移。那么在迁移之前,需要了解使用k8s的架构需要有哪些一些基础设施。
k8s作为优秀的PAAS平台,已经帮我们解决资源调度、服务编排、服务发现等工作,从实际场景出发,我们迁移时需要确认以下几点:
- 容器的日志如何收集
- 业务监控(这里系统监控与进程监控可以依靠阿里云的基础设施来完成)
- 服务流量调度(SLB如何接入,即ingress/egress的配置)
- 发布系统
- CMDB接入资源伸缩
这次先记录阿里云k8s集群接入日志服务的方式。
日志系统架构
传统的ELK架构
日志系统的解决方案最常见的就是ELK,elasticsearch + logstash + kibana的组合,同时日志采集可以使用filebeat。架构如下:
- filebeat采集指定文件的日志信息
- logstash做日志收集,日志格式化,日志内容过滤等工作
- elasticsearch完成日志索引入库
- kibana提供可视化的日志查询页面
docker + log-pilot + 阿里SLS
上一篇文章中,我是使用了docker-compose在一台VM上跑多个容器(当时k8s的体系知识还不够完备),基于log-pilot:0.1版本采集容器的stdout的输出。实际上log-pilot的机制与filebeat一样,默认采集了/var/lib/docker/containers目录下的容器日志信息,再根据log-pilot里的配置上报给SLS对应的project和log-store入库。传送门
k8s + log-pilot + 阿里云SLS
在k8s里部署log-pilot有几个优点,通过DaemonSet这个控制器的特性,可以将底层资源的扩缩容操作透明化,不用在跑什么部署脚本安装log-pilot了,另外log-pilot接入SLS解决ELK传统架构里维护es集群的痛苦。
什么是DaemonSet?
A DaemonSet ensures that all (or some) Nodes run a copy of a Pod. As nodes are added to the cluster, Pods are added to them. As nodes are removed from the cluster, those Pods are garbage collected. Deleting a DaemonSet will clean up the Pods it created.
官网上的说明是能够在所有的Node上执行定义好的一个pod,在整个底层的k8s集群里增加与删除node,都会对应的增加与删除控制器定位DaemonSet的Pod。
相关配置
log-pilot.yml
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
na