Снапшоты
Снапшот — снимок содержимого постоянного тома (Persistent Volume / PVC) в определённый момент времени без создания нового тома. Снапшоты создаются средствами хранилища через совместимые CSI-драйверы и используются для быстрого отката данных, клонирования томов и точек восстановления перед рискованными операциями (например, перед обновлением БД).
В платформе «Штурвал» поддержка снапшотов обеспечивается оператором shturval-snapshotter (CSI Snapshotter). Оператор критически важен для работы платформы (отключить его нельзя); по умолчанию он устанавливается во включённом состоянии в клиентские кластеры и в кластер управления. Подробнее о сервисе — shturval-snapshotter.
Для чего нужны снапшоты
- Точка восстановления — перед обновлением приложения, миграцией БД или массовыми изменениями данных можно создать снапшот и при необходимости откатиться к нему.
- Клонирование тома — из снапшота можно создать новый PVC с теми же данными (копирование без выноса данных из системы хранения).
- Краткосрочное резервирование — быстрый «снимок» на той же платформе хранения без копирования во внешнее хранилище.
Снапшоты не заменяют полноценное резервное копирование кластера и данных во внешнее хранилище. О различиях снапшотов и бэкапов см. Чем отличаются бэкапы и снапшоты.
Объекты Kubernetes для снапшотов
Оператор snapshotter вводит в кластере CRD (Custom Resource Definitions):
| Объект | Описание |
|---|---|
| VolumeSnapshotClass | Класс снимков: задаёт атрибуты для создания снапшотов; основной параметр — используемый CSI-драйвер (аналог StorageClass для снапшотов). |
| VolumeSnapshotContent | Фактическое содержимое снапшота в системе хранения, связанное с объектом VolumeSnapshot (часто создаётся автоматически). |
| VolumeSnapshot | Объект в Kubernetes, описывающий снимок PVC — запрос на снимок конкретного тома в неймспейсе. |
Сценарий: пользователь создаёт VolumeSnapshot, указывая источник (PVC) и VolumeSnapshotClass. Контроллер snapshotter создаёт снимок через CSI-драйвер и при успехе создаёт или обновляет VolumeSnapshotContent. По готовности снапшота из него можно создать новый PVC (восстановление или клонирование).
Поддержка снапшотов CSI-драйверами
Снапшоты используются с совместимыми CSI-драйверами. Поведение зависит от драйвера: часть создаёт снимок без остановки нагрузки, часть — только с остановкой нагрузки (PVC не должен использоваться подами).
| Тип хранилища | CSI / модуль | Поддержка снапшотов |
|---|---|---|
| Локальное (RawFile) | shturval-local-csi | Да, только с остановкой нагрузки |
| CephFS | shturval-ceph-csi | Да, без остановки нагрузки |
| Ceph RBD | shturval-ceph-csi | Да, без остановки нагрузки |
| NFS | shturval-nfs-csi | Да |
| VMware vSphere | shturval-capvs-csi | Да1 |
| OpenStack Cinder | shturval-capos-csi | Да |
| oVirt | shturval-capov-csi | Нет |
| vCloud Director | shturval-capvcd-csi | Нет |
1 Для VMware vSphere нужно включить sidecar снапшотера в customvalues CSI и назначить учётной записи vCenter права на работу со снапшотами томов (CNS Searchable, Datastore.FileManagement). См. требования к учётной записи VMware vSphere, вкладку vSphere в шаге 1 и шаге 2.
Перед использованием снапшотов убедитесь, что в кластере включены CRD оператора snapshotter (shturval-snapshotter-crds) и Оператор snapshotter (shturval-snapshotter), а также соответствующий CSI-модуль для вашего типа томов. Сначала должны быть развёрнуты CRD, затем оператор. VolumeSnapshotClass должен указывать на driver, совместимый с вашим StorageClass.
Где управлять снапшотами
- Состояние оператора: Сервисы и репозитории → Установленные сервисы → найдите Оператор snapshotter (
shturval-snapshotter) → Управлять. - Объекты снапшотов (CR): выберите кластер → Администрирование → Кастомные ресурсы. В поле поиска можно ввести, например,
snap— в списке останутся CRD, связанные со снапшотами томов.

На странице Кастомные ресурсы в таблице отображаются API группа, кастомный ресурс и количество ресурсов в кластере. Для снапшотов отдельных томов используется группа snapshot.storage.k8s.io — VolumeSnapshot, VolumeSnapshotClass, VolumeSnapshotContent. Группа groupsnapshot.storage.k8s.io содержит типы для групповых снапшотов: VolumeGroupSnapshot, VolumeGroupSnapshotClass, VolumeGroupSnapshotContent. Нажмите на название ресурса в таблице, чтобы открыть список его экземпляров и выполнить создание или просмотр. Доступны сортировка, фильтр по API-группе и сброс фильтров (Очистить все фильтры).
Манифесты можно также применить через импорт манифестов или kubectl apply -f.
Как создать снапшот, восстановить и клонировать том
Команды в каждом шаге общие. Манифесты VolumeSnapshotClass, VolumeSnapshot и PVC — на вкладке нужного драйвера.
Шаг 1. Проверить VolumeSnapshotClass
kubectl get VolumeSnapshotClass
Если класса для нужного драйвера нет, создайте его как приведено далее для каждого csi-провайдера. Для этого загрузите манифест VolumeSnapshotClass через импорт манифестов: иконка импорта слева от имени пользователя → вставьте или загрузите YAML → Проверить → Сохранить.
Модуль shturval-local-csi (драйвер rawfile.csi.openebs.io). Поддержка снапшотов — с версии 2.14.0.
VolumeSnapshotClass rawfile-localpv создаётся платформой. Если класса нет:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: rawfile-localpv
driver: rawfile.csi.openebs.io
deletionPolicy: Delete
parameters: {}
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя VolumeSnapshotClass | string | rawfile-localpv |
driver | CSI-драйвер. Должен совпадать с provisioner StorageClass | string | rawfile.csi.openebs.io |
deletionPolicy | Удалять (Delete) или сохранять (Retain) содержимое снимка при удалении VolumeSnapshot | string | Delete |
parameters | Параметры драйвера. Для RawFile не требуются | object | {} |
Модуль shturval-ceph-csi (драйвер cephfs.csi.ceph.com). VolumeSnapshotClass по умолчанию не создаётся. Параметры clusterID, fsName и секрет должны совпадать с StorageClass и CSI-модулем. Неймспейс секрета — ceph-csi-operator.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: cephfs
driver: cephfs.csi.ceph.com
deletionPolicy: Delete
parameters:
clusterID: <clusterID>
fsName: <имя-файловой-системы>
csi.storage.k8s.io/snapshotter-secret-name: <имя-секрета>
csi.storage.k8s.io/snapshotter-secret-namespace: ceph-csi-operator
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя VolumeSnapshotClass | string | cephfs |
driver | CSI-драйвер CephFS. Должен совпадать с provisioner StorageClass | string | cephfs.csi.ceph.com |
deletionPolicy | Удалять (Delete) или сохранять (Retain) содержимое снимка при удалении VolumeSnapshot | string | Delete |
parameters.clusterID | Идентификатор кластера Ceph. Должен совпадать со StorageClass | string | my-cluster-id |
parameters.fsName | Имя файловой системы CephFS | string | myfs |
parameters.csi.storage.k8s.io/snapshotter-secret-name | Имя Secret с учётными данными Ceph для snapshotter | string | csi-cephfs-secret |
parameters.csi.storage.k8s.io/snapshotter-secret-namespace | Неймспейс Secret | string | ceph-csi-operator |
Модуль shturval-ceph-csi (драйвер rbd.csi.ceph.com). VolumeSnapshotClass по умолчанию не создаётся. Параметры clusterID, pool и секрет должны совпадать с StorageClass и CSI-модулем. Неймспейс секрета — ceph-csi-operator.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: cephrbd
driver: rbd.csi.ceph.com
deletionPolicy: Delete
parameters:
clusterID: <clusterID>
pool: <имя-пула>
csi.storage.k8s.io/snapshotter-secret-name: <имя-секрета>
csi.storage.k8s.io/snapshotter-secret-namespace: ceph-csi-operator
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя VolumeSnapshotClass | string | cephrbd |
driver | CSI-драйвер Ceph RBD. Должен совпадать с provisioner StorageClass | string | rbd.csi.ceph.com |
deletionPolicy | Удалять (Delete) или сохранять (Retain) содержимое снимка при удалении VolumeSnapshot | string | Delete |
parameters.clusterID | Идентификатор кластера Ceph. Должен совпадать со StorageClass | string | my-cluster-id |
parameters.pool | Пул Ceph, в котором лежат RBD-образы | string | rbd |
parameters.csi.storage.k8s.io/snapshotter-secret-name | Имя Secret с учётными данными Ceph для snapshotter | string | csi-ceph-secret |
parameters.csi.storage.k8s.io/snapshotter-secret-namespace | Неймспейс Secret | string | ceph-csi-operator |
Модуль shturval-capvs-csi (драйвер csi.vsphere.vmware.com).
Включите sidecar csi-snapshotter в контроллере CSI с помощью применения ShturvalServicePatch к shturval-capvs-csi:
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: capvs-csi-volume-snapshots
spec:
shturvalServiceConfigName: shturval-capvs-csi
customvalues:
controller:
config:
block-volume-snapshot: true
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя ресурса ShturvalServicePatch | string | capvs-csi-volume-snapshots |
spec.shturvalServiceConfigName | Имя SSC сервиса CSI vSphere | string | shturval-capvs-csi |
spec.customvalues.controller.config.block-volume-snapshot | Включить sidecar csi-snapshotter в контроллере CSI. Без true sidecar не запускается | boolean | true |
Без этого параметра sidecar снапшотера в поде CSI-контроллера нет.
Затем создайте VolumeSnapshotClass:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: vspherecsi
driver: csi.vsphere.vmware.com
deletionPolicy: Delete
parameters: {}
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя VolumeSnapshotClass | string | vspherecsi |
driver | CSI-драйвер vSphere. Должен совпадать с provisioner StorageClass | string | csi.vsphere.vmware.com |
deletionPolicy | Удалять (Delete) или сохранять (Retain) содержимое снимка при удалении VolumeSnapshot | string | Delete |
parameters | Параметры драйвера. Для vSphere не требуются | object | {} |
Модуль shturval-capos-csi (драйвер cinder.csi.openstack.org).
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: cinder
driver: cinder.csi.openstack.org
deletionPolicy: Delete
parameters:
force-create: "true"
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя VolumeSnapshotClass | string | cinder |
driver | CSI-драйвер Cinder. Должен совпадать с provisioner StorageClass | string | cinder.csi.openstack.org |
deletionPolicy | Удалять (Delete) или сохранять (Retain) содержимое снимка при удалении VolumeSnapshot | string | Delete |
parameters.force-create | Создавать снапшот без остановки нагрузки. Без "true" снимок используемого тома не создаётся | string | “true” |
Модуль shturval-nfs-csi (драйвер nfs.csi.k8s.io).
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: nfs
driver: nfs.csi.k8s.io
deletionPolicy: Delete
parameters: {}
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя VolumeSnapshotClass | string | nfs |
driver | CSI-драйвер NFS. Должен совпадать с provisioner StorageClass | string | nfs.csi.k8s.io |
deletionPolicy | Удалять (Delete) или сохранять (Retain) содержимое снимка при удалении VolumeSnapshot | string | Delete |
parameters | Параметры драйвера. Для NFS CSI не требуются | object | {} |
Шаг 2. Создать VolumeSnapshot
Выберите вкладку драйвера, укажите PVC-источник и примените манифест:
kubectl apply -f volumesnapshot.yaml
Снапшоты создаются только с остановкой нагрузки: PVC не должен использоваться подами. Перед созданием VolumeSnapshot остановите нагрузку:
kubectl scale statefulset <имя-statefulset> -n <неймспейс> --replicas=0
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: <имя-снапшота>
namespace: <неймспейс>
spec:
volumeSnapshotClassName: rawfile-localpv
source:
persistentVolumeClaimName: <имя-pvc>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя снапшота | string | app-snap-1 |
metadata.namespace | Неймспейс PVC-источника | string | app-data |
spec.volumeSnapshotClassName | VolumeSnapshotClass драйвера RawFile | string | rawfile-localpv |
spec.source.persistentVolumeClaimName | PVC, с которого делается снимок | string | data-app-0 |
Обратите внимание! Снапшоты RawFile — локальная физическая копия на узле. Для production-нагрузок предпочтительнее внешнее хранилище (Ceph, vSphere и др.) и полноценное резервное копирование.
Снапшоты создаются без остановки нагрузки. Поды, которые используют PVC, могут продолжать работать — уменьшать число реплик Deployment или StatefulSet до 0 не требуется.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: <имя-снапшота>
namespace: <неймспейс>
spec:
volumeSnapshotClassName: cephfs
source:
persistentVolumeClaimName: <имя-pvc>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя снапшота | string | app-snap-1 |
metadata.namespace | Неймспейс PVC-источника | string | app-data |
spec.volumeSnapshotClassName | VolumeSnapshotClass драйвера CephFS | string | cephfs |
spec.source.persistentVolumeClaimName | PVC, с которого делается снимок | string | data-app-0 |
Снапшоты создаются без остановки нагрузки. Поды, которые используют PVC, могут продолжать работать — уменьшать число реплик Deployment или StatefulSet до 0 не требуется.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: <имя-снапшота>
namespace: <неймспейс>
spec:
volumeSnapshotClassName: cephrbd
source:
persistentVolumeClaimName: <имя-pvc>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя снапшота | string | app-snap-1 |
metadata.namespace | Неймспейс PVC-источника | string | app-data |
spec.volumeSnapshotClassName | VolumeSnapshotClass драйвера Ceph RBD | string | cephrbd |
spec.source.persistentVolumeClaimName | PVC, с которого делается снимок | string | data-app-0 |
Учётная запись vCenter, от имени которой работает CSI, должна иметь права на снапшоты томов. Учётная запись, которой достаточно для провижининга PVC, может не иметь прав на VolumeSnapshot.
Для VolumeSnapshot у роли CSI-пользователя должны быть:
- CNS > Searchable (
Cns.Searchable) — сервисная роль №2, на корневом объекте vCenter; - Datastore > Low level file operations (
Datastore.FileManagement) — сервисная роль №1, на datastore, где лежат тома. Это право CNS требует для создания и удаления снапшотов блочных томов.
В сервисной роли №1 также есть Virtual machine > Snapshot management (Create / Remove / Rename / Revert snapshot). Для снапшотов томов CSI (FCD/CNS) в API vSphere указан Datastore.FileManagement; набор прав может зависеть от версии vSphere.
Полный перечень ролей — в требованиях к учётной записи VMware vSphere.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: <имя-снапшота>
namespace: <неймспейс>
spec:
volumeSnapshotClassName: vspherecsi
source:
persistentVolumeClaimName: <имя-pvc>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя снапшота | string | app-snap-1 |
metadata.namespace | Неймспейс PVC-источника | string | app-data |
spec.volumeSnapshotClassName | VolumeSnapshotClass драйвера vSphere | string | vspherecsi |
spec.source.persistentVolumeClaimName | PVC, с которого делается снимок | string | data-app-0 |
Если в VolumeSnapshotClass задано force-create: "true", снапшот создаётся без остановки нагрузки: поды, которые используют PVC, можно не останавливать.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: <имя-снапшота>
namespace: <неймспейс>
spec:
volumeSnapshotClassName: cinder
source:
persistentVolumeClaimName: <имя-pvc>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя снапшота | string | app-snap-1 |
metadata.namespace | Неймспейс PVC-источника | string | app-data |
spec.volumeSnapshotClassName | VolumeSnapshotClass драйвера Cinder | string | cinder |
spec.source.persistentVolumeClaimName | PVC, с которого делается снимок | string | data-app-0 |
Снапшоты создаются без остановки нагрузки.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: <имя-снапшота>
namespace: <неймспейс>
spec:
volumeSnapshotClassName: nfs
source:
persistentVolumeClaimName: <имя-pvc>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя снапшота | string | app-snap-1 |
metadata.namespace | Неймспейс PVC-источника | string | app-data |
spec.volumeSnapshotClassName | VolumeSnapshotClass драйвера NFS | string | nfs |
spec.source.persistentVolumeClaimName | PVC, с которого делается снимок | string | data-app-0 |
Шаг 3. Дождаться готовности снапшота
kubectl get VolumeSnapshot -n <неймспейс>
Убедитесь, что в колонке READYTOUSE значение true.
| CSI / модуль | Особенности ожидания READYTOUSE |
|---|---|
| RawFile (shturval-local-csi) | Статус станет true не сразу: снапшот — физическая копия данных. Копия на узле: /var/csi/rawfile/<имя-PV>/snapshots. Когда статус true, нагрузку можно снова запустить: kubectl scale statefulset <имя-statefulset> -n <неймспейс> --replicas=1 |
| CephFS (shturval-ceph-csi) | — |
| Ceph RBD (shturval-ceph-csi) | — |
| vSphere (shturval-capvs-csi) | Если статус остаётся false, проверьте sidecar block-volume-snapshot (шаг 1) и права учётной записи vCenter (шаг 2) |
| OpenStack (shturval-capos-csi) | Если снапшот без остановки нагрузки не создаётся, проверьте параметр force-create: "true" в VolumeSnapshotClass (шаг 1) |
| NFS (shturval-nfs-csi) | — |
Шаг 4. Восстановить или клонировать PVC
Укажите снапшот в dataSource и загрузите манифест PersistentVolumeClaim. Размер запрашиваемого тома должен быть не меньше исходного.
- Восстановление того же тома (например, PVC StatefulSet): остановите нагрузку, удалите исходный PVC, создайте PVC с тем же именем из снапшота, затем снова запустите нагрузку.
Пример восстановления PVC StatefulSet:
kubectl scale statefulset <имя-statefulset> -n <неймспейс> --replicas=0
kubectl delete pvc -n <неймспейс> <имя-pvc>
kubectl apply -f pvc-from-snapshot.yaml
kubectl scale statefulset <имя-statefulset> -n <неймспейс> --replicas=1
- Клонирование: создайте PVC с новым именем. Исходный том можно не удалять:
kubectl apply -f pvc-from-snapshot.yaml
В PVC укажите StorageClass local-path. Для него типичен volumeBindingMode: WaitForFirstConsumer: PVC останется в Pending, пока его не смонтирует под.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: <имя-pvc>
namespace: <неймспейс>
spec:
storageClassName: local-path
dataSource:
name: <имя-снапшота>
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: <размер>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя PVC. Для восстановления StatefulSet — то же имя, что у исходного PVC | string | data-app-0 |
metadata.namespace | Неймспейс PVC | string | app-data |
spec.storageClassName | StorageClass исходного тома RawFile | string | local-path |
spec.dataSource.name | Имя VolumeSnapshot-источника | string | app-snap-1 |
spec.dataSource.kind | Тип источника данных | string | VolumeSnapshot |
spec.dataSource.apiGroup | API-группа снапшотов | string | snapshot.storage.k8s.io |
spec.accessModes | Режим доступа. Обычно совпадает с исходным PVC | array | ReadWriteOnce |
spec.resources.requests.storage | Размер тома, не меньше исходного | string | 100Mi |
В PVC укажите тот же StorageClass, что у исходного тома. Имя по умолчанию после установки модуля — csi-cephfs-sc.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: <имя-pvc>
namespace: <неймспейс>
spec:
storageClassName: csi-cephfs-sc
dataSource:
name: <имя-снапшота>
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteMany
resources:
requests:
storage: <размер>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя PVC. Для восстановления StatefulSet — то же имя, что у исходного PVC | string | data-app-0 |
metadata.namespace | Неймспейс PVC | string | app-data |
spec.storageClassName | StorageClass исходного тома CephFS | string | csi-cephfs-sc |
spec.dataSource.name | Имя VolumeSnapshot-источника | string | app-snap-1 |
spec.dataSource.kind | Тип источника данных | string | VolumeSnapshot |
spec.dataSource.apiGroup | API-группа снапшотов | string | snapshot.storage.k8s.io |
spec.accessModes | Режим доступа. Обычно совпадает с исходным PVC | array | ReadWriteMany |
spec.resources.requests.storage | Размер тома, не меньше исходного | string | 100Mi |
В PVC укажите тот же StorageClass, что у исходного тома. Имя по умолчанию после установки модуля — csi-cephrbd-sc.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: <имя-pvc>
namespace: <неймспейс>
spec:
storageClassName: csi-cephrbd-sc
dataSource:
name: <имя-снапшота>
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: <размер>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя PVC. Для восстановления StatefulSet — то же имя, что у исходного PVC | string | data-app-0 |
metadata.namespace | Неймспейс PVC | string | app-data |
spec.storageClassName | StorageClass исходного тома Ceph RBD | string | csi-cephrbd-sc |
spec.dataSource.name | Имя VolumeSnapshot-источника | string | app-snap-1 |
spec.dataSource.kind | Тип источника данных | string | VolumeSnapshot |
spec.dataSource.apiGroup | API-группа снапшотов | string | snapshot.storage.k8s.io |
spec.accessModes | Режим доступа. Обычно совпадает с исходным PVC | array | ReadWriteOnce |
spec.resources.requests.storage | Размер тома, не меньше исходного | string | 100Mi |
В PVC укажите StorageClass vSphere CSI, обычно vsphere-csi.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: <имя-pvc>
namespace: <неймспейс>
spec:
storageClassName: vsphere-csi
dataSource:
name: <имя-снапшота>
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: <размер>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя PVC. Для восстановления StatefulSet — то же имя, что у исходного PVC | string | data-app-0 |
metadata.namespace | Неймспейс PVC | string | app-data |
spec.storageClassName | StorageClass исходного тома vSphere CSI | string | vsphere-csi |
spec.dataSource.name | Имя VolumeSnapshot-источника | string | app-snap-1 |
spec.dataSource.kind | Тип источника данных | string | VolumeSnapshot |
spec.dataSource.apiGroup | API-группа снапшотов | string | snapshot.storage.k8s.io |
spec.accessModes | Режим доступа. Обычно совпадает с исходным PVC | array | ReadWriteOnce |
spec.resources.requests.storage | Размер тома, не меньше исходного | string | 100Mi |
В PVC укажите StorageClass Cinder: csi-cinder-sc-delete или csi-cinder-sc-retain — тот же, что у исходного тома.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: <имя-pvc>
namespace: <неймспейс>
spec:
storageClassName: csi-cinder-sc-delete
dataSource:
name: <имя-снапшота>
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: <размер>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя PVC. Для восстановления StatefulSet — то же имя, что у исходного PVC | string | data-app-0 |
metadata.namespace | Неймспейс PVC | string | app-data |
spec.storageClassName | StorageClass исходного тома Cinder | string | csi-cinder-sc-delete |
spec.dataSource.name | Имя VolumeSnapshot-источника | string | app-snap-1 |
spec.dataSource.kind | Тип источника данных | string | VolumeSnapshot |
spec.dataSource.apiGroup | API-группа снапшотов | string | snapshot.storage.k8s.io |
spec.accessModes | Режим доступа. Обычно совпадает с исходным PVC | array | ReadWriteOnce |
spec.resources.requests.storage | Размер тома, не меньше исходного | string | 100Mi |
В PVC укажите StorageClass NFS-провижинера. Имя по умолчанию — nfs-csi; если при установке модуля задали другое — используйте его.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: <имя-pvc>
namespace: <неймспейс>
spec:
storageClassName: nfs-csi
dataSource:
name: <имя-снапшота>
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteMany
resources:
requests:
storage: <размер>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя PVC. Для восстановления StatefulSet — то же имя, что у исходного PVC | string | data-app-0 |
metadata.namespace | Неймспейс PVC | string | app-data |
spec.storageClassName | StorageClass исходного тома NFS | string | nfs-csi |
spec.dataSource.name | Имя VolumeSnapshot-источника | string | app-snap-1 |
spec.dataSource.kind | Тип источника данных | string | VolumeSnapshot |
spec.dataSource.apiGroup | API-группа снапшотов | string | snapshot.storage.k8s.io |
spec.accessModes | Режим доступа. Обычно совпадает с исходным PVC | array | ReadWriteMany |
spec.resources.requests.storage | Размер тома, не меньше исходного | string | 100Mi |
volumeBindingMode: WaitForFirstConsumer, новый PVC может остаться в Pending с событием waiting for first consumer. Это ожидаемо: PVC перейдёт в Bound после появления пода, который его монтирует. Для клона без нагрузки создайте временный под, дождитесь Bound и удалите под.Пример временного пода для привязки PVC
apiVersion: v1
kind: Pod
metadata:
name: pvc-init
namespace: <неймспейс>
spec:
containers:
- name: pause
image: r.shturval.tech/pause:3.10.1
volumeMounts:
- mountPath: /data
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: <имя-pvc>
| Параметр | Описание | Тип | Пример |
|---|---|---|---|
metadata.name | Имя временного пода | string | pvc-init |
metadata.namespace | Неймспейс PVC | string | app-data |
spec.containers[].image | Образ pause из реестра платформы | string | r.shturval.tech/pause:3.10.1 |
spec.volumes[].persistentVolumeClaim.claimName | PVC, который нужно довести до Bound | string | data-app-0-clone |
Если клоны создаются регулярно, в StorageClass можно сменить volumeBindingMode с WaitForFirstConsumer на Immediate.
Резервное копирование объектов снапшотов
Можно включить в бэкап ресурсы VolumeSnapshot и VolumeSnapshotContent, но данные снапшотов при этом не копируются.
После восстановления таких ресурсов снапшоты будут в статусе READYTOUSE=false. Поле может позже стать true, но это уже новое состояние снапшота, а не восстановленные данные исходного снимка.
Бэкап PV также не восстанавливает данные снапшотов. Для сохранности данных используйте резервное копирование во внешнее хранилище.
Ограничения и рекомендации
- Снапшот фиксирует состояние тома на момент создания. Данные, записанные после создания снапшота, в снимок не попадают.
- Для консистентности данных приложений (например, БД) перед созданием снапшота рекомендуется согласованно останавливать запись или использовать механизмы приложения (flush, freeze). Для RawFile остановка нагрузки обязательна.
- Хранение снапшотов потребляет место в той же системе хранения; длительное хранение большого числа снапшотов может быть ограничено квотами и политиками провайдера.
- Удаление PVC с существующими снапшотами может быть запрещено или требовать предварительного удаления снапшотов — зависит от политики reclaim и реализации драйвера.
- Политика
deletionPolicyв VolumeSnapshotClass:Delete— содержимое снимка удаляется вместе с объектом;Retain— содержимое сохраняется в системе хранения.