• Русский
  • Руководство по миграции Nexus: с версии 3.69.0 на 3.76.0 (Alauda Build of Nexus Operator версии v3.76.z)

    Overview

    В этом документе приведены подробные инструкции по миграции Nexus Repository Manager с версии 3.69.0 на 3.76.0. Поскольку Nexus прекратил поддержку OrientDB после версии 3.70, требуется ручной процесс миграции данных.

    Prerequisites

    Migration Process

    1. Резервное копирование данных

    Создайте каталог для резервной копии (убедитесь, что на локальном диске достаточно места для резервного копирования):

    mkdir -p nexus-backup

    Установите переменные окружения:

    export INSTANCE_NAME=<nexus instance name> 
    export INSTANCE_NAMESPACE=<nexus instance namespace>
    export POD_NAME=$(kubectl -n ${INSTANCE_NAMESPACE} get pod -l release=${INSTANCE_NAME} | grep ${INSTANCE_NAME} | awk '{print $1}')

    1.1 Остановка сервиса

    Перед удалением необходимо сначала удалить оператор старой версии, иначе сервис будет автоматически воссоздан после удаления.

    kubectl -n ${INSTANCE_NAMESPACE} delete service -l release=${INSTANCE_NAME}

    1.2 Резервное копирование Blob Storage

    mkdir -p nexus-backup/blobs
    kubectl -n ${INSTANCE_NAMESPACE} cp ${POD_NAME}:/nexus-data/blobs nexus-backup/blobs

    1.3 Резервное копирование базы данных

    1. Перейдите в: Admin Dashboard > System > Tasks
    2. Создайте новую задачу:
      • Тип: Admin - Export databases for backup
      • Имя задачи: [Ваш выбор]
      • Место резервного копирования: [Укажите путь] — путь к каталогу должен находиться внутри каталога данных Nexus.
      • Частота: Manual
    3. Запустите задачу и проверьте статус выполнения

    2. Миграция базы данных

    2.1 Конвертация из OrientDB в H2

    Установите переменные окружения:

    export INSTANCE_NAME=<old nexus instance name> 
    export INSTANCE_NAMESPACE=<old nexus instance namespace>
    export POD_NAME=$(kubectl -n ${INSTANCE_NAMESPACE} get pod -l release=${INSTANCE_NAME} | grep ${INSTANCE_NAME} | awk '{print $1}')

    Получите доступ к контейнеру и скачайте инструмент миграции:

    kubectl -n ${INSTANCE_NAMESPACE} exec -it ${POD_NAME} -- bash
    cd /nexus-data/backup
    wget https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-3.70.3-01.jar -O nexus-db-migrator.jar

    Если прямое скачивание из сети недоступно, можно сначала скачать файл локально, а затем скопировать его в контейнер:

    kubectl -n ${INSTANCE_NAMESPACE} cp nexus-db-migrator.jar ${POD_NAME}:/nexus-data/backup

    Выполните миграцию:

    # Файл nexus.mv.db будет создан в каталоге backup, что означает завершение миграции
    java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator.jar --migration_type=h2

    Сделайте резервную копию конвертированной базы данных:

    kubectl -n ${INSTANCE_NAMESPACE} cp ${POD_NAME}:/nexus-data/backup/nexus.mv.db nexus-backup/nexus.mv.db

    3. Развертывание нового экземпляра

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

    Примечание: Использование тех же настроек NodePort и Ingress, что и у старой версии, приведет к конфликтам и невозможности создания. Настройте новые значения, а после успешной миграции удалите старый экземпляр и затем измените настройки внешнего доступа.

    3.1 Опции конфигурации

    Для доступа через NodePort:

    helmValues:
       service:
         nexus:
           enabled: true
           nodePort: <port>

    Для HTTP ingress:

    service:
      nexus:
        enabled: true
        type: ClusterIP
    
    ingress:
      enabled: true
      host: <domain>
      defaultRule: true

    Для HTTPS ingress:

    helmValues:
       service:
         nexus:
           enabled: true
           type: ClusterIP
       
       ingress:
         enabled: true
         host: <domain>
         defaultRule: true
         tls:
           - secretName: <tls-secret>
             hosts:
             - <domain>

    3.2 Импорт данных

    Установите переменные для нового экземпляра:

    export INSTANCE_NAME=<new nexus instance name> 
    export INSTANCE_NAMESPACE=<new nexus instance namespace>
    export POD_NAME=$(kubectl -n ${INSTANCE_NAMESPACE} get pod -l app.kubernetes.io/instance=${INSTANCE_NAME} | grep ${INSTANCE_NAME} | awk '{print $1}')

    Очистите существующие данные (пропустите этот шаг, если новый том данных пуст):

    kubectl -n ${INSTANCE_NAMESPACE} exec -it ${POD_NAME} -- rm -rf /nexus-data/blobs /nexus-data/db/nexus.mv.db 

    Импортируйте резервные данные:

    kubectl -n ${INSTANCE_NAMESPACE} cp nexus-backup/blobs ${POD_NAME}:/nexus-data
    kubectl -n ${INSTANCE_NAMESPACE} cp nexus-backup/nexus.mv.db ${POD_NAME}:/nexus-data/db

    Затем перезапустите Pod Nexus.

    4. Шаги проверки

    1. Проверьте статус pod:

      kubectl -n ${INSTANCE_NAMESPACE} get pods -l app.kubernetes.io/instance=${INSTANCE_NAME}
    2. Контрольный список проверки:

      • Доступность веб-интерфейса
      • Видимость репозиториев
      • Возможность загрузки артефактов
      • Возможность скачивания артефактов
      • Аутентификация пользователей
      • Права доступа к репозиториям
    3. Очистка после миграции:

      • Удалите старый экземпляр после успешной проверки (для этого потребуется переустановить оператор старой версии, чтобы завершить очистку ресурсов старого экземпляра)
      • Архивируйте резервные копии согласно политике хранения