前言
本系统采用Kubernetes容器编排、基于JenkinsGitlab的CICD技术、EFK日志收集、Prometheus监控告警、Ceph后端存储和Harbor镜像管理,设计并实现了具有“源码一键部署”、“日志实时收集”、“监控告警展示”、“数据存储分析”和“镜像管理维护”五大模块的舵手集群系统。
拓扑图
总体架构图
![4c918ba6711420855121aa45e9589c14.png](https://img-blog.csdnimg.cn/img_convert/4c918ba6711420855121aa45e9589c14.png)
日志收集架构图
![a792b9288c018e58d53f9eca1625dbf9.png](https://img-blog.csdnimg.cn/img_convert/a792b9288c018e58d53f9eca1625dbf9.png)
原理
部署方案
![7c369e284d996911a33f70fcc16ee0b1.png](https://img-blog.csdnimg.cn/img_convert/7c369e284d996911a33f70fcc16ee0b1.png)
(1) Kubernetes集群采用三主三从模式,从架构规划上防止单点故障,保证集群高可用性;
(2) 由bs-k8s-ceph-209、bs-k8s-gitlab-208、bs-k8s-harbor-207三节点组成后端分布式存储Ceph集群;
(3) Gitlab源码管理仓库是供开发工程师使用,独立于Kubernetes集群之外,既减轻了Kubernetes集群的负担又权限分明便于维护管理。
部署原理
(1) 开发工程师将项目源码合并到Master分支并推送到Gitlab源码管理仓库服务器;
(2) Gitlab Webhook感知到Master分支发生改动后触发Jenkins持续集成Pod在Kubernetes集群中临时启一个Jenkins-slave Pod,进行项目源码拉取、编译、测试、构建Docker镜像、并推送镜像到私有仓库Harbor;
(3) Jenkins通过Kubernetes deployment插件在Kubernetes集群中拉取推送到Harbor镜像仓库中的应用镜像制做成应用Pod,此时已经完成一键部署源码到Kubernetes集群;
(4) Traefik代理容器编排集群中的应用服务,将应用服务暴漏到公网供用户访问;
(5) EFK日志收集集群的Kibana界面可以展示采集到的已经发布的应用服务的日志信息,供运维工程师和开发工程师分析;
(6) Prometheus监控告警集群的Grafana展示界面可以实时刷新整个容器编集群和应用服务的运行状态,并将越限行为进行邮件告警发送给运维工程师;
(7) 舵手集群内所有有状态类应用程序的数据都存储在分布式存储集群Ceph中。