第1页
云端基于Docker微服务应用 的架构实践
闫⻓长海 阿⾥里云技术专家
第2页
自我介绍
• 闫长海 花名:易嘉 • 阿里云计算专家,负责容器服务研发 • 曾任职IBM公有云Bluemix研发 • E-mail: changhai.ych@alibaba-‐inc.com
• 微信:chaghaiych
第3页
大纲
• 什么是微服务 • 容器管理微服务的挑战 • 容器微服务管理 • 微服务的持续交付
第4页
加速应用交付,缩短梦想距离
传统IT系统
大兵团作战 Dev vs. Ops 缓慢变化
整体式应用
(monolithic app)
物理服务器、 存储、网络
今天
战术小队 DevOps 快速迭代 微服务
云计算
第5页
微服务
• 小 按照业务单一职责设计 • 独 立进程,独立部署 • 轻 量级的通信机制 • 松 耦合
第6页
用Docker部署微服务
• Docker是一种轻量级的操作系统虚拟化方案
– 细粒度资源隔离 - 敏捷,降低企业成本 – 定义了环境无关的标准的交付、部署规范 - 良好可移植性,提高运维效率
• 当想把Docker容器当做轻量级虚拟机时, 请三思!
- 正确姿势 • 每次代码提交重新构建镜像 • 禁止修改运行中的镜像 • 利用volume保存持久化数据
Docker容器方式
App A Layer
App B1
App B2
Layer
Docker Engine Host OS
Hypervisor
Server HW
Containers
第7页
云阿里端云漫对步容器:社开区始的支 D持o cker 之旅
• 配置安装 – 安装Docker Toolkit – 安装云驱动 • ECS driver for Docker Machine • AWS, GCE, 等等.
• 在阿里云创建Docker运行环境
图片
Docker Machine
export
ECS_ACCESS_KEY_ID=xxxxxx
export
ECS_ACCESS_KEY_SECRET=xxxxxx
docker-‐machine
create
-‐-‐driver
aliyunecs
mytest
eval
"$(docker-‐machine
env
mytest)"
docker
run
-‐d
nginx
第8页
容器编排 - Docker Compose
version: '2'
services:
wordpress:
image: wordpress:4
ports: - 80
容器
restart: always
links:
- db:mysql
network_mode: bridge db:
wordpress
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
restart: always
volumes:
- data:/var/log/mysql
network_mode: bridge
volumes:
data:
driver: local
mysql
• 优点
– 简单好用,便于开发 容器
– 编排容器、存储和网络
• 不足
db
– 面向开发和部署,不支 持自动化运维
data
volume
⼀一键部署:docker-compose up ⼿手动伸缩:docker-compose scale wordpress=3
第9页
容器集群管理 - Docker Swarm
• 优点
– 支持标准的 Docker API – 灵活、可插拔的容器调
度
• 不足
– 面向容器、缺少微服务 支持
第10页
容器即服务 Container as a Service
等
Docker
Cloud
(tutum.co)
Docker
Swarm
API
Compose
template
Amazon
EC2
Container
Service
ECS
API
Compose
template/ Task
definiOon
Google
Container
Engine
Kubernetes
API
Pod/Service
阿里云
容器服务
Docker
Swarm
API
Compose
template
第11页
阿里云容器服务
控制台
阿里云容器Hub
集群资
源 管理
服务注
册发现
生命周
期管理 动态资
源调度
Container
Service
$docker-‐compose
up
$docker
run
NeNtetwowrokriknig
ng
Agent
ClLCulosutgsgetir
enr
g
MgMgmt
mt
WaWtacthcehr
er
MoMLnAiooMtLnpgiooogtrpin
gi iongtnriiggo
n/nrigg
/ng
ApApp
Ap
p p
ApApp
A p
p p
AAppp
A p
p p
ApApp
A p
p p
ApApp
Ap
p p
ApAp
p p
ECS
SLB
VPC
ESS
Logging
Monitoring
与阿里云服务 无缝集成 …
Container
Cluster
for
customer
A
VVMVMM
N
No
Nododede
e
DCooCcknoetnart
i aEninengrei
rEn
nEegn
igniene
Container
Cluster
for
customer
B
VVMVMM
N
No
Nododede
e
NeNtetwowrokriknig
ng
Agent
LCloCuglsgutisentr
g
e r
MgMgmt
mt
WaWtacthcehr
er
MonAiMtLpoooMrpLn
gi ioogtninggio
ngtriigon/nrigg
/ng
App
ApAp
p p
App
A pAp
p p
App
A pAp
p p
App
A pAp
p p
App
ApAp
p p
ApAp
p p
任意Docker镜像,compose模板 完全兼容现有 Docker API,工具
CoCnotnatianienre
rE
nEgnigniene
Docker
Engine
Dedicated
and
isolated
customer
domains
第12页
阿里云容器服务
数据库
MySQL,, Mongo …
缓存服 务
消息队 列
中间件
CI/CD
源代码 管理
三方扩 展
开发交付
应用
SaaS 负载均衡、路由
PaaS
应用 接入
日志服 务
服务注册、发现
同步、异步通信
灰度发布、不间断升级 服务
云监控
容器编排
资源调度 弹性伸缩
集群管理
路由
调度
Docker镜像仓库 内容
编排模板
Docker 容器引擎
容器
存储
支持块存储、对象存储、网络文件系统 三方扩展
网络
支持经典/VPC网络,支持混合云
三方扩展
访问控 制
三方扩 展
公共云
专有云
管控集成
第13页
服务编排部署 – 增强生命周期管理
• 健康监测 • 路由注册 • 容器监控 • 日志收集 • 集群部署 • 云服务引用(RDS, KVStore …)
Wordpress
web: image: 10.32.161.160:5000/wordpress:4 ports: - "80" environment: - WORDPRESS_AUTH_KEY=changeme restart: always links: - db:mysql labels: aliyun.logs: /var/log aliyun.probe.url: http://container/test aliyun.probe.initial_delay_seconds: 10 aliyun.routing.port_80: http://wordpress aliyun.scale: 3
db: image: 10.32.161.160:5000/mysql environment: MYSQL_ROOT_PASSWORD: password restart: always labels: aliyun.logs: /var/log/mysql
日志收集
健康监测
路由注册
集群部署 自定义监控
SLB/ RouOng
Web
Web
DB
Web
第14页
服务调度扩展
• 服务密切关系
– E.g.
MySQL主从部署(anO-‐affinity
)
• 全局部署
– 每个节点一个实例 – E.g.
安装监控日志Agent到每个节点
• 细粒度资源限制
- CPU
share 等
• 容器重新调度
– reschedule:on-‐node-‐failure
– 网络,存储
master: image: tutum/mysql:5.6 environment: - MYSQL_USER=user - MYSQL_PASS=test - REPLICATION_MASTER=true - REPLICATION_USER=repl - REPLICATION_PASS=repl ports: - "3306"
slave: image: tutum/mysql:5.6 environment: - MYSQL_USER=user - MYSQL_PASS=test - REPLICATION_SLAVE=true - affinity:service!=master ports: - "3306" links: - master:mysql
• 跨可用区高可用支持 – availability:az==2
14
第15页
存储管理
rouOng
• 利用Docker Volume Plugin 支持不同的存储类型
– 块存储 云盘 – 对象存储 OSSFS – 网络文件系统 NFS
• 支持第三方存储插件
OSSFS
OSSFS
ghost:
OSSFS
image: registry.aliyuncs.com/acs-sample/ ghost:0.7
links:
- db:mysql
ports:
MySQL实例 /
- "2368" environment:
- GHOST_URL=http://my-ghost-blog.com
labels:
aliyun.scale: '3'
restart: always
db:
external:
第16页
服务注册
Spring
Cloud
@ConfiguraOon
@ComponentScan
@EnableAutoConfiguraOon
@EnableEurekaClient
@RestController
public
class
ApplicaOon
{
public
staOc
void
main(String[]
args)
{
new
SpringApplicaOonBuilder(ApplicaOon.class).
web(true).run(args);
}
}
applicaOon.yml:
eureka:
client:
serviceUrl:
defaultZone:
hep://localhost:8761/eureka/
容器服务
- 自动服务注册
- 自动服务发现 - 编排支持
第17页
容器服务发现
linking
with
DNS
alias
ServiceB:myservice
Service
A
Service
B
DNS
alias
ServiceA
ServiceB
ServiceC
Discovery
Service
ServiceB:myservice
Linking
with
load
balancing
Service
RouOng
Health
checking
SophisOcate
load
balancing
Service
Service
Custom
Discovery
Service
Service
Service
Service
第18页
容器服务弹性路由
http://*.company.com
集群(VPC内)
负载均衡SLB 路路路由由由服服服务务务
labels: aliyun.routing.port_80: http:// shopping.company.com
http://shopping.company.com
容器 容器 容器
容器 容器 容器
Docker Engine
Docker Engine
监控
监控
容器服务 Agent
容器服务 Agent
虚机节点
虚机节点
http://payment.company.com
容器 容器 容器 Docker Engine 监控 容器服务 Agent 虚机节点
Discovery
Service
第19页
服务监控报警
• 集成的容器监控
- Aliyun 扩展会根据标签来收集和聚合监控数 据及日志数据
- aliyun.monitoring.script:/opt/mp.sh - aliyun.logs:/var/log/mysql/
- 插件机制支持采集及集成扩展 - 内置阿里云云监控集成
- 支持三方扩展
- aliyun.monitoring.addone.influxdb:
• 开源监控方案
– cAdvisor在每个节点上进行监控指标数据采 集
– InfluxDB 负责收集汇总监控指标数据,和查 询
– Grafana/Prometheus 来展现监控指标
虚机节点
Agent
Monitori ngAgent
Docker
Daemon
Grafana/Prometheus
InfluxDB
虚机节点
Agent
Monitori ngAgent
Docker
Daemon
第20页
完整的容器化持续交付流程
提交代码
开发者
源代码 管理
Webhook 通知 下载代码构建
阿里云镜 像服务
Push
Docker镜像和 Compose 模板用于集成、 测试和部署
配置 管理
拉取镜像
CI Server
CD Server
测试环境 预发环境
如果构建和UT失败反馈开发者
阿里持续交付平台
生产环境
阿里云容器服务
第21页
容器即服务-Container-as-a-Service
第22页
谢谢
云栖社区Docker团队博客 https://yq.aliyun.com/teams/11
阿里云容器服务 https://www.aliyun.com/product/containerservice/