AMI 存储配置
重要
经 Amazon ECS 优化的 Amazon Linux AMI 于 2021 年 4 月 15 日已弃用。在此日期之后,Amazon ECS 将继续为 AMI 提供关键和重要的安全更新,但不会添加对新功能的支持。
下面介绍了每个 Amazon ECS 优化型 AMI 的存储配置。
Amazon Linux 2 存储配置
预设情况下,基于Amazon Linux 2 的经 Amazon ECS 优化的 AMI(经 Amazon ECS 优化的 Amazon Linux 2 AMI、经 Amazon ECS 优化的 Amazon Linux 2(arm64)AMI 和Amazon ECS GPU 优化型 AMI)随附单个 30 GiB 根卷发货。您可以在启动时修改 30 GiB 的根卷大小,以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。
经 Amazon ECS 优化的 Amazon Linux 2 AMI 的原定设置文件系统是 xfs
,Docker 使用 overlay2
存储驱动程序。有关更多信息,请参阅 Docker 文档中的使用 OverlayFS 存储驱动程序
Amazon Linux 2022 存储配置
重要
经 Amazon ECS 优化的 Amazon Linux 2022 AMI 处于预览版,可能会发生变化。
预设情况下,经 Amazon ECS 优化的 Amazon Linux 2022 AMI 附带一个 30GiB 的根卷。您可以在启动时修改 30 GiB 的根卷大小,以增加您的容器实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。
经 Amazon ECS 优化的 Amazon Linux 2022 AMI 的原定设置文件系统是 xfs
,Docker 使用 overlay2
存储驱动程序。有关更多信息,请参阅 Docker 文档中的使用 OverlayFS 存储驱动程序
经 Amazon ECS 优化的 Amazon Linux AMI 存储配置
重要
经 Amazon ECS 优化的 Amazon Linux AMI 于 2021 年 4 月 15 日已弃用。在此日期之后,Amazon ECS 将继续为 AMI 提供关键和重要的安全更新,但不会添加对新功能的支持。
预设情况下,经 Amazon ECS 优化的 Amazon Linux AMI 附带 30 GiB 的总存储量。您可以在启动时修改此值,以增加 Amazon EC2 实例上的可用存储。此存储用于操作系统和 Docker 映像与元数据。下面几节介绍基于 AMI 版本的经 Amazon ECS 优化的 Amazon Linux AMI 的存储配置。
版本 2015.09.d 及更高版本
版本 2015.09.d
及更高版本中的经 Amazon ECS 优化的 Amazon Linux AMI 具有一个大小为 8 GiB 的卷,用于在 /dev/xvda
挂载并挂载为文件系统的根系统。另外还有一个在 /dev/xvdcz
挂载并供 Docker 用于映像和元数据存储的 22 GiB 卷。此卷将配置为逻辑卷管理 (LVM) 设备,并且可由 Docker 通过 devicemapper
后端直接访问。因为未挂载此卷,所以无法使用标准存储信息命令(如 df -h)确定可用存储。但您可以使用 LVM 命令和 docker info 通过以下过程查找可用存储。有关更多信息,请参阅 Linux 文档项目中的 LVM HOWTO
注意
您可以通过在启动实例时更改其块储存设备映射设置来增加这些默认卷大小;但是,您不能指定小于默认值的卷大小。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的块存储设备映射。
docker-storage-setup 实用程序在实例启动时为 Docker 配置 LVM 卷组和逻辑卷。默认情况下,docker-storage-setup 创建一个名为 docker
的卷组,并将 /dev/xvdcz
作为物理卷添加到该组。然后,它将创建一个名为 docker-pool
的逻辑卷,该卷使用卷组中 99% 的可用存储。剩余 1% 的可用存储将为元数据保留。
注意
早期版本的经 Amazon ECS 优化的 Amazon Linux AMI (2015.09.d
至 2016.03.a
)将创建一个使用卷组中 40% 的可用存储的逻辑卷。当逻辑卷的容量已占用 60% 时,逻辑卷的大小将增加 20%。
确定 Docker 的可用存储
-
您可以使用 LVM 命令、vgs 和 lvs 或 docker info 命令来查看 Docker 的可用存储。
注意
LVM 命令输出显示以 GiB(2^30 字节)为单位的存储值,而 docker info 显示以 GB(10^9 字节)为单位的存储值。
-
您可以使用 vgs 命令查看卷组中的可用存储。此命令显示卷组的总大小以及卷组中可用于增大逻辑卷的可用空间。以下示例显示一个 22 GiB 卷,其可用空间为 204 MiB。
[ec2-user ~]$
sudo vgs
输出:
VG #PV #LV #SN Attr VSize VFree docker 1 1 0 wz--n- 22.00g 204.00m
-
您可以使用 lvs 命令查看逻辑卷中的可用空间。以下示例显示一个大小为 21.75 GiB 的逻辑卷,该卷的 7.63% 的空间已占用。此逻辑卷能够增大,直到卷组中不再有可用空间。
[ec2-user@ ~]$
sudo lvs
输出:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert docker-pool docker twi-aot--- 21.75g 7.63 4.96
-
docker info 命令还提供有关其占用的数据空间以及可用数据空间的信息。不过,其可用空间值基于其正在使用的逻辑卷的大小。
注意
因为 docker info 以 GB(10^9 字节)而不是 GiB(2^30 字节)为单位显示存储值,所以,对于相同的存储量,此处显示的值看起来大于使用 lvs 命令显示的值。但是,这两个值是相等的 (23.35 GB = 21.75 GiB)。
[ec2-user ~]$
docker info | grep "Data Space"
输出:
Data Space Used: 1.782 GB Data Space Total: 23.35 GB Data Space Available: 21.57 GB
-
扩展 Docker 逻辑卷
向您的 Amazon EC2 实例添加存储的最简单方式是终止现有实例,然后启动具有更大的数据存储卷的新实例。但如果您无法执行此操作,则可以向 Docker 使用的卷组添加存储,然后执行这些步骤来扩展其逻辑卷。
注意
如果您的 Amazon EC2 实例存储是填满速度过快,则可采取以下几个措施来减小影响:
-
(Amazon ECS 容器代理 1.8.0 及更高版本)减少已停止或已退出的容器在您的容器实例上的保留时间。
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
代理配置变量可设置从任务停止到 Docker 容器被删除所需等待的时间段 (预设情况下,此值为 3 小时)。这将删除 Docker 容器数据。如果此值设置得过低,您可能无法检查已停止的容器或无法在日志删除前查看它们。有关更多信息,请参阅Amazon ECS 容器代理配置。 -
从您的 Amazon EC2 实例中删除未运行的容器和未使用的映像。您可以使用以下示例命令来手动删除已停止的容器和未使用的映像。稍后将无法检查已删除的容器,而且必须先重新拉取已删除的映像,然后再从中启动新容器。
要删除未运行的容器,请在 Amazon EC2 实例上执行下面的命令:
$
docker rm $(docker ps -aq)
要删除未使用的映像,请在 Amazon EC2 实例上执行下面的命令:
$
docker rmi $(docker images -q)
-
删除容器内未使用的数据块。您可以在任何正在运行的容器上使用下面的命令运行 fstrim 来丢弃该容器文件系统未使用的任何数据块。
$
sudo sh -c "docker ps -q | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/"
-
在 Amazon EC2 实例所在的可用区中创建新的 Amazon EBS 卷。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的创建 Amazon EBS 卷
-
将卷挂载到您的 Amazon EC2 实例。Docker 数据卷的默认位置为
/dev/xvdcz
。为了保持一致,从该设备名称 (例如,/dev/xvdcy
) 以逆字母顺序挂载其他卷。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的将 Amazon EBS 卷附加到实例。 -
通过使用 SSH 连接到您的 Amazon EC2 实例。
-
检查您的
docker-pool
逻辑卷的大小。以下示例显示一个大小为 409.19 GiB 的逻辑卷。[ec2-user ~]$
sudo lvs
输出:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert docker-pool docker twi-aot---
409.19g
0.16 0.08 -
检查您的卷组中的当前可用空间。以下示例在
VFree
列中显示 612.75 GiB。[ec2-user ~]$
sudo vgs
输出:
VG #PV #LV #SN Attr VSize VFree docker 1 1 0 wz--n- 1024.00g
612.75g
-
将新卷添加到
docker
卷组,并替换您将新卷添加到的设备名称。在此示例中,1 TiB 卷之前已添加并挂载到/dev/xvdcy
。[ec2-user ~]$
sudo vgextend docker /dev/
Physical volume "/dev/sdcy" successfully created Volume group "docker" successfully extendedxvdcy
-
使用 vgs 命令验证卷组大小是否已增加。
VFree
列应显示增加的存储大小。以下示例现在在VFree
列中有 1.6 TiB,此值比其之前的值大 1 TiB。您的VFree
列应是原始VFree
值和您附加的卷的大小的和。[ec2-user ~]$
sudo vgs
输出:
VG #PV #LV #SN Attr VSize VFree docker 2 1 0 wz--n- 2.00t
1.60t
-
利用之前添加的卷的大小扩展
docker-pool
逻辑卷。以下命令向逻辑卷添加 1024 GiB,输入形式为
。1024G
[ec2-user ~]$
sudo lvextend -L+
1024G
/dev/docker/docker-pool输出:
Size of logical volume docker/docker-pool_tdata changed from 409.19 GiB (104752 extents) to 1.40 TiB (366896 extents). Logical volume docker-pool successfully resized
-
验证逻辑卷的大小是否已增加。
[ec2-user ~]$
sudo lvs
输出:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert docker-pool docker twi-aot---
1.40t
0.04 0.12 -
(可选)验证 docker info 是否也识别已添加的存储空间。
注意
因为 docker info 以 GB(10^9 字节)而不是 GiB(2^30 字节)为单位显示存储值,所以,对于相同的存储量,此处显示的值看起来大于使用 lvs 命令显示的值。但是,这两个值是相等的 (1.539 TB =1.40 TiB)。
[ec2-user ~]$
docker info | grep "Data Space"
输出:
Data Space Used: 109.6 MB Data Space Total:
1.539 TB
Data Space Available: 1.539 TB
2015.09.c 版本及早期版本
版本 2015.09.c
及更早版本中的经 Amazon ECS 优化的 Amazon Linux AMI 具有一个大小为 30 GiB 的卷,用于在 /dev/xvda
挂载并安装为文件系统的根系统。此卷共享操作系统和所有 Docker 映像和元数据。您可以使用标准存储信息命令(如 df
-h)确定 Amazon EC2 实例上的可用存储。
在不停止通过这些 AMI 启动的实例的情况下,没有可行的方法向这些实例添加存储(Docker 可使用)。如果发现 Amazon EC2 实例需要的存储量大于默认值 30 GiB,应终止每个实例。然后在其位置上启动另一个具有最新的经 Amazon ECS 优化的 Amazon Linux AMI 实例和一个足够大的数据存储卷。