第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