Документация находится в разработке, может содержать неполную информацию.
Диски в виртуальных машинах (ресурсы VirtualDisk) необходимы для записи и хранения данных. Они обеспечивают полноценное функционирование приложений и операционных систем. Структура этих дисков включает хранилище, предоставляемое платформой.
В зависимости от свойств хранилища, диски при создании и виртуальные машины во время эксплуатации могут проявлять разное поведение.
Свойства VolumeBindingMode
:
Immediate
— Диск создается сразу после создания ресурса (предполагается, что диск будет доступен для подключения к виртуальной машине на любом узле кластера).
WaitForFirstConsumer
— Диск создается только после того как будет подключен к виртуальной машине и будет создан на том узле, на котором будет запущена виртуальная машина.
Режим доступа AccessMode:
ReadWriteOnce (RWO)
— доступ к диску предоставляется только одному экземпляру виртуальной машины. Миграция виртуальных машин в реальном времени с такими дисками невозможна.ReadWriteMany (RWX)
— множественный доступ к диску. Миграция виртуальных машин в реальном времени с такими дисками возможна.
При создании диска контроллер самостоятельно определит наиболее оптимальные параметры поддерживаемые хранилищем.
Внимание. Создать диски из ISO-образов — нельзя!
Чтобы узнать доступные варианты хранилищ на платформе, выполните следующую команду:
d8 k get storageclass
Пример вывода команды:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
i-linstor-thin-r1 (default) replicated.csi.storage.deckhouse.io Delete Immediate true 48d
i-linstor-thin-r2 replicated.csi.storage.deckhouse.io Delete Immediate true 48d
i-linstor-thin-r3 replicated.csi.storage.deckhouse.io Delete Immediate true 48d
linstor-thin-r1 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 48d
linstor-thin-r2 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 48d
linstor-thin-r3 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 48d
nfs-4-1-wffc nfs.csi.k8s.io Delete WaitForFirstConsumer true 30d
Маркер (default)
рядом с названием класса указывает, что данный StorageClass
будет использоваться по умолчанию, в случае если пользователь не указал название класса явно в создаваемом ресурсе.
Если StorageClass
по умолчанию в кластере отсутствует, то пользователь должен указать требуемый StorageClass
в спецификации ресурса явно.
Также Deckhouse Virtualization Platform позволяет задать индивидуальные настройки для хранения дисков и образов.
Настройки классов хранения для дисков
Настройки классов хранения для дисков определяется в параметре .spec.settings.virtualDisks
настроек модуля.
Пример:
spec:
...
settings:
virtualDisks:
allowedStorageClassNames:
- sc-1
- sc-2
defaultStorageClassName: sc-1
allowedStorageClassNames
— (опционально) это список допустимыхStorageClass
для созданияVirtualDisk
, которые можно явно указать в спецификации ресурса.defaultStorageClassName
— (опционально) этоStorageClass
, используемый по умолчанию при созданииVirtualDisk
, если параметр.spec.persistentVolumeClaim.storageClassName
не задан.
Тонкая настройка классов хранения для дисков
При создании диска контроллер автоматически выберет наиболее оптимальные параметры, поддерживаемые хранилищем, на основании известных ему данных.
Приоритеты настройки параметров PersistentVolumeClaim
при создании диска посредством автоматического определения характеристик хранилища:
- RWX + Block,
- RWX + FileSystem,
- RWO + Block,
- RWO + FileSystem.
Если хранилище неизвестно и его параметры невозможно определить автоматически, используется режим RWO + FileSystem.
Создание пустого диска
Пустые диски обычно используются для установки на них ОС, либо для хранения каких-либо данных.
Для создания диска:
d8 k apply -f - <<EOF
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualDisk
metadata:
name: blank-disk
spec:
# Настройки параметров хранения диска.
persistentVolumeClaim:
# Подставьте ваше название StorageClass.
storageClassName: i-linstor-thin-r2
size: 100Mi
EOF
После создания ресурс VirtualDisk может находиться в следующих состояниях:
Pending
— ожидание готовности всех зависимых ресурсов, требующихся для создания диска.Provisioning
— идет процесс создания диска.Resizing
— идет процесс изменения размера диска.WaitForFirstConsumer
— диск ожидает создания виртуальной машины, которая будет его использовать.Ready
— диск создан и готов для использования.Failed
— произошла ошибка в процессе создания.Terminating
— идет процесс удаления диска. Процесс может «зависнуть» в этом состоянии если он еще подключен к виртуальной машине.
До тех пор, пока диск не перешёл в фазу Ready
, содержимое всего блока .spec
допускается изменять. При изменении процесс создании диска запустится заново.
Проверьте состояние диска после создания:
d8 k get vd blank-disk
Пример вывода:
NAME PHASE CAPACITY AGE
blank-disk Ready 100Mi 1m2s
Создание диска из образа
Диск можно создавать и заполнять данными из ранее созданных образов ClusterVirtualImage и VirtualImage.
При создании диска можно указать его желаемый размер, который должен быть равен или больше размера распакованного образа. Если размер не указан, то будет создан диск с размером, соответствующим исходному размеру образа диска.
На примере ранее созданного проектного образа VirtualImage, рассмотрим команду позволяющую определить размер распакованного образа:
d8 k get cvi ubuntu-22.04 -o wide
Пример вывода:
NAME PHASE CDROM PROGRESS STOREDSIZE UNPACKEDSIZE REGISTRY URL AGE
ubuntu-22.04 Ready false 100% 285.9Mi 2.5Gi dvcr.d8-virtualization.svc/cvi/ubuntu-22.04:eac95605-7e0b-4a32-bb50-cc7284fd89d0 122m
Искомый размер указан в колонке UNPACKEDSIZE и равен 2.5Gi.
Создайте диск из этого образа:
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: VirtualImage
name: ubuntu-22.04
EOF
А теперь создайте диск без указания размера:
d8 k apply -f - <<EOF
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualDisk
metadata:
name: linux-vm-root-2
spec:
# Настройки параметров хранения диска.
persistentVolumeClaim:
# Подставьте ваше название StorageClass.
storageClassName: i-linstor-thin-r2
# Источник из которого создается диск.
dataSource:
type: ObjectRef
objectRef:
kind: VirtualImage
name: ubuntu-22.04
EOF
Проверьте состояние дисков после создания командой:
d8 k get vd
Пример вывода:
NAME PHASE CAPACITY AGE
linux-vm-root Ready 10Gi 7m52s
linux-vm-root-2 Ready 2590Mi 7m15s
Изменение размера диска
Размер дисков можно увеличивать, даже если они уже подключены к работающей виртуальной машине. Изменения вносятся в поле spec.persistentVolumeClaim.size
:
Проверьте размер до изменения командой:
d8 k get vd linux-vm-root
Пример вывода:
NAME PHASE CAPACITY AGE
linux-vm-root Ready 10Gi 10m
Примените изменения:
kubectl patch vd linux-vm-root --type merge -p '{"spec":{"persistentVolumeClaim":{"size":"11Gi"}}}'
Проверьте размер после изменения:
d8 k get vd linux-vm-root
Пример вывода:
NAME PHASE CAPACITY AGE
linux-vm-root Ready 11Gi 12m