[英]AWS: Mounting a template disk with Batch / ECS
我正在使用 AWS Batch,但希望增加我的容器可用的磁盘空间。 我正在使用 CloudFormation 创建堆栈,并且我添加了一个 EC2::LaunchTemplate 以向我的实例添加一个 100GB 磁盘:(从堆栈中提取)
BigDiskTemplate:
Type: 'AWS::EC2::LaunchTemplate'
Properties:
LaunchTemplateData:
BlockDeviceMappings:
- DeviceName: '/dev/xvdcz'
Ebs:
Encrypted: true
VolumeSize: 100
VolumeType: gp2
LaunchTemplateName: BigDiskTemplate
MyComputeEnvironment:
Type: 'AWS::Batch::ComputeEnvironment'
Properties:
Type: MANAGED
ComputeEnvironmentName: MyEnv
ComputeResources:
Type: EC2
MinvCpus: 0
DesiredvCpus: 0
MaxvCpus: 256
LaunchTemplate:
LaunchTemplateName: BigDiskTemplate
InstanceTypes:
- optimal
- c5.large
Subnets:
- !Ref Subnet
SecurityGroupIds:
- !Ref SecurityGroup
InstanceRole: !Ref IamInstanceProfile
ServiceRole: !Ref BatchServiceRole
}
是的,我希望磁盘是短暂的。 是的,我知道一些 EC2 实例支持更大的磁盘,但我也想用 GPU 实例来做到这一点。
当我在容器中运行lsblk
时,我得到:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1 259:0 0 100G 0 disk
└─nvme1n1p1 259:6 0 100G 0 part
nvme0n1 259:1 0 8G 0 disk
├─nvme0n1p1 259:2 0 8G 0 part /etc/hosts
└─nvme0n1p128 259:3 0 1M 0 part
伟大的! 这是我的 100GB 磁盘。 但我不知道如何安装它。 根据示例和教程(诚然适用于 EC2),模板磁盘应该可以通过以下方式安装:
file -s /dev/nvme1n1
mkfs -t xfs /dev/nvme1n1
mkdir /data
mount /dev/nvme1n1 /data
但是,这些步骤中的大多数都会出错。 如“/dev/nvme1n1: cannot open `/dev/nvme1n1' (No such file or directory)”; “mkfs.xfs:没有那个文件或目录”; “挂载:/数据:权限被拒绝”我也尝试过不同的驱动器名称 - 例如。 /dev/nvme1n1p1、nvme1n1 或 /nvme1n1/nvme1n1p1
那么我如何将这个磁盘安装在我的容器中呢? Docker 是问题的一部分吗?
以下是您应该采取的步骤:
lsblk
应该显示设备。/data
类的位置。 设置权限等。/data
。您不能/不应将设备直接安装到容器。
可以将用户数据脚本添加到您的启动配置中。 这样您就可以挂载(和格式化)设备。 以这个脚本为例:
#!/bin/bash
# Device name. NOT block name like 'nvme0n1p1'.
device="/dev/sdp"
# Where to mount the device.
mountpoint="/data"
# Wait for device.
while [[ ! -b $(readlink -f ${device}) ]]; do
echo "waiting for ${device}">&2; sleep 2;
done
# Format if not already formatted.
blkid $(readlink -f ${device}) || mkfs -t ext4 $(readlink -f ${device})
# Mount.
mkdir -p ${mountpoint}
mount $(readlink -f ${device}) ${mountpoint}
chmod 666 ${mountpoint}
# Persist the volume in /etc/fstab so it gets mounted again.
echo "$(readlink -f ${device}) ${mountpoint} ext4 defaults,nofail 0 2" >> /etc/fstab
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.