携程Docker实践

原文地址:http://www.iteye.com/news/31468         请点击原文阅读

---------------------以下是原文----------------------

从去年底开始,携程开始计划把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、速记和现场演讲视频等参见“七牛架构师实践日” 官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql全文索引thinkphp_ThinkPHP5 使用迅搜 (XunSearch) 实现全文检索实例指导

前期准备入坑了一天,折腾的无语,个人观点:【文档太差,适合学习思路,不建议入坑】背景最近在整理全文检索解决方案注意到 xunsearch 的评价很高,在此记录一番场景描述此处作为对 xunsearch 的初次使用&#…

为何有些程序员总是想要“干掉”产品经理?

好了,我准备去和产品经理做斗争去了,请祝我好运吧!小编花了大量时间收集了很多干货编程学习资源,其中资源包括 算法,大数据,人工智能,Python,Android,iOS,Jav…

Spark算子篇 --Spark算子之combineByKey详解

一。概念 rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s%s" %(a,b), lambda a,b:"%s$%s" %(a,b))三个参数(都是函数)第一个参数:给定一个初始值,用函数生成初始值。第二个参数:c…

SecureCRT防止自动断开

今天在宁波连接上海的linux库,是外网访问内网,使用了nat123这个软件映射的。 发现SecureCRT连接后,过几分钟就自动断开,导致使用SecureCRT做跳转机的其他应用使用起来很不方便。 于是设置了下SecureCRT。

AI工程师职业规划和学习路线完整版

AI工程师职业规划和学习路线完整版 如何成为一名机器学习算法工程师 成为一名合格的开发工程师不是一件简单的事情,需要掌握从开发到调试到优化等一系列能 力,这些能力中的每一项掌握起来都需要足够的努力和经验。而要成为一名合格的机器学习算法工程师&…

oracle 多个with as

主要看多个with的格式 [sql] view plaincopy WITH T3 AS ( SELECT T1.ID, T1.CODE1, T2.DESCRIPTION FROM TB_DATA T1, TB_CODE T2 WHERE T1.CODE1 T2.CODE ), T4 AS ( SELECT T1.ID, T1.CODE2, T2.DESCRIPTION FROM TB_DATA T1, TB_CODE T2 WHERE T1.C…

mysql主键 命中率_mysql主键问题

MySQL主键一. MySQL主键设计原则MySQL主键应当是对用户没有意义的。MySQL主键应该是单列的,以便提高连接和筛选操作的效率(当然复合主键是可以的,只是不建议)永远也不要更新MySQL主键MySQL主键不应包含动态变化的数据,如时间戳、创建时间列、…

hadoop SecondNamenode

一、定义 * The Secondary Namenode is a helper to the primary Namenode. * The Secondary is responsible for supporting periodic checkpoints * of the HDFS metadata. The current design allows only one Secondary * Namenode per HDFs cluster. * The Secondary Nam…

高性能mysql 小查询_高性能MySql进化论(十一):常见查询语句的优化

总结一下常见查询语句的优化方式1 COUNT1. COUNT的作用 COUNT(table.filed)统计的该字段非空值的记录行数 COUNT(*)或者是COUNT(not nullable field) 统计的是全表的行数如果要是统计全表记录数,COUNT(*)效率会比COUNT(not nullable fie…

首席架构师徐海峰眼中的架构和出色的架构师

CSDN架构领域编辑采访了一些与会讲师,谈谈他们将在会上分享的内容、相关技术和程序人生,带你领略讲师风采。 本期我们采访的讲师是来自阅文集团首席架构师徐海峰,主要负责内容中心的网站架构和分布式存储、分布式计算工作。10年互联网开发经验…

hadoop-eclipse-plugin使用

下载hadoop安装包:http://www.carfab.com/apachesoftware/hadoop/common/hadoop-1.0.2/ 但是没有plugin,我到这个地方下载的:http://ishare.iask.sina.com.cn/f/23642243.html?fromlikecopy到你的eclipse_home的plugins下面。配置map/reduce…

java 记事本界面_JAVA/GUI程序之记事本

自上半年JAVA课程结束后,再也没有看过JAVA了,最近不是很忙,又简单的看了看,本博客纯属记录学习过程,请大神们别笑,其中错误是难免的,毕竟是新手写的博客。下面就进入我们的正题吧,复…

mapper-reducer word count 实例

统计一个文件里各单词的个数,假设这个文件很大。 原理如下图: 编写代码: WCMapper.java package zengmg.hadoop.mr.wordcount;import java.io.IOException;import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …

MR程序的几种提交运行模式

MR程序的几种提交运行模式 本地模型运行 1/在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行 ----配置path:D:\hadoop-2.7.2\bin ----配置hadoop_home:D:\hadoop-2.7.2 ----复制 hadoop.dll和winutil…

零点起飞学java视频_零点起飞学java (刘升华) 高清PDF_IT教程网

资源名称:零点起飞学java (刘升华) 高清PDF第1篇 java开发基础第1章 java概述( 教学视频:37分钟) 2第2章 基本数据类型及运算( 教学视频:52分钟) 14第3章 java程序流程控制( 教学视频:33分钟) 36第4章 类与对…

vector 修改 java_java对vector动态数组中的对象排序,以下代码有何问题,如何修改?...

展开全部package com.tx.collection;import java.util.Comparator;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;import java.util.TreeSet;import java.util.Vector;public class Student {String name;int score;public S…

hadoop的序列化与java的序列化区别

java的序列化机制 java序列化时会把具体类的数据和类的继承结构信息都序列化传递。如下图hadoop的序列化机制 序列化类的数据,但是不序列化类的继承结构信息。 网络传递的时候就少了很多流量,hadoop也不需要类的继承关系,只要类的数据就够…

ORA-08103: object no longer exists

今天工具箱报错: ORA-08103: object no longer exists 查了原因,是有session在操作表,比如插入,更新等。而工具箱这个操作刚好在select表,所以报错。-------下文是英文解释----- ORA-08103: object no longer exists错…

DAY3-“忙里偷闲”找你玩耍2018-1-11

接触Java第三天,嘿嘿,今天近代史期末考试,提前一小时交卷,回宿舍继续学习,中午去见女神姐姐了,每次见完女神姐姐都是满满地动力。这次女神姐姐告诉我们要好好规划自己的时间,早上花20分钟规划好…

基于ssm出租车管理系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本出租车管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&…