145 lines
4.2 KiB
YAML
145 lines
4.2 KiB
YAML
AWSTemplateFormatVersion: "2010-09-09"
|
|
|
|
Description: >
|
|
This templates spin ups an EC2 instance with EBS volumes suitable for containerd snapshotters benchmarking.
|
|
The template will create EBS volumes for benchmarking (/dev/sdb, /dev/sdc, and /dev/sdd) with same performance characteristics.
|
|
/dev/sde volume will be created and used for device mapper thin-pool device.
|
|
|
|
Parameters:
|
|
Key:
|
|
Type: AWS::EC2::KeyPair::KeyName
|
|
Description: SSH key to use
|
|
|
|
AMI:
|
|
Type: AWS::EC2::Image::Id
|
|
Description: AMI ID to use for the EC2 instance. Must be Amazon Linux 2.
|
|
Default: "ami-032509850cf9ee54e"
|
|
|
|
SecurityGroups:
|
|
Type: List<AWS::EC2::SecurityGroup::Id>
|
|
Description: List of security groups to add to EC2 instance
|
|
|
|
InstanceType:
|
|
Type: String
|
|
Default: m4.xlarge
|
|
Description: EC2 instance type to use
|
|
|
|
VolumesIOPS:
|
|
Type: Number
|
|
Default: 1000
|
|
MinValue: 100
|
|
MaxValue: 20000
|
|
Description: The number of I/O operations per second (IOPS) to reserve for EBS volumes.
|
|
|
|
VolumesSize:
|
|
Type: Number
|
|
Default: 20
|
|
MinValue: 4
|
|
MaxValue: 16384
|
|
Description: EBS volumes size, in gibibytes (GiB)
|
|
|
|
VolumeType:
|
|
Type: String
|
|
Default: io1
|
|
AllowedValues:
|
|
- io1
|
|
- gp2
|
|
- sc1
|
|
- st1
|
|
Description: >
|
|
Volume type to use for EBS volumes (io1 is recommended).
|
|
More information on volume types https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html
|
|
|
|
ContainerStorageSetup:
|
|
Type: String
|
|
Default: https://github.com/projectatomic/container-storage-setup/archive/v0.6.0.tar.gz
|
|
Description: container-storage-setup tool version to install (more details at https://github.com/projectatomic/container-storage-setup)
|
|
|
|
Resources:
|
|
Instance:
|
|
Type: AWS::EC2::Instance
|
|
Properties:
|
|
EbsOptimized: true
|
|
InstanceType: !Ref InstanceType
|
|
KeyName: !Ref Key
|
|
ImageId: !Ref AMI
|
|
SecurityGroupIds: !Ref SecurityGroups
|
|
BlockDeviceMappings:
|
|
- DeviceName: "/dev/xvda" # Root volume
|
|
Ebs:
|
|
VolumeSize: 64
|
|
VolumeType: io1
|
|
Iops: 1000
|
|
DeleteOnTermination: true
|
|
- DeviceName: "/dev/sdb"
|
|
Ebs:
|
|
VolumeSize: !Ref VolumesSize
|
|
VolumeType: !Ref VolumeType
|
|
Iops: !Ref VolumesIOPS
|
|
DeleteOnTermination: true
|
|
- DeviceName: "/dev/sdc"
|
|
Ebs:
|
|
VolumeSize: !Ref VolumesSize
|
|
VolumeType: !Ref VolumeType
|
|
Iops: !Ref VolumesIOPS
|
|
DeleteOnTermination: true
|
|
- DeviceName: "/dev/sdd"
|
|
Ebs:
|
|
VolumeSize: !Ref VolumesSize
|
|
VolumeType: !Ref VolumeType
|
|
Iops: !Ref VolumesIOPS
|
|
DeleteOnTermination: true
|
|
- DeviceName: "/dev/sde"
|
|
Ebs:
|
|
VolumeSize: !Ref VolumesSize
|
|
VolumeType: !Ref VolumeType
|
|
Iops: !Ref VolumesIOPS
|
|
DeleteOnTermination: true
|
|
|
|
UserData:
|
|
Fn::Base64:
|
|
!Sub |
|
|
#!/bin/bash
|
|
|
|
set -ex
|
|
|
|
yum install -y \
|
|
gcc \
|
|
git \
|
|
btrfs-progs-devel \
|
|
libseccomp-devel
|
|
|
|
amazon-linux-extras install -y golang1.11
|
|
|
|
# Install container-storage-setup
|
|
mkdir -p /tmp/container-storage-setup/unpacked/
|
|
cd /tmp/container-storage-setup/
|
|
curl -sL ${ContainerStorageSetup} -o archive.tar.gz
|
|
tar -xzf archive.tar.gz -C unpacked --strip 1
|
|
cd unpacked/
|
|
make install-core
|
|
rm -rf /tmp/container-storage-setup/
|
|
|
|
# Prepare EBS volumes
|
|
mkdir -p /mnt/{disk1,disk2,disk3}
|
|
|
|
mkfs.ext4 /dev/sdb
|
|
mount /dev/sdb /mnt/disk1/
|
|
|
|
mkfs.ext4 /dev/sdc
|
|
mount /dev/sdc /mnt/disk2/
|
|
|
|
mkfs.ext4 /dev/sdd
|
|
mount /dev/sdd /mnt/disk3
|
|
|
|
chgrp -R wheel /mnt/disk1/ /mnt/disk2/ /mnt/disk3/
|
|
chmod -R 2775 /mnt/disk1/ /mnt/disk2/ /mnt/disk3/
|
|
|
|
# Prepare thin-pool device
|
|
touch /etc/sysconfig/docker-storage-setup
|
|
echo DEVS=/dev/sde >> /etc/sysconfig/docker-storage-setup
|
|
echo VG=bench >> /etc/sysconfig/docker-storage-setup
|
|
container-storage-setup
|
|
|
|
echo "Done"
|