Предварительная версия. Функциональность может измениться, но основные возможности сохранятся. Совместимость с будущими версиями может потребовать ручных действий по миграции.
Toolbox
Включенные в Toolbox инструменты используются для обслуживания и выполнения административных задач над продуктом Code
Toolbox содержит множество полезных gitlab-инструментов, таких как rails-console, rake-tasks, backup-utillity и т.д. Они позволяют посмотреть совершать такие задачи, как просмотр статуса миграции в БД, профилирование rails-приложений, запуск rake-tasks в административых целях, взаимодействовать с rails-console или выполнять процедуру восстановления из бекапов
# locate the Toolbox pod
kubectl -n d8-code get pods -lapp.kubernetes.io/component=toolbox
# Launch a shell inside the pod
kubectl exec -it <Toolbox pod name> -- bash
# open Rails console
gitlab-rails console -e production
# execute a Rake task
gitlab-rake gitlab:env:info
Советы по Rails-консоли
Rails-console является одним из компонентов Toolbox.
Через Rails-консоль можно выполнить множество полезных и иногда экстренных задач. Доступ к консоли предоставляет административные права по умолчанию, поэтому настоятельно рекомендуется использовать её с осторожностью и только в случае крайней необходимости.
Как отключить пайплайны для всех проектов
Project.all.find_each { |project| project.update!(builds_enabled: false) }
Как включить стандартную аутентификацию по паролю
Gitlab::CurrentSettings.update!(password_authentication_enabled_for_web: true)
Registry
Очистка неиспользуемых данных
Чтобы запустить очистку, сначала нужно перевести registry в режим чтения. Добавьте следующее в CodeInstance:
...
spec:
registry:
maintenance:
readOnly: true
...
Теперь registry работает в режиме только для чтения (r/o), теперь получим имя одного из Pod’ов registry:
kubectl get pods -n d8-code -l app.kubernetes.io/component=registry,app.kubernetes.io/name=code -o jsonpath='{.items[0].metadata.name}'
Запустите сам процесс очистки. Ознакомьтесь с документацией registry, если хотите точно понять необходимость параметра -m
.
kubectl exec -n d8-code <registry-pod> -- /bin/registry garbage-collect -m /etc/docker/registry/config.yml
Бэкапы
Автоматическое создание бэкапов перед обновлениями модуля
При получении новой версии модуля Code
происходит обновление только контроллера, а все остальные компоненты остаются нетронутыми и продолжают работать до момента создания бэкапа. Обновленный оператор ожидает успешного завершения задания по созданию бэкапа.
- Если во время запуска задания по созданию бэкапа или в самом процессе создания бэкапа возникает ошибка, оператор будет периодически проверять статус существующих заданий. В случае обнаружения успешно завершенного задания, оператор начнет разворачивать остальные компоненты.
Обновление на уровне модуля завершится с ошибкой, если оно запущено в период, когда предыдущее обновление с опцией
backup.backupBeforeUpdate
завершилось неудачно, а версия оператора и его компонентов различаются
Для корректной работы данного функционала требуется версия Deckhouse Kubernetes Platform не ниже 1.69
Включение автоматического создания бэкапов
Для включения автоматического создания бэкапов необходимо в спецификации CodeInstance
установить значения параметров backup.enabled
и backup.backupBeforeUpdate
в true
. Также важно, чтобы параметр backup.restoreFromBackupMode
был установлен в false
. Пример конфигурации:
backup:
backupBeforeUpdate: true
backupStorageGb: 3
cronSchedule: 0 0 1 * *
enabled: true
restoreFromBackupMode: false
При включении опции
backup.backupBeforeUpdate: true
иbackup.restoreFromBackupMode: true
обновление модуля завершится с ошибкой
Логика работы автоматического создания бэкапов
- Оператор хранит свою версию в переменной окружения pod/deployment —
GITLAB_VERSION
. - Версия компонентов GitLab проверяется вызовом API.
- Проверяются значения параметров
backup.enabled
иbackup.backupBeforeUpdate
. Если хотя бы одно из них не равноtrue
, оператор пропустит создание бэкапа и начнет обновление всех своих компонентов. - Получается текущая версия оператора и компонентов GitLab. Если версии не различаются, создание бэкапа пропускается.
- Выполняется поиск Kubernetes Job по созданию бэкапа за последний час:
- Если ни одна задача (job) не найдена, оператор создаст новую задачу и будет следить за её статусом, ожидая успешного завершения.
- Если в течение последнего часа найдена хотя бы одна задача со статусом
Failure
, оператор не будет обновлять компоненты. В Prometheus будет отправлен алерт, сигнализирующий об ошибке обновления. Алерт будет активен до тех пор, пока не будет выключена опцияbackup.backupBeforeUpdate
или не будет найдена задача со статусомSuccess
. - Если найдена задача со статусом
Success
, оператор перейдет к обновлению остальных компонентов.
Решение проблем при ошибке создания бэкапов
-
Необходимо прочитать логи задачи, завершившейся со статусом
Failure
, чтобы найти ошибку. (Примеры возможных проблем: недостаточно места в S3-бакете для хранения бэкапов, проблемы с сетью.). Пример команды для чтения логов:kubectl -n d8-code logs backup-before-update-1745879676-zdzz7
Эта команда позволяет просмотреть логи поды, которая была создана для выполнения задачи.
-
Поскольку оператор создает задачу для создания бэкапов только один раз, после устранения проблем с созданием бэкапов необходимо вручную пересоздать задачу, чтобы восстановить корректную работу оператора. Оператор автоматически найдет успешно завершенную задачу и продолжит работу. Пример команды:
kubectl -n d8-code create job --from=cronjob/full-backup backup-before-update-manual-created
Где:
backup-before-update-manual-created
— имя новой задачи, которая будет запущена.
Бекапы и восстановление
Скрипт резервного копирования создает архивный файл для сохранения ваших данных.
Для создания архивного файла скрипт резервного копирования выполняет следующие действия:
- Извлекает предыдущий архивный файл резервной копии, если вы выполняете инкрементное резервное копирование.
- Обновляет или создает новый архивный файл резервной копии.
- Выполняет все подзадачи резервного копирования:
- Создает резервную копию базы данных.
- Создает резервную копию Git-репозиториев.
- Создает резервную копию файлов (включая S3-хранилища).
- Архивирует подготовленную область резервного копирования в tar-файл.
- Загружает новый архив резервной копии в объектное хранилище.
- Очищает файлы подготовленной области резервного копирования, которые были заархивированы.
Бекапы по расписанию
Убедитесь, что функционал бекапов включен в спецификации CodeInstance
. Пример конфигурации секции описан тут
Бекапы реализованы с помощью kubernetes cronJobs (расписание cron-а также может быть настроена). Испольуется нативный инструмент Gitlab-а backup-utlity
, а сам процесс подробдно описан в официальной документации. Стоит отметить, что снятие бекапов производится с использованием ключа --repositories-server-side
. что обеспечивает асинхронный бекап репозиториев непосредственно с реплик Gitaly, подробнее можно почитать в этом разделе официальной документации.
Особенности конфигурации диска
Размер диска вычисляется по формуле
Gitaly node size
+sum of all buckets size
+database size
- Убедитесь, что выделенного размера диска достаточно для хранения файла бекапа
- Альтернативным вариантом будет отключение persistenceVolume для бекапов (
backup.persistentVolumeClaim.enabled: false
). В таком случае, следует убедиться, что на kubernetes Node, где будут запущены backup-cronjob и toolbox (для восстановления из бекапа) достаточно места на дисках
Для включения регулярных бекапов добавьте следующую секцию в CodeInstance
:
backup:
cronSchedule: 0 0 */7 * *
enabled: true
s3:
bucketName: d8-code-test-backups
external:
provider: YCloud
accessKey: __ACCESS_KEY__
secretKey: __SECRET_KEY__
mode: External
persistentVolumeClaim:
enabled: true # использовать ли persistentStorage при бекапе и восстановлении из бекапа
storageClass: localpath
После правильной настройки CodeInstance
нет необходимости в дополнительных шагах. Просто дождитесь, пока бекап выполнится по расписанию.
Ручные бекапы по требованию
- Убедитесь, что секция
backup.s3
задана вCodeInstance
- Убедитесь, что необходимый компонент запущен и готов к работе
kubectl -n d8-code get pods -lapp.kubernetes.io/component=toolbox
- Запустите утилиту бекапирования
kubectl exec -n d8-code deploy/toolbox -it -- backup-utility
- Бекап будет сохранен в бакете
backup.s3.bucketName
. Его имя будет соответствовать<timestamp>
_gitlab_backup.tar формату.
Восстановление из бекапов
Для восстановления из бекапов следуйте нижеприведенной инструкции:
- Используйте toolbox-под и встроенную в него утиллиту
backup-utlity
для старта процесса восстановления:kubectl -n d8-code exec <Toolbox pod name> -it -- backup-utility --restore -t <timestamp|URL>
timestamp
- дата из имени целевого архива бекапаURL
- публчиный адрес файла бекапа, удовлетворяющийfile:///path
формату
- Следуйте процессу интерактивного режима восстановления: отвечайте
yes
на все предложения утиллиты
Дополнительно у Вас есть возможность верифицировать целостьность выгружаемых данных из того же пода Toolbox, следуя официальной документации