Задание миграции DB перед обновлением
Добавьте аннотацию к заданию, чтобы запустить его до развёртывания
«Задание миграции DB перед обновлением» — бесплатный урок Helm Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Helm Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Helm Academy содержит 4 уроков всего.
Практический пример
Перед выпуском нового кода приложения часто требуется выполнить миграцию схемы базы данных. Хук pre-upgrade идеально подходит для безопасного запуска такой миграции.
Зачем выполнять миграцию до развёртывания
Запуск в режиме pre-upgrade означает, что схема будет готова до запуска новых подов. Новый код не обратится к устаревшей и несовместимой базе данных.
"helm.sh/hook": pre-upgradeНачните с Job
Миграция запускается один раз, а затем завершается, поэтому представьте её как Kubernetes Job. Helm дождётся завершения Job, прежде чем продолжить обновление.
apiVersion: batch/v1
kind: Job
metadata:
name: db-migrateДобавьте аннотацию хука
Пометьте Job как хук в его метаданных. Аннотация helm.sh/hook, заданная как pre-upgrade, превращает обычный Job в хук.
metadata:
annotations:
"helm.sh/hook": pre-upgradeЗапустите команду миграции
Контейнер Job запускает ваш инструмент миграции. Направьте его к той же базе данных, которую использует приложение, чтобы изменения схемы попали именно туда, куда нужно.
spec:
containers:
- name: migrate
image: myapp:1.4
command: ["./migrate", "up"]Никогда не перезапускайте при сбое
Установите для Job параметр restartPolicy в значение Never или OnFailure. Миграция, зациклившаяся навсегда, заблокирует обновление и не позволит Helm продолжить работу.
spec:
template:
spec:
restartPolicy: NeverШаблонизируйте тег образа
Синхронизируйте мигратор с приложением с помощью шаблона для его тега. Используйте то же значение .Values.image.tag, которое читает развёртывание, чтобы версии совпадали.
image: "myapp:{{ .Values.image.tag }}"Helm блокирует работу до завершения
Поскольку это хук pre-upgrade, Helm приостанавливает обновление, пока Job не сообщит об успехе. Если миграция завершится с ошибкой, развёртывание не начнётся. 🛑
Удаляйте после успешного завершения
В противном случае старые задания миграции будут накапливаться. Добавьте к хуку политику hook-delete-policy, чтобы успешно завершившийся Job удалялся и не загромождал пространство имён.
"helm.sh/hook-delete-policy": hook-succeededУникальные имена помогают
После создания задания хуков нельзя изменить, поэтому фиксированное имя может вызвать конфликт при следующем обновлении. Добавление .Release.Revision в имя делает каждый запуск отдельным.
name: db-migrate-{{ .Release.Revision }}Проверьте с помощью пробного запуска
Перед настоящим обновлением обработайте чарт, чтобы убедиться, что хук выглядит правильно. Пробный запуск показывает манифест Job, который создал бы Helm, не затрагивая кластер.
helm upgrade myapp ./mychart --dry-runБыстрая проверка
Вам нужно выполнить миграцию схемы до запуска новых подов приложения во время обновления.
Повторение
Вы представили миграцию как задание pre-upgrade, установили для restartPolicy значение Never и позволили Helm заблокировать работу до успешного завершения перед выпуском нового кода. 🗄️
Часто задаваемые вопросы
Урок «Задание миграции DB перед обновлением» бесплатный?
Да — полный текст урока «Задание миграции DB перед обновлением» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Helm Academy, подпишись на CoddyKit PRO. Курс Helm Academy содержит 4 уроков всего.
Чему я научусь в уроке «Задание миграции DB перед обновлением»?
Добавьте аннотацию к заданию, чтобы запустить его до развёртывания Ты практикуешь Helm Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Helm Academy?
Предыдущий опыт не требуется. Helm Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Задание миграции DB перед обновлением»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Helm Academy?
Да. Каждый урок Helm Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое хуки и когда они запускаются
- Задание миграции DB перед обновлением
- Вес и порядок хуков
- Политики удаления хуков