В документе описан перенос серверов инсталляции Почты VK WorkSpace с Docker Compose в Kubernetes через веб-интерфейс установщика.
Серверы переносятся последовательно, один за другим. Между переносами инсталляция продолжает работать в гибридном режиме: часть серверов уже в Kubernetes, часть еще в Docker Compose.
Перед началом миграции:
-
Установите релиз 26.2.0 или 26.2.1.
-
Выполните обновление до версии 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.
-
Откройте страницу продуктов установщика:
http://<deployer_ip>:8888/products. -
Перейдите на вкладку Администрирование.
-
Включите продукт VK Kubernetes.

Откройте страницу миграции: http://<deployer_ip>:8888/service/k8sMigration. Или перейдите на вкладку Обслуживание → Миграция Kubernetes.
На этом этапе:
- Расставьте метки серверов.
- Распределите кастомные значения — опциональный шаг.
- Выберите управляющие узлы (ControlPlane).
- Сохраните конфигурацию, чтобы сформированные метаданные использовались на следующих шагах.

Управляющие узлы можно добавить двумя способами:
- Отдельными серверами — по кнопке Добавить в нижней части страницы. Рекомендуемый вариант: три отдельных инстанса под управляющие узлы кластера.
- Из уже эксплуатирующихся машин с типом
database— если свободных ресурсов нет.
Если вы решили не добавлять отдельные серверы, перейдите на вкладку Распределение вспомогательных меток.

-
На вкладке Значения лейблов – добавьте значения для вспомогательной метки.

-
На вкладке Назначения серверов – распределите все добавленные вспомогательные метки между гипервизорами. Одному гипервизору можно присвоить сразу несколько меток.

-
На вкладке Назначение ролей – установите метки на конкретные роли.

- Напротив каждого сервера укажите соответствующую метку. Сервисы распределяются по конкретным нодам на основании указанных меток.
- Обязательно добавьте ноду с типом database. Она понадобится для миграции первого управляющего узла, если под управляющую ноду кластера Kubernetes переносится одна из нод БД.
- Гипервизору, на котором развернут локальный registry добавьте метку registry.
- Нажмите кнопку Сохранить.

На странице Распределение меток K8S можно добавить несколько кластеров Kubernetes и несколько управляющих узлов.
Два сервера с метками БД позволяют развернуть два управляющих узла в двух разных дата-центрах. Схему можно изменить: например, убрать второй дата-центр и разместить оба управляющих узла в одном.

После сохранения метаданных настройте конфигурацию кластера. Укажите:
- Режим маршрутизации: VXLAN.
- Namespace по умолчанию — пространство имен, в котором будут работать сервисы Почты.
- Домен в кластере K8s.
- CIDR — диапазон адресов для интерфейсов WireGuard или
tunl0. - Версия Kubernetes.
- Использовать BGP — нужен при использовании нескольких дата-центров.
- Использовать WG — установщик самостоятельно установит и настроит WireGuard на серверах на шаге
enable_hybrid_bgp.

После сохранения конфигурации заполните сетевые параметры:
Параметр | Описание |
|---|---|
podCIDR | Диапазон адресов для подов |
serviceCIDR | Диапазон адресов для сервисов |
Адрес ControlPlane | По умолчанию указывает на порт 6443 публичного IP сервера с типом database, выбранного в качестве управляющего узла |
Если управляющих узлов несколько, разверните HAProxy. Он распределит нагрузку между управляющими нодами и обеспечит бесшовное переключение клиентов.

После заполнения всех конфигурационных данных можно переходить к переносу серверов.

На странице миграции и распределения ролей установщик покажет:
-
Какие сервисы будут удалены полностью.

-
Какие сервисы будут перенесены в кластер Kubernetes в качестве подов.

После проверки нажмите кнопку Далее.
После сохранения настроек мигратор сформирует итоговую таблицу и запросит подтверждение для начала миграции.
Поставьте галочку в чекбоксе Конфигурация верная и нажмите кнопку Далее.

Как только конфигурация подтверждена, запускается очистка сервера от Docker Compose:
- Последовательно останавливаются сервисы.
- Удаляется Calico и ее зависимости.
- Удаляется Docker Compose с сопутствующими пакетами.
- Нода подготавливается к роли управляющего узла.
- На ноду устанавливается Kubernetes и необходимые для работы сервисы, включая CNI, kubelet и runtime.

При ошибке на странице миграции появится отчет. В отчете видно, на каком шаге произошла ошибка. Подробности доступны в логах установщика.

После устранения причины нажмите кнопку Перезапустить и дождитесь завершения.
Когда сервер очищен и на нем запущены компоненты Kubernetes, переходите к миграции сервисов и ролей.

Когда метаданные для всех ролей и сервисов подготовлены, конвертацию ноды с Docker Compose на Kubernetes можно считать завершенной.
- Перейдите на главную страницу веб-интерфейса установщика.
- Запустите автоматическую установку со всеми проверками.
- Дождитесь завершения и убедитесь, что в Kubernetes появились первые сервисы.
После завершения автоустановки и проверки корректной работы сервисов можно переходить к миграции следующего сервера.
После завершения обновления установщик может показать статус Установка завершена, хотя отдельные кластеры баз данных или их реплики остаются в нерабочем состоянии.
-
Откройте Настройки → Шардирование и репликация БД → Кластеры баз данных.
-
Нажмите Опросить базы данных.
-
Перейдите в контейнер каждой роли Tarantool, например:
kubectl exec -it -n onprem rima1-0 -- bash -
Перейдите в консоль:
tarantoolctl connect /run/tarantool/tarantool.sock -
Выполните команду:
box.info -
Убедитесь, что:
- В box.info.status состояние —
running. - В репликации значения box.info.replication.upstream и downstream —
follow.
- В box.info.status состояние —
Если все кластеры в этом состоянии, обновление завершено корректно. Если репликация нарушена, восстановите её по инструкции ниже.
Выполняйте этот шаг, только если на предыдущем шаге обнаружены реплики с нарушенной репликацией.
-
В составе нужного кластера найдите неисправную реплику.
-
Откройте меню реплики и выберите Ребутстрап.

-
Нажмите Запустить.

-
Дождитесь завершения операции.

-
Повторно выполните проверку кластера по инструкции «Проверьте состояние всех баз данных».
Порядок действий описан на примере кластера rima. В примере считаем, что rima1 - master, а для rima2, rima3 нужно выполнить ребутстрап. Для других кластеров используйте их имена.
-
Во вкладке Шардирование и репликация выберите инстанс с наибольшим значением LSN. Остальные инстансы кластера остановите, удалив соответствующие StatefulSet:
kubectl delete sts -n onprem rima2kubectl delete sts -n onprem rima3 -
На Kubernetes-нодах остановленных инстансов создайте резервную копию каталогов в
/opt/mailOnPremise/dockerVolumes, а оригинальные каталоги удалите переименованием:cd /opt/mailOnPremise/dockerVolumessudo mv rima2 rima2baksudo mv rima3 rima3bak -
В веб-интерфейсе установщика на вкладке Переменные окружения установите для мастера переменную:
TARANTOOL_FORCE_RECOVERY=true -
Запустите установку роли для мастера в веб-интерфейсе установщика.
-
Зайдите в консоль Tarantool мастера:
kubectl exec -it -n onprem rima1-0 -- \tarantoolctl connect /var/run/tarantool/tarantool.sock -
Удалите записи в space
_cluster. Идентификаторы для удаления возьмите из результатаbox.space._cluster:select{}:box.space._cluster:select{}box.space._cluster:delete{ИДЕНТИФИКАТОР_RIMA2}box.space._cluster:delete{ИДЕНТИФИКАТОР_RIMA3}В результате команда должна возвращать одну запись:
box.space._cluster:select{} -
Сохраните snapshot:
box.snapshot() -
В веб-интерфейсе установщика установите для мастера переменную:
TARANTOOL_FORCE_RECOVERY=false -
Повторно запустите установку роли для мастера.
-
Запустите установку роли для остальных инстансов кластера. Установщик заново создаст удаленные StatefulSet
rima2иrima3. -
После запуска всех инстансов нажмите Опросить базы данных и проверьте состояние кластера.
Этот шаг нужен, если вы перенесли сервер с сервисами relay или fallback.
После миграции такого сервера перенастройте адрес рассылщиков на странице установщика /config/main/components/sendersSettings/.
- Перейдите в Панель администратора VK WorkSpace, в раздел Настройка отправки писем от календаря.
- Измените стандартный адрес SMTP-сервера на
relay-headless-service.onprem.svc.dc1.<домен в кластере K8S>.

Технический писатель: Груздев Никита