EC2实例EBS存储自动扩展工具
amazon-ebs-autoscale是一个开源项目,用于自动监控和扩展EC2实例的EBS存储。它包含一个守护进程,可在文件系统可用空间低于阈值时自动添加EBS卷并扩展文件系统。支持BTRFS和LVM+ext4,提供简便的安装配置,适用于需要动态存储管理的AWS EC2环境。
:warning: 弃用通知 :warning:
此仓库已弃用,将于2024年5月17日存档
此仓库不再被积极维护,将于2024年5月17日存档。作为存档代码,它仅出于历史参考目的而保持公开可用。
对于AWS中可扩展存储的替代和完全托管的解决方案,您应考虑:
这是一个守护进程的示例,它监控文件系统挂载点,并在可用空间低于配置的阈值时自动扩展。根据需要,新的Amazon EBS卷会被添加到实例,随着新设备的添加,底层文件系统(BTRFS或带有ext4的LVM)会扩展。
/dev/xvdb*
这样的设备名,并且不会重新映射它们此仓库提供:
设置实例的最简单方法是提供带有用户数据cloud-init脚本的启动调用。以下是在us-east-1中使用此文件启动Amazon ECS优化AMI的示例:
aws ec2 run-instances --image-id ami-5253c32d \ --key-name MyKeyPair \ --user-data file://./templates/cloud-init-userdata.yaml \ --count 1 \ --security-group-ids sg-123abc123 \ --instance-type t2.micro \ --iam-instance-profile Name=MyInstanceProfileWithProperPermissions
该脚本安装所需的包并运行初始化脚本。默认情况下,这会在加密的200GB gp3 EBS卷上创建一个/scratch
挂载点。要更改挂载点,请编辑cloud-init脚本文件,并根据您的特定需求为安装脚本提供其他选项。安装选项如下所示。
安装Amazon EBS自动扩展 install.sh [选项] [[-m] <挂载点>] 选项 -d, --initial-device 设备 用于挂载点的初始设备 - 例如 /dev/xvdba。 (默认: 无 - 自动创建并附加卷) 如果提供,则忽略 --initial-size。 -f, --file-system btrfs | lvm.ext4 要使用的文件系统(默认: btrfs)。 选项为btrfs或lvm.ext4 -h, --help 打印帮助并退出。 -m, --mountpoint 挂载点 自动扩展卷的挂载点(默认: /scratch) -t, --volume-type 卷类型 卷类型(默认: gp3) --volume-iops 卷IOPS gp3、io1、io2的卷IOPS(默认: 3000) --volume-throughput 卷吞吐量 gp3的卷吞吐量(默认: 125) --min-ebs-volume-size 大小_GB 实例创建的新卷的最小大小(GB)。 (默认: 150) --max-ebs-volume-size 大小_GB 实例创建的新卷的最大大小(GB)。 (默认: 1500) --max-total-created-size 大小_GB 实例创建的所有卷的最大总大小(GB)。 (默认: 8000) --max-attached-volumes N 最大附加卷数。(默认: 16) --initial-utilization-threshold N 扩展的初始磁盘利用率阈值。(默认: 50) -s, --initial-size 大小_GB 卷的初始大小(GB)。(默认: 200) 仅在未指定 --initial-device 时使用。 -i, --imdsv2 为实例元数据API请求启用imdsv2。
在上面的示例中,我们假设MyInstanceProfileWithProperPermissions
EC2实例配置文件存在并具有以下权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DescribeVolumeStatus", "ec2:DescribeVolumes", "ec2:DescribeTags", "ec2:ModifyInstanceAttribute", "ec2:DescribeVolumeAttribute", "ec2:CreateVolume", "ec2:DeleteVolume", "ec2:CreateTags" ], "Resource": "*" } ] }
请注意,如果您启用EBS加密并使用AWS Key Management Service的客户管理密钥,那么您还应确保提供适当的IAM权限以使用该密钥。
以下是利用实例存储的示例脚本。
## 检查实例存储
echo "-- 检查实例存储 --"
/opt/amazon-ebs-autoscale/instance_storage_checker.sh 2>&1 >> /var/log/ebs-autoscale-install.log
## 安装ebs-autoscale
echo "-- 安装EBS自动扩展器 --"
if [ -f instance_storage_device.txt ]; then
INSTANCE_STORAGE=$(cat instance_storage_device.txt)
/opt/amazon-ebs-autoscale/install.sh \
--initial-device $INSTANCE_STORAGE \
--initial-utilization-threshold 90 \
--mountpoint /var/lib/docker \
2>&1 >> /var/log/ebs-autoscale-install.log
else
/opt/amazon-ebs-autoscale/install.sh \
--mountpoint /var/lib/docker 2>&1 >> /var/log/ebs-autoscale-install.log
fi
此示例代码根据MIT许可证提供。