涉及技术 Docker + Rancher + SwarmKit + Jenkins
背景:
大规模推进微服务的背景下,大量应用切分粒度更细。为大量应用服务的部署及机器资源的分配使用带来了繁杂而高昂的成本。 在Serverless大潮下,传统应用的容器化改造成了标准的跨入门槛。
目标:
- 提高机器使用率。
- 横向扩展能力。机器资源使用可按应用服务切分管理并可快速调整配额(内存,CPU,网络,磁盘)
- 可移植能力。封装应用以及对环境配置的依赖。
- 应用生命周期管理能力。自动化部署,多实例部署,回滚等。能够精细化,自动化,可感知。
实现方案:
Dokcer进行容器化改造
Docker:是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker SwarmKit 进行容器编排
Docker SwarmKit:Docker公司开源的Docker集群管理和编排工具。基于Raft算法的一致性和任务调度,相对K8S更轻量级,部署成本较低。提供对集群的管理和服务的编排调度状态一致性保证。
Rancher 进行容器托管
Rancher:是一个开源的企业级容器管理平台.提供了全栈式的容器化管理
Dokcer插件 进行镜像打包
Dokcer插件:Docker插件为MAVEN构建生命周期提供应用构建并打包镜像,打包后PUSH镜像到镜像私服的能力
Jenkins及Rancher插件 进行容器指令下发
Jenkins Jenkins-Rancher插件 通过Jenkins中的Rancher插件来为应用构建后向Rancher下发服务升级指令
概览
整个应用容器化过程如下。
- Jenkins发起应用构建指令。
- Maven执行应用中Docker插件生成镜像
- Maven执行应用中Docker插件Push镜像到镜像私服
- Jenkins通过Rancher插件向Rancher下发指令升级服务
- Rancher通过托管的Docker SwarmKit进行服务的升级。从私服拉取镜像,重启容器。
不足
- 目前使用的Rancher 1.6版本不支持对Docker容器run时指定除Rancher管理平台之外的参数。类似cpus 以及oom-kill-disable之类的参数无数设置
署名
年糕妈妈---子皙