Proxmox во FreeBSD
Миграция — контейнеры LXC на виртуальные машины
Для контейнеров LXC я изначально думал создать виртуальную машину Alpine Linux, установить LXD и скопировать каждый отдельный контейнер. У сработало для некоторых из них, но у других я начал сталкиваться со странными проблемами, похожими на те, которые потребовали бы ручного вмешательства для обновления с Proxmox 6.x до 7.x. Как это часто бывает с решениями на базе Linux, между обновлениями не всегда сохраняется совместимость, поэтому пришлось бы дорабатывать все контейнеры, чего делать не хотелось. Контейнеры были созданы (в то время) для оптимизации использования оперативной памяти на машине Proxmox, но на сегодняшний день они вызвали больше проблем, чем преимуществ. В некоторых случаях определённые процессы "зависали", что делало невозможным "перезагрузку" контейнера LXC, требуя перезагрузки всего физического узла. Если бы это были виртуальные машины, я мог бы дать команду kill из виртуализатора (в этом случае соответствующему процессу KVM) и перезапустить его.
Для большей совместимости и простоты управления в будущем я решил преобразовать контейнеры LXC в актуальные виртуальные машины на bhyve. Процесс был прост:
- Создание пустой виртуальной машины с помощью vm-bhyve и загрузка виртуальной машины с помощью SystemRescueCD.
- Создание целевых разделов и файловых систем на виртуальной машине, а затем выполнение полного rsync исходного контейнера LXC.
- Настройка файла fstab, установка ядра на целевую виртуальную машину и создание initrd (некоторые контейнеры уже были копиями виртуальных машин, поэтому ядро оставалось установленным и обновлённым, даже если оно не использовалось. С другой стороны, initrd не включал драйверы nvme или virtio, поэтому мне всё равно пришлось его обновлять.).
- Настройка файла конфигурации виртуальной машины bhyve, выполнение последней операции rsync после отключения служб, завершение работы исходного контейнера LXC и запуск виртуальной машины bhyve.
Всё работало правильно, поэтому я переместил все контейнеры один за другим. Самый большой из них временно оказался на другом физическом узле (тоже FreeBSD с bhyve), потому что места на новом сервере не хватило для его размещения. Это не должно было быть на этом сервере, так что нет проблем.
Один за другим контейнеры LXC запускались на новом сервере. Если не считать незначительных корректировок целевых ВМ (другие имена сетевых интерфейсов и т. д.), я не столкнулся с какими-либо особыми проблемами даже спустя несколько дней. Всё работает отлично.
В самом конце я воссоздал виртуальную машину MikroTik CHR. Я пока оставлю эту настройку отдельно, так как она строго привязана к интерфейсам eoip. Это была основная причина, по которой я раньше не выполнял миграцию. Вещи были слишком связаны друг с другом, и мне приходилось развязывать всё шаг за шагом.
Продолжение следует...
Перевод с некоторыми авторскими заголовками. Автор оригинала: Stefano Marinelli.