现状:
网络媒体行业,运维和开发流程都很传统(落后)。有 200 来台物理服务器,由于没有个 IaaS 平台,OS 直接安装在物理机上,靠的是人力一台一台安装维护,传统 LNMP 架构,环境搭建配置基本靠脚本来做。用 docker 容器来跑部分应用,应用部署和更新都是用 ftp 上传。用 Nagios 和 Cacti 做系统和应用的监控报警,需要在被监控的机器上一个个安装客户端并配置。没有集中的日志收集和分析处理平台,各个应用和系统日志都分散在不同机器上。用 bucula 做数据备份。用 gitlab 做代码托管,没有启动 CI/CD,也没有 code review,不写测试,基本靠开发人员手工点击无明显 bug 就上线了。
考虑到这样下去实在落后,对公司对个人成长都有极大的坏处,必须做出改变了。看到一篇讲京东 JDOS2.0 的文章,受里面提到的技术栈启发,决定对现有架构做改造。
首先是搭建 IaaS 平台,可选方案有 Vmware vSphere 和 OpenStack,前者需要商业授权,价格昂贵,但相对稳定且对运维人员要求不高;后者开源免费但稳定性存疑,并且专业要求高;怎么选?
其次是 PaaS 平台,打算选择 Kubernetes+docker 的方案。集中日志处理,采用 ElasticSearch + Logstash + Kibana 方案;采用 Jenkins 做 CI/CD ;运维方面,使用 Ansible 做自动化配置管理。
最后需要实现的一个一站式解决方案如下:
-
1、开发者提交代码到源码管理库
-
2、触发 Jenkins Master 生成构建任务
-
3、Jenkins Master 使用 Kubernetes 生成 Jenkins Slave Pod
-
4、Jenkins Slave 拉取源码进行编译打包
-
5、将打包好的文件和 Dockerfile 发送到构建节点
-
6、在构建节点中构建生成镜像
-
7、将镜像推送到镜像中心 Harbor
-
8、根据需要在不同环境生产 /更新应用容器
可以想见,要达到上面的效果,有大量的工作要做,有无数的坑等着。各位有何看法?