Снимки предназначены для сохранения состояния ресурса в конкретный момент времени. На данный момент времени поддерживаются снимки дисков и снимки виртуальных машин.
Создание снимков дисков
Для создания снимков виртуальных дисков используется ресурс VirtualDiskSnapshot
. Эти снимки могут служить источником данных при создании новых дисков, например, для клонирования или восстановления информации.
Чтобы гарантировать целостность данных, снимок диска можно создать в следующих случаях:
- Диск не подключен ни к одной виртуальной машине.
- ВМ выключена.
- ВМ запущена, но установлен qemu-guest-agent в гостевой ОС. Файловая система успешно «заморожена» (операция fsfreeze).
Если консистентность данных не требуется (например, для тестовых сценариев), снимок можно создать:
- На работающей ВМ без «заморозки» файловой системы.
- Даже если диск подключен к активной ВМ.
Для этого в манифесте VirtualDiskSnapshot укажите:
spec:
requiredConsistency: false
Пример манифеста для создания снимка диска:
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
EOF
Для просмотра списка снимков дисков, выполните следующую команду:
d8 k get vdsnapshot
Пример вывода:
NAME PHASE CONSISTENT AGE
linux-vm-root-snapshot Ready true 3m2s
После создания VirtualDiskSnapshot
может находиться в следующих состояниях (фазах):
Pending
— ожидание готовности всех зависимых ресурсов, требующихся для создания снимка.InProgress
— идет процесс создания снимка виртуального диска.Ready
— создание снимка успешно завершено, и снимок виртуального диска доступен для использования.Failed
— произошла ошибка во время процесса создания снимка виртуального диска.Terminating
— ресурс находится в процессе удаления.
Диагностика проблем с ресурсом осуществляется путем анализа информации в блоке .status.conditions
.
С полным описанием параметров конфигурации ресурса VirtualDiskSnapshot
машин можно ознакомиться в документации ресурса.
Как создать снимок диска в веб-интерфейсе:
- Перейдите на вкладку «Проекты» и выберите нужный проект.
- Перейдите в раздел «Виртуализация» → «Снимки дисков».
- Нажмите «Создать снимок диска».
- В поле «Имя снимка диска» введите имя для снимка.
- На вкладке «Конфигурация» в поле «Имя диска» выберите диск, с которого будет создан снимок.
- Включите переключатель «Гарантия целостности».
- Нажмите кнопку «Создать».
- Статус образа отображается слева вверху, под именем снимка.
Восстановление дисков из снимков
Для того чтобы восстановить диск из ранее созданного снимка диска, необходимо в качестве 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-sds-replicated-thin-r2
# Источник из которого создается диск.
dataSource:
type: ObjectRef
objectRef:
kind: VirtualDiskSnapshot
name: linux-vm-root-snapshot
EOF
Как восстановить диск из ранее созданного снимка в веб-интерфейсе:
- Перейдите на вкладку «Проекты» и выберите нужный проект.
- Перейдите в раздел «Виртуализация» → «Диски ВМ».
- Нажмите «Создать диск».
- В открывшейся форме в поле «Имя диска» введите имя для диска.
- В поле «Источник» убедитесь, что установлен чек-бокс «Снимки».
- Из выпадающего списка выберите снимок диска, из которого хотите восстановиться.
- В поле «Размер» установите размер такой же или больше, чем размер оригинального диска.
- В поле «Имя StorageClass» введите «StorageClass» оригинального диска.
- Нажмите кнопку «Создать».
- Статус диска отображается слева вверху, под именем диска.
Создание снимков ВМ
Снимок виртуальной машины — это сохранённое состояние виртуальной машины в определённый момент времени. Для создания снимков виртуальных машин используется ресурс VirtualMachineSnapshot
.
Рекомендуется отключить все образы (VirtualImage/ClusterVirtualImage) от виртуальной машины перед созданием её снимка. Образы дисков не сохраняются вместе со снимком ВМ, и их отсутствие в кластере при восстановлении может привести к тому, что виртуальная машина не сможет запуститься и будет находиться в состоянии Pending
, ожидая доступности образа.
Типы снимков
Снимки могут быть консистентными и неконсистентными, за это отвечает параметр requiredConsistency
, по умолчанию его значение равно true
, что означает требование консистентного снимка.
Консистентный снимок гарантирует согласованное и целостное состояние дисков виртуальной машины. Такой снимок можно создать при выполнении одного из следующих условий:
- Виртуальная машина выключена.
- В гостевой системе установлен
qemu-guest-agent
, который на момент создания снимка временно приостанавливает работу файловой системы для обеспечения её согласованности.
Неконсистентный снимок может не отражать согласованное состояние дисков виртуальной машины и её компонентов. Такой снимок создаётся в следующих случаях:
- ВМ запущена, и в гостевой ОС не установлен или не запущен
qemu-guest-agent
. - ВМ запущена, и в гостевой ОС не установлен
qemu-guest-agent
, но в манифесте снимка указан параметрrequiredConsistency: false
, и хочется избежать приостановки работы файловой системы.
Существует риск потери данных или нарушения их целостности при восстановлении из такого снимка.
Создание снимков
Создание снимка виртуальной машины будет неудачным, если выполнится хотя бы одно из следующих условий:
- Не все зависимые устройства виртуальной машины готовы;
- Среди зависимых устройств есть диск, находящийся в процессе изменения размера.
Если на момент создания снимка в виртуальной машине есть изменения, ожидающие перезапуска, в снимок попадёт обновлённая конфигурация.
При создании снимка динамический 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
requiredConsistency: true
keepIPAddress: Never
EOF
После успешного создания снимка, в его статусе будет отражен перечень ресурсов, которые были сохранены в снимке.
Пример вывода:
status:
...
resources:
- apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachine
name: linux-vm
- apiVersion: v1
kind: Secret
name: cloud-init
- apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualDisk
name: linux-vm-root
Как создать снимок ВМ в веб-интерфейсе:
- Перейдите на вкладку «Проекты» и выберите нужный проект.
- Перейдите в раздел «Виртуализация» → «Виртуальные машины».
- Из списка выберите необходимую ВМ и нажмите на её имя.
- Перейдите на вкладку «Снимки».
- Нажмите кнопку «Создать».
- В открывшейся форме в поле «Имя снимка» введите
linux-vm-snapshot
. - На вкладке «Конфигурация» в поле «Политика преобразования IP-адреса» выберите значение
Never
. - Включите переключатель «Гарантия целостности».
- В поле «Класс хранилища снимка» выберите класс для снимка диска.
- Нажмите кнопку «Создать».
- Статус снимка отображается слева вверху, под именем снимка.
Восстановление ВМ
Для восстановления ВМ из снимка используется ресурс VirtualMachineOperation
с типом restore
:
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineOperation
metadata:
name: <vmop-name>
spec:
type: Restore
virtualMachineName: <название ВМ, которую требуется восстановить>
restore:
mode: DryRun | Strict | BestEffort
virtualMachineSnapshotName: <название снимка ВМ из которого требуется восстановить>
Для данной операции возможно использовать один из трех режимов:
DryRun
— холостой запуск операции восстановления, необходим для проверки возможных конфликтов, которые будут отображены в статусе ресурса (status.resources
).Strict
— режим строгого восстановления, когда требуется восстановление ВМ «как в снимке», отсутствующие внешние зависимости могут привести к тому, что ВМ после восстановления будет вPending
.BestEffort
— отсутствующие внешние зависимости (ClusterVirtualImage
,VirtualImage
) игнорируются и удаляются из конфигурации ВМ.
Восстановление виртуальной машины из снимка возможно только при выполнении всех следующих условий:
- Восстанавливаемая ВМ присутствует в кластере (ресурс
VirtualMachine
существует, а его.metadata.uid
совпадает с идентификатором, использованным при создании снимка). - Восстанавливаемые диски (определяются по имени) либо не подключены к другим ВМ, либо отсутствуют в кластере.
- Восстанавливаемый IP-адрес либо не занят другой ВМ, либо отсутствует в кластере.
- Восстанавливаемые MAC-адреса либо не используются другими ВМ, либо отсутствуют в кластере.
Если некоторые ресурсы, от которых зависит ВМ (например, VirtualMachineClass
, VirtualImage
, ClusterVirtualImage
), отсутствуют в кластере, но существовали на момент создания снимка, ВМ после восстановления останется в состоянии Pending
.
В этом случае необходимо вручную отредактировать конфигурацию ВМ и обновить или удалить отсутствующие зависимости.
Информацию о конфликтах при восстановлении ВМ из снимка можно посмотреть в статусе ресурса:
d8 k get vmop <vmop-name> -o json | jq '.status.resources'
Не рекомендуется отменять операцию восстановления (удалять ресурс VirtualMachineOperation
в фазе InProgress
) из снимка, так как это может привести к неконсистентному состоянию восстанавливаемой виртуальной машины.
Создание клона ВМ
Клонирование ВМ выполняется с использованием ресурса VirtualMachineOperation
с типом операции clone
.
Перед клонированием ВМ должна быть выключена.
Рекомендуется задавать параметр .spec.runPolicy: AlwaysOff
в конфигурации клонируемой ВМ, чтобы предотвратить автоматический запуск клона ВМ. Это связано с тем, что клон наследует поведение родительской ВМ.
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineOperation
metadata:
name: <vmop-name>
spec:
type: Clone
virtualMachineName: <название ВМ, которую требуется клонировать>
clone:
mode: DryRun | Strict | BestEffort
nameReplacements: []
customization: {}
Клонируемой ВМ будет назначен новый IP-адрес для кластерной сети и MAC-адреса для дополнительных сетевых интерфейсов (если они есть), поэтому после клонирования потребуется перенастроить сетевые параметры гостевой ОС.
Клонирование создает копию существующей ВМ, поэтому ресурсы новой ВМ должны иметь уникальные имена. Для этого используются параметры .spec.clone.nameReplacements
и/или .spec.clone.customization
.
.spec.clone.nameReplacements
— позволяет заменить имена существующих ресурсов на новые, чтобы избежать конфликтов;.spec.clone.customization
— задает префикс или суффикс для имен всех клонируемых ресурсов ВМ (дисков, IP-адресов и т. д.).
Пример конфигурации:
spec:
clone:
nameReplacements:
- from:
kind: <тип ресурса>
name: <старое имя>
- to:
name: <новое имя>
customization:
namePrefix: <префикс>
nameSuffix: <суффикс>
В результате будет создана ВМ с именем <префикс><новое имя=""><суффикс>.суффикс>новое>префикс>
Для операции клонирования возможно использовать один из трех режимов:
DryRun
— тестовый запуск для проверки возможных конфликтов. Результаты отображаются в полеstatus.resources
ресурса VirtualMachineOperation;Strict
— строгий режим, требующий наличия всех ресурсов с новыми именами и их зависимостей (например, образов) в клонируемой ВМ;BestEffort
— режим, при котором отсутствующие внешние зависимости (например, ClusterVirtualImage, VirtualImage) автоматически удаляются из конфигурации клонируемой ВМ.
Информацию о конфликтах, возникших при клонировании, можно просмотреть в статусе ресурса:
d8 k get vmop <vmop-name> -o json | jq '.status.resources'
Экспорт данных
DVP позволяет экспортировать диски и снимки дисков виртуальных машин с использованием утилиты d8
(версия 1.17 и выше).
Пример: экспорт диска (выполняется на узле кластера):
d8 download -n <namespace> vd/<virtual-disk-name> -o file.img
Пример: экспорт снимка диска (выполняется на узле кластера):
d8 download -n <namespace> vds/<virtual-disksnapshot-name> -o file.img
Для экспорта ресурсов за пределы кластера необходимо также использовать флаг --publish
.