VirtualDisk
Scope: Namespaced
Version: v1alpha2
Ресурс VirtualDisk описывает желаемую конфигурацию диска виртуальной машины. VirtualDisk можно смонтировать в виртуальной машине статически, указав его в списке дисков .spec.blockDeviceRefs
, или «на лету» – с помощью ресурса VirtualMachineBlockDeviceAttachments.
После создания VirtualDisk можно изменить только размер диска с помощью поля .spec.persistentVolumeClaim.size
. Все остальные поля изменить нельзя.
- apiVersion
APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- kind
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- metadata
- spec
Обязательный параметр
- spec.dataSource
- spec.dataSource.containerImage
Использование образа, который хранится во внешнем реестре контейнеров. Поддерживаются только реестры контейнеров с включённым протоколом TLS. Чтобы предоставить собственную цепочку центров сертификации, используйте поле
caBundle
.- spec.dataSource.containerImage.caBundle
Цепочка сертификатов в формате Base64 для проверки подключения к реестру контейнеров.
Пример:
caBundle: YWFhCg==
- spec.dataSource.containerImage.image
Обязательный параметр
Путь к образу в реестре контейнеров.
Шаблон:
^(?P<name>(?:(?P<domain>(?:(?:localhost|[\w-]+(?:\.[\w-]+)+)(?::\d+)?)|[\w]+:\d+)/)?(?P<image>[a-z0-9_.-]+(?:/[a-z0-9_.-]+)*))(?::(?P<tag>[\w][\w.-]{0,127}))?(?:@(?P<digest>[A-Za-z][A-Za-z0-9]*(?:[+.-_][A-Za-z][A-Za-z0-9]*)*:[0-9a-fA-F]{32,}))?$
Пример:
image: registry.example.com/images/slackware:15
- spec.dataSource.containerImage.imagePullSecret
- spec.dataSource.containerImage.imagePullSecret.name
Имя секрета, содержащего учётные данные для подключения к реестру контейнеров.
- spec.dataSource.http
Создание диска из файла, размещённого на указанном URL-адресе. Поддерживаемые схемы:
- HTTP;
- HTTPS.
Для схемы HTTPS есть возможность пропустить проверку TLS.
- spec.dataSource.http.caBundle
Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается файл.
Пример:
caBundle: YWFhCg==
- spec.dataSource.http.checksum
Контрольная сумма файла для проверки целостности и отсутствия изменений в загруженных данных. Файл должен соответствовать всем указанным контрольным суммам.
- spec.dataSource.http.checksum.md5
Шаблон:
^[0-9a-fA-F]{32}$
Длина:
32..32
Пример:
md5: f3b59bed9f91e32fac1210184fcff6f5
- spec.dataSource.http.checksum.sha256
Шаблон:
^[0-9a-fA-F]{64}$
Длина:
64..64
Пример:
sha256: 78be890d71dde316c412da2ce8332ba47b9ce7a29d573801d2777e01aa20b9b5
- spec.dataSource.http.url
Обязательный параметр
URL-адрес, указывающий на файл для создания образа. Допустимые форматы файла:
- qcow2;
- vmdk;
- vdi;
- iso;
- raw.
Файл может быть сжат в архив в одном из следующих форматов:
- gz;
- xz.
Шаблон:
^http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+$
Пример:
url: https://mirror.example.com/images/slackware-15.qcow.gz
- spec.dataSource.objectRef
Использование существующего ресурса VirtualImage, ClusterVirtualImage или VirtualDiskSnapshot для создания диска.
- spec.dataSource.objectRef.kind
Обязательный параметр
Ссылка на существующий ресурс VirtualImage, ClusterVirtualImage или VirtualDiskSnapshot.
Допустимые значения:
ClusterVirtualImage
,VirtualImage
,VirtualDiskSnapshot
- spec.dataSource.objectRef.name
Обязательный параметр
Имя существующего ресурса VirtualImage, ClusterVirtualImage или VirtualDiskSnapshot.
- spec.dataSource.type
Доступные типы источников для создания диска:
HTTP
— из файла, опубликованного на HTTP/HTTPS-сервере;ContainerImage
— из образа в реестре контейнеров;ObjectRef
— из существующего ресурса;Upload
— загрузить образ диска вручную.
Допустимые значения:
HTTP
,ContainerImage
,ObjectRef
,Upload
- spec.persistentVolumeClaim
Настройки для создания PersistentVolumeClaim (PVC) для хранения диска.
- spec.persistentVolumeClaim.size
Желаемый размер PVC для хранения диска. Если диск создается из образа, размер PVC должен быть не меньше размера исходного образа в распакованном состоянии.
Данный параметр можно опустить, если заполнен блок
.spec.dataSource
. В этом случае контроллер определит размер диска автоматически, на основе размера распакованного образа из источника указанного в.spec.dataSource
.Шаблон:
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- spec.persistentVolumeClaim.storageClassName
Имя StorageClass, необходимого для PVC. Подробнее об использовании StorageClass для PVC: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.
При создании дисков пользователь может явно указать необходимый StorageClass. Если этого не сделать, будет использован StorageClass, доступный по умолчанию.
Особенности диска и поведение виртуальной машины зависят от выбранного StorageClass.
Параметр
VolumeBindingMode
в StorageClass влияет на процесс создания дисков. Допустимые значения:Immediate
- диск будет создан и доступен для использования сразу после создания;WaitForFirstConsumer
- диск будет создан при первом использовании на узле, где будет запущена виртуальная машина.
StorageClass поддерживает различные настройки хранения:
- создание блочного устройства (
Block
) или файловой системы (FileSystem
); - множественный доступ (
ReadWriteMany
) или единичный доступ (ReadWriteOnce
).ReadWriteMany
-диски поддерживают множественный доступ, что позволяет выполнять «живую» миграцию виртуальных машин. В отличие от них,ReadWriteOnce
-диски, ограниченные доступом только с одного узла, не могут обеспечить такую возможность.
Для известных типов хранилищ Deckhouse самостоятельно определит наиболее эффективные настройки при создании дисков (в порядке убывания приоритетов):
Block
+ReadWriteMany
;FileSystem
+ReadWriteMany
;Block
+ReadWriteOnce
;FileSystem
+ReadWriteOnce
.