AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

Docker在点评私有云平台的应用 by 盛延敏@大众点评网

发布者 devops
发布于 1458089574307  浏览 6880 关键词 DevOps, Docker 
分享到

第1页

Docker在点评私有云平 台的应用

大众点评网 盛延敏



第2页

主要内容

— 用户场景和设计理念 — 点评的PAAS平台 — 碰到的问题和解决方案 — 总结与展望



第3页

用户场景



机器的管理包括,新机器的安装,初始化和上线



CI



应用的管理包括动态申请docker实例,下线docker实例等 Application Deploy 应用部署和升级包括升级中间件版本,部署应用新版本等



Console& Workflow



Docker Host & Container lifecycle Management

Container & Host Management



Monitor metrics



Ops CAT



Docker Host



Docker Host



Docker Host



Image Pull



Image Push(tomcat/nodejs/redis)



Docker Registry



第4页

几个设计理念

— Docker container实例一旦创建,需要运行很长时间,

表现出一个虚拟机的特性。(can we not put all into docker image?)

— Docker container和KVM一样,拥有一个唯一的内部IP. — 根据内部VLAN规划,IPAM需要自己实现 — Docker container可以被ssh登陆访问,账号分为管理和

只读等。



第5页

PAAS vs DOCKER



第6页

主要组件

Docker Orchestration Docker provision App Lifecycle Service Finding

App Version Management Messaging



第7页

Controller

— 调度请求落到集群中 — 根据物理机器的资源动态状况, 请求的CPU/内存等大

小进行动态调度

— 考虑物理机房的AZ概念,将应用在物理上尽量离散 — 可以进行按tag的混布或者不混布



第8页

Agent

— 接收controller的指令,创建和回收docker instance。 — 为docker rootfs准备mount目录,应用对应的程序包和

中间件包通过mount挂载,方便升级和维护 (Can we put them into dockerfile?)

— 对管理的docker container做健康检查和资源上报。

— 接收中间件管控中心调用,完成中间件包的升级和应用

重启。



第9页

应用版本升级

router

7.1add
  r outer 
 entr y

SLB & ZK



deploy CI



7.ADD_ROUTE_REQUEST



1.Allocate
  Repositor y
  and Deploy
  app



controller



3.U pload
  app
  war



离线备份 repository



2.ALLOCATE_REPOSITORY_REQUEST



5.Download
  app
 war



App tracker



Docker
 
 host



4.NEW_INSTANCE _AND_DEPLOY_WAR _REQUEST

PaaS agent



8.INSTANCE_DEPLOYED

health 8.INSTANCE_DEPLOYED manager



Docker instanc

e Docker instanc e



6.
 Restar t
  ser vice

Docker server



-­‐-­‐ nats -­‐-­‐ http



第10页

针对docker的定制

— 网络使用bridge的方式暴露内网VLAN的IP — IP使用自己实现的管理和分配模块 — 增强监控功能,包括垃圾文件的自动清理



第11页

基于VLAN的网络定制



Docker Host 1



Container A 10.101.1.31/24

Container B 10.101.1.32/24



10.101.1.11/24 br0



Container C 10.101.1.33/24



eth0



Docker Host 2



Container A 10.101.2.31/24

Container B 10.101.2.32/24



10.101.2.11/24 br0



Container C 10.101.2.33/24



eth0



VLAN X

Physical Network

VLAN Y



第12页

监控数据收集到CAT(Central
  Application
 Tracking)



第13页

Dockerfile的维护

— 问题:多种Runtime谁负责来写Dockerfile?

— 我们的经验是

— 建立基础镜像 — 各种Runtime在基础镜像上增加自己独有的东西 — 由开发和PaaS运维一起来做 — 定期更新镜像,修改bug



第14页

物理机批量上线

— 问题:初始化和配置是一件非常耗时的事

— 我们的经验是

— 使用Ansible完成批量安装和配置工作 — Controller暴露API完成物理机的入库操作 — 集成到界面,可以随时查看升级和安装的log等



第15页

Problem

— Docker VM 的磁盘I/O较慢 — centOS 使用了devicemapper作为存储



第16页

Solution

— Device mapper 使用裸设备,而不是loop device上。



第17页

Problem

— 在Docker VM内使用top/vmstat/free 等cpu/memory

的资源监测有问题

— Docker VM和 Docker Host共享 cpu/memory等资源,

不能有效的分辨出Docker VM的资源



第18页

Solution

— 给内核打补丁, 使得在Docker VM内部执行的操作只统计

当前Docker VM所在的 cpuset/memory等。

— 小插曲: nodejs npm crash问题



第19页

Problem

— Docker Host物理机随机崩溃 — 打开Vmcore-dmesg可以看到是dm_thin针对device

mappder的操作引起了crash



第20页

Solution

— 规避该问题的方法,设置blk discard为false。

docker –d --storage-driver=devicemapper --storageopt dm.mountopt=nodiscard --storage-opt dm.blkdiscard=false



第21页

Problem

— Puppet
 不能更新Docker VM里的配置。

— Docker VM的rootfs主要来自

— Layed image
 produced
 b y
 D ockerfile — Volumes
 produced
 i n
 host
 machine
 b y
 PaaS agent
 (dynamically
 

generated
 a t
 create
 time)

— Puppet更新的原理是先删除旧的再创建一个新的。而

Docker VM里的挂载卷是不能删除文件的(文件在mounted
  dir下面是可以删除的)



第22页

Solution

— 将不可以删除的挂载卷文件复制到可写得rootfs层。



第23页

总结与展望

和点评devops结合,提供端到端的用户体验 抽象和标准化应用的运行时环境 提供类似KVM的单虚拟机用户体验 高密度部署

快速弹性伸缩



第24页

开源

— https://github.com/dianping/Dolphin



第25页

THANKS



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。