阅读更多

1顶
0踩

行业应用

原创新闻 携程Docker实践

2016-03-29 14:03 by 副主编 mengyidan1988 评论(1) 有7365人浏览
从去年底开始,携程开始计划把Docker引入到携程的云平台,这是系统研发部一部分的工作任务,携程系统研发部的架构师李任现在就在协同研发部从事Docker引入的工作。

携程的Docker实践是怎样的?以下正文给你答案:

容器对携程的价值
为什么要在携程内部推容器?肯定是想获得容器带来的好处。公共的好处大家都会知道,但有一个可能是携程特有的痛点,因为携程有大量的应用是部署在Windows上,因此携程也很希望将来Windows的容器会给它们带来一些提高和帮助。

目前携程为容器在内部的推动制订了一些路线图。携程希望尽量以虚拟机的方式来运行容器,这主要是考虑到它带来的优点是对现有的应用和体系的影响小,携程希望尽量以平滑的方式过度到容器中。但是,目前在推广上会有一个困难,大家会在你推销它的时候质疑,因为改变很小意味着带来容器特殊的优势很少。而这个确实是它的缺点。另外目前在携程内部主要是通过 OpenStack来管理云架构的基础设施。

携程部署Docker的架构



图一


图一是携程目前第一阶段部署容器的架构,它选择了一个比较简单的切入点,通过Nova Docker Driver做一些改造来管理容器的生命周期。本身容器的调度、管理和在OpenStack上用管理虚拟机是一样的。图一最上面的Remedy是携程内部的流程管理系统,它会通过一些接口去访问OpenStack 的整个controller的API。

因为携程早期是Windows,所以有很多VMWare的虚拟机,它们有专门针对EXSi的nova compute节点,图一右边是KVM的计算节点。引入Docker实际上是在这个架构里面增加了一个新的节点类型,即专门跑容器的Docker的一个节点。



图二


除了容器本身生命周期之外,网络的架构复用了现在OpenStack管理网络的方式。前面是计算资源的架构,同时也用OpenStack对网络进行管理。基本上容器的网络使用方式和虚拟机在OpenStack里使用网络的方式是很一致的。

图二是一个容器的网络图,可以看到一个Docker容器有一对veth的设备。一个在它自己的namespace里面,一个加入到OVS bridge里面,如果这等同于虚拟机的话,下面就是虚拟机的tap设备,之后就和虚拟机网络的PaaS是一样的。通过这个bridge 连到internal 的bridge,右边是出口的 bridge ,中间会做vlanid转换,这样可以接到系统的二层网络里面去。这个是经典的VLAN模型。

Docker容器运行
携程Docker的容器的运行为了尽可能的讨好用户,更容易让他们接受,现在是以虚拟机的模式进行。在应用部署方面跟现在虚拟机部署一样,拿到一个容器之后通过现在的发布系统部署进去。因为是高度接近虚拟机的环境,所以对于应用的发布系统,用户基本上感知不到。

现在携程内部虚拟机的发行版,主要以CentOS6.4为主,但是他们也开始迁移到CentOS7.1,所以携程在Docker容器上支持这两个发行版。以前的虚拟机的方式会导致运维的人上去可能要做很多运维的工作,所以要考虑到权限问题。但有些权限很危险不能给他们,否则会造成很多问题。比如sys_boot,它在里面可以将宿主机重启,如果你把sys_boot给出去的话,这个是很可怕的。

镜像有很多种方式,而携程现在选的方式是有一定历史原因的。因为携程OPS有一套基础的环境规范。为了让ops原有的设施能继续工作,这个环境要尽可能演示。但悲剧的是,它没有一个很精确的代码能去描述环境是怎么样的,而只能用一个做好的自动安装的光环去抓取到环境。所以当时携程选择直接把自己的虚拟机的镜像拉过来,然后从虚拟机QCOW2的镜像去踩点至Docker的镜像。

携程以虚拟机的方式运行,它运行起来不是很正统的只有一个进程的容器的方式。携程在一个容器里面起了很多进程,而进程像虚拟机一样需要有个初始的守护进程,所以携程也需要这样的守护进程。守护进程很多,而守护进程该如何选择?如果大家看过相关文章的话,有很多的讨论。除了目前已有的守护进程外也涌现着很多新的守护进程。但是比较悲剧的一点,携程还有一个运用规范,运用规范规定了启动服务,在CentOS7.1下一下子很难撼动他们的地位,只能向他们靠拢。

另外,如果容器里面Cgroup这个文件系统是可读的,这也意味着在容器里面,分到的CPU内存资源可以随意改变,这个可能在公有云计算是不可接受的事情,但是私有云里面目前只能这样。

还有很重要的一点是网络。前面说到携程网络是和OpenStack的那套网络管理一样的方案,其实它有很多手段来实现这些。目前因为携程用novadocker,顺便说一下novadocker 常不靠谱,没法用。携程以前与京东交流,他们给携程出的建议第一句话就是不要用novadocker。novadocker采用的方式,其实和pipework是很类似的,也就是它把容器运行起来,然后进去,通过执行一些命令,再配上网络。但它有一个问题,其实容器在启动到配上虚拟的网卡,这个过程其实是有一段时间的。

携程用systemd,而它启动是很快的,这就意味着,有一些服务起来的时候,后面需要配套网络,如果你的应用对于这个是有依赖的就会问题。另外,这个网络的配置信息Docker是不可见的,这意味着Docker不知道这段网络配置。如果Docker daemon把容器重启的话,它是没办法恢复网络配置的,这个是很严重的一个问题。比如到了1.9之后,支持libnetwork做网络的配置。这样就不会有前面丢失网络信息的问题。携程现在还是用novadocker 的方式,本来打算用libnetwork,但是很悲摧的是,上线之前,携程一直使用Ubuntu,后来临上线,到生产的时候,运维说,他们希望统一宿主机版本全部用CentOS。最后没办法,只能把Netron agent这些东西全放到容器里面跑,再跑 novadocker等。

Docker监控
前面部署其实只是解决了实例运行的一些问题。运维的人的支撑对于一个真的能运营的产品很重要,所以对于Docker来说,假如真正要上业务,监控是很重要的一个话题。

携程一般在Linux上监控数据,大多数是来自proc文件系统,proc文件系统在Docker容器里面,我们知道Docker容器做隔离其实提供namespace ,对于PID做得很好的namespace ,这个没有问题,网络统计也是很准确的。但是很多很关键的CPU、内存使用这些在proc系统里是看宿主机。还有一些监控的系统比如sysinfo sysconf这些是没有任何的秘密空间提供的。所以这些数据来源是很成问题的。

对于Docker来说,我们监控该怎么办?其实现在有一些方式,比如说在宿主上监控所跑的容器现在也有方案,比如说Docker很早就提供了stats命令,可以看到每一个容器的读数,包括跨设备网络。还有一些比如像cAdvisor方案。为什么会看这个?因为在携程用的方式是zabbix,每个虚拟机里面都跑zabbix。这种方式是在宿主机上。但是下面每个虚拟机的监控数据对于携程来说,其实与现有的监控的方案不是非常的匹配,因为他们希望能够看到每个虚拟机单个作为一个的对象,能看到它的监控数据,而不是在宿主机上看到下面那些挂的。包括监控、告警这些都是有关联的。所以这些方式其实跟现有的监控的方案是有整合的成本在里面的。

如果想尽量减少修改,还有一种是容器内部监控它。之前听蘑菇街的分享,他们直接把监控工具改掉。还有一个是很多人很关心的一个项目,它基本的原理用了files文件系统,实现了对proc文件系统的代理,它帮你代理、修改proc文件系统的访问,把数字计算一下获得一个正确的。正确的数据其实都是从cgroup里面读出来的。

这个方式解决了这个问题之后。我们可以在容器内部获得正确的监控数据,包括启动时间,上线后怎么登进去了,怎么看到这个容器给它分配的资源是多少。一看宿主机48,怎么分了这么多给它?但是还是有一些问题,比如前面改内核者或者改工具,维护这些改动的成本在里面,还有一些部署。所以也有一些问题。

后来携程想到另外一种折中的方式。这个方式是说,它们通过用Linux的Id prelod的机制,劫持对proc文件的访问,真正需要获得的数据是参考IXCFS的实现,重新计算一下,也是通过从cgroup里面计算你分配了多少内存,使用了多少,CPU是怎样的,去计算的一个资源。当然CPU load挺麻烦的,需要额外支持。



图三


图三中有个例子。可以看到,这个容器里面,用了劫持的方案计算了之后,可以看到大概分了两个G的内存。把环境变量去掉之后,看这个宿主机,大概一百多个G的内存。它的工作方式,比如说,如果是free,就是命令,它真正在运行的时候,会有Id so init去加载二进制文件的时候,会先加载我们的so 文件,它会把真正的open库的实现给劫持掉。到这里是一个标准的劫持的过程。

之后free读文件的内存信息的时候,它其实读的是/proc/meminfo文件,劫持过来的时候,真正的逻辑到so文件里面,它读这个文件知道是干什么。实际上它读cgroup和lxcfs是一样的,计算然后把它保存到一个临时文件里面去。最后返回的是这个临时文件fd,Free会读这个临时文件。原理就是这样的。

其实携程在容器上还有很多事情要做。比如说,不光是为交付给用户的计算环境提供容器,其实想把自己的一些很多东西都放到容器上去。比如携程的OpenStack平台也想跑到Docker里面去,因为OpenStack很复杂,部署起来也是件很头疼的事情。

现在携程是用虚拟机的方式跑容器,其实是很重的。所以也想直接基于镜像的方式来应用持续交付。这就牵涉到很多东西,包括调度,打包,各种系统,包括进项的版本管理等。

将来的微软的windows Container也是对携程影响很大的一个技术。另外如何进一步获得更高的的资源调动,如何动态的调度这些资源也是携程需要关注的地方,所以接下来携程还会有很多事情要做。

本文是携程系统研发部的架构师李任日前在「七牛云主办的架构师实践日——容器核心技术与最佳实践」的演讲内容整理。PPT、速记和现场演讲视频等参见“七牛架构师实践日”官网
  • 大小: 26.5 KB
  • 大小: 15.3 KB
  • 大小: 38.5 KB
来自: 极客头条
1
0
评论 共 1 条 请登录后发表评论
1 楼 jiandingzw 2016-03-30 12:51
https://wiki.openstack.org/wiki/Docker

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 携程Docker安全实践分享.pdf

    目录 Docker现状及其安全问题 携程Docker安全实践 Docker安全展望 Q&A

  • 干货 | DevSecOps在携程的最佳实践

    作为业务覆盖机票、酒店、度假、汽车票、火车票、支付等各个方面,为全球用户提供服务的在线旅游网站,携程每周都会有数以万计的应用发布次数,如何保证每一次发布代码的安全性成为了DevSecOps实践中最大的挑战。...

  • 2.携程架构实践 --- 移动大前端

    第2 章 移动大前端 前端从 "人工化" => "工具化" => "工程化" => "智能化"。 我们将所有用户涉及的操作的终端都理解为前端范畴,前端逐渐被...携程开发了MCD平台,用于移动端和H5前端的集成发布。 前.

  • Spark SQL在携程的实践经验分享

    本文根据张翼老师在2018年5月13日【第九届中国数据库技术大会】现场演讲内容整理而成。讲师简介:张翼,10年互联网老兵;2015年3月加入携程,携程的大数据平台技术总监,带领团队构建稳...

  • 携程Redis多数据中心双向同步实践

    推荐阅读: 世界的真实格局分析,地球人类社会底层运行原理 不是你需要中台,而是一名合格的...【中台实践】华为大数据中台架构分享.pdf 华为的数字化转型方法论 华为如何实施数字化转型(附PPT) 超详细280页D...

  • 携程Redis容器化实践\n

    背景携程大部分应用是基于CRedis客户端通过集群来访问到实际的Redis的实例,集群是访问Redis的基本单位,多个集群对应一个Pool,一个Pool对应一个Group,每个Group对应一个或多个实例,Key是通过一致性hash散列到每...

  • Docker教程:docker的概念及安装

    Why docker 对于运维来说,Docker提供了一种可移植的标准化部署过程,使得规模化、自动化、异构化的部署成为可能甚至是轻松简单的事情;而对于开发者来说,Docker提供了一种开发环境的管理方法,包括映像、构建、...

  • SpringBoot/Spring Cloud/Docker

    第九阶段模块一 SpringBoot 1. SpringBoot基本应用 1.1 约定优于配置 ​ 官方: Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你...

  • React Native实践之携程Moles框架

    编者:本文来自携程框架研发部高级经理魏晓军在第二期【携程技术微分享】上的分享,以下为整理后的文字实录。关注携程技术中心微信公号ctriptech,可获知更多微分享课程信息。 责编:钱曙光,关注架构和算法领域...

  • DevSecOps在携程的最佳实践

    作者简介Living,携程高级基础安全工程师,关注应用安全、渗透测试方面的技术。一、DevSecOps面临的挑战作为业务覆盖机票、酒店、度假、汽车票、火车票、支付等各个方面,为全球用户...

  • spark针对sqlserver_张翼:Spark SQL在携程的实践经验分享!

    2015年3月加入携程,携程的大数据平台技术总监,带领团队构建稳定,高效的数据平台和系统,保证了携程数据的高速发展;加入携程之前,在大众点评负责数据基础架构,从0开始组建团队,搭建起点评的数据分析平台;平时...

  • 2023年7月抖音美妆品牌社媒营销电商分析报告-里季、VC美妆、娇润泉

    本文详细分析了2023年7月抖音平台上美妆品牌「里季、VC美妆、娇润泉」的社媒营销和电商业绩。通过对销售额、直播销售、视频销售、热门商品、粉丝画像等方面的深入剖析,揭示了各品牌在抖音平台的成功之道。里季凭借创始人紫橙董事长的直播带货取得显著成绩,VC美妆则依靠素颜霜爆款和品牌自播,娇润泉通过洁面乳和精华液的推广,借助尾部达人视频切片和头部达人直播实现销售增长。

  • subscription-manager-rhsm-certificates-1.28.21-3.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统subscription-manager-rhsm-certificates-1.28.21-3.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf subscription-manager-rhsm-certificates-1.28.21-3.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

  • 力士乐驱动调试软件13v16中文版:伺服驱动与液压同步调试的技术详解及应用

    内容概要:本文详细介绍了力士乐驱动调试软件13v16中文版的特点及其在伺服驱动和液压同步调试中的应用。软件具有中文界面,便于理解和操作,涵盖参数设置、监控、诊断和调试四大模块。参数设置模块支持通过输入数值或拖动滑块调整电机速度和加速度;监控模块提供实时数据监测和图表展示;诊断模块帮助排查和解决问题;调试模块适用于高级调试如PID参数调整。此外,文中还分享了多个实用技巧,如批量修改参数、故障代码速查、动态链接库调用等。 适合人群:从事工业自动化、机电一体化领域的工程师和技术人员,尤其是对伺服驱动和液压控制系统有一定经验的人群。 使用场景及目标:①用于伺服驱动系统的调试,确保电机参数正确配置和稳定运行;②用于液压同步控制项目的调试,提高同步精度;③通过丰富的案例和技巧分享,帮助用户高效解决常见问题,提升工作效率。 其他说明:本文不仅介绍了软件的基本功能,还深入探讨了实际调试过程中的一些经验和技巧,为用户提供全面的指导和支持。

  • 计算机绘图-讲稿.pdf

    计算机绘图-讲稿.pdf

  • 计算机二级access历年真题及讲解.pdf

    计算机二级access历年真题及讲解.pdf

  • 计算机复习小结.pdf

    计算机复习小结.pdf

Global site tag (gtag.js) - Google Analytics