Как мигрировать серверы Почты с Docker Compose в Kubernetes
Назначение документа
В документе описан перенос серверов инсталляции Почты VK WorkSpace с Docker Compose в Kubernetes через веб-интерфейс установщика.
Внимание
Миграция доступна начиная с релиза 26.2.3 и требует предварительной установки релиза 26.2.0 или 26.2.1.
Как устроена миграция
Серверы переносятся последовательно, один за другим. Между переносами инсталляция продолжает работать в гибридном режиме: часть серверов уже в Kubernetes, часть еще в Docker Compose.
Внимание
В процессе миграции возможен простой инсталляции на время обновления конфигурации сервисов.
Примечание
Первым переносится управляющий узел (ControlPlane) — до его миграции остальные серверы недоступны для переноса. Сервер мониторинга рекомендуется переносить вторым, сразу после управляющего узла. Сервер с последним экземпляром infraetcd переносится последним: он нужен для работы Calico, пока в инсталляции остаются серверы на Docker Compose.
Подготовка к миграции
Перед началом миграции:
- Установите релиз 26.2.0 или 26.2.1.
-
Выполните обновление до версии 26.2.3 по одной из инструкций, в зависимости от типа инсталляции:
Внимание
Миграция в Kubernetes возможна только с версии 26.2.3. Если у вас версия ниже, обновите до версии 26.2, затем до версии 26.2.3 и потом выполняйте миграцию.
-
Запустите автоустановку с проверкой и дождитесь, пока все обновления выполнятся до 100%.
- Запустите проверку баз данных.
- Убедитесь, что в работе кластеров нет проблем. Все обнаруженные проблемы нужно устранить до начала миграции.
- Откройте страницу пререквизитов на вкладке Обслуживание и убедитесь, что инсталляция соответствует всем требованиям.
Примечание
Выполняйте проверку баз данных перед каждым запуском миграции, а не только перед первым.
Особенности и ограничения
- Сервер, на котором расположен последний экземпляр
infraetcd, переносится последним. Пока в инсталляции остаются серверы на Docker Compose, работоспособныйinfraetcdнеобходим для функционирования Calico. - Гибридный режим WireGuard не поддерживается: если WireGuard уже настроен в инсталляции на Docker Compose, миграция не сможет корректно подготовить его конфигурацию.
Особенности миграции сервера мониторинга
Если в дата-центре расположен сервер мониторинга, переносите его вторым — сразу после управляющего узла.
Перед запуском автоустановки на этом сервере вручную запустите контейнеры с агрегаторами: vmagent-relay, graphite-mail, graphite-st, graphite-cloud и другие. Только после этого запускайте автоматическую установку.
Ручной запуск нужен, чтобы создались CNAME-записи. Они направят сервисы, работающие в Kubernetes, со старого доменного имени qdit на новые контейнеры в Kubernetes.
Внимание
Если сервер мониторинга переносится предпоследним — перед последним сервером с infraetcd — обязательна полная автоустановка. Это гарантирует, что к моменту переноса последнего сервера все сервисы будут корректно работать с мониторингом, развернутым в Kubernetes.
Шаг 1. Включите продукт VK Kubernetes
- Откройте страницу продуктов установщика:
http://<deployer_ip>:8888/products. - Перейдите на вкладку Администрирование.
-
Включите продукт VK Kubernetes.
Шаг 2. Перейдите в раздел с настройками миграции
Откройте страницу миграции: http://<deployer_ip>:8888/service/k8sMigration. Или перейдите на вкладку Обслуживание → Миграция Kubernetes.
На этом этапе:
- Расставьте метки серверов.
- Распределите кастомные значения — опциональный шаг.
- Выберите управляющие узлы (ControlPlane).
- Cохраните конфигурацию, чтобы сформированные метаданные использовались на следующих шагах.
Примечание
Для заполнения полей можно воспользоваться встроенными инструкциями на страницах.
Шаг 3. Добавьте управляющие узлы
Примечание
Шаг является опциональным при необходимости новых управляющих узлов.
Управляющие узлы можно добавить двумя способами:
- Отдельными серверами — по кнопке Добавить в нижней части страницы. Рекомендуемый вариант: три отдельных инстанса под управляющие узлы кластера.
- Из уже эксплуатирующихся машин с типом
database— если свободных ресурсов нет.
Внимание
При повышенном потреблении ресурсов управляющий узел, размещенный на эксплуатируемой машине, столкнется с оверкоммитом и начнет вытеснять поды на этом сервере.
Если вы решили не добавлять отдельные серверы, перейдите на вкладку Распределение вспомогательных меток.
Шаг 4. Расставьте вспомогательные метки
Примечание
Шаг является опциональным при необходимости распределения конкретных ролей на конкретные гипервизоры после миграции.
Пример: Необходимо распределить сборщики только на конкретные сервера.
-
На вкладке Значения лейблов – добавьте значения для вспомогательной метки.
-
На вкладке Назначения серверов – распределите все добавленные вспомогательные метки между гипервизорами. Одному гипервизору можно присвоить сразу несколько меток.
Шаг 5. Расставьте метки серверов
- Напротив каждого сервера укажите соответствующую метку. Сервисы распределяются по конкретным нодам на основании указанных меток.
- Обязательно добавьте ноду с типом database. Она понадобится для миграции первого управляющего узла, если под управляющую ноду кластера Kubernetes переносится одна из нод БД.
- Гипервизору, на котором развернут локальный registry добавьте метку registry.
- Нажмите кнопку Сохранить.
Шаг 6. Создайте конфигурацию будущего кластера
На странице Распределение меток K8S можно добавить несколько кластеров Kubernetes и несколько управляющих узлов.
Два сервера с метками БД позволяют развернуть два управляющих узла в двух разных дата-центрах. Схему можно изменить: например, убрать второй дата-центр и разместить оба управляющих узла в одном.
Шаг 7. Настройте кластер
После сохранения метаданных настройте конфигурацию кластера. Укажите:
- Режим маршрутизации: VXLAN.
- Namespace по умолчанию — пространство имен, в котором будут работать сервисы Почты.
- Домен в кластере K8s.
- CIDR — диапазон адресов для интерфейсов WireGuard или
tunl0. - Версия Kubernetes.
- Использовать BGP — нужен при использовании нескольких дата-центров.
- Использовать WG — установщик самостоятельно установит и настроит WireGuard на серверах на шаге
enable_hybrid_bgp.
Внимание
Если WireGuard уже был настроен в инсталляции на Docker Compose, миграция не сможет корректно подготовить конфигурацию WireGuard. Гибридный режим не поддерживается.
Шаг 8. Настройте сеть
После сохранения конфигурации заполните сетевые параметры:
| Параметр | Описание |
|---|---|
podCIDR |
Диапазон адресов для подов |
serviceCIDR |
Диапазон адресов для сервисов |
| Адрес ControlPlane | По умолчанию указывает на порт 6443 публичного IP сервера с типом database, выбранного в качестве управляющего узла |
Если управляющих узлов несколько, разверните HAProxy. Он распределит нагрузку между управляющими нодами и обеспечит бесшовное переключение клиентов.
Шаг 9. Запустите миграцию нод
После заполнения всех конфигурационных данных можно переходить к переносу серверов.
Внимание
Сначала мигратор потребует перенести управляющие узлы — остальные ноды до этого недоступны для миграции. Выбирайте серверы с соответствующими метками.
Шаг 10. Проверьте распределение сервисов и ролей
На странице миграции и распределения ролей установщик покажет:
-
Какие сервисы будут удалены полностью.
-
Какие сервисы будут перенесены в кластер Kubernetes в качестве подов.
После проверки нажмите кнопку Далее.
Шаг 11. Подтвердите конфигурацию
После сохранения настроек мигратор сформирует итоговую таблицу и запросит подтверждение для начала миграции.
Поставьте галочку в чекбоксе Конфигурация верная и нажмите кнопку Далее.
Шаг 12. Дождитесь очистки сервера
Как только конфигурация подтверждена, запускается очистка сервера от Docker Compose:
- Последовательно останавливаются сервисы.
- Удаляется Calico и ее зависимости.
- Удаляется Docker Compose с сопутствующими пакетами.
- Нода подготавливается к роли управляющего узла.
- На ноду устанавливается Kubernetes и необходимые для работы сервисы, включая CNI, kubelet и runtime.
Если возникла ошибка
При ошибке на странице миграции появится отчет. В отчете видно, на каком шаге произошла ошибка. Подробности доступны в логах установщика.
После устранения причины нажмите кнопку Перезапустить и дождитесь завершения.
Шаг 13. Мигрируйте роли и сервисы
Когда сервер очищен и на нем запущены компоненты Kubernetes, переходите к миграции сервисов и ролей.
Примечание
На этом шаге мигратор готовит только метаданные для последующего запуска сервисов в Kubernetes. Сами сервисы запускаются на следующем шаге.
Шаг 14. Запустите автоустановку
Когда метаданные для всех ролей и сервисов подготовлены, конвертацию ноды с Docker Compose на Kubernetes можно считать завершенной.
- Перейдите на главную страницу веб-интерфейса установщика.
- Запустите автоматическую установку со всеми проверками.
- Дождитесь завершения и убедитесь, что в Kubernetes появились первые сервисы.
После завершения автоустановки и проверки корректной работы сервисов можно переходить к миграции следующего сервера.
Шаг 15. Проверьте базы данных после обновления
После завершения обновления установщик может показать статус Установка завершена, хотя отдельные кластеры баз данных или их реплики остаются в нерабочем состоянии.
Внимание
Проверка баз данных — обязательный шаг. Не возвращайте систему в эксплуатацию, пока не убедитесь, что все кластеры баз данных работают корректно.
Проверьте состояние всех баз данных
-
Откройте Настройки → Шардирование и репликация БД → Кластеры баз данных.
-
Нажмите Опросить базы данных.
-
Перейдите в контейнер каждой роли Tarantool, например:
4. Перейдите в консоль: -
Выполните команду:
-
Убедитесь, что:
- В box.info.status состояние —
running. - В репликации значения box.info.replication.upstrea и downstream —
follow.
- В box.info.status состояние —
Если все кластеры в этом состоянии, обновление завершено корректно. Если репликация нарушена, восстановите её по инструкции ниже.
Восстановите репликацию Tarantool или OneDB
Выполняйте этот шаг, только если на предыдущем шаге обнаружены реплики с нарушенной репликацией.
Внимание
Наличие работающего мастера — обязательное, но недостаточное условие для ребутстрапа. Перед операцией убедитесь, что:
- Выбранный источник действительно является актуальным RW-мастером.
- Восстанавливаемый инстанс является репликой, а не мастером.
Вариант 1. Ребутстрап через веб-интерфейс
-
В составе нужного кластера найдите неисправную реплику.
-
Откройте меню реплики и выберите Ребутстрап.
-
Нажмите Запустить.
-
Дождитесь завершения операции.
-
Повторно выполните проверку кластера по инструкции «Проверьте состояние всех баз данных».
Во время ребутстрапа данные выбранной реплики удаляются и загружаются заново с мастера.
Внимание
Если появляется ошибка «VClock реплики опережает мастер», не используйте Пропустить проверку и перезапустить как обычный способ восстановления. Принудительный ребутстрап допустим только после резервного копирования, выбора мастера источником истины и согласования потери данных, присутствующих только на реплике.
Вариант 2. Ручной ребутстрап в Kubernetes
Порядок действий описан на примере кластера rima. В примере считаем, что rima1 - master, а для rima2, rima3 нужно выполнить ребутстрап. Для других кластеров используйте их имена.
-
Во вкладке Шардирование и репликация выберите инстанс с наибольшим значением LSN. Остальные инстансы кластера остановите, удалив соответствующие StatefulSet:
-
На Kubernetes-нодах остановленных инстансов создайте резервную копию каталогов в
/opt/mailOnPremise/dockerVolumes, а оригинальные каталоги удалите переименованием: -
В веб-интерфейсе установщика на вкладке Переменные окружения установите для мастера переменную:
-
Запустите установку роли для мастера в веб-интерфейсе установщика.
-
Зайдите в консоль Tarantool мастера:
-
Удалите записи в space
_cluster. Идентификаторы для удаления возьмите из результатаbox.space._cluster:select{}:box.space._cluster:select{} box.space._cluster:delete{ИДЕНТИФИКАТОР_RIMA2} box.space._cluster:delete{ИДЕНТИФИКАТОР_RIMA3}Примечание
На одном из удалений может появиться ошибка RO — это ожидаемо.
В результате команда должна возвращать одну запись:
-
Сохраните snapshot:
-
В веб-интерфейсе установщика установите для мастера переменную:
-
Повторно запустите установку роли для мастера.
-
Запустите установку роли для остальных инстансов кластера. Установщик заново создаст удалённые StatefulSet
rima2иrima3. -
После запуска всех инстансов нажмите Опросить базы данных и проверьте состояние кластера.
Шаг 16. Перенастройте рассыльщики служебных писем
Этот шаг нужен, если вы перенесли сервер с сервисами relay или fallback.
После миграции такого сервера перенастройте адрес рассылщиков на странице установщика /config/main/components/sendersSettings/.
Внимание
Пока адрес не перенастроен, служебные письма не будут доставляться.
Шаг 17. Перенастройте отправку писем Календаря
- Перейдите в Панель администратора VK WorkSpace, в раздел Настройка отправки писем от календаря.
- Измените стандартный адрес SMTP-сервера на
relay-headless-service.onprem.svc.dc1.<домен в кластере K8S>.




















