ECS-弹性容器服务 - Part 2

news2024/10/5 18:32:26

68-ECS-弹性容器服务 - Part 2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oAERVSEG-1672280676983)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c4c855d0-a7e8-44e1-91d0-4d88b6a43f4d/Untitled.jpeg)]

Hello大家好,我们今天继续ECS的内容。

Service load balancing

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7i0kdplJ-1672280676984)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/452c18be-1fa1-4222-8f0e-5963a70148c3/Untitled.jpeg)]

之前的课时讨论过,在ECS集群上创建的ECS服务支持AWS负载均衡器,而应用程序负载均衡器和ECS服务通常是一个很好的搭配,因为应用程序负载均衡器很好的支持了容器的动态主机端口映射。

有了这个特性,ECS集群的单台EC2实例上,就可以运行同一个ECS服务的多个任务。然后当您将ALB的目标组与您的ECS服务相关联后,ALB可以在多个任务之间进行路由流量、负载均衡,而且最最重要的是,ECS会自动在ALB目标组中注册或者注销容器。

我举个例子帮助大家理解:

比如这是我们的ECS集群的其中的一个EC2实例,我们上节课讲过,这是用于运行ECS任务或者服务的对吧?

那现在假设要在这台EC2上运行4个Nginx容器,并对外提供服务,所以需要创建一个ECS服务,服务及任务定义的内容把容器的相关信息和数量都配置好。

因为是在单台EC2上运行,端口不能冲突,Nginx的容器要使用动态端口映射,所以假设我们这4个Nginx以及对应的端口分别为:

  • 端口8081的Nginx的容器,
  • 端口8082的Nginx的容器,
  • 以及端口8034和8084这4个容器。

所以,目前的情况是,单台EC2实例上,运行了4个Nginx容器,使用动态端口映射对外开了4个不同的端口。那这种情况下,我们如何对外提供Nginx服务呢?

在这种场景就可以创建一个应用程序负载均衡器和目标组,使其对外提供http或者https的访问,然后在创建这个Nginx的ECS服务时,在服务定义中指定到这个目标组。

这样的话,启动任务时,比如这4个Nginx容器,这些容器和端口组合会注册到这个目标组,并且外面访问的流量会从负载均衡器路由到这4个容器,而且后面新增或者停止Nginx容器时,会自动在ALB目标组中注册或者注销容器,都是自动完成的,而不需要人为干预。

好的,以上,**通过ALB和ECS服务,当同一台EC2实例上运行多个相同的容器提供服务时,外部访问可以通过ALB路由流量到这些容器的动态端口,实现流量的负载均衡。**这样的话:

  • 即使只有单台EC2实例,也能够最大程度的增加应用的弹性;
  • 通过增加运行的容器数量,能够最大化的利用EC2的资源;
  • 以及当需要更新应用时,可以采用滚动升级的方式,而不会影响应用对外提供服务。

ECS安全相关和网络模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KZvl0mOp-1672280676985)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b8635777-9de2-4bdc-93ef-d05cbe9652c2/Untitled.jpeg)]

好的,接下来我们讨论ECS的安全相关以及支持的网络模式的内容。

IAM安全性

首先,组成ECS集群的EC2实例,需要为其分配相应的IAM角色和权限。**因为EC2上运行的容器Agent要调用ECS的API,**必须要有相应的权限才能正常工作,这个是EC2实例级别的IAM角色。

然后,还会接触到一个IAM角色,是ECS任务的IAM角色。就是在创建ECS任务的时候,可以为这个任务创建或分配一个任务的IAM角色,从而指定任务中的容器可以使用的IAM角色。

注意这个任务IAM角色是基于ECS任务的。这样做的好处是,可以为不同的ECS任务指定不同的IAM角色,从而为不同的任务分配不同的权限。比如任务1的容器需要访问RDS,任务2的容器需要访问S3服务,就可以分别为两个任务分配不同的IAM角色,更精细的分配权限,实现更高的安全级别。

所以,**这里共有两个级别的IAM角色,**第一个是组成ECS集群的EC2实例的角色,是EC2实例级别的角色;另一个是每一个ECS任务都可以指定任务的IAM角色,是ECS任务级别的角色。

以上是IAM角色相关安全性。

敏感信息安全性

对于容器内需要用的一些配置和一些敏感的信息,使用ECS可以通过将敏感的信息或者配置存储在AWS Secrets Manager或AWS Systems Manager参数存储中,然后在容器定义中引用它们,从而将敏感数据作为环境变量注入到容器中。这样就可以避免将容器中使用的机密的信息明文定义在任务定义中。通过这种方式提升了敏感信息的安全。

任务的网络模式

接下来我们讨论ECS任务的网络模式,运行在ECS集群上的ECS任务容器之间联网的方式,取决于您在任务定义中定义的网络模式,有以下几种网络模式:

  • bridge桥接模式,是使用Docker的内置虚拟网络启动您的容器。
  • host主机模式,容器将绕过Docker的内置虚拟网络,并将容器端口直接映射到运行该任务的EC2实例的网络。因此,使用端口映射时,您无法在单台 EC2实例上运行同一任务的多个实例化。
  • none,这个模式任务没有外部网络连接,端口映射也是无效的。一般只用于不需要网络的环境的测试用途。
  • awsvpc模式,这个模式比较特别:
    • 它为每一个任务都分配了自己的弹性网络接口(ENI)和私有IPv4地址。这为ECS任务提供了和EC2实例相同的网络属性。
    • 使用 awsvpc网络模式可简化容器网络连接。因为每个任务都有其自己的弹性网络接口(ENI),可以将安全组应用到ENI,为任务提供了更高的安全性。还可以为每个ENI创建VPC流日志以及利用其他的EC2网络功能,从而可以监视往返于任务的流量。
    • 还有一点要注意,如果使用的Fargate,那么在默认情况下,分别会为每个ECS任务都提供一个具有私有IP地址的弹性网络接口(ENI)。

ECS服务的弹性伸缩

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7xCYnziP-1672280676985)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/99f07d5e-9fa7-4b9d-88d3-e6289d79730b/Untitled.jpeg)]

ECS服务的弹性伸缩是指可根据配置的指标自动增加或减少ECS服务中的任务数量。

ECS会发布ECS服务的平均CPU和内存使用量的CloudWatch指标,您可以使用这些或其他CloudWatch指标配置弹性伸缩,如添加更多任务以在高峰时间处理更多的需求;或者在闲时运行更少的任务以降低利用率节省成本。

服务的弹性伸缩支持以下三种类型:

  • 目标跟踪扩展策略,是根据配置的特定指标的目标值,增加或减少服务运行的任务数量。比如我们可以配置平均CPU使用率为70%,然后任务就会自动增加或减少,保持在配置的这个目标值。
  • 还可以基于CloudWatch警报定义分步扩展策略,
  • 以及定义基于日期和时间的计划的扩展。

可以看到这和我们之前讲的EC2的autoscaling的内容基本差不多,但是一定要注意的是,ECS服务的弹性伸缩,是ECS任务级别的,扩展和缩减的是ECS的任务数量;而之前课时讨论的EC2的弹性伸缩,是基于EC2实例的,是实例级别的弹性伸缩。

也就是说,如果您使用的是ECS是基于EC2集群,当需要弹性伸缩时,可能除了要考虑ECS服务的弹性伸缩,还要考虑组成集群的EC2实例的弹性伸缩,这样才能够增加更多的EC2实例,并在上面运行新的 任务。

在这种情况下更能体现出Fargate的优势。因为如果使用Fargate的话,弹性伸缩的配置就会比较容易。因为是无服务器架构,所以我们不需要关心后端的基础架构,只要配置好ECS服务的弹性伸缩的配置,剩下的基础设施部分由AWS负责来搞定。

ECS与Spot实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wsBVrfN-1672280676985)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/177d5070-0d4e-469b-8aa6-3bdd1b623d41/Untitled.jpeg)]

好的,我们继续。

最后,我们要了解,ECS集群是可以使用Spot实例的。

我们先看下由EC2实例组成的ECS集群,这些EC2实例是可以由请求的Spot实例或者由ASG管理的Spot队列组成。

当后续Spot实例不在可用时,如果实例上启用了 ECS Spot实例的排空(DRAINING) 功能,则ECS会收到Spot实例中断通知,并将该实例置于 DRAINING状态,然后ECS将不会在这台实例上运行新的任务,且正在运行在该Spot实例的任务就会停止,并在集群中其他实例上启动。

使用Spot实例会节省成本,但同时可能随时会中断,而影响提供服务的可靠性。

那对于Fargate集群,目前同样支持使用Spot实例,可以将一部分任务跑在按需,也就是普通模式,满足工作负载的基准要求;然后将一些任务跑在Fargate Spot上以节省成本。当然要注意Spot同样可能随时会被AWS回收。

不论是普通模式还是Spot模式,因为Fargate是无服务器架构,基于定义进行扩展都是非常的容易的。

好的,经过我们之前和今天的讨论,Spot实例的特点想必大家已经很熟悉了。

虽然ECS集群可以使用Spot实例来节省成本,但是我们同样也要了解Spot可能会随时被中断的情况,可能会影响我们提供的服务的可靠性,所以要提前做好中断处理。

最后,如果使用的是由EC2实例组成的ECS集群,且您计划要使用相当长时间,比如1至3年,同样可以使用预留实例来节省成本。

好的,以上就是我们今天课时的内容,我们讨论了ECS的内容,希望能够给大家带来帮助。

希望此系列教程能为您通过 AWS解决方案架构师认证 Professional 认证考试带来帮助,如您有任何疑问,请联系我们:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker 基础概念介绍

一 什么是 docker ? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,…

【nowcoder】笔试强训Day13

目录 一、选择题 二、编程题 2.1参数解析 2.2跳石板 一、选择题 1.一个关系数据库文件中的各条记录 () 。 A. 前后顺序不能任意颠倒,一定要按照输入的顺序排列 B. 前后顺序可以任意颠倒,不影响库中的数据关系 C. 前后顺序…

前端面试题之计算机网络篇--HTTP协议

HTTP协议 1. GET和POST的请求的区别 GET和POST方法 GET和POST方法都是HTTP中的方法 什么是 HTTP? 超文本传输协议(Hypertext Transfer Protocol,缩写 HTTP)旨在启用客户端和服务器之间的通信。 HTTP 充当客户端和服务器之间的…

Android进阶——Javac编译解析

Javac编译器 1.Javac的源码与调试 Javac的源码下载地址:Javac的源码下载地址,在Myeclipse中新建项目Compiler_javac,把源码复制到项目中。 Javac的源码目录: 从Sun Javac的代码来看,编译过程大致可以分为3个过程&…

测试工程师正遭「革命」 AI将改写测试模式

文章目录❤️‍🔥 软件测试的现状❣️ 功能测试的短板❣️ 过于的依赖工具❤️‍🔥 测试行业的两极分化❤️‍🔥 纯功能测试人员应该如何破局❣️ 龙测 AI TestOps 云平台❣️ AI TestOps 亮相 TICA❣️ AI TestOps 所实现的混合模型解决方案…

相关系数(皮尔逊pearson相关系数和斯皮尔曼spearman等级相关系数)

目录 总体皮尔逊Person相关系数: 样本皮尔逊Person相关系数: 两点总结: 假设检验:(可结合概率论课本假设检验部分) 皮尔逊相关系数假设检验: 更好的方法:p值判断方法 皮尔逊相…

lua调用c动态库实例

简介 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 特点 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K&a…

STM32/51单片机实训day4——RFID数据读取|RC522|串口数据收发、可模拟RFID (三) 仿真

目录 1 任务指导 2 实验步骤 3 串口调试 4 USART配置 5 fputs函数重写 内 容:能够读取RFID卡S50的ID——编程实现串口数据收发 学 时:3学时 知识点:电路图设计、USART配置 重点: USART配置 难点:USART配置 时…

赶快升级吧!PHP8比PHP5快41倍,比PHP7快3倍

本文得出的结论,归结于仅运行纯CPU任务的脚本的基准测试结果,不需要I/O操作的任务,例如访问文件、网络或数据库连接。 这些是纯 CPU 基准测试。它们并未涵盖 PHP 性能的所有方面,并且它们可能无法代表实际情况。然而,结…

用Python标准库统计CSDN阅读量

urllib基础 一般做爬虫其实很少有推荐urllib的,但urllib乃是Python标准库成员,在要求比较简单的情况下,采用urllib还是比较方便的。 作为爬虫入门必学包,urllib最常用的函数一定是urllib.request中的urlopen。其返回对象是HTTPR…

ES学习路程(二)

关于ES第一篇是在Linux安装,为了方便我在windows搭建一套ES和kibana版本(7.15.0) 第一步:下载安装ES在windows 官网下载相应版本的es和kibana: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7…

《图解TCP/IP》阅读笔记(第八章 8.6、8.7)—— 网络管理与其他应用层协议

前言 本篇是第八章的最后一篇 8.6 网络管理 从前,网络管理凭借管理员的记忆和直觉进行,但是网络规模越大,人的力量就越不足,所以需要一个严密的管理工具或方法。 在TCP/IP的网络管理中,可以使用SNMP(Si…

uni-app——小程序实现本地图片的上传以及身份证的智能识别

文章目录 前言一、示例图二、实现过程 1.完成提交图片的api地址2.获取本地图片3.将本地图片上传至开发者服务器三、具体实现代码四、身份证的智能识别总结前言 上传本地图片的功能很常见,那么具体该如何实现呢? 一、示例图 二、实现过程 1.完成提交图…

操作系统接口系统调用的实现

接口 连接两个东西,信号转换,屏蔽细节… 操作系统接口 连接上层用户和操作系统软件,方便了使用,屏蔽了细节。 操作系统接口的形式 为应用层提供一些重要的函数,如printf,write,read等。接口…

Windows Active Directory —— 常见的远程控制对比

在windows环境中,需要远程访问的时候很多,使用的工具和命令也各式各样,我把自己常用的命令和工具总结一下 远程访问方式: 1)对服务器而言,RDP这个绝对是最常见的方式,mstsc /v:remoteserver 即可打开 2)winrs和winrm,这个可以允许我们通过命令行来远程访问,远程服务…

TypeScript基础类型

目录 数字 number 字符串 string 布尔 boolean 数组 Array 元组 枚举 enum 任意值 any void Null 和 Undefined null undefined Never 数字 number let age: number 24; 虽然爆红,但是依然能改 字符串 string let name:string"张三" 布尔 bo…

ef参数设置说明(faiss)

1、模型参数:1000代表聚类中心个数 随着聚类个数的增加,模型索引的构建时间近似指数增加但搜索精度也线性增加,不影响内存占用,几乎不影响搜索耗时 结论:在 Faiss 引擎的聚类情况下,对于百万级别的数据大概…

B/S结构和C/S结构详细介绍

什么是c/s结构、b/s结构 1、C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,充分利用两端硬件环境的优势。早期的软件系统…

Haploview做单倍型教程1--软件安装

大家好,我是邓飞,这里介绍一下如何使用Haploview进行单倍型的分析。 计划分为三篇文章: 第一篇:Haploview做单倍型教程1–软件安装第二篇:Haploview做单倍型教程2-分析教程第三篇:Haploview做单倍型教程3…

HCIA(1)

一. 计算机网络的诞生及发展 1946年2.14日,美国宾夕法尼亚大学为了美国军方用于导弹计算,发明了世界上第一台计算机,而计算机改变并且引领了世界的发展。 计算机是现代一种用于高速计算的电子计算机器,可以进行数值计算&#x…