Вы можете объединить данные из множества небольших инстансов 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 без возможности восстановления. |
Создайте инстанс SFS Turbo в той же VPC, что и кластер CCE.
Чем больше размер хранилища инстанса SFS Turbo, тем шире пропускная полоса. При высокой суммарной нагрузке закладывайте объем хранилища с запасом.
NFS-порты в группе безопасности инстанса открываются автоматически.
Проверьте версию 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-подкаталогов.
При выборе способа subpath в качестве связи с общим инстансом SFS Turbo в кластере CCE создайте соответствующий storageClass и укажите его параметры в манифестах PVC при добавлении новых.
Подкаталоги в SFS Turbo для PVC создаются автоматически.
Подробнее об использовании StorageClass.
Пример манифеста StorageClass:
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: csi-sfsturbo-subpathallowVolumeExpansion: truemountOptions:- lockparameters:everest.io/archive-on-delete: "true" # подкаталог не удаляется, а архивируетсяcsi.storage.k8s.io/csi-driver-name: sfsturbo.csi.everest.iocsi.storage.k8s.io/fstype: nfseverest.io/share-access-to: <VPC_ID> # ID VPC, в которой создан инстанс SFS Turboeverest.io/share-expand-type: bandwidth # Используется совместно с everest.io/share-expand-type, должно быть bandwidtheverest.io/share-export-location: <IP>:/sfsturbo/ # Mount directory configurationeverest.io/share-source: sfs-turboeverest.io/share-volume-type: STANDARD # Может быть STANDARD или PERFORMANCE, указывает тип SFS Turbo. Должно быть с everest.io/share-expand-type: bandwidth.everest.io/volume-as: subpatheverest.io/volume-id: <id_нового_инстанса_sfsturbo>provisioner: everest-csi-provisionerreclaimPolicy: DeletevolumeBindingMode: Immediate
PVC на этом классе выглядит как обычный PVC (storageClassName: csi-sfsturbo-subpath, RWX).
Размер PVC в этом режиме номинальный — жесткой квоты на подкаталог нет, необходимо контролировать утилизацию мониторингом.
Пример манифеста PVC:
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: pvc-app-a-newnamespace: <ns>spec:accessModes:- ReadWriteManyresources:requests:# В режиме subpath параметр storage не влияет на ресурсы.# Объем хранилища ограничен общим объемом файловой системы SFS Turbo.# Если общего объема файловой системы SFS Turbo недостаточно, своевременно увеличьте объем на странице SFS Turbo.storage: 10GistorageClassName: csi-sfsturbo-subpathvolumeMode: 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 будет удален.
Способ подходит для subpath, миграция автоматизированная, с простоем.
Утилита pvmigrate автоматизирует весь цикл:
Находит PVC на исходном классе.
Устанавливает количество реплик владельцев (Deployment/StatefulSet) в 0.
Копирует данные rsync-подом.
Пересоздает PVC под исходным именем на целевом классе — манифесты рабочих нагрузок править не нужно, после возврата реплик поды сами подхватывают новый том.
Утилита pvmigrate работает только с динамическими StorageClass, поэтому применима к решению subpath (класс csi-sfsturbo-subpath).
Утилита pvmigrate удаляет исходный PV после переключения — восстановление возможно только из бэкапа.
Чтобы мигрировать с помощью утилиты pvmigrate:
Исходный PV после переключения удаляется без возможности восстановления.
Выполните Preflight-проверку без миграции:
pvmigrate --source-sc csi-sfsturbo --dest-sc csi-sfsturbo-subpath --preflight-validation-only
Выполните миграцию:
pvmigrate \--source-sc csi-sfsturbo \--dest-sc csi-sfsturbo-subpath \--namespace <ns> \--rsync-image eeacms/rsync \--verbose-copy
Проверьте результат:
kubectl get pvc -n <ns>kubectl exec -n <ns> <pod> -- df -h /data
Особенности:
Подходят только Deployment/StatefulSet — DaemonSet/Job/Pod без управляющего ресурса вызовут ошибку.
Тома копируются последовательно.
Все затронутые поды останавливаются одновременно — окно простоя охватывает весь прогон.
Исходный PV удаляется после завершения миграции.
Мигрируются все PVC исходного класса в области запуска. Если мигрировать все не нужно, рекомендуется ограничивать охват флагом --namespace и переносить PVC партиями.
Миграция баз данных
Для миграции данных БД вместо утилиты rsync рекомендуется использовать встроенные возможности репликации СУБД:
Поднимите реплику с PVC на общем инстансе.
Дождитесь синхронизации.
Выполните failover-переключение.
В случае с СУБД простой будет равен одному переключению и консистентность данных будет обеспечена механизмом СУБД на уровне приложения.
Проверьте статус PVC:
kubectl get pvc,pv -A | grep sfsturbokubectl rollout status deploy/<app> -n <ns>
После подтверждения работоспособности и сверки данных удалите освободившиеся PV/PVC.
Удалите старые SFS Turbo в консоли Advanced.