Как создать образ вашей среды Linux и запустить его на DigitalOcean

Вступление

Функция DigitalOcean по адресу Custom Images позволяет переносить пользовательские образы виртуальных дисков в стиле Linux и Unix из локальной среды или другой облачной платформы в DigitalOcean. и использовать их для запуска DigitalOcean Droplets.

Как описано в Custom Images документации, следующие инструменты изображений изначально поддерживаются инструментом загрузки пользовательских изображений:

Хотя изображения в формате ISO официально не поддерживаются, вы можете узнать, как создать и загрузить совместимое изображение с помощью VirtualBox, следуя https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean-droplet. -from-an-ubuntu-iso-format-image [Как создать дроплет DigitalOcean из образа в формате Ubuntu ISO].

Если у вас еще нет compatible image для загрузки в DigitalOcean, вы можете создать и сжать образ диска ваша Unix-подобная или Linux-система, при условии, что на ней установлено prerequisite[rerequisite software и драйверов.

Начнем с того, что наше изображение будет соответствовать требованиям к пользовательским изображениям. Для этого мы настроим систему и установим некоторые программные компоненты. Затем мы создадим образ с помощью утилиты командной строки + dd + и сжимаем его с помощью + gzip +. После этого мы загрузим этот сжатый файл изображения в DigitalOcean Spaces, откуда мы сможем импортировать его как пользовательское изображение. Наконец, мы загрузим Droplet, используя загруженное изображение.

Предпосылки

Если возможно, вы должны использовать одно из изображений, предоставленных DigitalOcean, в качестве базы или официальное облачное изображение, предоставляемое для распространения, такое как Ubuntu Cloud. Затем вы можете установить программное обеспечение и приложения поверх этого базового образа, чтобы испечь новый образ, используя такие инструменты, как Packer и VirtualBox. Многие облачные провайдеры и среды виртуализации также предоставляют инструменты для экспорта виртуальных дисков в один из перечисленных выше совместимых форматов, поэтому, если возможно, вы должны использовать их для упрощения процесса импорта. В случаях, когда вам нужно вручную создать образ диска вашей системы, вы можете следовать инструкциям в этом руководстве. Обратите внимание, что эти инструкции были протестированы только с системой Ubuntu 18.04, и действия могут различаться в зависимости от операционной системы и конфигурации вашего сервера.

Перед тем, как вы начнете с этого урока, у вас должно быть следующее:

  • Linux или Unix-подобная система, отвечающая всем требованиям, перечисленным в документации по пользовательским изображениям product[p. Например, ваш загрузочный диск должен иметь:

  • Максимальный размер 100 ГБ

  • Таблица разделов MBR или GPT с загрузчиком + grub +

  • Установлены драйверы VirtIO

  • Пользователь без полномочий root с правами администратора, доступными вам в системе, которую вы создаете. Чтобы создать нового пользователя и предоставить ему административные привилегии в Ubuntu 18.04, следуйте нашим https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04#step-2-%E2 % 80% 94-creation-a-new-user [Начальная настройка сервера с Ubuntu 18.04]. Чтобы узнать, как это сделать в Debian 9, обратитесь к Initial Server Setup с Debian 9.

  • Дополнительное запоминающее устройство, используемое для хранения образа диска, созданного в этом руководстве, предпочтительно такого же размера, как и копируемый диск. Это может быть подключенный блочный том, внешний USB-накопитель, дополнительный физический диск и т. Д.

  • DigitalOcean Space и утилита передачи файлов + s3cmd +, настроенная для использования с вашим Space. Чтобы узнать, как создать Пространство, обратитесь к Пространствам Quickstart. Чтобы узнать, как настроить + s3cmd + для использования с Space, обратитесь к s3cmd 2.x Руководству по установке.

Шаг 1 - Установка Cloud-Init и включение SSH

Для начала мы установим пакет инициализации cloud-Init. Cloud-init - это набор скриптов, которые запускаются при загрузке для настройки определенных свойств экземпляра облака, таких как локаль по умолчанию, имя хоста, ключи SSH и сетевые устройства.

Действия по установке cloud-init будут различаться в зависимости от установленной операционной системы. В общем, пакет + cloud-init + должен быть доступен в менеджере пакетов вашей ОС, поэтому, если вы не используете дистрибутив на основе Debian, вы должны заменить + apt + на следующих шагах вашим пакетом, специфичным для дистрибутива. менеджер команды.

Установка + cloud-init

В этом руководстве мы будем использовать сервер Ubuntu 18.04 и поэтому будем использовать + apt + для загрузки и установки пакета + cloud-init . Обратите внимание, что ` cloud-init ` может уже быть установлен в вашей системе (некоторые дистрибутивы Linux устанавливают ` cloud-init +` по умолчанию). Чтобы проверить, войдите на свой сервер и выполните следующую команду:

cloud-init

Если вы видите следующий вывод, + cloud-init + уже установлен на вашем сервере, и вы можете продолжить его настройку для использования с DigitalOcean:

Outputusage: /usr/bin/cloud-init [-h] [--version] [--file FILES] [--debug] [--force]
                          {init,modules,single,query,dhclient-hook,features,analyze,devel,collect-logs,clean,status}
                          ...
/usr/bin/cloud-init: error: the following arguments are required: subcommand

Если вместо этого вы видите следующее, вам нужно установить + cloud-init:

Outputcloud-init: command not found

Чтобы установить + cloud-init +, обновите индекс пакета, а затем установите пакет с помощью + apt +:

sudo apt update
sudo apt install cloud-init

Теперь, когда мы установили + cloud-init +, мы настроим его для использования с DigitalOcean, убедившись, что он использует источник данных + ConfigDrive +. Источники данных Cloud-init определяют, как + cloud-init + будет искать и обновлять конфигурацию экземпляра и метаданные. В DigitalOcean Droplets используется источник данных + ConfigDrive +, поэтому мы проверим, что он стоит первым в списке источников данных, которые + cloud-init + ищет при каждой загрузке Droplet.

Настройка + cloud-init

По умолчанию в Ubuntu 18.04 + cloud-init + настраивается для использования сначала источника данных + NoCloud +. Это вызовет проблемы при запуске образа в DigitalOcean, поэтому нам нужно перенастроить + cloud-init + для использования источника данных + ConfigDrive + и обеспечить повторный запуск + cloud-init + при запуске образа в DigitalOcean.

Из командной строки перейдите в каталог + / etc / cloud / cloud.cfg.d +:

cd /etc/cloud/cloud.cfg.d

Используйте команду + ls + для вывода списка конфигурационных файлов + cloud-init +, присутствующих в каталоге:

ls
Output05_logging.cfg  50-curtin-networking.cfg  90_dpkg.cfg  curtin-preserve-sources.cfg  README

В зависимости от вашей установки некоторые из этих файлов могут отсутствовать. Если есть, удалите файл + 50-curtin-network.cfg +, который настраивает сетевые интерфейсы для вашего сервера Ubuntu. Когда образ запускается в DigitalOcean, + cloud-init + запустится и автоматически перенастроит эти интерфейсы, поэтому этот файл не нужен. Если этот файл не удален, созданная из этого образа Ubuntu дроплета DigitalOcean будет иметь неверно настроенные интерфейсы и не будет доступна из Интернета:

sudo rm 50-curtin-networking.cfg

Далее мы запустим + dpkg -configure cloud-init +, чтобы удалить источник данных + NoCloud +, гарантируя, что + cloud-init + ищет и находит источник данных + ConfigDrive +, используемый в DigitalOcean:

sudo dpkg-reconfigure cloud-init

Вы должны увидеть следующее графическое меню:

изображение: https: //assets.digitalocean.com/articles/iso_custom_images/cloud_init.png [Cloud Init dpkg Menu]

Источник данных + NoCloud + изначально выделен. Нажмите + SPACE, чтобы отменить выбор, затем нажмите` + ENTER`.

Наконец, перейдите к + / etc / netplan +:

cd /etc/netplan

Удалите файл + 50-cloud-init.yaml +, который был сгенерирован из сетевого файла + cloud-init +, который мы удалили ранее:

sudo rm 50-cloud-init.yaml

Последний шаг заключается в том, чтобы мы очистили конфигурацию от начального запуска + cloud-init +, чтобы она перезапускалась при запуске образа в DigitalOcean.

Для этого запустите + cloud-init clean +:

sudo cloud-init clean

На данный момент вы установили и настроили «+ cloud-init +» для использования с DigitalOcean. Теперь вы можете перейти к включению SSH-доступа к вашей капле.

Включить доступ по SSH

После того, как вы установили и настроили + cloud-init +, следующий шаг - убедиться, что у вас на компьютере есть доступный пароль и пароль администратора, как указано в предварительных требованиях. Этот шаг необходим для диагностики любых ошибок, которые могут возникнуть после загрузки изображения и запуска капли. Если существующая конфигурация сети или неверная конфигурация + cloud-init + делает ваш дроплет недоступным по сети, вы можете использовать этого пользователя в сочетании с https://www.digitalocean.com/docs/droplets/how-to/connect -with-console / [DigitalOcean Droplet Console] для доступа к вашей системе и диагностики любых возможных проблем.

После того, как вы настроите своего администратора без полномочий root, последний шаг - убедиться, что у вас установлен и работает SSH-сервер. SSH часто устанавливается во многих популярных дистрибутивах Linux. Процесс проверки работоспособности службы зависит от операционной системы вашего сервера. Если вы не уверены в том, как это сделать, обратитесь к документации по ОС для управления службами. В Ubuntu вы можете проверить, работает ли SSH, с помощью следующей команды:

sudo service ssh status

Вы должны увидеть следующий вывод:

Output● ssh.service - OpenBSD Secure Shell server
  Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
  Active: active (running) since Mon 2018-10-22 19:59:38 UTC; 8 days 1h ago
    Docs: man:sshd(8)
          man:sshd_config(5)
 Process: 1092 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 1115 (sshd)
   Tasks: 1 (limit: 4915)
  Memory: 9.7M
  CGroup: /system.slice/ssh.service
          └─1115 /usr/sbin/sshd -D

Если SSH не запущен, вы можете установить его с помощью + apt + (в дистрибутивах на основе Debian):

sudo apt install openssh-server

По умолчанию сервер SSH запускается при загрузке, если не указано иное. Это желательно при работе системы в облаке, поскольку DigitalOcean может автоматически копировать ваш открытый ключ и предоставлять вам немедленный SSH-доступ к вашей капле после создания.

После того, как вы создали пользователя без полномочий root, включили SSH и установили cloud-init, вы готовы перейти к созданию образа вашего загрузочного диска.

Шаг 2 - Создание образа диска

На этом шаге мы создадим образ диска в формате RAW с помощью утилиты командной строки + dd + и сжимаем его с помощью + gzip +. Затем мы загрузим изображение в DigitalOcean Spaces, используя + s3cmd +.

Для начала войдите на свой сервер и проверьте расположение блочных устройств для вашей системы, используя + lsblk +:

lsblk

Вы должны увидеть что-то вроде следующего:

OutputNAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0    7:0    0 12.7M  1 loop /snap/amazon-ssm-agent/495
loop1    7:1    0 87.9M  1 loop /snap/core/5328
vda    252:0    0   25G  0 disk
└─vda1 252:1    0   25G  0 part /
vdb    252:16   0  420K  1 disk

В этом случае мы замечаем, что наш основной загрузочный диск - это + / dev / vda +, диск объемом 25 ГБ, а основной раздел, смонтированный в + / +, - это + / dev / vda1 +. В большинстве случаев диск, содержащий раздел, смонтированный в + / +, будет исходным диском для образа. Мы собираемся использовать + dd + для создания образа + / dev / vda +.

На этом этапе вы должны решить, где вы хотите сохранить образ диска. Один из вариантов - подключить другое блочное устройство хранения, предпочтительно размером с диск, который вы собираетесь создать. Затем вы можете сохранить изображение на этом временном диске и загрузить его в DigitalOcean Spaces.

Если у вас есть физический доступ к серверу, вы можете добавить дополнительный диск к машине или подключить другое устройство хранения, например, внешний USB-диск.

Другой вариант, который мы продемонстрируем в этом руководстве, - это копирование изображения по SSH на локальный компьютер, с которого вы можете загрузить его в Spaces.

Независимо от того, какой метод вы выберете, убедитесь, что на устройстве хранения, на котором вы сохраняете сжатый образ, достаточно свободного места. Если диск, на котором вы создаете образ, в основном пуст, вы можете ожидать, что сжатый файл изображения будет значительно меньше исходного диска.

Вариант 1. Создание изображения локально

Синтаксис команды + dd +, которую мы собираемся выполнить, выглядит следующим образом:

dd if= bs=4M conv=sparse | pv -s 25G | gzip >

В этом случае мы выбираем + / dev / vda + в качестве входного диска для образа и устанавливаем размеры блоков ввода / вывода равными 4 МБ (из стандартных 512 байт). Обычно это немного ускоряет процесс. Кроме того, мы используем флаг + conv = sparse +, чтобы минимизировать размер выходного файла, пропуская пустое пространство. Чтобы узнать больше о параметрах + dd +, обратитесь к + dd + manpage.

Затем мы направляем вывод в утилиту просмотра канала + pv +, чтобы мы могли визуально отслеживать ход передачи (этот канал не является обязательным и требует установки + pv + с помощью вашего менеджера пакетов). Если вы знаете размер исходного диска (в данном случае это 25G), вы можете добавить + -s 25G + в канал + pv +, чтобы получить ETA, когда передача будет завершена.

Затем мы направляем все это в + gzip + и сохраняем его в файл с именем + ubuntu.gz + на томе временного блочного хранилища, которое мы подключили к серверу. Замените + / mnt / tmp_disk + на путь к внешнему устройству хранения, которое вы подключили к своему серверу.

Вариант 2: Создание изображения по SSH

Вместо того, чтобы выделять дополнительное хранилище для вашей удаленной машины, вы также можете выполнить копирование по SSH, если на вашем локальном компьютере достаточно дискового пространства. Обратите внимание, что в зависимости от доступной вам пропускной способности это может быть медленным, и вы можете понести дополнительные расходы на передачу данных по сети.

Чтобы скопировать и сжать диск через SSH, выполните следующую команду на вашем * локальном * компьютере:

ssh @ "sudo dd if= bs=4M conv=sparse | gzip -1 -" | dd of=

В этом случае мы подключаемся к нашему удаленному серверу по SSH, выполняя там команду + dd + и отправляя вывод в + gzip +. Затем мы передаем вывод + gzip + по сети и сохраняем его как + ubuntu.gz + локально. Перед запуском этой команды убедитесь, что у вас есть утилита + dd + на вашем локальном компьютере:

which dd
Output/bin/dd

Создайте сжатый файл изображения, используя любой из вышеперечисленных методов. Это может занять несколько часов, в зависимости от размера диска, который вы создаете, и метода, который вы используете для создания образа.

Создав сжатый файл изображения, вы можете перейти к его загрузке в пространство DigitalOcean с помощью + s3cmd +.

Шаг 3 - Загрузка изображения в пространства и пользовательских изображений

Как описано в предварительных требованиях, у вас должен быть установлен и настроен + s3cmd + для использования с вашим DigitalOcean Space на машине, содержащей ваше сжатое изображение.

Найдите сжатый файл изображения и загрузите его в свой Space, используя + s3cmd +:

s3cmd put  s3://

После завершения загрузки перейдите к своему Пространству с помощью Control Panel и найдите изображение в списке файлов. Мы временно сделаем изображение общедоступным, чтобы пользовательские изображения могли получить к нему доступ и сохранить копию.

В правой части списка изображений нажмите раскрывающееся меню * Дополнительно *, затем выберите * Управление разрешениями *:

изображение: https: //assets.digitalocean.com/articles/custom_images_migration/public_image.png [Конфигурация объекта Spaces]

Затем нажмите переключатель рядом с * Public * и нажмите * Update *, чтобы сделать изображение общедоступным.

Получите URL-адрес пробелов для изображения, наведя указатель мыши на имя изображения на панели управления, и нажмите * Копировать URL * в открывшемся окне.

Теперь перейдите к * Изображения * в левой панели навигации, а затем * Пользовательские изображения *.

Отсюда загрузите свое изображение, используя этот URL, как подробно описано в пользовательских изображениях Product Documentation.

Затем вы можете create Droplet из этого изображения. Обратите внимание, что вам нужно добавить ключ SSH в Droplet при создании. Чтобы узнать, как это сделать, обратитесь к How для добавления SSH-ключей в капли.

После загрузки вашего дроплета, если вы можете использовать SSH, вы успешно запустили свой пользовательский образ как дроплет DigitalOcean.

отладка

Если вы пытаетесь подключиться по SSH к вашему дроплету и не можете подключиться, убедитесь, что ваш образ соответствует перечисленным требованиям, а также установлены и правильно настроены + cloud-init + и SSH. Если вы по-прежнему не можете получить доступ к капле, вы можете попытаться использовать DigitalOcean консоль капельки и некорневую консоль. пользователь, которого вы создали ранее для изучения системы и отладки вашей сети, конфигураций + cloud-init + и SSH. Еще один способ отладки вашего образа - использовать инструмент виртуализации, такой как Virtualbox, чтобы загрузить образ диска внутри виртуальной машины и отладить конфигурацию вашей системы изнутри виртуальной машины.

Заключение

Из этого руководства вы узнали, как создать образ диска системы Ubuntu 18.04 с помощью утилиты командной строки + dd + и загрузить его в DigitalOcean как пользовательский образ, из которого вы можете запускать Droplets.

Шаги в этом руководстве могут различаться в зависимости от вашей операционной системы, существующего оборудования и конфигурации ядра, но, как правило, образы, созданные из популярных дистрибутивов Linux, должны работать с использованием этого метода. Обязательно внимательно следуйте инструкциям по установке и настройке + cloud-init + и убедитесь, что ваша система соответствует всем требованиям, перечисленным в https://www.digitalocean.com/community/tutorials/how-to-create- an-image-of-your-linux-environment-and-launch-it-on-digitalocean # prerequisites [prerequisites] раздел выше.

Чтобы узнать больше о пользовательских изображениях, обратитесь к Custom Images документации по продукту.

Related