Официальное резервное копирование и восстановление GitLab
Это решение основано на официальном подходе GitLab к резервному копированию и восстановлению. Для подробной информации обратитесь к официальной документации GitLab.
Содержание
ПрименимостьТерминологияПредварительные требованияРезервное копированиеПредварительные требованияСоздание бакетовРучное резервное копированиеРазвертывание компонента ToolboxВыполнение резервного копированияПлановое резервное копированиеПроверка файлов резервной копииВосстановлениеПредварительные требованияВыбор резервной копии для восстановленияОпределение способа восстановления экземпляра GitLabОперации восстановленияОстановка рабочих нагрузокВыполнение восстановленияЗапуск рабочих нагрузокПроверка восстановленияПрименимость
Это решение применимо только к экземплярам GitLab версии 17.8 и выше, которые настроены с использованием object storage.
Если ваш экземпляр GitLab не настроен с object storage, GitLab предоставляет решение для миграции данных. Вы можете сначала воспользоваться этим решением для миграции данных, а затем использовать данное решение для резервного копирования и восстановления.
Как проверить, настроен ли Object Storage
Если поле enabled равно true, а поле connection не пустое, это означает, что в экземпляре настроен object storage.
Терминология
Предварительные требования
- Развернуть MinIO Object Storage: Официальное решение резервного копирования и восстановления использует object storage для сохранения данных резервной копии, поэтому требуется заранее развернутый экземпляр MinIO. ACP предоставляет
MinIO Object Storageдля быстрого создания экземпляра MinIO. - Установить командную утилиту mc: mc — это командная утилита MinIO для управления экземплярами MinIO. Инструкции по установке смотрите в официальной документации MinIO.
- Установить командную утилиту kubectl: kubectl — это командная утилита Kubernetes для управления кластерами Kubernetes. Инструкции по установке смотрите в официальной документации Kubernetes.
Для удобства последующих операций, пожалуйста, сначала задайте переменные окружения:
Выполните следующие команды для настройки утилиты mc и проверки соединения:
Если вы успешно получили ответ ping от экземпляра MinIO, значит mc настроен корректно.
Резервное копирование
Предварительные требования
Создание бакетов
Необходимо создать два бакета:
- Бакет для хранения данных резервной копии, с именем:
gitlab-backups - Бакет для хранения временных данных во время резервного копирования, с именем:
gitlab-backups-tmp
Выполните следующие команды для создания бакетов:
Выполните следующую команду, чтобы проверить успешное создание бакетов:
Ручное резервное копирование
Развертывание компонента Toolbox
Для выполнения официального резервного копирования GitLab необходимо запускать команду резервного копирования внутри toolbox pod. В процессе резервного копирования файлы будут загружаться в object storage. Поэтому необходимо заранее подготовить конфигурационный файл object storage. Запустите следующий скрипт для генерации требуемого конфигурационного файла:
Выполните следующую команду в кластере, где расположен GitLab, чтобы отредактировать CR экземпляра GitLab:
Сначала отредактируйте следующий yaml-конфиг согласно комментариям, затем добавьте его в CR:
После обновления CR GitLab автоматически развернет новый компонент toolbox. Используйте следующую команду, чтобы проверить успешность развертывания компонента toolbox:
Если статус pod — Running, значит компонент toolbox успешно развернут.
Выполнение резервного копирования
Используйте следующую команду, чтобы войти в терминал pod toolbox:
Выполните резервное копирование:
Процесс резервного копирования занимает некоторое время, используйте следующую команду для просмотра лога резервного копирования и контроля прогресса:
Когда программа успешно завершится, процесс резервного копирования будет окончен.
Имя файла резервной копии генерируется динамически на основе времени резервного копирования и версии, например 1751272314_2025_06_30_17.11.4_gitlab_backup.tar. 1751272314_2025_06_30_17.11.4 — уникальный идентификатор (backup ID) этой резервной копии. При выполнении операции восстановления необходимо указать соответствующий backup ID.
Плановое резервное копирование
Плановое резервное копирование GitLab выполняется через компонент toolbox. В отличие от ручного резервного копирования, плановое использует Crontab для реализации периодического резервного копирования.
Выполните следующую команду в кластере, где расположен GitLab, чтобы отредактировать CR экземпляра GitLab:
Сначала отредактируйте следующий yaml-конфиг согласно комментариям, затем добавьте его в CR:
Как настроить цикл резервного копирования
Правило Crontab состоит из пяти временных полей, разделённых пробелами, слева направо:
- Минута (Minute): В какую минуту часа выполнять задачу, диапазон 0-59
- Час (Hour): В какой час дня выполнять задачу, диапазон 0-23
- День месяца (Day of the month): В какой день месяца выполнять задачу, диапазон 1-31
- Месяц (Month): В каком месяце года выполнять задачу, диапазон 1-12 (Можно использовать сокращённые названия месяцев, например Jan, Feb, Mar и т.д.)
- День недели (Day of the week): В какой день недели выполнять задачу, диапазон 0-7 (0 и 7 оба означают воскресенье, 1 — понедельник и так далее. Можно использовать сокращённые названия дней недели, например Sun, Mon, Tue и т.д.)
Примеры:
- Выполнять каждый день в 3:00:
0 3 * * * - Выполнять в 3:00
1-го и 15-го числа каждого месяца:
0 3 1,15 * * - Выполнять каждые 10 минут:
*/10 * * * *
Дождитесь, пока GitLab выполнит резервное копирование, затем вы можете проверить файлы резервной копии.
Проверка файлов резервной копии
Выполните следующую команду, чтобы проверить, были ли файлы резервной копии загружены в object storage:
Если вы успешно получили список файлов резервной копии, значит резервное копирование прошло успешно.
Восстановление
Предварительные требования
Выбор резервной копии для восстановления
Используйте команду mc, чтобы получить список файлов резервной копии:
Исходя из даты в имени файла резервной копии, выберите нужную для восстановления и скопируйте backup ID из имени файла, например 1751272314_2025_06_30_17.11.4.
Определение способа восстановления экземпляра GitLab
Существует два варианта восстановления:
- Восстановление непосредственно на исходном экземпляре, что перезапишет данные экземпляра данными из резервной копии
- (Рекомендуется) Развернуть новый экземпляр для восстановления данных, при этом новый экземпляр должен соответствовать следующим требованиям:
- Новый экземпляр должен иметь включённый object storage
- Новый экземпляр должен развернуть компонент toolbox и настроить конфигурацию object storage так же, как в исходном экземпляре
Операции восстановления
Все последующие операции выполняются на целевом экземпляре.
Пожалуйста, сначала задайте следующие переменные окружения:
Остановка рабочих нагрузок
Для корректного выполнения восстановления необходимо остановить компоненты sidekiq и webservice во время восстановления.
Выполнение восстановления
Используйте следующую команду, чтобы войти в терминал pod toolbox:
Перед восстановлением базы данных все существующие таблицы будут удалены, чтобы избежать проблем с будущими обновлениями. Учтите, что если у вас есть пользовательские таблицы в базе данных GitLab, эти таблицы и все данные в них будут удалены.
В терминале выполните следующую команду для восстановления, где backup ID нужно заменить на нужный идентификатор резервной копии, например 1751272314_2025_06_30_17.11.4:
Когда программа успешно завершится, процесс восстановления будет окончен.
Примечания по восстановлению на новом экземпляре
Если восстановление происходит на новом развернутом экземпляре, после выполнения вышеуказанных шагов необходимо выполнить следующие дополнительные действия:
Восстановление Rails Secrets
Необходимо обновить Rails secrets нового экземпляра, чтобы они совпадали с секретами исходного экземпляра.
Получите содержимое Rails secrets из исходного экземпляра:
Обновите Rails secrets нового экземпляра. Пожалуйста, обратитесь к Как задать Rails Secrets.
Смена доменного имени
Если исходный экземпляр был развернут с использованием доменного имени, после восстановления на новом экземпляре необходимо переключить доменное имя нового экземпляра на доменное имя исходного экземпляра для восстановления доступа к сервисам. Пожалуйста, обратитесь к Настройка сетевого доступа экземпляра для изменения доменного имени доступа экземпляра.
Запуск рабочих нагрузок
Компоненты sidekiq и webservice были остановлены во время восстановления и должны быть запущены после завершения восстановления.
Проверка восстановления
После того как статус экземпляра вернётся в нормальное состояние, войдите в GitLab и проверьте, успешно ли восстановлены данные. Проверяемые элементы включают, но не ограничиваются:
- Группы
- Репозитории
- Пользователи
- Merge Requests