Fargate 上的 Linux 容器的 Amazon ECS 容器映像拉取行为
每个 Fargate 任务都在自己的单用途、单租户实例上运行。当您在 Fargate 上运行 Linux 容器时,容器映像或容器映像层不会缓存在实例上。因此,对于任务中定义的每个容器映像,需要从每个 Fargate 任务的容器映像注册表中提取整个容器映像。提取映像所需的时间与启动 Fargate 任务所花费的时间直接相关。
要优化映像提取时间,请考虑以下因素。
- 容器映像近似
-
要缩短下载容器映像所需的时间,请将数据放置在尽可能靠近计算机的位置。通过互联网或跨 AWS 区域 提取容器映像可能会影响下载时间。建议您将容器映像存储在运行任务的同一区域。如果您将容器映像存储在 Amazon ECR 中,则请使用 VPC 接口端点来进一步缩短映像提取时间。有关更多信息,请参阅《Amazon ECR 用户指南》中的 Amazon ECR 接口 VPC 端点(AWS PrivateLink)。
- 缩小容器映像大小
-
容器映像的大小直接影响下载时间。减小容器映像的大小或容器映像层的数量可以缩短映像下载所需的时间。轻量级基础映像(例如最小的 Amazon Linux 2023 容器映像)可能比基于传统操作系统基础映像的映像小得多。有关最小映像的更多信息,请参阅《Amazon Linux 2023 用户指南》中的 AL2023 最小容器映像。
- 替代压缩算法
-
推送到容器映像注册表时,容器映像层通常会被压缩。压缩容器映像层可以减少必须通过网络传输并存储在容器映像注册表中的数据量。在容器运行时将容器映像层下载到实例后,将对该层进行解压缩。使用的压缩算法和运行时可用的 vCPU 数量会影响解压缩容器映像所需要的时间。在 Fargate 上,您可以增加任务的大小或利用性能更高的 zstd 压缩算法来缩短解压缩所需要的时间。有关更多信息,请参阅 GitHub 上的 ztsd
。有关如何实现 Fargate 的映像的信息,请参阅使用 zstd 压缩容器映像缩短 AWS Fargate 启动时间 。 - 延迟加载容器映像
-
对于大型容器映像(> 250mb),最好延迟加载容器映像,而不是下载所有容器映像。在 Fargate 上,您可以使用 Seekable OCI(SOCI)从容器映像注册表中延迟加载容器映像。有关更多信息,请参阅 GitHub 上的 soci-snapshotter
和使用 Seekable OCI(SOCI)延迟加载容器映像。