Диск хранит данные виртуальной машины (ВМ), включая операционную систему и файлы приложений. Описывает диск ресурс VirtualDisk, а его спецификация состоит из двух блоков:
persistentVolumeClaim— параметры хранения, то есть StorageClass и размер;dataSource— источник данных, которым может быть образ, другой диск или снимок.
Без блока dataSource создаётся пустой диск, и тогда в persistentVolumeClaim нужно указать хотя бы размер. Если источник задан, блок persistentVolumeClaim можно опустить, тогда размер Deckhouse Platform (DP) возьмёт из источника, а класс хранения подберёт по нему же. Когда подобрать класс не удаётся, DP использует StorageClass по умолчанию на уровне кластера либо класс, заданный для дисков в настройках модуля.
Ход создания диска показывает колонка PHASE в выводе d8 k get vd, её значения описаны в поле .status.phase. Если диск надолго остаётся не готов, причину подскажет блок .status.conditions.
Пока диск не перешёл в фазу Ready, менять можно любые поля блока .spec, и после изменения создание начнётся заново. У готового диска остаются изменяемыми только размер и класс хранения в параметрах .spec.persistentVolumeClaim.size и .spec.persistentVolumeClaim.storageClassName.
Создать диск из ISO-образа нельзя.
Влияние хранилища на диск
Поведение диска зависит от того, какое хранилище стоит за выбранным StorageClass. Различия проявляются в двух свойствах.
Тип тома определяет формат, в котором DP создаёт диск. На томах файловой системы (FileSystem, например NFS) диск создаётся в формате qcow2, на блочных устройствах (Block, например iSCSI или Ceph RBD) данные пишутся напрямую. Некоторые хранилища поддерживают оба типа.
Режим привязки тома определяет момент создания диска:
-
Immediate— диск создаётся сразу, независимо от виртуальных машин, и подключить его можно к машине на любом узле кластера.
-
WaitForFirstConsumer— диск создаётся только после того, как его подключат к виртуальной машине, и размещается на узле, где эта машина запускается.
Остальные параметры, включая формат диска, DP определяет сам по возможностям выбранного StorageClass.
Чтобы посмотреть доступные хранилища, выполните команду:
d8 k get storageclass
Пример вывода:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rv-thin-r1 (default) replicated.csi.storage.deckhouse.io Delete Immediate true 48d
rv-thin-r2 replicated.csi.storage.deckhouse.io Delete Immediate true 48d
nfs-4-1-wffc nfs.csi.k8s.io Delete WaitForFirstConsumer true 30d
В веб-интерфейсе тот же список доступен на вкладке «Система» в разделе «Хранилище» → «Классы хранилищ».
Создание пустого диска
Пустой диск нужен, чтобы установить на него операционную систему или хранить данные отдельно от системного диска.
- В командной строке
- В веб-интерфейсе
-
Создайте ресурс VirtualDisk, указав размер и класс хранения:
d8 k apply -f - <<EOF apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualDisk metadata: name: blank-disk spec: # Настройки параметров хранения диска. persistentVolumeClaim: # Подставьте название своего StorageClass. storageClassName: rv-thin-r2 size: 100Mi EOF -
Проверьте, что диск создан:
d8 k get vd blank-diskПример вывода:
NAME PHASE CAPACITY VIRTUALMACHINE AGE blank-disk Ready 100Mi 1m2s
Шаг можно пропустить и создать диск сразу при создании ВМ.
- Перейдите на вкладку «Проекты» и выберите нужный проект.
- Перейдите в раздел «Виртуализация» → «Диски».
- Нажмите кнопку «Создать».
- В открывшейся форме в поле «Имя диска» введите
blank-disk. - В поле «Размер» задайте размер с единицами измерения, например
100Mi. - В поле «Класс хранения» выберите StorageClass или оставьте вариант по умолчанию.
- Нажмите кнопку «Создать».
- Проверьте статус диска на его странице.
Создание диска из образа
Диск можно заполнить данными из образа, созданного ранее, будь то проектный VirtualImage или кластерный ClusterVirtualImage.
Размер диска указывать необязательно. Если вы его не задали, DP создаст диск ровно по распакованному размеру образа, а если задали, размер должен быть не меньше распакованного.
- В командной строке
- В веб-интерфейсе
-
Посмотрите распакованный размер образа в колонке
UNPACKEDSIZE:d8 k get vi ubuntu-24-04 -o wideПример вывода:
NAME PHASE CDROM PROGRESS STOREDSIZE UNPACKEDSIZE REGISTRY URL TARGETPVC AGE ubuntu-24-04 Ready false 100% 285.9Mi 2.5Gi dvcr.d8-virtualization.svc/vi/default/ubuntu-24-04:eac95605-7e0b-4a32-bb50-cc7284fd89d0 122m -
Создайте диск, задав размер больше распакованного:
d8 k apply -f - <<EOF apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualDisk metadata: name: linux-vm-root spec: # Настройки параметров хранения диска. persistentVolumeClaim: # Размер больше, чем распакованный размер образа. size: 10Gi # Подставьте название своего StorageClass. storageClassName: rv-thin-r2 # Источник, из которого создаётся диск. dataSource: type: ObjectRef objectRef: kind: VirtualImage name: ubuntu-24-04 EOF -
Создайте второй диск, не указывая размер:
d8 k apply -f - <<EOF apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualDisk metadata: name: linux-vm-root-2 spec: # Настройки параметров хранения диска. persistentVolumeClaim: # Подставьте название своего StorageClass. storageClassName: rv-thin-r2 # Источник, из которого создаётся диск. dataSource: type: ObjectRef objectRef: kind: VirtualImage name: ubuntu-24-04 EOF -
Сравните размеры созданных дисков:
d8 k get vdПример вывода:
NAME PHASE CAPACITY VIRTUALMACHINE AGE linux-vm-root Ready 10Gi 7m52s linux-vm-root-2 Ready 2590Mi 7m15sПервый диск получил заданные 10 ГиБ, второй — распакованный размер образа.
Шаг можно пропустить и создать диск сразу при создании ВМ.
- Перейдите на вкладку «Проекты» и выберите нужный проект.
- Перейдите в раздел «Виртуализация» → «Диски».
- Нажмите кнопку «Создать».
- В открывшейся форме в поле «Имя диска» введите
linux-vm-root. - В поле «Источник» из выпадающего списка выберите нужный образ.
- При необходимости в поле «Размер» укажите больший размер или оставьте значение по умолчанию.
- В поле «Класс хранения» выберите StorageClass или оставьте вариант по умолчанию.
- Нажмите кнопку «Создать».
- Проверьте статус диска на его странице.
Загрузка диска из командной строки
Если файл образа лежит на вашем компьютере, загрузите его сразу в диск. DP создаёт для этого временную точку приёма данных и ждёт загрузки.
- В командной строке
- В веб-интерфейсе
-
Создайте ресурс VirtualDisk с источником
Upload:d8 k apply -f - <<EOF apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualDisk metadata: name: uploaded-disk spec: dataSource: type: Upload EOFРесурс перейдёт в фазу
WaitForUserUploadи будет готов принять файл. Начните загрузку в течение 10 минут, иначе ресурс перейдёт в фазуFailedи его придётся создать заново. -
Получите адреса, по которым принимается файл:
d8 k get vd uploaded-disk -o jsonpath="{.status.imageUploadURLs}" | jqПример вывода:
{ "external": "https://virtualization.example.com/upload/<SECRET_URL>", "inCluster": "http://10.222.165.239/upload" }Адрес
inClusterиспользуйте, если загружаете файл с одного из узлов кластера, аexternal— во всех остальных случаях. -
Загрузите файл по выбранному адресу:
curl https://virtualization.example.com/upload/<SECRET_URL> --progress-bar -T <IMAGE_FILE> | catЗдесь
<SECRET_URL>— адрес из предыдущего шага, а<IMAGE_FILE>— путь к файлу образа на вашем компьютере. -
Убедитесь, что диск перешёл в фазу
Ready:d8 k get vd uploaded-diskПример вывода:
NAME PHASE CAPACITY VIRTUALMACHINE AGE uploaded-disk Ready 3Gi 7d23h
- Перейдите на вкладку «Проекты» и выберите нужный проект.
- Перейдите в раздел «Виртуализация» → «Диски».
- Нажмите кнопку «Создать».
- В открывшейся форме в поле «Имя диска» введите имя диска.
- В блоке «Диск» в поле «Источник данных» выберите «Загрузить».
- Перетащите файл в выделенную область или нажмите на неё и выберите файл на компьютере.
- В поле «Размер» укажите размер диска, а в поле «Класс хранения» — StorageClass.
- Нажмите кнопку «Создать».
Если у выбранного класса хранения режим привязки тома
WaitForFirstConsumer, вариант «Загрузить» недоступен. Без потребителя диск не создаётся, и загружать файл некуда, поэтому выберите класс хранения с режимомImmediateлибо загрузите данные как образ.По этой же причине пустой диск, созданный заранее с таким классом хранения, остаётся в статусе «ОЖИДАНИЕ ВМ» и не предлагается в окне «Диски / Образы» при подключении к виртуальной машине, ведь выбрать можно только готовый диск. Создавайте такие диски прямо из формы виртуальной машины вариантами «Пустой» или «Создать из».
Свойства диска удобно смотреть в веб-интерфейсе, в разделе «Виртуализация» → «Диски»:
- список показывает имя диска, статус, размер, класс хранения в колонке «Класс», использующую диск виртуальную машину в колонке «Используется» и возраст ресурса;
- на странице диска вкладка «Конфигурация» показывает источник данных, размер, класс хранения и список ВМ в строке «Используется в»;
- вкладка «Диагностика» показывает имя PVC, его фазу, размер, класс хранения, имя PV и возраст, а также длительность этапов создания диска в блоке «Сводка диагностики».