В итоге я сам придумал, как это сделать. Я отправляю свои результаты, если это кому-то еще пригодится.
Создание AMI
Предполагая, что базовый AMI уже имеет установленный докер и использует systemctl для управления службами запуска. Я выполнил следующие команды, чтобы переключиться с демона докера с использования devicemapper на использование overlayfs. Кроме того, старый каталог /var/lib/docker/devicemapper
удаляется, а флаг --graph=/mnt/
указывает, что каталог /mnt
будет использоваться для хранения всех образов докеров, контейнеров и т. д.
sudo service docker stop
sudo rm -rf /var/lib/docker/devicemapper
sudo sed -i -e "/ExecStart/s/$/ --storage-driver=overlay --graph=\/mnt\//" /lib/systemd/system/docker.service
sudo systemctl daemon-reload
Затем создайте каталог, в который будет смонтирована файловая система. Обновите /etc/fstab
, чтобы он монтировался при запуске экземпляра EC2.
sudo mkdir -p /mnt
echo '/dev/xvdf /mnt ext4 defaults,nofail 0 2' | sudo tee --append /etc/fstab
Создайте новый AMI amazon с этими изменениями. Я использовал для этого packer и нашел его довольно простым.
Снимок EBS
Вам понадобится уже отформатированный снимок EBS для подключения к каждому запущенному инстансу EC2. Я сделал это, создав экземпляр EC2 с новым томом EBS и отформатировав присоединенный том EBS. На веб-сайте AWS есть документация, например форматирование как Ext4:
sudo mkfs -t ext4 device_name
После этого вам нужно будет превратить том EBS в моментальный снимок EBS. Вы можете сделать это, зайдя в AWS и нажав «EC2» -> «Тома» (левое меню). Затем выберите том, подключенный к экземпляру EC2, и выберите «Действия» -> «Создать снимок». Создание моментального снимка займет несколько минут.
Запуск экземпляра
После того, как вы все это сделали, у вас должно получиться следующее:
- AMI ожидает смонтированное устройство в
/dev/xvdf
.
- Демон Docker, настроенный на сохранение своей базы данных графа на томе в каталоге /mnt.
- Моментальный снимок EBS в формате Ex4, который будет использоваться в качестве этого тома.
Затем я использовал следующую конфигурацию BlockDeviceMappings
для монтирования этого моментального снимка в качестве тома при запуске экземпляра. Замените все значения заглавными буквами своими значениями. Вы должны использовать созданный вами образ AMI для запуска экземпляра. Я использовал DeleteOnTermination : true
, потому что меня не интересуют файлы, связанные с докером, после закрытия экземпляра.
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sdf",
"Ebs": {
"SnapshotId": "SNAPSHOT_ID",
"Encrypted": false,
"DeleteOnTermination": true,
"VolumeSize": VOL_SIZE
}
}
],
Поиск проблемы
- Обязательно используйте базовый AMI, который может использовать тома EBS.
- Убедитесь, что ваш том EBS отформатирован как файловая система, например. Доп4
- Проверьте, является ли
/dev/xvdf
установленным устройством, и отрегулируйте его соответствующим образом, если нет.
- См. мой репозиторий упаковщика github для получения информации о командах, которые я использовал для создания своего AMI.
person
Michael Barton
schedule
06.10.2016