Docker On Gaia——腾讯Docker管理解决方案

时间:2022-03-04 08:37:26

要问2015年什么最火,耐人寻味的股票走势?黄晓明baby领证?Apple Watch 销量会有多好?我无法准确回答你,每个人心中都有自己的答案。不过要问技术领域2015什么最火,那“Docker”一定是当仁不让,这一年Docker又是融资,又是收购,又是办大会。它被爱好者冠以云计算新星、下一代虚拟机等称号,可见大家对其的期望之高。
小米雷布斯曾说过,“站在风口上,猪都能飞起来”。Gaia虽不是“猪”,但也着实借着“Docker”这股春风在腾讯内外,尤其运维和开发圈子里火了一把。Docker On Gaia项目自启动以来,受到了多方关注,目前已稳定运行半年多,正式接入了Lhotse、Hermes等多个在线业务,其他合作业务也在有条不紊的进行当中。
为了更好地服务于Gaia用户,也为了让更多的小伙伴无门槛地使用上Docker,在这2015的春天,Gaia团队又推出了“Docker开发云”,从而打通了开发、测试、部署、维护的Docker一条龙服务。也再次印证了Container大会上那句“Goodbye DevOps,Hello ContainerOps”。
一、 Docker大潮来袭,变革势在必行
1. 什么是Docker呢?

Docker On Gaia——腾讯Docker管理解决方案

Docker的英文本意是码头工人,也就是搬运工,这种搬运工搬运的是集装箱(Container),集装箱里面装的可不是商品货物,而是任意类型的App,Docker把App(叫Payload)装在Container内,通过Linux Container技术的包装将App变成一种标准化的、可移植的、自管理的组件,这种组件经过开发、调试、运行,最终非常方便和一致地运行在production环境下。

2. Docker带来了什么?
Docker的火爆,引起很多同事的跃跃欲试,包括开发,测试,运维人员,根本原因还是Docker给这些角色都可以带来很多的好处。图1是一个简单的软件workflow,按照这个workflow,我们看下Docker可以带来的好处。

Docker On Gaia——腾讯Docker管理解决方案
图 1 软件workflow
开发环节:可以简单快速的构建起开发环境,并保持统一的开发环境。比如对于公司内基于PHP的开发,所有开发人员的开发环境都可以从公司私有的registry中(Docker.oa.com)获取并运行。
构建环节:开发向测试交付版本时,再也不需要写繁琐的部署文档了,更重要的是,测试和开发可以保持一致的环境,避免了测试过程中由于环境不一致引入的“额外功”,也减少了测试人员部署系统的时间开销。
部署环节:从前运维人员拿到的一般是程序发布包,有了Docker之后,可以将应用和所有依赖在容器级别上打包,并可以做到真正的秒级部署。
管理环节:由于Docker方式的快速部署、启动特性,在scaling具有原来方式无可比拟的优势。

3. Docker对于开发者的价值
对于运维来说,Docker提供了一种可移植的标准化部署过程,使得规模化、自动化、异构化的部署成为可能甚至是轻松简单的事情;而对于开发者来说,Docker提供了一种开发环境的管理方法,包括映像、构建、共享等功能。
我们先看看程序员在搭建开发环境时遇到的一些问题:
软件安装麻烦,公司内部的标准os主要是运营os,没有针对开发环境做定制化。开发人员在初始化环境时,需要安装诸多依赖,造成团队内部每个人的环境都可能有很大不同。而且一般开发人员没有root,安装一个nginx或者是mysql都得自己下载编译安装 权限问题,没有root,一些软件无法运行,例如dnsmasq;
没有root,无法修改hosts,无法netstat -nptl,无法tcpdump,无法iptable
隔离性差,例如不同的开发人员如果在同一台主机环境下共享开发,虽然是用户隔离,但端口如果不规范可能会冲突;同一个Mysql如果权限管理不好很有可能误删别人的数据
可移植性差,例如和生产环境不一致,开发人员之间也无法共享;更严重的情况是当有新人入职时,通常需要又折腾一遍开发环境,无法快速搭建。

4. Why not KVM?
上述的有些问题可以通过在本地搭建虚拟机的方式来解决,那为什么我们不使用产生更久的虚拟机呢?使用Docker至少可以给我们带来如下好处:
(1)Image方式带来的快速复制和分发。这是最首要考虑的因素,Docker image的使用方式,对任何修改都可以很方便的build成新的image,并可以迅速的共享给其他人,有新人加入时,不必再重新安装环境。
(2)可定制化的基础image。公司可以提供一些基础开发image,比如安装好了svn client,tcr.py,升级的gcc等,但是每个开发团队需要依赖的具体环境可能还不同,因此基础image的范围可大可小,每个团队都可以贡献和共享。当然这也是有权限控制的。
(3)Docker比虚拟机节省资源。Docker不用启动单独的一整套系统,而且可以实现Docker与本机或Docker间的资源共享。Docker也可以根据需要动态的扩充/缩小CPU、内存、硬盘资源。
(4)权限问题。即使是虚拟开发机,在公司内也不是那么容易申请的,而只要安装Docker环境,即可通过Docker进行开发。
(5)性能方面。Docker的性能到底如何?可以参考业界比较认可的一份IBM在2014年7月发表的一份research report,可以看到,Docker在各个资源维度上比虚拟机具有相当大的优势。

二、 Gaia为Docker带来更多
经过腾讯大数据TDW的锤炼,Gaia(盖娅)作为云操作系统,为TDW提供了高并发、可扩展的调度平台,每天运行container数8000w+。我们看到Docker的时候,比任何人都更加兴奋,很快投入了Docker on Gaia的开发。
1. 平台架构
Docker On Gaia——腾讯Docker管理解决方案
图 2 平台架构
上图展示了Docker On Gaia的主要架构:
Gaia master 为Gaia的大脑,负责接收作业的请求、任务调度、管理slave
Gaia Slave 负责启动master发送的任务请求
Gaia Portal 是一个web服务器,用户可以通过页面提交作业
Service Registry为服务注册组件,可以实现服务的注册与发现
Docker hub是我们私有的docker镜像仓库,具有高可用行、高性能
Docker 安装在每个工作节点上,slave通过它启动docker作业
DFS 为分布式文件系统,基础组件,供集群各模块使用

2. 为Docker插上云的翅膀
Docker加Gaia的结合方式,让Docker有了一个完善的资源管理和聪明的调度大脑。
Docker可以寻找到更加适合的机器来运行,对于应用来说,真正做到了“Machines are anonymous“;
Docker可以以最大化资源利用率的方式运行,节约成本;
Docker可以自动部署,无需人工参与;
Docker不再受到机器故障的制约,可以自动“再生”,满血复活,因为Gaia会自动识别故障机器,自动迁移Docker到健康机器上;
Docker可以实现智能化scaling决策;
Docker畅游云端,充分利用云平台的大规模效应,服务于海量用户;

3. Docker registry
Gaia已经提供了公司级的docker registry服务,并且做了很多的优化,已经稳定支持线上的各种业务:
容量问题。修改registry后端的存储driver,直接使用HDFS实现存储容量无限大。
可靠性和可用性的问题。实现集群版registry,完美解决社区单机版的可靠性和可用性问题,真正实现无间断地提供服务。
性能问题。将单机版的registry扩展成registry cluster,并实现在registry server pool中的负载均衡,提升性能。
网络问题。解决了全国不同IDC的Gaia集群对registry的访问,采取就近访问的原则,不产生跨IDC流量。
自动同步官方image。Docker提供的官方image中,有很多还是非常有价值的,而官方的registry又在墙外(或内网不能访问),为此,我们自动同步docker的官方image到我们的私有仓库中。
具体可以参考:《腾讯docker“私服”:让docker爱好者玩起》。

4. 更好的docker
Docker之于用户,带来了方便的image管理、易于复制等特性,Docker基于Gaia云平台,带来了隔离性、资源管理等特性。然而,Docker有很多机制还并不完善,Gaia团队对其做了很多的扩展和优化。
Docker目前主要管理了CPU和memory的管理,然而这两种机制都存在着一定的问题。基于share机制的CPU管理对部分服务类型的application,无法保证性能。而内存管理可能问题更大,hardlimit的管理策略,不但使用户进程容易被kill,更加造成了资源的浪费,对用户估计自己业务的资源需求也非常高。Gaia在基于cgroups 类型container中引入了EMC(Elastic Memory Control)的弹性内存管理机制,可以充分利用到整个物理机的资源,并且减少了container oom kill的概率,这也使Gaia版本的Docker比虚拟机更具优势。
Docker在资源管理纬度方面只有CPU和memory两个维度,这对于共享的云环境下需要完善,也是目前相对于虚拟机不足的地方。Gaia将会引入磁盘容量管理,网络出入带宽控制以及Disk IO的控制纬度。不但在Docker层做控制,还将会引进调度器,不但实现资源的隔离,还要实现资源的保证。

三、 Duang~ Docker开发云
认识和体验到利用Docker做开发的种种便捷和优势后,Gaia团队决定把这种开发方式推广起来,让这么美好的东西惠及更多的小伙伴。我们经过不断尝试,终于推出了“Docker开发云”的beta版。
下面让我带你了解一下这朵云提供了哪些服务呢?
1. 创建容器
用户只需填写一些如资源信息、镜像信息等启动参数,就可以可以像申请虚拟机一样申请一个docker容器,
2. 登录容器
创建好开发容器后,用户即可以通过ssh登陆自己开发容器(前提是容器内已启动了sshd服务),或者通过我们的webshell直接exec进入容器,简单、安全又方便。
3. 镜像快照
相当于于对镜像进行的“保存”或“另存为”功能。在Docker里搭建好环境,想共享给同事或自己保存时,通过我们的“快照”功能,帮你快速生成一个image并push到我们的Registry上,如此快捷方便,就是这么任性。
4. 其他功能
(1)修改名称。新建的Docker开发机会有一个默认的容器名,用户可以通过修改容容器名来标示自己的开发机,便于后面的使用。
(2)清理开发机。当用户不想要某个Docker开发机时,可以通过清理功能停掉它,以释放这部分资源。
(3)“关机”/“重启”。用户可以通过页面关闭、启动或重启自己的开发容器,就像操作一台物理机一样,只是更加方便快捷。

四、 美好的未来,这不是梦
相信在我们大家的共同努力下,将来的应用从开发到上线的流程应该是这样的:
(1)开发人员申请并启动个人的Docker开发机,在已经搭建好的容器环境里编写代码、编译程序,并将调试好的环境保存至registry。无需为测试或运维同事打包代码并编写繁琐的环境部署或配置文档。
(2)测试人员从registry拉取该镜像,在与开发人员使用一样的环境配置下进行测试,不会因为环境、配置或版本的不一致而导致测试结果的异常。
(3)运维人员只需将通过测试的镜像提交到资源调度系统(以Gaia为例),输入必要的资源信息等提交参数,应用将自动部署到集群之中。Gaia会提供容灾、迁移、版本升级、资源监控等功能,还可以根据需要快速进行动态扩容缩容(如微信红包业务)。
看到如此敏捷高效的应用开发流程,你是否有些小激动呢?Come on!跟着DockerOn Gaia一起来体验先进的开发体验吧。