AirJD 焦点
AirJD

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

Docker架构私有云的机遇和挑战 by 王振威

发布者 docker
发布于 1460940513393  浏览 6551 关键词 Docker, DevOps 
分享到

第1页

Docker 架构私有云的机遇和挑战

• 王振威



第4页

内容梗概

• 关于 Docker • 为什么变迁 • 架构变迁三步走 • Docker 的问题



第5页

Docker ? 私有云?

• Docker :一门新兴的容器技术 • 私有云:企业内部云服务平台



第6页

Docker 为什么适合?

• 构建快:应用+运行环境 = 镜像 • 启动快:容器相比于虚机,更轻量级 • 迁移快:应用以容器的方式标准化交付,标

准化运行



第7页

看下我们的架构图



第9页

事出有因

• 混乱的环境: Java, Golang, Ruby • 混乱的配置:Upstart, authorized_keys,

dependency,各种脚本 • 混乱的监控:ErrorReporter,Message • 混乱的资源:计算资源与预估不匹配



第10页

有因必有果

• 环境不匹配导致,测试跟生产不一致 • 配置混乱导致事故频发 • 监控不统一导致运维难上加难 • 资源效率低导致成本很高却达不到相应目标



第12页

DevOps 变迁原则

• 即面向未来,又不过于激进 • 即追求稳定,又不过与保守



第13页

我们团队的做法

• 技术选型



OS

Container

Service Discovery

Config Container Management



Windows/Ubuntu/CentOS/Redhat/Ubuntu Rocket/RunC/Docker Consul/Etcd JSON/INI/YAML

K8s/Mesos/Swarm/Compose/None



第14页

架构变迁三步走遵循要点

• 平滑演进,向后兼容 • 微服务,无状态化 • 多实例,硬件分离



第15页

第一步:Dockerize



• 无状态化应用 • 构建脚本和

Dockerfile • 装入容器



• 无状态化你的应用

• 编写应用构建脚本和 Dockerfile

• 把应用装入 Docker 容器



第16页

最简单的 Dockerfile

# Base FROM java:jdk-7

COPY ./.src/target/app-1.0.jar /app/

# ENTRYPOINT WORKDIR /app CMD [ "java", "-Dfile.encoding=UTF-8", "-jar", "./app-1.0.jar" ]



第17页

第二步:管理你的容器

• (更直接) docker run / start / stop / restart

• (更灵活) docker remote API • (更强大) 编排系统



第18页

管理工具的选择

• conf 文件配合 docker remote API • 根据实际情况,选择 docker 的一些特性,

例如文件系统,网络模式,资源限定等 • 编写便捷的操作工具 cli / web



第19页

配置示例



第20页

更新命令操作示例



第21页

DockerUI 界面



第22页

第三步:釜底抽薪

• 即使用 dockerize 的容器逐步替换系统中所 有基础

• 包括,监控系统,负载均衡系统,服务发现, 日志中心,消息中心等等基础业务组件

• 使计算存储分离,多实例,高可用,等这些 概念有机结合



第23页

替换监控组件示例



第24页

形成如下架构



第25页

一些细节

• LB 系统: Nginx / HAProxy / confd / Etcd

• 监控系统: Prometheus / cAdvisor / Http Metrics

• Docker Registry V1 • Docker 网络:Host • Docker 日志:Mount 宿主机



第26页

Prometheus报表示例



第27页

架构的发展方向

• Job-Tool 进化成 Job DashBoard ,集成监控 (cAdivsor),日志(ELK)等功能

• 利用监控系统的硬件指标,根据业务用量实现自 动扩容,缩容

• 分析各个业务对硬件资源的使用量和高低峰,设 计混布实现提升硬件使用率

• docker image 的构建和管理 • 动态调整 container 的资源限制



第28页

Docker 的问题

• Docker Image: 食之无味,弃之可惜 • Docker Daemon: 这货管得事太多了, 还相

当危险 • Docker Net: 容器就是容器,不是虚拟机 • Docker Logs: syslog 和 jsonlog 都不尽如

人意



第29页

Docker 的坑

• Docker 1.9.1 版本以下,容器标准输出输出大量 数据,会导致内存泄露,从而导致 Docker Daemon crash

• Docker Daemon 在频繁创建删除容器(每天几 十万个)会出现性能严重下降等问题,只能重启 Docker Daemon



第30页

标准输出问题

• 必要条件一:输出数据量大 • 必要条件二:输出数据快 • 必要条件三:输出被 Attach



第31页

标准输出问题

• 重现方式一: docker run ubuntu yes “something long”

• 重现方式二:docker run -i ubuntu dd if=/dev/zero of=/proc/self/fd/1 bs=1M count=1000

• Issue: https://github.com/docker/docker/issues/14460

• Fix By: https://github.com/docker/docker/pull/17877



第32页

并发性能问题

• 测试环境比较复杂,还在进一步研究中,欢 迎各位共同研究



第33页

Q&A



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