Перейти к основному содержимому
Снапшоты постоянных томов
Последнее изменение:

Снапшоты постоянных томов

Снапшоты постоянных томов (VolumeSnapshots) — это копии содержимого постоянных томов (PersistentVolume) в кластере Managed Kubernetes на определенный момент времени.

Снапшоты можно использовать для резервного копирования данных или переноса данных на другой ресурс без необходимости создавать новый диск.

В Managed Kubernetes снапшоты работают на ресурсах облачной платформы.

Создать снапшот

  1. Настройте Volume Snapshot Controller — один из компонентов CSI Snapshotter:

    kubectl apply -f https://raw.githubusercontent.com/selectel/mks-csi-snapshotter/master/deploy/setup-snapshot-controller.yaml

    В ответе появится список созданных объектов:

    deployment.apps/snapshot-controller created
    serviceaccount/snapshot-controller created
    clusterrole.rbac.authorization.k8s.io/snapshot-controller-runner created
    clusterrolebinding.rbac.authorization.k8s.io/snapshot-controller-role created
    role.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
    rolebinding.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
    customresourcedefinition.apiextensions.k8s.io/volumesnapshots.snapshot.storage.k8s.io created
    customresourcedefinition.apiextensions.k8s.io/volumesnapshotcontents.snapshot.storage.k8s.io created
    customresourcedefinition.apiextensions.k8s.io/volumesnapshotclasses.snapshot.storage.k8s.io created
  2. Проверьте, что поды с Volume Snapshot Controller созданы:

    kubectl get pod -l app=snapshot-controller --namespace=kube-system

    В ответе появится список подов:

    NAME                                   READY   STATUS    RESTARTS   AGE
    snapshot-controller-7d7f5775d4-cz9j4 1/1 Running 0 3m37s
    snapshot-controller-7d7f5775d4-tc42c 1/1 Running 0 3m37s
  3. Создайте yaml-файл с манифестом для объектов VolumeSnapshotClass и VolumeSnapshot:

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

    ---
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
    name: csi-hostpath-snapclass-v1
    driver: cinder.csi.openstack.org
    deletionPolicy: Delete
    parameters:
    force-create: "true"
    ---
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
    name: new-snapshot-demo
    spec:
    volumeSnapshotClassName: csi-hostpath-snapclass-v1
    source:
    persistentVolumeClaimName: my-pv-claim

    Здесь:

    • csi-hostpath-snapclass-v1 — имя объекта SnapshotClass;
    • new-snapshot-demo — имя объекта VolumeSnapshot;
    • my-pv-claim — имя объекта PersistentVolumeClaim, снапшот которого вы создаете.
  4. Примените манифест:

    kubectl apply -f <snapshot.yaml>

    Укажите <snapshot.yaml> — имя yaml-файла с манифестом для объектов VolumeSnapshotClass и VolumeSnapshot.

    В ответе появится сообщение, что объекты созданы:

    volumesnapshotclass.snapshot.storage.k8s.io/csi-hostpath-snapclass-v1 created
    volumesnapshot.snapshot.storage.k8s.io/new-snapshot-demo created
  5. Убедитесь, что создан объект VolumeSnapshotContent:

    kubectl get volumesnapshotcontents.snapshot.storage.k8s.io

    В ответе появится созданный объект VolumeSnapshotContent:

    NAME                                               READYTOUSE   RESTORESIZE   DELETIONPOLICY   DRIVER                     VOLUMESNAPSHOTCLASS         VOLUMESNAPSHOT      VOLUMESNAPSHOTNAMESPACE   AGE
    snapcontent-acc83be5-065f-42c1-a465-9f26497de1b1 Delete cinder.csi.openstack.org csi-hostpath-snapclass-v1 new-snapshot-demo default 9m7s

Восстановить постоянный том из снапшота

  1. Создайте yaml-файл с манифестом для создания нового PersistentVolumeClaim из снапшота.

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: snapshot-demo-restore
    spec:
    storageClassName: fast.ru-3b
    dataSource:
    name: new-snapshot-demo
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
    storage: 10Gi

    Здесь:

    • snapshot-demo-restore — имя нового объекта PersistentVolumeClaim, куда будут скопированы данные из снапшота;
    • new-snapshot-demo — имя снапшота, из которого вы будете восстанавливать объект.
  2. Примените манифест:

    kubectl apply -f <snapshot-restore.yaml>

    Укажите <snapshot-restore.yaml> — имя yaml-файла с манифестом для создания нового PersistentVolumeClaim из снапшота.

  3. Убедитесь, что новый объект PersistentVolumeClaim создан:

    kubectl get pvc

    В ответе появится новый PersistentVolumeClaim:

    NAME          STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    snapshot-demo-restore Bound pvc-62394055-3780-4324-8871-1a56a447d70f 10Gi RWO fast.ru-3b 22m