Обновление LCM ks2024.2 → ks2024.3

Шаги для обновления с версии ks2024.2 на ks2024.3 будут отличаться от предыдущей инструкции Обновление LCM ks2024.1 → ks2024.2. В первую очередь это касается GitLab, поскольку обновление для него потребуется делать в два этапа. Также обратите внимание на этап работы с Nexus: при переходе на более новую версию меняется база данных с настройками.

Загрузите и подготовьте пакет обновления:

  1. Зайдите на LCM-узел по SSH.

  2. Загрузите архив upgrade-ks2024.3-sberlinux.tgz в папку /installer/update.

  3. Убедитесь, что в этой папке нет других файлов или папок, при необходимости удалите их.

  4. Убедитесь, что в точке монтирования / имеется более 200 Гб свободного пространства. Это необходимо для успешного выполнения обновления.

  5. Для последующего обновления репозитория в GitLab, выполните команду:

    # git config --global --add safe.directory '*'
    
  6. Замените в файле /installer/config/settings строку export RELEASE=ks2024.2-sberlinux на export RELEASE=ks2024.3-sberlinux.

  7. Добавьте строки в файл /installer/config/settings:

    export NEXUS_FQDN=nexus.$DOMAIN
    export CURL_CA_BUNDLE=/installer/data/ca/cert/chain-ca.pem
    

Обновите параметры в Nexus:

  1. Зайдите в веб-интерфейс Nexus по адресу https://nexus.cloud.itkey.com.

  2. Удалите существующий репозиторий sberlinux.

  3. Создайте репозитории docker-sberlinux и sberlinux с типом hosted и форматом yum.

  4. Укажите параметры:

    • Repodata Depth: 0

    • Layout Policy: Strict

    • Deployment Policy: Disable redeploy

Восстановите пароли доступа NetBox перед проведением обновления:

  1. Зайдите на LCM-узел по SSH.

  2. Извлеките из архива инсталлятора файлы installer/netbox-docker/env/*.env.

  3. Переместите эти файлы в /installer/data/netbox/env/ на LCM-узле, заменив существующие.

Запустите пайплайн обновления:

  1. Перейдите в веб-интерфейс GitLab.

  2. Найдите репозиторий project_k / deployments / bifrost и удалите его. Для этого перейдите в Settings > General > Advanced и нажмите Delete project.

  3. Перейдите в репозиторий project_k / services / upgrade.

  4. Перейдите в раздел Settings > CI/CD > General pipelines.

  5. Установите значение Timeout5h.

  6. Запустите пайплайн Run pipeline по умолчанию. Дождитесь его завершения.

Обновите файлы Docker и перезапустите сервисы:

  1. Перейдите на LCM-узел и выполните команды, приведенные ниже.

    # cd /installer/config
    # source settings
    # sed -i "/netbox.dump/d" $CFG_HOME/netbox-compose.yml
    # docker compose -f $CFG_HOME/netbox-compose.yml up -d
    # docker compose -f $CFG_HOME/compose.yaml up -d nginx
    # docker compose -f $CFG_HOME/compose.yaml up -d vault
    # docker compose -f $CFG_HOME/compose.yaml exec vault /bin/sh -c "vault operator unseal"
    # docker compose -f $CFG_HOME/compose.yaml exec vault /bin/sh -c "vault login"
    
    # docker compose -f $CFG_HOME/compose.yaml exec vault /bin/sh -c "cat /vault/config/chain-ca.pem >> /etc/pki/ca-trust/source/anchors/ca.crt; update-ca-trust"
    
    # docker restart vault
    # docker compose -f $CFG_HOME/compose.yaml exec vault /bin/sh -c "vault operator unseal"
    # docker compose -f $CFG_HOME/compose.yaml exec vault /bin/sh -c "vault login"
    
    # docker compose -f $CFG_HOME/compose.yaml exec vault /bin/sh -c "vault write auth/jwt/role/itkey-deployments - <<EOF
    {
        \"role_type\": \"jwt\",
        \"policies\": [\"secret_v2/deployments\"],
        \"token_explicit_max_ttl\": 3600,
        \"user_claim\": \"user_email\",
        \"bound_audiences\": \"http://vault:8200\",
        \"bound_claims\": {
        \"namespace_id\": [\"3\", \"4\"]
        }
    }
    EOF
    "
    

Обновление GitLab необходимо делать в два этапа. Сначала обновите GitLab до версии 16.11.10:

  1. Зайдите на LCM-узел по SSH.

  2. Выполните команды:

    # sed -i "s|\$NEXUS_NAME.\$DOMAIN/project_k/lcm/gitlab:\$RELEASE|\$NEXUS_NAME.\$DOMAIN/project_k/lcm/gitlab:\$RELEASE-16.11.10-ce.0|" compose.yaml
    # docker compose -f $CFG_HOME/compose.yaml up -d gitlab
    
  3. Дождитесь запуска или завершения работы контейнера. Проверить состояние запуска контейнера можно с помощью команды:

    # docker logs gitlab -f -n 100
    

    Note

    Если в процессе запуска контейнер завершил свою работу, то перейдите к следующему пункту.

Обновите GitLab до версии ks2024.3:

  1. Зайдите на LCM-узел по SSH.

  2. Выполните команды:

    # sed -i "s|\$NEXUS_NAME.\$DOMAIN/project_k/lcm/gitlab:\$RELEASE-16.11.10-ce.0|\$NEXUS_NAME.\$DOMAIN/project_k/lcm/gitlab:\$RELEASE|" compose.yaml
    # docker compose -f $CFG_HOME/compose.yaml up -d gitlab gitlab-runner
    
  3. Контейнер с GitLab поднимается очень долго. Проверить состояние запуска контейнера можно с помощью команды:

    # docker logs gitlab -f -n 100
    
  4. Дождитесь когда откроется страница https://ks-lcm.cloud.itkey.com/admin/background_migrations.

  5. Дождитесь завершения всех задач на этой странице.

Обновление Nexus с ks2024.х на ks2024.3 и позднее невозможно сделать напрямую, поскольку меняется база данных с настройками: https://help.sonatype.com/en/migrating-to-a-new-database.html .

Выполните резервное копирование базы данных Nexus штатными средствами в папку внутри контейнера /nexus-data/backup-db:

  1. Зайдите на LCM-узел по SSH.

  2. Запустите контейнер Nexus:

    # sed -i "s|\$NEXUS_NAME.\$DOMAIN/project_k/lcm/nexus3:\$RELEASE|\$NEXUS_NAME.\$DOMAIN/project_k/lcm/nexus3:\$RELEASE-3.70.3|" compose.yaml
    # docker compose -f $CFG_HOME/compose.yaml up -d nexus
    
  3. Зайдите в веб-интерфейс Nexus по адресу https://nexus.cloud.itkey.com.

  4. Перейдите в раздел System > Tasks.

  5. Запустите готовую задачу Admin - Export databases for backup.

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

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

  6. Дождитесь выполнения задачи. Статус задачи должен смениться с Running на Waiting, а Last Result на OK.

Выполните конвертацию базы данных Nexus в новый формат:

  1. Зайдите на LCM-узел по SSH.

  2. Выполните команды:

    # docker compose -f $CFG_HOME/compose.yaml exec nexus /bin/sh -c "cp /nexus-db-migrator-3.70.3-01.jar /nexus-data/backup-db/nexus-db-migrator-3.70.3-01.jar"
    # docker stop nexus
    
    # docker run -it --rm --net host -v /installer/data/nexus/:/nexus-data $NEXUS_NAME.$DOMAIN/project_k/lcm/nexus3:$RELEASE-3.70.3 /bin/bash
    bash-4.4$ cd /nexus-data/backup-db/
    bash-4.4$ java -Xmx16G -Xms16G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator-*.jar --migration_type=h2 -y
    bash-4.4$ cp nexus.mv.db /nexus-data/db/
    bash-4.4$ echo "nexus.datastore.enabled = true" >> /nexus-data/etc/nexus.properties
    bash-4.4$ exit
    
    # docker start nexus
    
    # sed -i "s|\$NEXUS_NAME.\$DOMAIN/project_k/lcm/nexus3:\$RELEASE-3.70.3|\$NEXUS_NAME.\$DOMAIN/project_k/lcm/nexus3:\$RELEASE|" compose.yaml
    # docker compose -f $CFG_HOME/compose.yaml up -d nexus
    

Обновите переменные в GitLab:

  1. Перейдите в веб-интерфейс развернутого GitLab.

  2. Перейдите в меню Groups и откройте группу project_k.

  3. Перейдите в раздел Settings > CI/CD > Variables и добавьте новые переменные:

    • NEXUS_USER: admin

    • NEXUS_FQDN: nexus.$DOMAIN

  4. (Опционально) В группах deployments и services перейдите в раздел Settings > CI/CD > Variables и переместите все переменные в группу project_k.

Выполните команды на узле LCM:

  1. Зайдите на LCM-узел по SSH и выполните команды:

    # cd /installer/config
    # source settings
    # sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=netbox_db_password|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|REDIS_CACHE_PASSWORD=.*|REDIS_CACHE_PASSWORD=netbox_redis_cache_password|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|REDIS_PASSWORD=.*|REDIS_PASSWORD=netbox_redis_password|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|SUPERUSER_PASSWORD=.*|SUPERUSER_PASSWORD=netbox_admin_password|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|AUTH_LDAP_BIND_PASSWORD: .*|AUTH_LDAP_BIND_PASSWORD: \"LDAP-BIND-PASSWORD\"|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=netbox_db_password|" $NETBOX_HOME/env/postgres.env
    # sed -i "s|REDIS_PASSWORD=.*|REDIS_PASSWORD=netbox_redis_password|" $NETBOX_HOME/env/redis.env
    # sed -i "s|REDIS_PASSWORD=.*|REDIS_PASSWORD=netbox_redis_cache_password|" $NETBOX_HOME/env/redis-cache.env