Это третья по счету статья по ELMA365 и она целиком и полностью посвящена вопросу миграции с ветки Microk8s на Kubernetes in Docker (KinD). Еще раз озвучу свое мнение:
- Elma365 - это достаточно проблемное решение
- В плане документации существует огромные пробелы
Автору статьи, как и многим из вас приходится как то работать с тем, что есть и поддерживать текущее решение в режиме non-stop, без участия коммерческой техподдержки, от которой как показывает практика толку мало.
Содержание статьи
- План действий
- Подготовка сервера
- Добавляем и настраиваем репозиторий Docker
- Устанавливаем Docker
- Установка Elma365 Standard
- Делаем дамп на старом сервере и переносим на новый
- Разворачиваем дамп
- Апгрейд в рамках одного сервера
- Команды Elma365 KinD
- Проверка работоспособности
- Обращение к менеджеру Elma за ключом активации
- Перезагрузка и проверка автозапуска сервисов
- Обновление продукта
- Заключение
План действий
Разработчики решения предлагают сделать дамп, удалить текущее решение и на этой же операционке - на старых дрожжах, выполнить новую инсталляцию и импорт дампа. Если честно не самый лучший и тем более production вариант. Поэтому в свою очередь миграцию буду выполнять на свежую виртуальную машину с Ubuntu 24.04LTS, но в отдельном блоке статьи опишу процесс перехода с апгрейдом дистрибутива в рамках одного сервера.
Итак план действий таков:
- Подготовка новой виртуальной машины на Ubuntu 24.04LTS
- Установка Elma365 Standard
- Снятие дампа со старого сервера и копирование на новой, в том числе сертификаты SSL
- Восстановление дампа
Алгоритм перехода от разработчиков:
- Снимаем дамп в microK8s —> https://elma365.com/ru/help/platform/backup.html
- Удаляем elma365
- Устанавливаем elma365 той же версии, что и была, но из ветки KinD
- Восстановить дамп
- Аналогичным установке способом обновиться до актуальной версии подставляя номера версий по очередности.
Подготовка сервера
В качестве гипервизора автор использует Proxmox.
ВНИМАНИЕ: Если вы используете гипервизор Proxmox ниже 8 версии, то он не поддерживает AVX инструкции процессора необходимые для MongoDB 5.0+
В разделе Оборудование --> Процессоры --> необходимо выбрать режим хоста
Для начала повышаем права пользователя:
sudo -s
Настраиваем сеть:
Удаляем дефолтные конфиги:
rm /etc/netplan/*.yaml
Создаем свой конфигурационный файл:
nano /etc/netplan/config.yaml
network:
ethernets:
ens18:
dhcp4: false
addresses: [192.168.1.200/24]
gateway4: 192.168.1.254
nameservers:
addresses: [192.168.1.201,192.168.1.202]
version: 2
Сохраняем файл, выходим из редактора:
CTRL+O, CTRL+X
Применяем настройки сети:
netplan apply
Обновляем систему:
apt update -y && apt upgrade -y
Для работы нам потребуется nano, net-tools, mc:
apt install net-tools mc -y
где net-tools - пакет сетевых утилит, а mc - Midnight Commander текстовый двухпанельный файловый менеджер
Если требуется переименовать сервер выполняем командой:
hostnamectl set-hostname elma2
Прописываем в файл Hosts сопоставления:
nano /etc/hosts
127.0.0.1 elma elma2 elma.tuning-admina.ru
192.168.1.200 elma elma2 elma.tuning-admina.ru
Сохраняем файл, выходим из редактора:
CTRL+O, CTRL+X
Добавляем и настраиваем репозиторий Docker
Добавляем официальные GPG key:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
Добавляем репозиторий:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновляем информацию о пакетах в репозиториях:
apt update
Устанавливаем Docker
Приступаем:
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Проверяем статус службы:
systemctl status docker
Отлично двигаемся дальше
Установка Elma365 Standard
В моем случае я осуществляю переход с Microk8s версии 2024.3.36 --> KinD 2024.3-latest:
Скачиваем установочный скрипт:
curl -fsSL -o elma365-docker.sh https://dl.elma365.com/onPremise/master/2024.3-latest/installer-docker
Делаем скрипт исполняемым:
chmod +x elma365-docker.sh
Чтобы создать файл конфигурации для новой инсталляции, необходимо запустить скрипт с префиксом --new-config:
./elma365-docker.sh --new-config
Смотрим в директорию, есть ли конфигурационный файл:
ls
config-elma365.txt elma365-docker.sh
Редактируем файл конфигурации:
nano config-elma365.txt
Рядом с установочным скриптом лежит config-elma365.txt - это файл-ответов для первичной настройки Elma365, который достаточно хорошо задокументирован. Если у вас новая инсталляция, то для начала заполним этот файл:
nano config-elma365.txt
Демонстрирую на примере моего файла конфигурации:
###############################################################
# ОСНОВНЫЕ ПАРАМЕТРЫ УСТАНОВКИ #
###############################################################
# Базовый URL — локальное доменное имя (FQDN) или IP адрес сервера
ELMA365_HOST=192.16.1.10
# -------------------------------------------------------------------------------------------
# Укажите логин и пароль для входа главного администратора.
ELMA365_EMAIL=admin@tuning-admina.ru
ELMA365_PASSWORD=P@ssw0rd
# -------------------------------------------------------------------------------------------
# Выберите язык интерфейса системы
ELMA365_LANGUAGE=ru-RU
# -------------------------------------------------------------------------------------------
# Выберите редакцию
ELMA365_EDITION=standard
# -------------------------------------------------------------------------------------------
# Настроим соединение с smtp сервером
ELMA365_SMTP_HOST=smtp.tuning-admina.ru
ELMA365_SMTP_PORT=465
ELMA365_SMTP_FROM=elma@tuning-admina.ru
ELMA365_SMTP_USER=elma@tuning-admina.ru
ELMA365_SMTP_PASSWORD="password"
ELMA365_SMTP_TLS=true
# -------------------------------------------------------------------------------------------
# Настройка TLS шифрования
ELMA365_TLS_CRT=/etc/ssl/example.crt
ELMA365_TLS_KEY=/etc/ssl/example.key
ELMA365_TLS_CA=/etc/ssl/certs/exampleRootCA.pem
###############################################################
# ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ УСТАНОВКИ #
###############################################################
# Настройка директорий для установки системы и создания резервных копий
ELMA365_INSTALL_DIR="/elma365"
ELMA365_BACKUP_DIR="/Backup"
# -------------------------------------------------------------------------------------------
# Настройка hostalias
ELMA365_HOSTALIASES_IP=192.168.1.10
# -------------------------------------------------------------------------------------------
# Режим отладки платформы
#ELMA365_DEBUG=true
Сохраняем файл и выходим из редактирования:
CTRL+O, CTRL+X
Запускаем скрипт:
./elma365-docker.sh
Установка завершена:
Проверяем доступность Вэб интерфейса:
У менеджера можно попросить ключ на 10 пользователей для тестирования решения.
Делаем дамп на старом сервере и переносим на новый
Создаем дамп:
elma365ctl dump
Переносим данные old_server/backup --> new_server/backup, эти манипуляции я выполняю с помощью WinSCP, кому как удобнее.
Переносим SSL сертификаты со старого сервера на новый, кладем в папку /etc/ssl.
Разворачиваем дамп
Восстанавливаем дамп:
./elma365-docker.sh --restore --path /backup/ELMA365_2024.3.36_2024.10.08-04.50.18
Видим, что дамп благополучно развернулся:
Waiting for Restore
Restore successful
Апгрейд в рамках одного сервера
Снимаем дамп:
elma365ctl dump
Удаляем microk8s и все запущенные сервисы:
snap remove --purge microk8s
Увидим:
microk8s removed
Удаляем каталог:
rm -f /usr/local/bin/elma365ctl
Для начала обновим текущий релиз:
apt upgrade -y
Проверяем возможность апгрейда дистрибутива:
do-release-upgrade
Процесс не быстрый можно перекусить или попить кофе
После перезагрузки проверяем версию системы:
cat /etc/os-release
Обновляем систему и убеждаемся, что все пакеты обновлены:
apt update && apt upgrade -y
Добавляем GPG key репозитория Docker:
apt update
apt install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
Добавляем репозиторий:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновляем информацию о пакетах в репозиториях:
apt update
Устанавливаем Docker:
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Проверяем статус службы:
systemctl status docker
Устанавливаем elma365 той же версии, что и была, но из ветки KinD:
Скачиваем скрипт Elma365 KinD:
curl -fsSL -o elma365-docker.sh https://dl.elma365.com/onPremise/master/2024.3-latest/installer-docker
Делаем скрипт исполняемым:
chmod +x elma365-docker.sh
Чтобы создать файл конфигурации для новой инсталляции, необходимо запустить скрипт с префиксом --new-config:
./elma365-docker.sh --new-config
Смотрим в директорию, есть ли конфигурационный файл:
ls
config-elma365.txt elma365-installer-docker.sh
Редактируем файл конфигурации:
nano config-elma365.txt
Рядом с установочным скриптом лежит config-elma365.txt - это файл-ответов для первичной настройки Elma365, который достаточно хорошо задокументирован. Если у вас новая инсталляция, то для начала заполним этот файл:
nano config-elma365.txt
Демонстрирую на примере моего файла конфигурации:
###############################################################
# ОСНОВНЫЕ ПАРАМЕТРЫ УСТАНОВКИ #
###############################################################
# Базовый URL — локальное доменное имя (FQDN) или IP адрес сервера
ELMA365_HOST=elma.tuning-admina.ru
# -------------------------------------------------------------------------------------------
# Укажите логин и пароль для входа главного администратора.
ELMA365_EMAIL=admin@tuning-admina.ru
ELMA365_PASSWORD=P@ssw0rd
# -------------------------------------------------------------------------------------------
# Выберите язык интерфейса системы
ELMA365_LANGUAGE=ru-RU
# -------------------------------------------------------------------------------------------
# Выберите редакцию
ELMA365_EDITION=standard
# -------------------------------------------------------------------------------------------
# Настроим соединение с smtp сервером
ELMA365_SMTP_HOST=smtp.tuning-admina.ru
ELMA365_SMTP_PORT=465
ELMA365_SMTP_FROM=elma@tuning-admina.ru
ELMA365_SMTP_USER=elma@tuning-admina.ru
ELMA365_SMTP_PASSWORD="password"
ELMA365_SMTP_TLS=true
# -------------------------------------------------------------------------------------------
# Настройка TLS шифрования
ELMA365_TLS_CRT=/etc/ssl/fullchain.pem
ELMA365_TLS_KEY=/etc/ssl/privkey.pem
###############################################################
# ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ УСТАНОВКИ #
###############################################################
# Настройка директорий для установки системы и создания резервных копий
#ELMA365_INSTALL_DIR="/elma365"
ELMA365_BACKUP_DIR="/Backup"
# -------------------------------------------------------------------------------------------
# Настройка hostalias
ELMA365_HOSTALIASES_IP=192.168.1.10
# -------------------------------------------------------------------------------------------
# Режим отладки платформы
#ELMA365_DEBUG=true
Сохраняем файл и выходим из редактирования:
CTRL+O, CTRL+X
Запускаем скрипт:
./elma365-docker.sh
Установка завершена:
Импортируем дамп:
./elma365-docker.sh --restore --path /backup/ELMA365_2024.3.36_2024.10.08-04.50.18
Видим, что дамп благополучно развернулся:
Waiting for Restore
Restore successful
Аналогичным процессу установки способом можно обновиться до актуальной версии подставляя номера версий по очередности.
Команды Elma365 KinD
Проверка состояния сервисов:
docker exec elma365 kubectl get pod
Посмотреть список доступных команд скрипта:
./elma365-docker.sh --help
Создать новый файл конфигурации установки config-elma365.txt:
./elma365-docker.sh --new-config
Собрать диагностическую информацию:
./elma365-docker.sh --diag
Установить ELMA365:
./elma365-docker.sh --install
Офлайн-установка ELMA365:
./elma365-docker.sh --offline
Обновить ELMA365:
./elma365-docker.sh --upgrade
Остановить приложение ELMA365:
./elma365-docker.sh --stop
Запустить приложение ELMA365:
./elma365-docker.sh --start
Снимаем дамп:
./elma365-docker.sh --dump
Восстановление из дампа:
./elma365-docker.sh --restore
Переустановить ELMA365:
./elma365-docker.sh --reset
Удалить ELMA365 (все данные будут удалены)
./elma365-docker.sh --delete
Реконфигурировать ELMA365:
./elma365-docker.sh --reconfigure
Обновить сертификаты для кластера Kubernetes:
./elma365-docker.sh --renew-certs-k8s
Включить режим отладки установки:
./elma365-docker.sh --debug
Проверка работоспособности
Проверяем статус сервисов:
docker exec elma365 kubectl get pod
Обращение к менеджеру Elma за ключом активации
Если вы обновляетесь в рамках одного сервера, то повторная активация вам не потребуется.
Копируем регистрационный ключ сервера и в telegram пишем менеджеру, что необходимо выполнить повторную активацию в связи с миграцией:
Перезагрузка и проверка автозапуска сервисов
Перезагружаем систему:
reboot
Без префиксов, чтобы все сервисы и службы нормально остановились.
Проверяем статус сервисов после перезагрузки:
docker exec elma365 kubectl get pod
Обновление продукта
Процесс обновления вещь достаточно непредсказуемая и рекомендую делать бэкап целиком виртуальной машины
Саму же процедуру необходимо запускать с параметром latest в URL запросе к скрипту.
Пример:
У меня текущая версия 2024.3.36 - последняя в марте и соответственно апгрейдить я буду на апрельский самый последний релиз, следовательно в URL запросе на скачивание нужного скрипта пишу:
curl -fsSL -o elma365-docker.sh https://dl.elma365.com/onPremise/master/2024.4-latest/installer-docker
Делаем скрипт исполняемым:
chmod +x elma365-docker.sh
Запускаем скрипт установки с ключом --upgrade:
./elma365-docker.sh --upgrade
или
./elma365-docker.sh
Если вдруг процесс обновления не завершился, по причине - пропало питание, внезапное зависание системы или прочие коллизии не связанные с системными ошибками ПО, необходимо повторить процедуру.
После установки проверяйте статус сервисов:
docker exec elma365 kubectl get pod
Как видим все отлично и все сервисы запущены
Заключение
Надеюсь статья вам понравилась и она окажется полезной сообществу, буду очень рад вашим комментариям и пожеланиям.