В Kubernetes нужно развернуть базу данных в трёх репликах, у каждой своё хранилище. Каким объектом это сделать и почему? Как нативно реализовать канареечный деплоймент — сначала обновить один под из десяти, дальше только по решению?
Answer from AI
sobes.tech AI
Для развёртывания базы данных в Kubernetes с тремя репликами, у каждой из которых своё хранилище, следует использовать объект StatefulSet.
Почему StatefulSet?
- StatefulSet гарантирует уникальные и стабильные идентификаторы подов (имена).
- Каждый под получает своё постоянное хранилище через PersistentVolumeClaim, что важно для баз данных.
- Обеспечивает упорядоченное создание, обновление и удаление подов.
Пример: каждый из трёх подов будет иметь свой PVC, обеспечивающий отдельное хранилище.
Для нативной реализации канареечного деплоймента в Kubernetes можно использовать RollingUpdate стратегию с параметром maxUnavailable и maxSurge, но чтобы сначала обновить только один под из десяти, а дальше — по решению, нужно применить Pause и Resume обновления или использовать Manual Rollout.
Пример подхода:
- Начать обновление с одного пода, указав
maxUnavailable: 1. - После проверки состояния и принятия решения, продолжить обновление остальных подов вручную командой:
kubectl rollout pause statefulset/your-db
# Проверяем состояние
kubectl rollout resume statefulset/your-db
Таким образом, можно контролировать процесс обновления, останавливая и возобновляя его по необходимости, что реализует канареечный деплоймент с ручным подтверждением после первого обновления.