Предварительная версия. Функциональность может измениться, но основные возможности сохранятся. Совместимость с будущими версиями может потребовать ручных действий по миграции.
Миграция из Omnibus в Code
-
Если GitLab использует локальное файловое хранилище для Docker Registry, необходимо перенести данные в S3-бакет, который подключается к Code, согласно этой инструкции:
aws --endpoint-url <https://your-object-storage-backend.com> s3 sync registry s3://mybucket
- В случае использования утилиты
s3cmd
, то выполните командуs3cmd --configure
для настройки конфигурации подключения к s3. И далее команды для переноса данных в S3-бакет, который подключается к Code:
s3cmd sync registry s3://mybucket
где
registry
— путь к папке хранилища Docker Registry в файловой системе. - В случае использования утилиты
-
Blob-объекты, которые используют S3 Object Storage для хранения данных, рекомендуется перенести в S3-бакеты, подключенные к Code Operator, согласно данной инструкции:
- Настройте в
rclone
два подключения: old и new, где:old
— подключение к S3 Storage, подключенному к GitLab.new
— подключение к S3 Storage бакету в Code Operator.
- Выполните команду:
rclone sync -P old:BUCKET_NAME new:BUCKET_NAME
- Настройте в
-
Создайте архив с бэкапом согласно инструкции. Добавьте опцию
SKIP
для объектов, перенесенных в пункте 2. Если Object Storage не используется, опциюSKIP
можно не указывать. -
Загрузите созданный архив с бэкапом на компьютер администратора, а затем загрузите его в S3-хранилище для бэкапов, указанное в
ModuleConfig
Code, полеbucketName
:backup: enabled: true restoreFromBackupMode: true s3: bucketName: d8-code-backup
В S3-бакете
d8-code-backup
должен храниться архив с бэкапом, например:1742909494_2025_03_25_17.8.1_gitlab_backup.tar
. -
Создайте секреты в пространстве имен
d8-code
:Поместите в них значения из соответствующих пунктов.
-
Сгенерируйте манифест
ModuleConfig
и настройте блокbackup
:backup: enabled: true restoreFromBackupMode: true s3: bucketName: code-backup external: accessKey: S3AccessKey provider: YCloud | Generic | AWS | AzureRM secretKey: S3SecretKey mode: External
-
Подключитесь к pod
toolbox
на мастер-хосте кластера Deckhouse. Пример:/opt/deckhouse/bin/kubectl -n d8-code exec -it -c toolbox toolbox-64d4fb84cf-b7dwb -- bash
-
Внутри
toolbox
выполните:backup-utility --restore -t <backup_timestamp>
Например:
backup-utility --restore -t 1742909494_2025_03_25_17.8.1
-
Отключите режим восстановления внутри конфигурации
ModuleConfig
Code:- Выполните команду:
/opt/deckhouse/bin/kubectl edit mc code
- Измените значение
restoreFromBackupMode
наfalse
.
- Выполните команду:
-
Дождитесь завершения перезапуска подов оператором.
Миграция из Code в Omnibus
-
Переведите Code в backup mode, установив параметр
backup.restoreFromBackupMode
в значениеtrue
вModuleConfig
. Это позволит временно “выключить” все компоненты-потребители Code на время процесса восстановления. -
Используйте pod
toolbox
и встроенную в него утилитуbackup-utility
для создания архива с бэкапом:kubectl -n d8-code exec <Toolbox pod name> -it -- backup-utility --restore -t <timestamp|URL>
Например:
/opt/deckhouse/bin/kubectl -n d8-code exec -it -c toolbox toolbox-64d4fb84cf-b7dwb -- backup-utility
-
Дождитесь завершения процесса создания бэкапа. По завершении бэкап будет сохранен в S3-хранилище, указанное в
ModuleConfig
в секцииbackup
:backup: enabled: true restoreFromBackupMode: true s3: bucketName: code-backup external: accessKey: S3AccessKey provider: YCloud | Generic | AWS | AzureRM secretKey: S3SecretKey mode: External
Имя созданного архива будет соответствовать формату
<timestamp>_gitlab_backup.tar
. Пример:1742909494_2025_03_25_17.8.1_gitlab_backup.tar
. -
Остановите службы
puma
иsidekiq
:gitlab-ctl stop puma gitlab-ctl stop sidekiq
Если GitLab развёрнут в Docker, выполните эти команды внутри контейнера.
-
Скачайте и перенесите архив с бэкапом в директорию, где хранятся бэкапы GitLab:
- По умолчанию это
/var/opt/gitlab/backups
. - Если используется другая директория, переместите бэкап туда.
- Если используется S3 Object Storage для хранения бэкапов, загрузите архив туда.
- По умолчанию это
-
Восстановите файл
gitlab-secrets.json
:-
Создайте копию текущего файла
gitlab-secrets.json
своей Linux/Docker установки. Для этого скопируйте файл/etc/gitlab/gitlab-secrets.json
на хост администратора. -
Получите
rails-secrets.json
из Code. Для этого выполните следующую команду на хосте, где выполняется командаkubectl
для кластера Deckhouse:kubectl -n d8-code get secret rails-secret-v1 -ojsonpath='{.data.secrets\.yml}' | yq '@base64d | from_yaml | .production' -o json > rails-secrets.json
-
Перенесите созданный файл
rails-secrets.json
в ту же директорию, куда поместили файлgitlab-secrets.json
, и выполните команду:yq eval-all 'select(filename == "gitlab-secrets.json").gitlab_rails = select(filename == "rails-secrets.json") | select(filename == "gitlab-secrets.json")' -ojson gitlab-secrets.json rails-secrets.json > gitlab-secrets-updated.json
-
Замените текущий файл
gitlab-secrets.json
на полученный файлgitlab-secrets-updated.json
. Для этого скопируйтеgitlab-secrets-updated.json
на хост/контейнер, где запущен GitLab, в папку/etc/gitlab/gitlab-secrets.json
:cp gitlab-secrets-updated.json /etc/gitlab/gitlab-secrets.json
-
-
Восстановите SSH-ключи хоста:
-
На хосте, где выполняется команда
kubectl
для кластера Deckhouse, выполните следующие команды:kubectl -n d8-code get secrets shell-host-keys -ojsonpath='{.data.ssh_host_ecdsa_key}' | base64 -d > ssh_host_ecdsa_key kubectl -n d8-code get secrets shell-host-keys -ojsonpath='{.data.ssh_host_ecdsa_key.pub}' | base64 -d > ssh_host_ecdsa_key.pub kubectl -n d8-code get secrets shell-host-keys -ojsonpath='{.data.ssh_host_ed25519_key}' | base64 -d > ssh_host_ed25519_key kubectl -n d8-code get secrets shell-host-keys -ojsonpath='{.data.ssh_host_ed25519_key.pub}' | base64 -d > ssh_host_ed25519_key.pub kubectl -n d8-code get secrets shell-host-keys -ojsonpath='{.data.ssh_host_rsa_key}' | base64 -d > ssh_host_rsa_key kubectl -n d8-code get secrets shell-host-keys -ojsonpath='{.data.ssh_host_rsa_key.pub}' | base64 -d > ssh_host_rsa_key.pub
-
Скопируйте полученные файлы на хост с вашей Linux/Docker установкой в директорию
/etc/gitlab
:cp ssh_host_* /etc/gitlab/
-
-
После замены файла
gitlab-secrets.json
выполните команду:gitlab-ctl reconfigure
-
По завершении выполнения команды запустите восстановление:
gitlab-backup restore BACKUP=<timestamp>
Например:
gitlab-backup restore BACKUP=1742909494_2025_03_25_17.8.1
-
После восстановления перезапустите GitLab и проверьте его состояние:
gitlab-ctl restart gitlab-rake gitlab:check SANITIZE=true