Документация находится в разработке, может содержать неполную информацию.

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

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

Для создания снимков дисков используется ресурс VirtualDiskSnapshot. Он может быть использован в качестве источников данных для создания новых виртуальных дисков.

Для гарантии целостности и консистентности данных, снимок диска можно создать в следующих случаях:

  • виртуальный диск не подключен ни к одной виртуальной машине;
  • виртуальный диск подключен к виртуальной машине, которая выключена;
  • виртуальный диск подключен к запущенной виртуальной машине, в ОС виртуальной машины установлен агент (qemu-guest-agent), операция по «заморозке» файловой системы прошла успешно.

Если целостность и консистентность неважна, снимок можно выполнить на работающей виртуальной машине и без «заморозки» файловой системы. Для этого в спецификации ресурса VirtualDiskSnapshot добавьте:

spec:
  requiredConsistency: false

При создании снимка требуется указать название класса снимка томов VolumeSnapshotClass, который будет использоваться для создания снимка.

Для получения списка поддерживаемых ресурсов VolumeSnapshotClass выполните команду:

d8 k get volumesnapshotclasses

Пример вывода:

NAME                     DRIVER                                DELETIONPOLICY   AGE
csi-nfs-snapshot-class   nfs.csi.k8s.io                        Delete           34d
sds-replicated-volume    replicated.csi.storage.deckhouse.io   Delete           39d

Пример манифеста для создания снимка диска:

d8 k apply -f - <<EOF
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualDiskSnapshot
metadata:
  name: linux-vm-root-snapshot
spec:
  requiredConsistency: true
  virtualDiskName: linux-vm-root
  volumeSnapshotClassName: sds-replicated-volume
EOF

Для просмотра списка снимков дисков, выполните команду:

d8 k get vdsnapshot

Пример вывода:

NAME                   PHASE     CONSISTENT   AGE
linux-vm-root-snapshot Ready     true         3m2s

После создания, VirtualDiskSnapshot может находиться в следующих состояниях:

  • Pending - ожидание готовности всех зависимых ресурсов, требующихся для создания снимка.
  • InProgress — идет процесс создания снимка виртуального диска.
  • Ready — создание снимка успешно завершено, и снимок виртуального диска доступен для использования.
  • Failed — произошла ошибка во время процесса создания снимка виртуального диска.
  • Terminating — ресурс находится в процессе удаления.

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

Для того чтобы восстановить диск из ранее созданного снимка диска, необходимо в качестве dataSource указать соответствующий объект:

d8 k apply -f - <<EOF
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualDisk
metadata:
  name: linux-vm-root
spec:
  # Настройки параметров хранения диска.
  persistentVolumeClaim:
    # Укажите размер больше чем значение.
    size: 10Gi
    # Подставьте ваше название StorageClass.
    storageClassName: i-linstor-thin-r2
  # Источник, из которого создается диск.
  dataSource:
    type: ObjectRef
    objectRef:
      kind: VirtualDiskSnapshot
      name: linux-vm-root-snapshot
EOF

Создание снимков виртуальных машин

Для создания снимков виртуальных машин используется ресурс VirtualMachineSnapshot.

Чтобы гарантировать целостность и консистентность данных, снимок виртуальной машины будет создан, если выполняется хотя бы одно из следующих условий:

  • виртуальная машина выключена;
  • в операционной системе виртуальной машины установлен агент qemu-guest-agent, и операция по «заморозке» файловой системы прошла успешно.

Если целостность и консистентность неважны, снимок можно создать на работающей виртуальной машине и без «заморозки» файловой системы. Для этого в спецификации ресурса VirtualMachineSnapshot укажите:

spec:
  requiredConsistency: false

При создании снимка необходимо указать названия классов снимков томов VolumeSnapshotClass, которые будут использованы для создания снимков дисков, подключенных к виртуальной машине.

Чтобы получить список поддерживаемых ресурсов VolumeSnapshotClass, выполните команду:

d8 k get volumesnapshotclasses

Пример вывода:

NAME                     DRIVER                                DELETIONPOLICY   AGE
csi-nfs-snapshot-class   nfs.csi.k8s.io                        Delete           34d
sds-replicated-volume    replicated.csi.storage.deckhouse.io   Delete           39d

Снимок виртуальной машины не будет создан, если выполнится хотя бы одно из следующих условий:

  • не все зависимые устройства виртуальной машины готовы;
  • есть изменения, ожидающие перезапуска виртуальной машины;
  • среди зависимых устройств есть диск, находящийся в процессе изменения размера.

При создании снимка виртуальной машины IP-адрес будет преобразован в статичный и будет использован позже при восстановлении виртуальной машины из снимка.

Если не требуется преобразование и использование старого IP-адреса виртуальной машины, можно установить соответствующую политику в значение Never. В этом случае будет использован тип адреса без преобразования (Auto или Static).

spec:
  keepIPAddress: Never

Пример манифеста для создания снимка виртуальной машины:

d8 k apply -f - <<EOF
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineSnapshot
metadata:
  name: linux-vm-snapshot
spec:
  virtualMachineName: linux-vm
  volumeSnapshotClasses:
    - storageClassName: i-linstor-thin-r2 # Подставьте ваше название StorageClass.
      volumeSnapshotClassName: sds-replicated-volume # Подставьте ваше название VolumeSnapshotClass.
  requiredConsistency: true
  keepIPAddress: Never
EOF

Восстановление снимков из виртуальных машин

Для восстановления виртуальных машин из снимков используется ресурс VirtualMachineRestore.

В процессе восстановления будет создана новая виртуальная машина, а также все её зависимые ресурсы (диски, IP-адрес, ресурс со сценарием автоматизации (Secret) и ресурсы для динамического подключения дисков VirtualMachineBlockDeviceAttachment) .

Если возникает конфликт имен между существующими и восстанавливаемыми ресурсами для VirtualMachine, VirtualDisk или VirtualMachineBlockDeviceAttachment, восстановление не будет успешно. Чтобы избежать этого, используйте параметр nameReplacements.

Если восстанавливаемый ресурс VirtualMachineIPAddress уже присутствует в кластере, он не должен быть присоединен к другой виртуальной машине, а если это ресурс типа Static, его IP-адрес должен совпадать. Восстанавливаемый секрет с автоматизацией также должен полностью соответствовать восстановленному. Несоблюдение этих условий приведет к неудаче восстановления.

Пример манифеста для восстановления виртуальной машины из снимка:

d8 k apply -f - <<EOF
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineRestore
metadata:
  name: linux-vm-restore
spec:
  virtualMachineSnapshotName: linux-vm-snapshot
  nameReplacements:
    - from:
        kind: VirtualMachine
        name: linux-vm
      to: linux-vm-2 # Воссоздание существующей виртуальной машины linux-vm с новым именем linux-vm-2.
    - from:
        kind: VirtualDisk
        name: linux-vm-root
      to: linux-vm-root-2 # Воссоздание существующего виртуального диска linux-vm-root с новым именем linux-vm-root-2.
    - from:
        kind: VirtualDisk
        name: blank-disk
      to: blank-disk-2 # Воссоздание существующего виртуального диска blank-disk с новым именем blank-disk-2.
    - from:
        kind: VirtualMachineBlockDeviceAttachment
        name: attach-blank-disk
      to: attach-blank-disk-2 # Воссоздание существующего виртуального диска attach-blank-disk с новым именем attach-blank-disk-2.
EOF