26
GOPS 2016 全 球 运 维 大 会 · 深 圳 站

Gops2016 云端基于Docker的微服务与持续交付实践

  • Upload
    li-yi

  • View
    424

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Page 2: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

云端基于Docker的微服务与持续交付实践

易立,阿里巴巴 云栖社区专家

Page 3: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

日程

•  Docker与微服务

•  云端生产环境部署

•  应用Docker化改造

•  持续交付流程实践

Page 4: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

交付方式变革改变了全球经济格局

Docker 改变软件交付方式

“没有集装箱,不可能有全球化。”——《经济学家》

Page 5: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Docker in Alibaba

•  支付宝,淘宝的应用运维Docker化 •  阿里百川 TAE •  阿里云容器服务 •  高性能计算 HPC •  …

Page 6: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

加速应用交付,缩短梦想距离

物理服务器、存储、网络

整体式应用 (monolithic app)

缓慢变化

微服务

快速演化

云计算

传统IT系统 今天

Dev vs. Ops DevOps

大兵团作战 战术小队

Page 7: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Docker 与虚拟化技术 •  Docker是一种轻量级的操作系统虚拟化方案

–  细粒度资源隔离 - 敏捷,降低企业成本

–  定义了环境无关的标准的交付、部署规范 - 良好可移植性,提高运维效率

•  结合Docker容器和虚拟化技术

–  利用虚拟机提供弹性基础架构,更好的安全隔离,动态热迁移

–  利用容器技术实现简化应用部署、运维;实现弹性应用架构

VMs

App A App B1 App B2

Bins & Libs Bins & Libs Bins & Libs

Guest OS (RHEL)

Guest OS (Ubuntu)

Guest OS (CentOS)

Hypervisor

Server HW

Containers App A App B1 App B2

Bins & Libs Bins & Libs

Operating System

Server HW

Docker容器方式

Docker Engine

Hypervisor

Page 8: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Cloud Native Computing

Microservice

Docker DevOps

•  定义

–  微服务应用

–  容器化交付

–  DevOps

–  动态管理

•  挑战

–  服务发现、路由

–  服务监控

–  服务生命周期管理

–  自动化运维

Page 9: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Docker Machine

图片

阿里云对容器社区的支持

云端漫步:开始 Docker 之旅

•  配置安装

–  安装Docker Toolkit

–  安装云驱动

•  Aliyun ECS driver for Docker Machine

•  AWS, GCE, 等等.

•  在创建Docker运行环境

exportECS_ACCESS_KEY_ID=xxxxxxexportECS_ACCESS_KEY_SECRET=xxxxxxdocker-machinecreate–driveraliyunecsmytesteval"$(docker-machineenvmytest)"dockerrun-dnginx

Page 10: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

生产环境中使用Docker

您还需要:

集群管理

网络

存储

调度

编排

图⽚来源 http://www.popularmechanics.com/home/how-to/g172/shipping-container-homes-460309/

Page 11: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

容器即服务 Container as a Service

DockerCloud(tutum.co)DockerSwarmAPIComposetemplate

AmazonEC2ContainerServiceECSAPIComposetemplate/TaskdefiniKon

GoogleContainerEngineKubernetesAPIPod/Service

DockerSwarmAPIComposetemplate

等等

Page 12: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

容器集群管理 - Docker Swarm

•  优点 –  支持标准的 Docker API

–  灵活、可插拔的容器调度

•  不足 –  面向容器、缺少微服务支持

Page 13: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

容器编排 - Docker Compose

•  优点 –  简单好用,便于开发 –  编排容器、存储和网

•  不足 –  面向开发和部署,不

支持自动化运维

version: '2'services: wordpress: image: wordpress:4 ports: - 80 restart: always links: - db:mysql network_mode: bridge db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: password restart: always volumes: - data:/var/log/mysql network_mode: bridgevolumes: data: driver: local

wordpress dbmysql

容器 容器

data

volume

docker-compose up:docker-compose scale wordpress=3

Page 14: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

阿里云容器服务

Docker

Docker

/VPC

MySQL,, Mongo …

CI/CD

Page 15: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

什么应用可以运行在容器中

Web RESTAPI

CI/CD

Stateful

Long-Life

Stateless

Short-Life

Page 16: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Docker化应用实战: Ghost 博客

ghost: image: ghost:0.7 ports: - "2368:2368”restart: always

-  - 

Page 17: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Ghost 博客 – 高可用集群 1 ghost: image: acs-sample/ghost:0.7 links: - db:mysql ports: - "2368” labels: aliyun.scale: '3' aliyun.routing.port_2368: 'http://myblog' restart: always db: image: acs-sample/mysql:5.6 environment: - MYSQL_ROOT_PASSWORD=example - MYSQL_DATABASE=ghost - MYSQL_USER=ghost - MYSQL_PASSWORD=ghost_db_password restart: always

-  引入负载均衡

-  Ghost容器使用共享数据库

-  数据库容器适合开发,不适合生产环境

rouKng

MySQL

Page 18: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Ghost 博客 – 高可用集群2 ghost: ! image: acs-sample/ghost:0.7 ! links: ! - db:mysql ! ports: ! - "2368" ! environment: ! - GHOST_URL=http://my-ghost-blog.com! labels: ! aliyun.scale: '3' ! restart: always !db: ! external: ! host: rds******.mysql.rds.aliyuncs.com! ports: ! - 3306 ! environment: ! - MYSQL_DATABASE=blog ! - MYSQL_USER=ghost ! - MYSQL_PASSWORD=*********** !

-  使用Database as a Service或已有数据库

-  平衡过渡

rouKng

MySQL

Page 19: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Ghost 博客 – 高可用集群3

•  利用Docker Volume Plugin

支持不同的存储类型 –  块存储 –  对象存储 –  网络文件系统

•  支持第三方存储插件

•  注:Docker Engine的缺陷

rouKng

OSSFS OSSFSOSSFS

MySQL

Page 20: Gops2016 云端基于Docker的微服务与持续交付实践

容器化持续集成和交付:Build Once and Deploy Everywhere

Dockerfiles 或 Docker Compose模板

Pull

Push

Pull Pull Pull

利用Docker镜像实现软件交付

Container-as-a-Service 无缝上云

在开发、测试和生产环境中保证应用的一致性

支持版本管理

快速上线和回滚

本地开发 环境

Page 21: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

简化的持续交付流程

Web hook Web hook

Docker Compose

Docker

Page 22: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

管理 CIServer

阿里云镜像服务

CDServer

开发者

如果构建和UT

Push

Docker镜像和Compose 模板用于集成、测试和部署

完整的持续交付流程

Webhook通知

阿里持续交付平台

Page 23: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

不可变架构(immutable infrastructure)

•  利用不可变性来运维基础架构: 一旦实例化后,永不改变;只会用

另外的一个实例正确的取代它

•  优点

–  避免环境间的不一致

–  简化部署复杂度

–  低成本回滚

V.S.

Pet 牛群CaZle

Page 24: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

Docker:不可变架构梦想成真

•  当您想把Docker容器当做轻量级虚拟机时, 请三思!

•  正确姿势

–  每次代码提交重新构建镜像

–  尽量利用Dockerfile自动构建镜像 •  避免手工修改运行中的容器并提交为镜像

–  尽量不要使用latest作为镜像标签

•  Tips: 利用Git Commit作为镜像tag一部分,便于追踪

–  利用volume保存持久化数据 •  应用和数据分类

唯一不变的就是变

化;不可变架构就

是为了更快的变化

Page 25: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

跨主机容器网络 – 云端实践

Docker 原生Overlay网络 (VXLAN)

node1

defaultbridge

c1 c2 c3

defaultbridge

c4 c5 c6

defaultbridge

c7 c8 c9

overlay

node2 node3

VSwitch VSwitch

VRouter

利用VPC网络方案

VPC

defaultbridge

c1 c2 c3

eth0

defaultbridge

c4 c5 c6

eth0

defaultbridge

c7 c8 c9

eth0

node1 node2 node3

路由

192.168.100.1 192.168.100.2 192.168.100.3

172.18.1.1/24 172.18.2.1/24 172.18.3.1/24

eth0 eth0 eth0

172.18.1.0/24>node1172.18.2.0/24>node2172.18.3.0/24>node3…

Page 26: Gops2016 云端基于Docker的微服务与持续交付实践

GO P S 2016 全 球 运 维 大 会 · 深 圳 站

谢谢

云栖社区阿里云容器服务团队博客

https://yq.aliyun.com/teams/11