dev-ops与docker的最佳实践 qcon2016 北京站演讲

27
DevOps & Docker 的的的的的 的的的的 / 的 的

Upload: chinanetcloud

Post on 16-Apr-2017

1.314 views

Category:

Internet


3 download

TRANSCRIPT

Page 1: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps & Docker 的最佳实践云络科技 / 王 寒

Page 2: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

自我介绍• 王寒• 香港科技大学• IBM ,微软• 云络科技 (ChinaNetCloud) 架构师

Page 3: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

1 DevOps 的现状

内容

3 DevOps 的基础

2 DevOps 的四个阶段

4 DevOps 案例分享

5 Docker 的优势与挑战 6 DevOps 的愿景

7

Page 4: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps

DevOps 是一种在促进开发与运维的交流与合作的条件下,以自动化工具与流程为基础,更快速,高效和稳定的实现环境搭建,代码的部署,交付,测试以及发布的一种文化和趋势。

文化 合作 自动化 高效

Page 5: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps 的四个阶段传统简单自动化

持续交付与静态 Docker

增强与动态 Docker 全面持续交付与自动化

DevOps

Page 6: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

第一阶段:传统简单自动化• 编写脚本• 简单的自动化工具,如 Ansible

Page 7: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

第二阶段:持续交付与静态 Docker

• 实现持续交付 (Continuous Integration)

• 静态 Docker 系统,没有调度,扩展等自动化机制,人工决定资源的调配,系统对于动态负载的弹性较弱

Page 8: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

第三阶段:加强与动态 Docker

• 不断改进持续交付以及实现自动化测试• 支持更复杂的应用架构• 动态 Docker 集群,自动调度,恢复,服务发现等,利用

Swarm , Kubernete 等工具

Page 9: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

第四阶段:全面持续交付与自动化• 全自动化的阶段• Infrastructure – as – code 整个系统和应用是在 Git 中的一系列文件,包括 云(基础设施) 服务器 应用 等一切• 非常理想化也非常困难

Page 10: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps 的基础Full Version Control 版本控制代码提交,复查,合并等

Environment/System abstraction 抽象环境满足多环境部署,配置独立且自动化Full-automated Testing 自动测试功能和依赖关系的测试自动化

Full Continuous Integration 持续集成持续性测试任何变更,持续部署各个环境

Page 11: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps 案例分享 — 背景

版本控制环境抽象化自动化测试

完全持续交付

GITLAB

Docker

自动脚本Jenkins

• 实现 DevOps 第二阶段• 应用环境在 AWS

• 每两周发布新版本,每日推送更新 3-4 次

Page 12: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

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

Page 13: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

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

Page 14: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

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

Page 15: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps 案例分享 — Docker 打包Commit

Package DockerImage Docker Registry

Build

Testing

Push

Pull Run

• 代码提交打包• 创建 Docker Image

• 注册 Docker Registry

• 多环境部署就绪

Page 16: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps 案例分享 — Docker 部署• Docker 可以帮助实现环境抽象化,有如下两种方式:• 起 Docker container 时定义 -e environment , 自动匹配相对应的环境配置 , 弊端是每次环境配置变更,都要重新制作 Docker image 并且重新部署所有环境• 另外一种方法是用 Docker 和 CoreOS (etcd) 相配合,将环境变量和 image 分离,由 etcd 服务来发现和管理配置,每个 image 中包含不同环境的代码和配置,实现数据和配置的解耦

Page 17: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps 案例分享 — Jenkins & Docker

Page 18: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps 案例分享 — Jenkins

• 利用 Jenkins

• 变更持续更新• 多环境测试

Page 19: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

Docker 的优势• 高性能,运行时性能可以提升• 工具,有系统的工具去动态管理环境,发现服务,存储等• 灵活,将应用和系统“容器化”,更加便捷部署应用• 敏捷,可以快速复原和更新变更• 轻量,在一个服务器上可以部署很多容器• 便宜,来源,免费,低成本• 生态系统,越来越受欢迎

Page 20: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

Docker 的挑战监控

日志排障

安全

网路

Page 21: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

Docker 的挑战 — 监控• 基本监控: Docker 是否正常运行• 三种监控技术: Cgroup 文件, Docker API 和 Docker 命令行• 硬盘空间的检测需自定义• 如何监控 Container 里的服务

1. Agent 在 Container 内2. Agent 在 Container 外 Zabbix Low level Discovery

Page 22: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

Docker 的挑战 — 日志

应用日志 ELK工作专用容器GELF

Page 23: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

Docker 的挑战 — 故障排查

Bash Shell

Container 修改难度大

无法 SSH到 Container

Page 24: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

Docker 的挑战 — 安全• Docker 安全补丁复杂• Container 与 虚拟机的隔离• Docker 的安全标准与规范

Docker 的挑战 — 网络• 多种模式• 动态系统• 集群工具

1. Links — 端口 2. Selinux — 增强安全

Page 25: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

DevOps 的愿景

自动伸缩

动态 Docker Green/Blue 滚动

• 通过 CloudWatch 设定监控阈值• 与 AWS Auto -Scaling 相结合 AWS Launch Configuration

• 集群化• 自动调度,恢复,服务发现• Swarm, Fleet, Kubernete, Meso 等等

• 严格执行蓝/绿测试规则• 通过 AWS CLI/API 将一台服务器从 ELB 中取出• 放入新的 ELB 下部署且测试• 再将此服务器放入生产 ELB下,另一台取出,滚动部署

Page 26: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲

总结• DevOps 是一种文化,趋势• 我们建议实现第二阶段的 DevOps

• Docker 是实现 DevOps 的重要技术,要做应对挑战的准备• Dev 做巧, Ops 做好

Page 27: Dev-Ops与Docker的最佳实践 QCon2016 北京站演讲