Управление снимками томов в Kubernetes с Cinder CSI

Управление снимками томов в Kubernetes с Cinder CSI позволяет создавать моментальные снимки  томов и восстанавливать тома из этих снимков в Kubernetes as a Service.

Снимок создаётся на основе PersistentVolumeClaim  и сохраняется в OpenStack Cinder  как моментальная копия тома.

Создание снимка тома

Чтобы создать снимок тома:

  1. Создайте и примените манифест PVC для тестового тома, например, test-pvc.yaml.

  2. Создайте и примените манифест пода для записи данных, например, test-pod.yaml.
  3. Создайте манифест для ресурса VolumeSnapshotClass , например, volumesnapshotclass.yaml:

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: <имя VolumeSnapshotClass>
    driver: cinder.csi.openstack.org
    deletionPolicy: Delete
    где:
    • <имя VolumeSnapshotClass> — имя ресурса VolumeSnapshotClass, например, cinder-snapshot.
    Примените созданный манифест:
    kubectl apply -f volumesnapshotclass.yaml
  4. Создайте манифест для снимка, например, snapshot.yaml:
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: <имя снимка>
    spec:
      volumeSnapshotClassName: <имя VolumeSnapshotClass>
      source:
        persistentVolumeClaimName: <имя PVC>
    где:Примените созданный манифест:
    kubectl apply -f snapshot.yaml
  5. Проверьте статус снимка:
    kubectl get volumesnapshot <имя снимка> -o yaml
    где:
    • <имя снимка> — имя снимка, например, test-snapshot.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: test-snapshot
    spec:
      ...
    status:
      readyToUse: true


Восстановление снимка

Чтобы восстановить данные из снимка:

  1. Создайте файл манифеста для нового PVC из снимка, например, pvc-restore.yaml:
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <имя нового PVC>
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: <тип диска>
      dataSource:
        name: <имя снимка>
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
    где:Примените созданный манифест:
    kubectl apply -f pvc-restore.yaml
  2. Создайте файл манифеста пода для проверки данных, например, pod-restore.yaml:
    apiVersion: v1
    kind: Pod
    metadata:
      name: <имя нового пода>
    spec:
      containers:
      - name: app
        image: busybox
        command: ["/bin/sh"]
        args: ["-c", "cat /data/out.txt"]
        volumeMounts:
        - name: data
          mountPath: /data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: <имя нового PVC>
    где:
    • <имя нового пода> — имя нового пода, например, pod-restore;

    • <имя нового PVC>имя ранее созданного PVC, например, pvc-restore.

    Примените созданный манифест:

    kubectl apply -f pod-restore.yaml

  3. Проверьте восстановленные данные:

    kubectl logs <имя нового пода>

    Mon Sep 29 14:41:23 UTC 2025
    Mon Sep 29 14:41:28 UTC 2025


Примечание

Снимки поддерживают только режим доступа ReadWriteOnce . При удалении VolumeSnapshot снимок в OpenStack Cinder удаляется автоматически. Подробнее см. Kubernetes Volume Snapshots.

Диагностика снимков

Диагностика снимков — процесс проверки состояния и ошибок ресурса VolumeSnapshot.

Чтобы выполнить диагностику:

  1. Выполните команду для проверки состояния снимка:
    kubectl describe volumesnapshot <имя снимка>
    где:
    • <имя снимка> — имя снимка, например, test-snapshot.
    Name:         test-snapshot
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  snapshot.storage.k8s.io/v1
    Kind:         VolumeSnapshot
    Metadata:
      Creation Timestamp:  2025-09-29T14:40:00Z
    Spec:
      Source:
        Persistent Volume Claim Name:  pvc-snapshot
      Volume Snapshot Class Name:     cinder-snapshot
    Status:
      Bound Volume Snapshot Content Name:  snapcontent-uuid
      Creation Time:                      2025-09-29T14:40:05Z
      Ready To Use:                       true
      Restore Size:                       1Gi
    Events:
      Type    Reason              Age   From                 Message
      ----    ------              ----  ----                 -------
      Normal  CreatingSnapshot    5s    snapshot-controller  Snapshot creation in progress
      Normal  SnapshotCreated     2s    snapshot-controller  Snapshot created successfully

  2. Проверьте ключевые поля:

    • Ready To Use — должно быть true (снимок готов к использованию). Если false, проверьте блок Events для выявления причин. Возможны ошибки в конфигурации или недоступность Cinder. Для дополнительной информации обратитесь к логам CSI Snapshotter:
      kubectl logs -n kube-system -l app=snapshot-controller
      Подробнее см. Kubernetes Volume Snapshots;
    • Restore Size — размер тома, который будет восстановлен из снимка;
    • Events — информация об ошибках. Например, проблемы с доступом к Cinder или недостатком ресурсов.

Мы ответили на ваш вопрос?