搜狐基于Docker+Kubernetes的一站式运维管理实践
国内案例
作者:Dockone
译者:Dockone
2017-01-17 12:27

编者的话】DomeOS是基于Docker的企业级私有云一站式运维管理系统。DomeOS采用私有云模式,实现用户私有集群的容器化管理和资源智能化分配,提供全流程标准化的主机管理、应用持续集成、镜像构建、部署管理、容器运维和多层级监控服务。本次分享介绍我们在设计与开发DomeOS中采用的技术与方案,抛砖引玉,与大家一起探讨如何利用Docker实现自动化服务运维管理。

@Container容器技术大会将于6月4日在上海光大会展中心国际大酒店举办,来自Rancher、携程、PPTV、蚂蚁金服、京东、浙江移动、海尔电器、唯品会、eBay、道富银行、麻袋理财、土豆网、阿里百川、腾讯游戏、点融网、华为等公司的技术负责人将带来实践经验分享,4月7日之前购票只需338元,欢迎感兴趣的同学抢购。

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

项目简介

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

整体架构


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

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

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

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

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

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

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

功能模块

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

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

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


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

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


当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

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

A:我们把Flume做成了一个镜像,利用Kubernetes的Empty Directories来收集其他容器产生的日志。

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

A:每个Node上会启动一个Agent,通过Agent收集主机和容器的信息,Agent集成了open-falcon的Agent和cAdvisor。

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

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

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

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

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

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

Q:项目有什么瓶颈吗?

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

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

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

以上内容由李世龙根据2016年4月5日晚微信群分享内容整理。分享人刘菲,搜狐北京研发中心副研究员,主要负责DomeOS系统的设计研发工作。致力于研究Docker为代表的容器技术,为企业级用户打造持续交付和自动运维平台,解决用户从代码自动编译打包,到线上运行维护的全套需求。 DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesz,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。


663 comCount 0