Volume Snapshot (Снапшот тома)

⌘K

Volume Snapshot (Снапшот тома)

Volume Snapshot — это механизм создания точной моментальной копии данных, хранящихся на Persistent Volume (PV), без остановки работы приложения и без вмешательства в работу подов. В отличие от традиционных дисковых снапшотов, которые фиксируют состояние всего виртуального или физического диска, volume snapshot в Kubernetes работает на уровне персистентного тома, задействованного конкретным

Pod
или
StatefulSet
.

Снапшоты томов позволяют разработчикам и операторам сохранять и восстанавливать состояние данных с точностью до конкретного момента времени, что критично для задач резервного копирования, миграции и восстановления после сбоев.


Ключевые свойства Volume Snapshot

  • Без остановки подов: создание снапшота не блокирует работу приложения — процессы продолжают работать в момент фиксации;
  • Интеграция с PVC/PV: снапшот связан с конкретным
    PersistentVolumeClaim
    , через
    VolumeSnapshotContent
    ;
  • Глубокая интеграция с CSI (Container Storage Interface): управление снапшотами происходит через Kubernetes API (
    snapshot.storage.k8s.io
    );
  • Поддержка автоматизации: снапшоты могут создаваться вручную или по расписанию с помощью операторов, cronjob’ов или контроллеров хранения;
  • Гибкое восстановление: можно восстановить новый PVC на базе существующего снапшота — без перезапуска всей среды.

Пример использования VolumeSnapshot в Kubernetes

apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: db-snapshot spec: volumeSnapshotClassName: csi-aws-snap source: persistentVolumeClaimName: db-data

📌 Здесь создаётся снапшот тома

db-data
с помощью указанного CSI-класса.


Применение Volume Snapshot

  • Резервное копирование (backup) — в сочетании с CronJob, Velero, Stash и т.д.;
  • Быстрое восстановление после сбоев — critical path для disaster recovery;
  • Откат после обновления (rollback) — можно зафиксировать состояние перед релизом и быстро вернуться к нему;
  • Тестирование и staging — клонирование продакшн-данных в dev/stage без даунтайма.

Поддерживаемые системы хранения

ХранилищеПоддержка VolumeSnapshotCSI Driver
AWS EBSДа
ebs.csi.aws.com
GCP Persistent DiskДа
pd.csi.storage.gke.io
Ceph RBD / CephFSДа
ceph-csi
LonghornДаВстроенная поддержка
OpenEBSДаЧерез
csi.openebs.io

Архитектура Volume Snapshot

PVC → PV → CSI Driver → VolumeSnapshotContent ← VolumeSnapshot ↑ SnapshotClass
  • VolumeSnapshot — ресурс, описывающий снимок;
  • VolumeSnapshotContent — связь с физическим снапшотом в backend-хранилище;
  • VolumeSnapshotClass — определяет драйвер и параметры создания.

Почему это важно

  • Контейнерный backup-first подход — Volume Snapshot даёт Kubernetes-платформе встроенные средства восстановления и копирования;
  • Совместимость с GitOps — снапшоты можно автоматизировать и версионировать;
  • Масштабируемость — поддержка динамического снапшотинга в кластерах с десятками и сотнями PVC;
  • DevSecOps-friendly — можно снапшотить только зашифрованные PVC, с аудитом доступа через RBAC и логирование действий.

Готовые манифесты и сценарии для работы с Volume Snapshot в Kubernetes, включая создание, восстановление и автоматизацию через CronJob. Всё совместимо с CSI и Kubernetes v1.20+.

1. Создание VolumeSnapshot вручную

apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: db-snapshot-2025-07-07 spec: volumeSnapshotClassName: csi-aws-snap source: persistentVolumeClaimName: db-pvc

📌 Этот манифест создаёт снимок PVC

db-pvc
с использованием класса
csi-aws-snap
.


2. Восстановление из снапшота (создание PVC из VolumeSnapshot)

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: db-restore-pvc spec: storageClassName: gp2 dataSource: name: db-snapshot-2025-07-07 kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 20Gi

📌 Новый PVC будет создан на основе снапшота — полезно для rollback или клонирования в dev/staging.


3. Автоматизация через CronJob (ежедневный снапшот)

apiVersion: batch/v1 kind: CronJob metadata: name: pvc-snapshot-daily spec: schedule: "0 2 * * *" # каждый день в 02:00 jobTemplate: spec: template: spec: restartPolicy: OnFailure containers: - name: snapshotter image: bitnami/kubectl:latest command: - /bin/sh - -c - | SNAP_NAME="db-snapshot-$(date +%Y%m%d%H%M)" kubectl apply -f - <<EOF apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: $SNAP_NAME spec: volumeSnapshotClassName: csi-aws-snap source: persistentVolumeClaimName: db-pvc EOF

📌 Полностью автономный способ создания снапшотов по расписанию — можно дополнить ретеншн-логикой или label’ами.


4. VolumeSnapshotClass (для AWS EBS, пример)

apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-aws-snap driver: ebs.csi.aws.com deletionPolicy: Retain

📌

deletionPolicy: Retain
— снапшоты сохраняются после удаления VolumeSnapshot ресурса.


Долгосрочные клиенты — наша гордость

Для тех, кто с нами надолго: 12 месяцев = 13 с промокодом

Месяц в подарок
COPIED
NEWCOM COPIED