Разбираем реальную задачу. Задача для middle и выше: миграция данных между томами в рамках смены CSI.
🎯 Задача: Перенести данные из старого в новый PVC, созданный уже новым CSI-драйвером. Без потерь и с минимальным временем простоя.
Как будете декомпозировать задачу и какие инструменты будете использовать? Предлагаю использовать утилиты pv-migrate и rename-pvc.
🧠 Декомпозиция:
1. Подготовка: Создать новый PVC в целевом хранилище. Убедиться, что поды, использующие старый том, остановлены.
2. Миграция: Перекачать данные из старого PVC в новый.
3. Переключение: "Подменить" старый том новым для рабочей нагрузки.
4. Финал: Протестировать и убрать старые артефакты.
🛠 Инструмент: pv-migrate
Это утилита, которая превращает сложный процесс в одну команду. Её магия в том, что она:
* Автоматически создаёт мигрирующий Pod с доступом к обоим томам (источнику и назначению).
* Сама выбирает стратегию копирования (например, mnt2 — монтирует оба тома в один под и использует rsync).
* Берет на себя: проверки, мониторинг прогресса, очистку за собой.
По сути, вы говорите "скопируй вот этот том в тот", а pv-migrate делает всё остальное. Проще не бывает!
📋 План действий и команды
⚠️ Золотое правило: "7 раз отмерь — 1 раз отрежь". Даже на dev потеря данных — это боль. Не забываем о бэкапах!
1. Останавливаем нагрузку.
kubectl scale deploy -n user-ns app --replicas=0
2. Подготавливаем новый PVC с идентичными labels, используя новый StorageClass.
3. Запускаем миграцию.
NAMESPACE=user-ns
PVC_NAME="app-pv"
kubectl pv-migrate \
--strategies mnt2 \
--source-namespace=$NAMESPACE \
--source=$PVC_NAME \
--dest-namespace=$NAMESPACE \
--dest=$PVC_NAME-new
Ждём успешного завершения. В логах будет виден прогресс.
4. "Переключаем" тома. Переименовываем PVC, чтобы приложение начало использовать новый том.
# Переименовываем старый PVC
kubectl rename-pvc --yes -n $NAMESPACE $PVC_NAME $PVC_NAME-old
# Переименовываем новый PVC
kubectl rename-pvc --yes -n $NAMESPACE $PVC_NAME-new $PVC_NAME
5. Запускаем приложение.
kubectl scale deploy -n user-ns app --replicas=1
6. Проверяем, что под поднялся и данные на месте.
7. Удаляем старый PVC, когда уверены, что он больше не нужен.
💎 Итог
Весь процесс миграции свелся к нескольким командам. Утилита pv-migrate скрывает за собой всю сложность и позволяет делать рискованные операции предсказуемо и безопасно.
Sources: pv-migrate | rename-pvc