Документация находится в разработке, может содержать неполную информацию.
Диски в виртуальных машинах (ресурсы VirtualDisk) необходимы для записи и хранения данных. Они обеспечивают полноценное функционирование приложений и операционных систем. Структура этих дисков включает хранилище, предоставляемое платформой.
В зависимости от свойств хранилища, диски при создании и виртуальные машины во время эксплуатации могут проявлять разное поведение.
Свойства VolumeBindingMode
:
Immediate
— Диск создается сразу после создания ресурса (предполагается, что диск будет доступен для подключения к виртуальной машине на любом узле кластера).
WaitForFirstConsumer
— Диск создается только после того как будет подключен к виртуальной машине и будет создан на том узле, на котором будет запущена виртуальная машина.
Режим доступа AccessMode:
ReadWriteOnce (RWO)
— доступ к диску предоставляется только одному экземпляру виртуальной машины. Миграция виртуальных машин в реальном времени с такими дисками невозможна.ReadWriteMany (RWX)
— множественный доступ к диску. Миграция виртуальных машин в реальном времени с такими дисками возможна.
При создании диска контроллер самостоятельно определит наиболее оптимальные параметры поддерживаемые хранилищем.
Создать диски из ISO-образов — нельзя!
Чтобы узнать доступные варианты хранилищ на платформе, выполните следующую команду:
kubectl 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
Создание пустого диска
Пустые диски обычно используются для установки на них ОС, либо для хранения каких-либо данных.
Для создания диска:
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