Облачная платформаAdvanced

Миграция из нескольких инстансов SFS Turbo в один в кластере ССE


Вы можете объединить данные из множества небольших инстансов SFS Turbo в один необходимой емкости, выделив отдельный подкаталог каждому PVC.

CSI-драйвер sfsturbo.csi.everest.io поддерживает следующие способы выделения подкаталогов: через subpath и absolute-path.

Способ

Как задается

Квота на подкаталог

Особенности

subpath — отдельный StorageClass на общий инстанс SFS Turbo.

С помощью параметра everest.io/volume-as: subpath в StorageClass. PVC на этом классе создаются как обычно.

Нет жесткой квоты: размер PVC номинальный, подкаталоги делят свободное место инстанса.

Полностью динамический — совместим с утилитой pvmigrate (поддерживается автоматическая миграция).

absolute-path — аннотации на каждом PVC.

С помощью аннотации everest.io/volume-as: absolute-path, а также параметра everest.io/path на PVC класса csi-sfsturbo.

Есть квота: параметр everest.io/csi.enable-sfsturbo-dir-quota:"true" включает реальную квоту на объем.

PVC создаются вручную с помощью индивидуальных аннотаций — миграция через утилиту rsync.

Способ subpath подходит, когда важна автоматизация миграции, а контроля объема достаточно на уровне мониторинга.

Способ absolute-path подходит, если важны жесткие квоты на подкаталог для защиты от переполнения объема.

Вы можете совмещать оба способа в одном инстансе.

В обоих решениях сохраняется:

  • режим ReadWriteMany;

  • производительность SFS Turbo;

  • отдельный PVC для каждого приложения, что удобно для манифестов и Helm-чартов.

Недостатки решений:

  • Полоса/IOPS общего инстанса делится между всеми подкаталогами.

  • Инстанс — общая точка отказа.

  • Большие I/O нагрузки влияют на весь инстанс.

Риски и рекомендации

Риск

Рекомендация

Нехватка ресурсов: одна нагрузка может исчерпать полосу/IOPS общего инстанса

Квоты ограничивают объем, но не полосу — мониторьте throughput: тяжелые I/O-нагрузки оставьте на отдельных инстансах.

Общий домен отказа

Разместите критичные данные на отдельном инстансе, выполняйте регулярное резервное копирование.

Переполнение инстанса

Для absolute-path используйте квоты на каждый PVC, для subpath — запас емкости и алерты по занятости подкаталогов.

Старая версия CSI-аддона

Проверьте и при необходимости обновите версию до миграции.

Потеря данных при миграции

Выполните бэкап до начала миграции, так как утилита pvmigrate удаляет исходный PV без возможности восстановления.

1. Создайте и настройте инстанс SFS Turbo для миграции

  1. Создайте инстанс SFS Turbo в той же VPC, что и кластер CCE.

    Подсказка

    Чем больше размер хранилища инстанса SFS Turbo, тем шире пропускная полоса. При высокой суммарной нагрузке закладывайте объем хранилища с запасом.

    NFS-порты в группе безопасности инстанса открываются автоматически.

  2. Проверьте версию CSI-аддона одним из способов:

    • В консоли Advanced в разделе Cloud Container Engine → Add-ons.

    • С помощью команды kubectl get csi .

    Квоты подкаталогов требуют версию не ниже 1.2.69 / 2.1.11 и кластер от v1.27.9-r0 / v1.28.7-r0.

    На более старых версиях действует лимит — одновременно можно создать не более 10 PVC-подкаталогов.

2. Создайте целевой StorageClass или PVC


При выборе способа subpath в качестве связи с общим инстансом SFS Turbo в кластере CCE создайте соответствующий storageClass и укажите его параметры в манифестах PVC при добавлении новых.

Подкаталоги в SFS Turbo для PVC создаются автоматически.

Подробнее об использовании StorageClass.

Пример манифеста StorageClass:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-sfsturbo-subpath
allowVolumeExpansion: true
mountOptions:
- lock
parameters:
everest.io/archive-on-delete: "true" # подкаталог не удаляется, а архивируется
csi.storage.k8s.io/csi-driver-name: sfsturbo.csi.everest.io
csi.storage.k8s.io/fstype: nfs
everest.io/share-access-to: <VPC_ID> # ID VPC, в которой создан инстанс SFS Turbo
everest.io/share-expand-type: bandwidth # Используется совместно с everest.io/share-expand-type, должно быть bandwidth
everest.io/share-export-location: <IP>:/sfsturbo/ # Mount directory configuration
everest.io/share-source: sfs-turbo
everest.io/share-volume-type: STANDARD # Может быть STANDARD или PERFORMANCE, указывает тип SFS Turbo. Должно быть с everest.io/share-expand-type: bandwidth.
everest.io/volume-as: subpath
everest.io/volume-id: <id_нового_инстанса_sfsturbo>
provisioner: everest-csi-provisioner
reclaimPolicy: Delete
volumeBindingMode: Immediate

PVC на этом классе выглядит как обычный PVC (storageClassName: csi-sfsturbo-subpath, RWX).

Размер PVC в этом режиме номинальный — жесткой квоты на подкаталог нет, необходимо контролировать утилизацию мониторингом.

Пример манифеста PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-app-a-new
namespace: <ns>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
# В режиме subpath параметр storage не влияет на ресурсы.
# Объем хранилища ограничен общим объемом файловой системы SFS Turbo.
# Если общего объема файловой системы SFS Turbo недостаточно, своевременно увеличьте объем на странице SFS Turbo.
storage: 10Gi
storageClassName: csi-sfsturbo-subpath
volumeMode: Filesystem

Особенности:

  • В режиме subpath параметр storage не влияет на ресурсы.

  • Объем хранилища ограничен общим объемом файловой системы SFS Turbo.

  • Если параметр everest.io/archive-on-delete имеет значение true и для параметра Reclaim Policy выбрано значение Delete, удаление PVC приводит к удалению подкаталога и архивированию исходных данных PV в каталог с именем archived-$PV_NAME.TIMESTAMP.

  • Если для параметра persistentVolumeReclaimPolicy, связанного с PVC, установлено значение Delete, соответствующий подкаталог SFS Turbo будет удален.

3. Мигрируйте данные


Способ подходит для subpath, миграция автоматизированная, с простоем.

Утилита pvmigrate автоматизирует весь цикл:

  • Находит PVC на исходном классе.

  • Устанавливает количество реплик владельцев (Deployment/StatefulSet) в 0.

  • Копирует данные rsync-подом.

  • Пересоздает PVC под исходным именем на целевом классе — манифесты рабочих нагрузок править не нужно, после возврата реплик поды сами подхватывают новый том.

Утилита pvmigrate работает только с динамическими StorageClass, поэтому применима к решению subpath (класс csi-sfsturbo-subpath).

Внимание

Утилита pvmigrate удаляет исходный PV после переключения — восстановление возможно только из бэкапа.

Чтобы мигрировать с помощью утилиты pvmigrate:

  1. Сделайте резервную копию.

    Исходный PV после переключения удаляется без возможности восстановления.

  2. Выполните Preflight-проверку без миграции:

    pvmigrate --source-sc csi-sfsturbo --dest-sc csi-sfsturbo-subpath --preflight-validation-only
  3. Выполните миграцию:

    pvmigrate \
    --source-sc csi-sfsturbo \
    --dest-sc csi-sfsturbo-subpath \
    --namespace <ns> \
    --rsync-image eeacms/rsync \
    --verbose-copy
  4. Проверьте результат:

    kubectl get pvc -n <ns>
    kubectl exec -n <ns> <pod> -- df -h /data

Особенности:

  • Подходят только Deployment/StatefulSet — DaemonSet/Job/Pod без управляющего ресурса вызовут ошибку.

  • Тома копируются последовательно.

  • Все затронутые поды останавливаются одновременно — окно простоя охватывает весь прогон.

  • Исходный PV удаляется после завершения миграции.

  • Мигрируются все PVC исходного класса в области запуска. Если мигрировать все не нужно, рекомендуется ограничивать охват флагом --namespace и переносить PVC партиями.

Миграция баз данных

Для миграции данных БД вместо утилиты rsync рекомендуется использовать встроенные возможности репликации СУБД:

  1. Поднимите реплику с PVC на общем инстансе.

  2. Дождитесь синхронизации.

  3. Выполните failover-переключение.

В случае с СУБД простой будет равен одному переключению и консистентность данных будет обеспечена механизмом СУБД на уровне приложения.

4. Проверьте новый инстанс и удалите старые

Проверьте статус PVC:

kubectl get pvc,pv -A | grep sfsturbo
kubectl rollout status deploy/<app> -n <ns>

После подтверждения работоспособности и сверки данных удалите освободившиеся PV/PVC.

Удалите старые SFS Turbo в консоли Advanced.