雪球的Docker实践经验

个人简介 高磊,雪球SRE团队高级工程师。2011年硕士毕业于北京邮电大学,从事缓存、数据等分布式系统的研发工作,现在在雪球负责底层基础设施的开发和运维,致力于探索Docker等基础设施在创业公司的最佳实践。

百度技术沙龙是由百度主办,InfoQ负责策划、组织、实施的线下技术交流活动,每月一期,每期由1个话题,2场演讲以及Open Space开放讨论环节组成。旨在为中高端技术人员提供一个自由的技术交流和分享的平台。每期沙龙会邀请1名百度讲师分享百度在特定技术领域的成果及实践经验,同时还会邀请1名优秀的互联网公司或企业技术负责人对同一话题进行分享。活动主要面向开发者、技术负责人、项目经理、架构师等IT技术人员。我们的口号是:畅想,交流,争鸣,聚会。

   

1. 高磊,你好,欢迎来到InfoQ,Qclub Docker专场,我是Infoq的郭蕾,很高兴能够采访你,请先做一下自我介绍。

高磊:我是来自雪球SRE团队的高磊,我2011年,毕业于北京邮电大学,工作后一直从事分布式缓存,数据等工作。现在在雪球负责基础设施,以及一些文件性的开发和维护工作,Docker是我们这边工作的一个重点。

   

2. 那雪球是什么时候开始使用Docker的?当时为什么会考虑使用Docker呢?

高磊:我们大概在12年末13年初就开始接触Docker了。主要考虑是创业公司的硬件资源有限,我们希望把硬件资源能够充分利用,所以主要是成本上的考虑。当时有两种选择,一个是传统的虚拟化,一个是容器,我们认为,Docker这种容器技术,既轻且快,又比较小,适合于我们对它的设想,所以就采用了Docker技术。

   

3. 那你能介绍一下现在的Docker使用场景吗?

高磊:我们在使用上大概有两个方向,一个是从容器的角度,利用容器的这些优点,就是刚才提到小快轻,把一个Git中的代码直接映射成为一个Docker的Image,把这个Image给Run起来,这是从容器的角度。从另一个角度,我们希望在推进这项Docker技术的时候,不要让业务同学过多地受到干扰,所以在交互体验上,我们尽量让Docker接近于一些VM的交互体验,就像一些SSH-Crud,所以做了一些这样的工作在上面。

   

4. 那生产环境呢?

高磊:生产环境实际上是结合了容器VM,在交互上更接近VM,但是在部署的力度上,它仍然是一个容器的力度。

   

5. 既然老的一些业务迁移到Docker上,那内部是怎么推进的呢?

高磊:其实这个是主要是推动业务层信任Docker这个东西,我们有一下几个方向。第一是它的稳定性。我们要证明这个Docker的技术是成熟稳定的,经过一些填坑,大概稳定性这块解决了。还有一个是交互,就刚才我强调的,我们希望让业务团队在使用Docker环境的时候,像使用VM一样,能够简单地从SSA上去看Log,我们做了一些样的工作在上面。这样方便推动业务。还有一个方面呢,可能是一些Docker因为它的隔离并不是完全隔离,在这上面有一些局限性,这块目前没有特别好的解决办法。我们希望把这样一些底层的东西放在我们这个SRE团队来做,业务同学只需要关心自己的应用层就OK,屏蔽一些困扰,大概是做了这3个方面工作。

   

6. Docker非常适合部署一些微服务架构的应用,那你们的一些老的业务可能不是微服务的架构,要往Docker上迁移需要更改代码吗?

高磊:实际上我们分成两部分,一部分是无状态的服务,无状态服务实际上迁移是比较容易的,它不需要更改代码,不需要做很多这种业务层的东西,他只需要关心,区分自己的只读部分和这个非只读部分,比如说日志,把这个给区分好就OK,那么对于有状态的服务,我们现在没有迁移到Docker,比如说像Redis,像DB,我们仍然使用传统的物理存储,物理机在跑。我们认为Docker比较适合跑这种可方便扩容的无状态服务。

   

7. 那你能谈一谈,你团队在使用Docker以后有哪些的优势吗?

高磊:首先Docker解决了我们的成本的问题,提高了物理机的利用率,这是一个很大的一个优点。其次呢,我们认为整个团队,他会形成这么一种概念,就是我的一个工程,代码的一个版本,它正好就对应着一个Docker的Image,也就说一个Docker的Image它的力度就是我们服务的最小力度,那么有了这么一个边界的区分以后,可以方便地从这个力度来进行扩容,缩容。

   

8. 那么Decker File这些东西还是需要你们开发人员去写是吗?

高磊:不写,开发人员不关心这个,我们有统一的底层的Docker File,开发人员只需要把自己的代码提交到Gitapp中,通过Ghost打包,Push。它会有一个统一的文件名,Push进这个Docker File中。

   

9. 你们的工作流中使用Docker遇到过哪些问题,踩到过哪些坑呢?

高磊:Docker的坑太多了,大概分成三个方面。因为Docker它的整个流程是一个Build,然后Ship Run的流程,在Build的过程中,可能主要是一些规范现象,Docker File以及如何让业务无感知。这里有一个比较严重的问题,就是Docker在Build的过程中,它使用一个临时容器,这样会导致一些网络问题,比如外网不通等问题,但这个还OK,我们自己可以解决。然后在Ship过程中,Ship过程主要是registry,实际上我们没有做太多的registry工作,因为它不够好用,我们自己做了一些镜像的索引,自己来存储,管理用户权限。最困难的Run这一部分,Run这部分的DMON,DMON的问题在于网络模式的选择,以及以前遇到的比较严重的一个大坑,就是ip_forward会自动打开Docker DMON,打开ip_tables规则,导致一些异常的毛次流量。这个问题好多公司都遇到过,然后还有一些容器方面的,容器方面的可能主要在于,如何去固化容器IP,以及固化容器IP对应的Map地址,我们做了一些网络方面的一些工作,最近我们用了Docker1.5,1.5它有一些监控的新特性,我们发现检测也做了很多坑在里面,比如说像内存不准,Blog没有做一个很好的、方便的解析。大概整体来说分成这三个方面,目前来看,运行还OK,可能会有更多的坑在前面等着。

   

10. 那你刚才提到你们会对网络进行一些修改,把容器的IP固定下来,那其实这样的话,是不是就和有状态、无状态有点背离了,要做可扩展的话是怎么做呢?

高磊:我们有大概的一个IP段,有一个相当于地址池这么一个东西,但是仍然需要把已知的IP给固化下来。原因是,如果我们没有一个好的服务发现,那么监控和管理就必须要通过一个固定IP去管理。

   

11. 那接下来,你们在Docker的使用方面有哪些新计划?

高磊:首先,如果遇到比较严重的坑,最重要的还是去填坑,维护它的稳定性。另一方面,我们希望在后测的角度做一些工作,把这个部署系统完善起来,因为我们的部署系统实际上仍然是稍微偏裸露一些,也就是说我们希望对于部署完全以Docker Iamge为力度,打一些标签,比如自动与CR的集成,对资源的监控,从后视的角度去做统一的管理和调度。也许我们会有一些比较明显的弹性需求,也会通过这个部署系统来开发实现。

   

12. 有很多公司想使用Docker生产环境,你有什么好的建议吗?

高磊:我建议首先把一些次要的业务,比如把内部服务先迁移过去。第一步迁移一定是要无状态的,有状态的服务,一旦稳定性出现问题会非常可怕。在迁移的过程中,首先要考虑选取什么样的网络模式,雪球的实践经验是非常有参考意义的,力度仍然是Image的力度,但是交互方式是一个类似于VM的交互方式,这样可以方便地快速迁移。当迁移过去以后,可以继续去探讨是使用 Host Only还是Net方式,还是你有自己的一个迁移部署方式。

你可能感兴趣的:(雪球的Docker实践经验)