Идеальным решением было бы остановить все модули, запустить миграцию и воссоздать их.Но я не уверен, как добиться этого правильно с Kubernetes.
Я вижу из одного из комментариев, что вы используете Helm, поэтому я хотел бы предложить решение, использующее хуки Helm:
Helm предоставляет механизм подключения, позволяющий разработчикам диаграмм вмешиваться в определенные моменты жизненного цикла выпуска.Например, вы можете использовать ловушки для:
Загрузка ConfigMap или Secret во время установки перед загрузкой любых других диаграмм.
Выполните задание для резервного копирования базы данных перед установкой новой диаграммы, а затем выполните второе задание после обновления, чтобы восстановить данные.
Запустите задание перед удалением выпуска, чтобы аккуратно вывести службу из ротации перед ее удалением.
https://github.com/kubernetes/helm/blob/master/docs/charts_hooks.md
Вы можете упаковать свою миграцию как k8s Job
и использовать хук pre-install
или pre-upgrade
для запуска задания,Эти перехваты запускаются после рендеринга шаблонов, но до создания любых новых ресурсов в Kubernetes.Таким образом, ваши миграции будут выполняться до развертывания ваших модулей.
Чтобы удалить развертывания перед запуском миграций, создайте второй хук перед установкой / обновлением с меньшим значением helm.sh/hook-weight
, который удаляет целевые развертывания:
apiVersion: batch/v1
kind: Job
metadata:
name: "pre-upgrade-hook1"
annotations:
"helm.sh/hook": pre-upgrade
"helm.sh/hook-weight": "-1"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
metadata:
name: "pre-upgrade-hook1"
spec:
restartPolicy: Never
serviceAccountName: "<an SA with delete RBAC permissions>"
containers:
- name: kubectl
image: "lachlanevenson/k8s-kubectl:latest"
command: ["delete","deployment","deploy1","deploy2"]
Нижнийвес крюка обеспечит выполнение этой работы до выполнения миграции.Это обеспечит следующую серию событий:
- Вы запускаете
helm upgrade
- Крюк штурвала с наименьшим весом крюка запускается и удаляет соответствующие развертывания
- Второй хук запускает и запускает ваши миграции
- Ваша Диаграмма будет установлена с новыми развертываниями, модулями и т. Д.
Просто убедитесь, что все соответствующие развертывания находятся в одной и той же диаграмме.