基于docker+kubernetes的一站式运维管理实践

【编者的话】本文按照从整体架构到功能模块的顺序为我们讲述了搜狐自动化运维平台DomeOS,实现用户私有集群的容器化管理和资源智能分配

项目简介

2015年下半年,搜狐北京研发中心基于docker和kubernetes开发了一套企业级的一站式运维管理系统——DomeOS。该系统是一个持续交付和自动运维平台,解决用户从代码自动编译打包,到线上运行维护的全套需求,采用私有云模式,实现了用户私有集群的容器化管理和资源智能分配。

整体架构:

基于docker+kubernetes的一站式运维管理实践_第1张图片

DomeOS server是整个系统的控制模块,前端和所有逻辑控制均在这部分实现。

Mysql用来存储项目、部署、用户、监控等数据信息

Server可以关联到代码仓库,目前支持gitlab和svn。

Registry是docker提供的开源私有仓库,我们对它进行了改造,可以对接到搜狐云台的存储系统,保证了镜像的安全性和可靠性。

资源分配、任务调度部分交给kubernetes来完成。

监控部分融合了open-falcon和cadvisor,实现了主机和容器多个维度信息的收集展示。

另外,为了方便研发及运维同学在部署过程中快速定位问题,加入了webssh模块,能够通过网页直接进入到容器内部查看信息。domeos支持ldap登录,方便企业用户使用。

功能模块:

DomeOS提供了项目管理、持续集成、部署管理、镜像管理、集群管理、应用商店、用户和组管理以及多层级监控服务。以下是功能模块图:


其中项目管理、集群管理和部署是比较重要的功能。

项目管理中包含了持续集成,设计方案如下:

基于docker+kubernetes的一站式运维管理实践_第2张图片

用户在代码仓库的操作,通过webhook将操作信息发送给DomeOS server,server根据项目关联配置信息确认是否满足构建任务的出发条件,如果满足,Domeos server下发构建任务给kubernetes master,master挑选符合条件的slave启动构建镜像,该镜像从代码仓库中下载代码,根据对应的dockerfile执行构建,构建生成的镜像被push到代码仓库中,然后反馈构建日志及结果给domeos server,server在仓库中确认过镜像信息后,将构建结果写入到数据库中。

集群管理部分,我们将一套kubernetes部署作为一套集群,添加集群是配置kubernetes master信息的过程,用户可以在DomeOS中添加多套集群。

基于docker+kubernetes的一站式运维管理实践_第3张图片

当master信息配置完成后,我们提供了添加node的脚本。对于一套集群,网络部分采用flannel进行管理,每个node上启动agent上报监控信息并用于webssh登录。用户可以通过为主机添加namespace和label进行资源和环境的隔离。

部署管理部分

部署启动在一个集群上,采用kubernetes pod的概念,每个部署都从一个或多个镜像创建,可以对每个镜像配置cpu和内存限制,可以在pod中配置一个或多个日志收集模块,该部分用flume实现,日志收集到kafka中。网络部分目前支持overlay和host两种模式,overlay模式的负载均衡用kubernetes的service实现,host模式的负载均衡通过confd+nginx来实现。同一套集群的部署之间可以通过内网域名互相访问,这部分通过skyDNS和kube2sky来实现。


每套部署可以建立多个版本,升级回滚采用不同版本之间的切换完成。扩容缩容通过kubernetes的replication controller实现。

下面是DomeOS的介绍网站 http://domeos.org/ ,我们对项目代码进行了开源 https://github.com/domeos ,欢迎有兴趣的小伙伴试用,提出宝贵的意见和建议。

Q&A

Q1:“可以在pod中配置一个或多个日志收集模块,该部分用flume实现” 这块能具体说下吗?

A:我们把flume做成了一个镜像,利用kubernetes的empty dir来收集其他容器产生的日志

Q2:你们webssh是自己开发的还是参考了开源项目?感觉debug的时候会很有用

A:我们参考了其他开源项目,自己做了调整

Q3:我想问下 容器内监控是怎么实现的?每个容器安装open-falcon的agent吗

A:每个node上会启动一个agent,通过agent收集主机和容器的信息,agent集成了open-falcon的agent和cadvisor

Q4:自动化构建过程中,对应用的测试是怎么实现的?

A:单元测试可以在编译的时候完成,功能测试需要启动部署

Q5:你好,请问你们的网络支持隔离吗?

A:目前不支持隔离

Q6:你好,我想知道你们的设备是哪个厂商的?谢谢

A:我们用的是戴尔的服务器

Q7:感谢开源,试用过程中遇到的问题和反馈意见提交到哪?

A:可以直接在github上提issue,或者直接跟我联系

Q8:你们的部署环境是同时使用了overlay模式和host模式吗,对于预防潜在的冲突你们有什么好的建议?

A:我们主要对端口冲突做了严格限制,host模式下提供了自动寻找20000~21000段可用端口的插件,overlay模式会根据数据库中配置检测冲突

Q9:使用kubernetes编排容器后,你们怎么做服务发现的?如何解决容器间互相调用问题,及容器外调容器内服务问题?

A:我们用skyDNS做服务发现,容器间相互调用可以用内部域名,kubernetes集群内的主机通过修改dns服务器配置也可以通过内部域名访问容器

Q10:项目有什么瓶颈吗?

A:kubernetes的部署比较复杂,我们做的是私有云下的管理,不同系统下部署会有各种各样的问题

Q11:刚刚提到webssh在agent里封装了docker exec,当在master执行某容器的命令时,具体是如何控制node节点执行docker exec的,agent封装是自己开发的吗,还是借用一些第三方工具,kubernetes好像也有kubectl exec?

A:webssh有server端和agent端,agent在每个node节点上,server只要一个就够了。kubectl也可以exec,不过采用的是kubernetes自定义的连接协议,性能也不如我们目前采用的方案

你可能感兴趣的:(docker,容器,KUBERNETES)