aws容器服务详解
TRANSCRIPT
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
2017-02-23
AWS容器服务详解从基本概念到最新特性
议程
• 容器与云
• 容器服务基本组件
• 最新特性
容器与云
计算平台的演进
Amazon EC2 Amazon ECS AWS Lambda
服务器 服务器上的容器 无服务器
容器与云
InfrastructureContainer
Code
Infrastructure
ContainerCode
VM
Infrastructure
ContainerCode
VMOn IaaS Cloud用户关注VM、容器和代码,并管理容器集群
On Container Cloud (CaaS/PaaS)用户关注容器和代码
On Serverless Cloud用户只关注代码
Cloud
User
Cloud
Cloud
User
User
Docker
构建Docker应用的要素
负载均衡
容器集群管理
权限管理
监控与日志
服务部署与发现
容器服务基本组件
什么是 Amazon ECS?
可扩展的容器管理 灵活的容器部署 AWS平台集成 为扩展性设计
管理单元与任务定义(Task Definitions)
Volume Definitions
Container Definitions
Shared Data Volume
PHP App Time of day App示例
组成
2个Container
1个Volume
… ...
… ...
一个TASK可以包含一个或多个 Container
Essential to our Task
Create and mount volumes
Expose port 80 in containerto port 80 on host
10 CPU Units (1024 is full CPU),500 Megabytes of Memory
Task Definitions: 基于JSON描述
Amazon ECS工作原理
ALB ALB
AZ 1 AZ 2
user / scheduler
Scheduler
Cluster State Service
Placement Engine
Event Stream
服务部署与发现
调度器与服务(Service)(Container Requirement->Task Definition -> Task -> Service)
App 1App2 Vol A
App 3App4 Vol B
Task Definition 1
Task Definition 2
Service 1
Service 2
Task 1
Task 1
Task 1
Task 2
Task 2
App X 定义ContainerVol X定义存储
每个Task包含1个或多个Containerers
Service Auto Scaling –服务自动扩展
Task 1
Task 1
Task 1
自动扩展
自动缩减
服务发现:通过ECS Services 和 Route 53实现
Route 53 private hosted zone通过VPC DHCP Option设置搜索路径结合ELB定义ECS Service为每个ELB创建CNAME
服务发现与第三方软件
CONSUL
By CoreOS / Go / Raft / HTTP / KV
By Apache / Java / ZAB / TCP / KV
By HashiCorp/ Go / Raft / HTTP / KV/Built-in Service Discovery/Multiple Datacenter
负载均衡
ELB新服务:Application Load Balancer
Classic ELB –固定端口绑定
EC2主机
Service 1
Container Port 80Host Port 8080
Service 2
Container Port 80Host Port 8081
EC2主机
Service 1
Container Port 80Host Port 8080
Service 2
Container Port 80Host Port 8081
Load BalancerService 1Port 80
Load BalancerService 2Port 80
Application Load Balancer
Container Instance
ALB -实现容器灵活部署
Container
Container
Target Group
Container
Target Group
监控与日志
Monitoring with Amazon CloudWatch
容器日志记录与分析
ElasticSearch
Kinesis Firehose
Kinesis
Lambda
Customer Application
EMR Hive
Redshift
EMR Spark
权限管理
用于Task的IAM Roles通过环境变量传递Credential
在S3上存放IAM Policy
最新特性
Amazon ECS工作原理
ALB ALB
AZ 1 AZ 2
user / scheduler
Scheduler
Cluster State Service
Placement Engine
Event Stream
任务置放引擎Task Placement Engine
置放约束和属性(新)
名称 示例
AMI ID attribute:ecs.ami-id == ami-eca289fb
Availability Zone attribute:ecs.availability-zone == us-east-1a
Instance Type attribute:ecs.instance-type == t2.small
Distinct Instances type=“distinctInstance”
Custom attribute:stack == prod
任务置放的原理
Cluster Constraints
Custom Constraints
Placement Strategies
Apply Filter
满足 CPU、内存和端口要求
按照位置、虚机实例类型、AMI或者自定义属性约束进行过滤
找到满足spread或binpack置放策略的虚机实例
选择最后确定的虚机实例
默认支持的置放策略
Binpacking Spread Affinity Distinct Instance
置放策略叠加
Spread tasks across Zonesand Binpack within each Zone
事件流Event Stream
接收和处理实时事件
开始处理事件的三个步骤
第一步:创建CWE Rules 第二步:创建SNS Topic 第三步:向SNS发送事件
基于事件的服务发现
app1-tst à 10.1.0.11db1-tst à 10.1.0.14app2 à 10.1.0.16db2 à 10.1.0.18my-app à 10.1.0.20
websrv1à 10.1.0.1websrv2à 10.1.0.2websrv3à 10.1.0.4app-dev1à 10.1.0.9app-dev2à 10.1.0.5app-dev3à 10.1.0.8
db-devà 10.1.0.19
Blox
什么是Blox?
选项(Choice)
控制(Control)
开发者体验(Developer Experience)
基于Blox构建方案
scheduler cluster state service
t2.small t2.small t2.small
Blox: Daemon Scheduler
t2.small t2.small t2.small
scheduler cluster state service
t2.small t2.small t2.small
新特性总结
Thank you!
扩展性与延迟测试
ECS CLI与 Docker Compose兼容
“Task Definition”
在线更新Task Definition版本:滚动更新(创建新Task),结合ELB实现平滑过渡
ELB
V1 V1
ELB
V1 V1 V2
ELB
V1 V1 V2 V2