Как использовать отдельную файловую систему для файлов, связанных с демоном Docker, при запуске на AWS EC2

Я хотел бы использовать отдельный том файловой системы overlayfs для демона Docker на AWS EC2. Я смог настроить и настроить это вручную, войдя в систему и выполнив команды. Теперь я хотел бы создать AWS AMI, который делает это автоматически при запуске, чтобы мне не приходилось делать это каждый раз самому.

Я пытался найти это в Google, но не могу найти AMI, который уже это делает. Может ли кто-нибудь предложить предложение о том, как лучше всего сделать это в моем пользовательском AMI?


person Michael Barton    schedule 15.04.2016    source источник


Ответы (1)


В итоге я сам придумал, как это сделать. Я отправляю свои результаты, если это кому-то еще пригодится.

Создание 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