0Pricing
Helm Academy · Урок

Задание миграции 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 — локальная установка не требуется.

Все уроки этого курса

  1. Что такое хуки и когда они запускаются
  2. Задание миграции DB перед обновлением
  3. Вес и порядок хуков
  4. Политики удаления хуков
← Назад к Helm Academy