我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
宣布在 亚马逊云科技 Fargate 上为亚马逊 ECS 任务提供更多 Linux 控件
简介
亚马逊弹性容器服务 (
今天我们很高兴地宣布,客户现在可以在 亚马逊云科技 Fargate 上的 ECS 任务中调整 Linux 内核参数。调整 Linux 内核参数可以帮助客户在运行容器化
此外,随着今天的发布,进程 ID (PID) 命名空间现在可以由 亚马逊云科技 Fargate 上同一 ECS 任务中的所有容器共享。在同一 ECS 任务中的容器之间共享 PID 命名空间可在 亚马逊云科技 Fargate 上获得额外的负载可观测性。可观测性工具,例如容器运行时安全工具,现在可以作为副车容器运行,并在共享 PID 命名空间中观察应用程序的进程。PID 命名空间将与
在这篇文章中,我们将深入探讨 亚马逊云科技 Fargate 上的系统控制和 PID 命名空间共享。
系统控制
在 Linux 系统中,可以使用命令行实用程序
--sysctl
标志来更改内核参数。在 ECS 任务中,可以使用 “
ystemControl
键定义
在 AWS Fargate 上运行容器化网络代理的客户
* 内核参数,允许其工作负载达到更高的吞吐量需求。
经常请求的内核参数包括与
net.core.somaxconn 的最大排队连接数 以及使用 net.ipv4.ip_local_port
_range 的临时临时端口范围。
在架构工作负载以实现弹性时,客户还告诉我们,他们希望在 亚马逊云科技 Fargate 上自定义 ECS 任务的 TCP 保持活动参数。配置较短的 TCP 保持活动超时允许应用程序快速检测网络故障,关闭现有的失败连接。何时调整 TCP 保持活动状态的示例包括当容器化工作负载与
在此次发布之前,S
ystemControl
密钥仅适用于在 EC2 容器实例上运行 ECS 任务的客户,但现在该密钥可用于 亚马逊云科技 Fargate 上的 ECS 任务。调整了两个参数的 Amazon ECS 任务定义示例摘要如下所示:
共享进程 ID 命名空间
进程 ID 命名空间限制了容器中进程可以看到的内容。默认情况下,容器化进程只能看到同一个容器中的进程,不能看到其他同置容器或底层主机的进程。共享进程 ID 命名空间的一个常见用例是可观察性工具。容器运行时安全工具通常在侧车容器中运行,需要观察应用程序容器中的进程。在这种模式下,侧车容器中的进程监视应用程序容器中的进程,以查看它们是否开始进行可疑的系统调用。
随着今天的发布,客户现在可以通过在任务定义中传递
PidMod
e 密钥和值 任务来在同一 ECS 任务中的容器之间共享进程 ID 命名空间。
草率排练
在本演练中,我们将启动具有共享进程 ID 命名空间的 ECS 任务。该任务包含两个容器,一个应用程序容器 (nginx) 和一个 sidecar 容器(用作演示的睡眠进程)。然后,我们将展示边车容器中的进程如何与应用程序容器中的进程进行交互。
Prerequisites
-
现有的亚马逊 ECS 集群和亚马逊 VPC。如果您需要在自己的 亚马逊云科技 账户中创建这些账户,请参阅 A
mazon ECS 入门指南 。 -
确保您 的 亚马逊云科技 账户和计划
执行命令的工作站上满足 ECS 执行先决条件 。
Run an ECS task on 亚马逊云科技 Fargate
1。使用两个容器创建任务定义,并启用
PidMode
。您需要将任务定义中的 IAM 角色(e
xecutionroLearn
和
TaskroLearn
)替换为在先决条件中创建的 IAM 角色。
2。使用 aws
ecs register-task- definition 命令注册任务
定义。
3。使用 aws ecs r
un -task 命令在 AWS Fargate 上运行 Amazon EC S
任务。在以下示例中,替换 ECS 集群名称、VPC 子网和安全组值。由于无法从外部访问此任务,因此私有 VPC 子网和没有入口规则的安全组(例如默认 VPC 安全组)就足够了。
4。ECS 任务运行后,使用 aws ecs
execute-command 命令在 EC S
任务中的 sidecar 容器中创建终端会话。如果您在运行此命令时收到错误,则可以使用
5。在 ECS 执行终端会话中,我们现在可以探索共享的 PID 命名空间。为此,我们需要在 sidecar 容器内安装一些诊断工具。
$ yum install procps strace -y
6。使用 ps 命令(包含在上面安装的
procps
包中),我们可以看到共享 PID 命名空间中所有正在运行的进程。输出显示来自 sidecar 容器的进程以及来自应用程序容器的 nginx 进程。还显示了用于提供 EC
7。使用共享的 PID 命名空间,我们可以监控应用程序容器中进程发出的系统调用。我们将使用在第五步中安装的
strace
包来监控 nginx 主进程。
为了生成系统调用,我们将使用 kill 命令强制停止 nginx 工作进程。
就我而言,主要 nginx 进程是进程 ID 7,工作进程是进程 ID 56,它们在你的环境中会有所不同,需要在下面的命令中替换。
在本演练中,我们已经表明,通过共享进程 ID 命名空间,sidecar 容器中的进程现在可以与 ECS 任务中所有容器中所有正在运行的进程进行交互和观察。在第七步中,我们使用边车容器来监视并强制停止应用程序容器中的进程。
Cleanup
要清理此演练,请执行以下操作:
1。在终端窗口中运行带有打开会话的
退出
命令,退出 ECS 执行终端。
2。使用 aws ecs 停止任务命令
停止 EC S 任务
。
3。使用 aws ecs deregister-task-definition 命令
取消注册 EC S
任务定义。
共享进程 ID 命名空间的注意事项
虽然进程 ID 命名空间现在可以由 亚马逊云科技 Fargate 上同一 ECS 任务中的容器共享,但有几点需要注意。我们将在先前定义的应用程序和 sidecar ECS 任务的上下文中介绍这些注意事项:
- Sidecar 容器中的进程可以在应用程序容器中观察、停止或重新启动进程。
-
Sidecar 容器中的进程可以查看应用程序容器的文件系统。
例如,如果应用程序以进程 ID 7 运行,则在 sidecar 容器中,您可以通过 /proc/7/root/ 访问应用程序容器的文件系统。应用程序容器文件系统的唯一保护将通过 Unix 文件权限来完成。 -
在 ECS 任务中共享进程时,新的
暂停进程以 PID 1 的形式运行整个任务。 -
可能需要将
SYS_PTRACELinux 功能添加到 ECS 任务中,以提供应用程序容器中运行的进程的完全可追溯性。
结论
通过此次发布,我们很高兴能在 亚马逊云科技 Fargate 上解锁更多工作负载。共享进程 ID 命名空间和调整内核参数都是通过 亚马逊云科技 Fargate 的
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。