dev-ops与docker的最佳实践 qcon2016 北京站演讲
TRANSCRIPT
DevOps & Docker 的最佳实践云络科技 / 王 寒
自我介绍• 王寒• 香港科技大学• IBM ,微软• 云络科技 (ChinaNetCloud) 架构师
1 DevOps 的现状
内容
3 DevOps 的基础
2 DevOps 的四个阶段
4 DevOps 案例分享
5 Docker 的优势与挑战 6 DevOps 的愿景
7
DevOps
DevOps 是一种在促进开发与运维的交流与合作的条件下,以自动化工具与流程为基础,更快速,高效和稳定的实现环境搭建,代码的部署,交付,测试以及发布的一种文化和趋势。
文化 合作 自动化 高效
DevOps 的四个阶段传统简单自动化
持续交付与静态 Docker
增强与动态 Docker 全面持续交付与自动化
DevOps
第一阶段:传统简单自动化• 编写脚本• 简单的自动化工具,如 Ansible
第二阶段:持续交付与静态 Docker
• 实现持续交付 (Continuous Integration)
• 静态 Docker 系统,没有调度,扩展等自动化机制,人工决定资源的调配,系统对于动态负载的弹性较弱
第三阶段:加强与动态 Docker
• 不断改进持续交付以及实现自动化测试• 支持更复杂的应用架构• 动态 Docker 集群,自动调度,恢复,服务发现等,利用
Swarm , Kubernete 等工具
第四阶段:全面持续交付与自动化• 全自动化的阶段• Infrastructure – as – code 整个系统和应用是在 Git 中的一系列文件,包括 云(基础设施) 服务器 应用 等一切• 非常理想化也非常困难
DevOps 的基础Full Version Control 版本控制代码提交,复查,合并等
Environment/System abstraction 抽象环境满足多环境部署,配置独立且自动化Full-automated Testing 自动测试功能和依赖关系的测试自动化
Full Continuous Integration 持续集成持续性测试任何变更,持续部署各个环境
DevOps 案例分享 — 背景
版本控制环境抽象化自动化测试
完全持续交付
GITLAB
Docker
自动脚本Jenkins
• 实现 DevOps 第二阶段• 应用环境在 AWS
• 每两周发布新版本,每日推送更新 3-4 次
DevOps 案例分享 — 环境与架构• AWS 中国• 开发语言 (Java / Nodejs)• Docker (CoreOS)• Redis (Elastic Cache)• MySQL (RDS)• Postgres (RDS)• MongoDB cluster (EC2) ELK (EC2)• Hadoop (EC2, self host) Solr (EC2) • ELB, S3, SQS, SNS
DevOps 案例分享 — 环境与架构
Docker 1Docker 2
. . .
Docker 9
Internal ELB
Docker 1Docker 2
. . .
Docker 9
Docker 1Docker 2
. . .
Docker 9
…...
Port: 50002
Port: 50001
Port: 50011Port: 500n1
VM (n) VM2 VM1
API GATEWAY (Docker 9)
Public ELB
Port: 4080
Port: 50000, 50010 … 5000n0
Port: 50010
Node.js (Stateless)
Port: 443
RedisSession Control
VM IP
Docker IP
Mapping
DevOps 案例分享 — 环境与架构Commit
Build
Package DockerImage
Docker Registry (Testing)
Test Testing
Deploy Testing
Dcoker Registry (UAT + Prod)
Deploy Prod
Deploy UAT
Staging UAT
Test ProdLocal
AWS
DevOps 案例分享 — Docker 打包Commit
Package DockerImage Docker Registry
Build
Testing
Push
Pull Run
• 代码提交打包• 创建 Docker Image
• 注册 Docker Registry
• 多环境部署就绪
DevOps 案例分享 — Docker 部署• Docker 可以帮助实现环境抽象化,有如下两种方式:• 起 Docker container 时定义 -e environment , 自动匹配相对应的环境配置 , 弊端是每次环境配置变更,都要重新制作 Docker image 并且重新部署所有环境• 另外一种方法是用 Docker 和 CoreOS (etcd) 相配合,将环境变量和 image 分离,由 etcd 服务来发现和管理配置,每个 image 中包含不同环境的代码和配置,实现数据和配置的解耦
DevOps 案例分享 — Jenkins & Docker
DevOps 案例分享 — Jenkins
• 利用 Jenkins
• 变更持续更新• 多环境测试
Docker 的优势• 高性能,运行时性能可以提升• 工具,有系统的工具去动态管理环境,发现服务,存储等• 灵活,将应用和系统“容器化”,更加便捷部署应用• 敏捷,可以快速复原和更新变更• 轻量,在一个服务器上可以部署很多容器• 便宜,来源,免费,低成本• 生态系统,越来越受欢迎
Docker 的挑战监控
日志排障
安全
网路
Docker 的挑战 — 监控• 基本监控: Docker 是否正常运行• 三种监控技术: Cgroup 文件, Docker API 和 Docker 命令行• 硬盘空间的检测需自定义• 如何监控 Container 里的服务
1. Agent 在 Container 内2. Agent 在 Container 外 Zabbix Low level Discovery
Docker 的挑战 — 日志
应用日志 ELK工作专用容器GELF
Docker 的挑战 — 故障排查
Bash Shell
Container 修改难度大
无法 SSH到 Container
Docker 的挑战 — 安全• Docker 安全补丁复杂• Container 与 虚拟机的隔离• Docker 的安全标准与规范
Docker 的挑战 — 网络• 多种模式• 动态系统• 集群工具
1. Links — 端口 2. Selinux — 增强安全
DevOps 的愿景
自动伸缩
动态 Docker Green/Blue 滚动
• 通过 CloudWatch 设定监控阈值• 与 AWS Auto -Scaling 相结合 AWS Launch Configuration
• 集群化• 自动调度,恢复,服务发现• Swarm, Fleet, Kubernete, Meso 等等
• 严格执行蓝/绿测试规则• 通过 AWS CLI/API 将一台服务器从 ELB 中取出• 放入新的 ELB 下部署且测试• 再将此服务器放入生产 ELB下,另一台取出,滚动部署
总结• DevOps 是一种文化,趋势• 我们建议实现第二阶段的 DevOps
• Docker 是实现 DevOps 的重要技术,要做应对挑战的准备• Dev 做巧, Ops 做好