AWS 15 ECS_ECR_Fargate_DockerInAWS
ECS简介
?考试的新部分——一些棘手的问题
?Docker简介
?ECS
?集群
?服务
?任务
?任务定义
?ECR
?Fargate
?考试提示
什么是Docker?
?Docker是部署应用程序的软件开发平台
?应用程序打包在可以在任何操作系统上运行的容器中
?应用程序运行相同,无论运行在哪里
?任何机器
?没有兼容性问题
?可预测的行为
?工作量减少
?易于维护和部署
?适用于任何语言、任何操作系统、任何技术
Docker图像存储在哪里?
?Docker图像存储在Docker存储库中
?公共:Docker Hubhttps://hub.docker.com/
?查找多种技术或操作系统的基本映像:
?Ubuntu
?MySQL
?NodeJS,Java…
?私有:Amazon ECR(弹性容器注册)
Docker与虚拟机
?Docker“有点”是一种虚拟化技术,但并不完全是
?资源与主机共享=>一台服务器上的多个容器
从Docker开始
?下载Docker,网址:https://www.docker.com/get-started
码头集装箱管理
?为了管理集装箱,我们需要一个集装箱管理平台
?三种选择:
?ECS:亚马逊自己的平台
?Fargate:亚马逊自己的无服务器平台
?EKS:亚马逊管理的Kubernetes(开源)
--------------------------------------------------------------------------------------
ECS集群概述
?ECS集群是EC2实例的逻辑分组
?EC2实例运行ECS代理(Docker容器)
?ECS代理将实例注册到ECS集群
?EC2实例运行专门为ECS设计的特殊AMI
ECS任务定义
?任务定义是元数据JSON表单告诉ECS如何运行Docker Container
?它包含以下关键信息:
?图像名称
?容器和主机的端口绑定
?需要内存和CPU
?环境变量
?网络信息
?IAM角色
?日志配置(例如CloudWatch)
ECS服务
?ECS服务有助于定义应该运行多少任务以及应该如何运行
?它们确保在我们的EC2实例群中运行所需的任务数量。
?如果需要,它们可以链接到ELB/NLB/ALB
?让我们进行第一次服务!
--------------------------------------------------------------------------------------
ECR
?到目前为止,我们一直在使用Docker Hub(公共)的Docker图像
?ECR是一个私人Docker映像存储库
?通过IAM控制访问(权限错误=>策略)
?AWS CLI v1登录命令(考试时可能会询问)
?$(aws ecr get-login --no-include-email --region eu-west-1)
?AWS CLI v2登录命令(更新的,也可能在检查管道中询问)
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --
password-stdin 1234567890.dkr.ecr.eu-west-1.amazonaws.com
密码标准为1234567890。dkr。ecr。eu-west-1。亚马逊。通用域名格式
?Docker推拉:
?docker push 1234567890.dkr.ecr.eu-west-1.amazonaws.com/demo:latest
?docker pull 1234567890.dkr.ecr.eu-west-1.amazonaws.com/demo:latest
--------------------------------------------------------------------------------------
黑洞拦截 Fargate
?启动ECS集群时,我们必须创建EC2实例
?如果我们需要扩展,我们需要添加EC2实例
?所以我们管理基础设施…
?Fargate完全没有服务器!
?我们不提供EC2实例
?我们只是创建任务定义,AWS将为我们运行我们的容器
?要扩大规模,只需增加任务数量。易于理解的不再有EC2了
--------------------------------------------------------------------------------------
ECS IAM角色深潜
?EC2实例配置文件:
?由ECS代理使用
?对ECS服务进行API调用
?将容器日志发送到CloudWatch日志
?从ECR中提取Docker图像
?ECS任务角色:
?允许每个任务都有一个特定的角色
?为您运行的不同ECS服务使用不同的角色
?任务定义中定义了任务角色
--------------------------------------------------------------------------------------
ECS任务放置
?当启动EC2类型的任务时,ECS必须在CPU、内存和可用端口的约束下确定将其放置在何处
?类似地,当一个服务扩展进来时,ECS需要决定终止哪个任务。
?为了帮助实现这一点,您可以定义
任务分配策略与任务分配布局约束
task placement strategy and task placement constraints
?注意:这仅适用于带有EC2的ECS,不适合Fargate
ECS任务放置过程
?任务安排策略是最好的选择
?当Amazon ECS放置任务时,它使用以下过程来选择容器实例:
1.确定满足CPU、内存和端口要求的实例任务定义中的需求。
2.确定满足任务放置约束的实例。
3.确定满足任务布置策略的实例。
4.选择任务放置的实例。
ECS任务分配策略
?Binpack
?根据可用CPU或内存的最少量放置任务
?这将使用中的实例数量降至最低(节约成本)
?Random
?随机安排任务
?传播 Spread
?根据指定值均匀放置任务
?示例:instanceId,属性:ecs.availability-zone
?你可以把分配策略它们混合在一起
ECS任务放置约束
?distinctInstance: 区分:将每个任务放在不同的容器实例上
?memberOf:将任务放置在满足表达式的实例上
?使用群集查询语言(高级)
--------------------------------------------------------------------------------------
ECS–服务自动扩展
?在CloudWatch的ECS服务级别上跟踪CPU和RAM
?目标跟踪:针对特定的平均CloudWatch指标
?分步缩放:基于CloudWatch警报的缩放
?计划的扩展:基于可预测的变化
?ECS服务扩展(任务级别)≠ EC2自动缩放(实例级)
?Fargate自动缩放更容易设置(因为无服务器)
ECS–群集容量提供程序
?容量提供程序与集群联合使用,以确定任务运行的基础设施
?对于ECS和Fargate用户,Fargate和Fargate_现场容量提供者将自动添加
?对于EC2上的亚马逊ECS,您需要将容量提供商与自动缩放组
?当您运行任务或服务时,您定义了一个容量提供程序策略,以确定运行哪个提供商的优先级。
?这允许容量提供商自动提供你的基础设施
--------------------------------------------------------------------------------------
ECS Data Volumes – EC2 Task Strategies
ECS数据卷–EC2任务策略
?EBS卷已安装在EC2实例上
?这允许您的Docker容器装载EBS卷并扩展任务的存储容量
?问题:如果你的任务从一个转移到另一个EC2实例,它不会相同的EBS卷和数据
?用例:
?在同一实例上的不同容器之间装载数据卷
?扩展任务的临时存储
ECS Data Volumes – EFS File Systems
ECS数据卷–EFS文件系统
?适用于EC2任务和Fargate任务
?能够将EFS卷装载到任务
?在任何AZ启动的任务都可以在EFS中共享相同的数据体积
?Fargate+EFS=无服务器+数据不管理服务器的存储
?用例:持久的多AZ共享储存你的容器
ECS数据卷–绑定装载在容器之间共享数据 bind mounte
适用于两种EC2任务(使用本地EC2实例存储)和Fargate任务(容量为4GB坐骑)
?有助于分享短暂的多个容器之间的存储同一ECS任务的一部分
?非常适合“侧车”集装箱模式侧车可以用来将指标/日志发送给其他目的地(关注点分离)
--------------------------------------------------------------------------------------
ECS总结+考试提示
?ECS用于运行Docker容器,有3种口味:
?ECS“经典”:提供EC2实例以在其上运行容器
?Fargate:ECS无服务器,无需提供更多EC2
?EKS:AWS管理的Kubernetes
ECS经典
?必须创建EC2实例
?我们必须配置文件/etc/ecs/ecs。使用集群名称进行配置
?EC2实例必须运行ECS代理
?EC2实例可以在同一类型上运行多个容器:
?不得指定主机端口(仅限容器端口)
?您应该使用具有动态端口映射的应用程序负载平衡器
?EC2实例安全组必须允许ALB在所有端口上进行通信
?ECS任务可以有IAM角色来执行针对AWS的操作
?安全组在实例级别而非任务级别运行
ECR用于存储Docker图像
?ECR与IAM紧密结合
?AWS CLI v1登录命令(考试时可能会询问)
?$(aws ecr get-login --no-include-email --region eu-west-1)
?“aws ecr get login”生成“docker login”命令
?aws ecr get-login-password --region eu-west-1 | docker login --username AWS --
password-stdin 1234567890.dkr.ecr.eu-west-1.amazonaws.com
?Docker推拉:
?docker push 1234567890.dkr.ecr.eu-west-1.amazonaws.com/demo:latest
?docker pull 1234567890.dkr.ecr.eu-west-1.amazonaws.com/demo:latest
?如果EC2实例(或您)无法提取Docker映像,请检查IAM
Fargate
?Fargate无服务器(无需管理EC2)
?AWS为我们提供集装箱,并将其分配给埃尼
?Fargate容器由容器规范(CPU/RAM)提供
?Fargate任务可以有IAM角色来执行针对AWS的操作
ECS其他
?ECS确实与CloudWatch日志集成:
?您需要在任务定义级别设置日志记录
?每个容器将有不同的日志流
?EC2实例配置文件需要具有正确的IAM权限
?在任务中使用IAM任务角色
?任务布置策略:组合、随机、分散
?具有目标跟踪、步进缩放或计划的服务自动缩放
?通过容量提供商实现集群自动扩展
--------------------------------------------------------------------------------------