diff --git a/README.md b/README.md index 26559a749..86816f56b 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ It offers the following features: - A simple and intuitive interface for declarative creation and management of virtual machines and their resources. - The ability to run legacy applications that for some reason cannot or are difficult to run in a container. +- Ability to run applications that require non-Linux operating systems. - Ability to run virtual machines and containerized applications in the same environment. - Integration with the existing Deckhouse ecosystem to leverage its capabilities for virtual machines. @@ -20,9 +21,22 @@ It offers the following features: The following conditions are required to run the module: - A processor with x86_64 architecture and support for Intel-VT or AMD-V instructions. +- Cluster resource requirements and configuration specifics are available for reading on [this](https://deckhouse.io/guides/production.html) page. +- Any [compatible](https://deckhouse.io/documentation/v1/supported_versions.html#linux) Linux-based OS is supported for installation. - The Linux kernel on the cluster nodes must be version 5.7 or newer. -- The [CNI Cilium](https://deckhouse.ru/documentation/v1/modules/021-cni-cilium/) module to provide network connectivity for virtual machines. -- Modules SDS-DRBD or [Ceph](https://deckhouse.ru/documentation/v1/modules/031-ceph-csi/) for storing virtual machine data. It is also possible to use other storage options that support the creation of block devices with `RWX` (`ReadWriteMany`) access mode. +- The [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) module to provide network connectivity for virtual machines. +- Modules [SDS-DRBD](https://deckhouse.io/modules/sds-drbd/stable/) or [CEPH-CSI](/documentation/v1/modules/031-ceph-csi/) for storing virtual machine data. It is also possible to use other storage options that support the creation of block devices with `RWX` (`ReadWriteMany`) access mode. + +The command line utility [d8](https://github.com/deckhouse/deckhouse-cli) is used to create cluster resources and connect to virtual machines. For users of the EE-version the ability to manage resources via UI is available. + +## What do I need to enable the module? + +Procedure for enabling the module + +1. Configure the deckhouse cluster +2. Enable the [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) module +3. Install and configure SDS-DRBD/CEPH/etc storage +4. Enable the virtualization module ## Architecture @@ -30,14 +44,14 @@ The module includes the following components: - The module core, based on the KubeVirt project and uses QEMU/KVM + libvirtd to run virtual machines. - Deckhouse Virtualization Container Registry (DVCR) - repository for storing and caching virtual machine images. -- Virtualization-controller - API for creating and managing virtual machine resources. +- Virtualization-API - controller that implements a user API for creating and managing virtual machine resources. The API provides capabilities for creating and managing the following resources: -- Images -- Disks +- Virtual Images +- Virtual Disks - Virtual machines -- Operations +- Virtual Machine Operations ## How to enable module @@ -57,8 +71,8 @@ spec: size: 50G # size of DVCR storage type: PersistentVolumeClaim virtualMachineCIDRs: - - 10.66.10.0/24 - - 10.66.20.0/24 - - 10.66.30.0/24 + - 10.66.10.0/24 + - 10.66.20.0/24 + - 10.66.30.0/24 version: 1 ``` diff --git a/api/core/v1alpha2/virtual_disk.go b/api/core/v1alpha2/virtual_disk.go index 9431acecb..70ce60d27 100644 --- a/api/core/v1alpha2/virtual_disk.go +++ b/api/core/v1alpha2/virtual_disk.go @@ -64,11 +64,11 @@ type VirtualDiskDownloadSpeed struct { } type DiskTarget struct { - PersistentVolumeClaim string `json:"persistentVolumeClaim"` + PersistentVolumeClaim string `json:"persistentVolumeClaimName"` } type VirtualDiskPersistentVolumeClaim struct { - StorageClass *string `json:"storageClass,omitempty"` + StorageClass *string `json:"storageClassName,omitempty"` Size *resource.Quantity `json:"size,omitempty"` } diff --git a/api/core/v1alpha2/virtual_machine.go b/api/core/v1alpha2/virtual_machine.go index 106966f76..f5a65ff94 100644 --- a/api/core/v1alpha2/virtual_machine.go +++ b/api/core/v1alpha2/virtual_machine.go @@ -29,7 +29,7 @@ type VirtualMachineSpec struct { // VirtualMachineIPAddressClaim specifies a name for the associated // `VirtualMachineIPAddressClaim` resource. Defaults to `{vm name}`. - VirtualMachineIPAddressClaim string `json:"virtualMachineIPAddressClaim,omitempty"` + VirtualMachineIPAddressClaim string `json:"virtualMachineIPAddressClaimName,omitempty"` // TopologySpreadConstraints specifies how to spread matching pods among the given topology. TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"` @@ -91,7 +91,7 @@ const ( ) type CPUSpec struct { - VirtualMachineCPUModel string `json:"virtualMachineCPUModel"` + VirtualMachineCPUModel string `json:"virtualMachineCPUModelName"` Cores int `json:"cores"` CoreFraction string `json:"coreFraction"` } @@ -143,8 +143,8 @@ const ( type VirtualMachineStatus struct { Phase MachinePhase `json:"phase"` - Node string `json:"node"` - VirtualMachineIPAddressClaim string `json:"virtualMachineIPAddressClaim"` + Node string `json:"nodeName"` + VirtualMachineIPAddressClaim string `json:"virtualMachineIPAddressClaimName"` IPAddress string `json:"ipAddress"` BlockDeviceRefs []BlockDeviceStatusRef `json:"blockDeviceRefs"` GuestOSInfo virtv1.VirtualMachineInstanceGuestOSInfo `json:"guestOSInfo"` diff --git a/api/core/v1alpha2/virtual_machine_block_disk_attachment.go b/api/core/v1alpha2/virtual_machine_block_disk_attachment.go index 9adc6c861..d72d54607 100644 --- a/api/core/v1alpha2/virtual_machine_block_disk_attachment.go +++ b/api/core/v1alpha2/virtual_machine_block_disk_attachment.go @@ -29,7 +29,7 @@ type VirtualMachineBlockDeviceAttachmentList struct { } type VirtualMachineBlockDeviceAttachmentSpec struct { - VirtualMachine string `json:"virtualMachine"` + VirtualMachine string `json:"virtualMachineName"` BlockDeviceRef VMBDAObjectRef `json:"blockDeviceRef"` } diff --git a/api/core/v1alpha2/virtual_machine_ip_address_claim.go b/api/core/v1alpha2/virtual_machine_ip_address_claim.go index be9a31f80..de15f876e 100644 --- a/api/core/v1alpha2/virtual_machine_ip_address_claim.go +++ b/api/core/v1alpha2/virtual_machine_ip_address_claim.go @@ -26,7 +26,7 @@ type VirtualMachineIPAddressClaimList struct { // VirtualMachineIPAddressClaimSpec is the desired state of `VirtualMachineIPAddressClaim`. type VirtualMachineIPAddressClaimSpec struct { // The issued `VirtualMachineIPAddressLease`, managed automatically. - VirtualMachineIPAddressLease string `json:"virtualMachineIPAddressLease"` + VirtualMachineIPAddressLease string `json:"virtualMachineIPAddressLeaseName"` // The requested IP address. If omitted the next available IP address will be assigned. Address string `json:"address"` // Determines the behavior of VirtualMachineIPAddressLease upon VirtualMachineIPAddressClaim deletion. @@ -36,11 +36,11 @@ type VirtualMachineIPAddressClaimSpec struct { // VirtualMachineIPAddressClaimStatus is the observed state of `VirtualMachineIPAddressClaim`. type VirtualMachineIPAddressClaimStatus struct { // Represents the virtual machine that currently uses this IP address. - VirtualMachine string `json:"virtualMachine,omitempty"` + VirtualMachine string `json:"virtualMachineName,omitempty"` // Assigned IP address. Address string `json:"address,omitempty"` // The issued `VirtualMachineIPAddressLease`, managed automatically. - Lease string `json:"virtualMachineIPAddressLease,omitempty"` + Lease string `json:"virtualMachineIPAddressLeaseName,omitempty"` // Represents the current state of IP address claim. Phase VirtualMachineIPAddressClaimPhase `json:"phase,omitempty"` // Detailed description of the error. diff --git a/api/core/v1alpha2/virtual_machine_operation.go b/api/core/v1alpha2/virtual_machine_operation.go index 677133dae..248ba1689 100644 --- a/api/core/v1alpha2/virtual_machine_operation.go +++ b/api/core/v1alpha2/virtual_machine_operation.go @@ -20,7 +20,7 @@ type VirtualMachineOperation struct { type VirtualMachineOperationSpec struct { Type VMOPOperation `json:"type"` - VirtualMachine string `json:"virtualMachine"` + VirtualMachine string `json:"virtualMachineName"` Force bool `json:"force,omitempty"` } diff --git a/api/pkg/apiserver/api/generated/openapi/zz_generated.openapi.go b/api/pkg/apiserver/api/generated/openapi/zz_generated.openapi.go index 225416945..0dd7fa98b 100644 --- a/api/pkg/apiserver/api/generated/openapi/zz_generated.openapi.go +++ b/api/pkg/apiserver/api/generated/openapi/zz_generated.openapi.go @@ -707,7 +707,7 @@ func schema_virtualization_api_core_v1alpha2_CPUSpec(ref common.ReferenceCallbac SchemaProps: spec.SchemaProps{ Type: []string{"object"}, Properties: map[string]spec.Schema{ - "virtualMachineCPUModel": { + "virtualMachineCPUModelName": { SchemaProps: spec.SchemaProps{ Default: "", Type: []string{"string"}, @@ -729,7 +729,7 @@ func schema_virtualization_api_core_v1alpha2_CPUSpec(ref common.ReferenceCallbac }, }, }, - Required: []string{"virtualMachineCPUModel", "cores", "coreFraction"}, + Required: []string{"virtualMachineCPUModelName", "cores", "coreFraction"}, }, }, } @@ -1103,7 +1103,7 @@ func schema_virtualization_api_core_v1alpha2_DiskTarget(ref common.ReferenceCall SchemaProps: spec.SchemaProps{ Type: []string{"object"}, Properties: map[string]spec.Schema{ - "persistentVolumeClaim": { + "persistentVolumeClaimName": { SchemaProps: spec.SchemaProps{ Default: "", Type: []string{"string"}, @@ -1111,7 +1111,7 @@ func schema_virtualization_api_core_v1alpha2_DiskTarget(ref common.ReferenceCall }, }, }, - Required: []string{"persistentVolumeClaim"}, + Required: []string{"persistentVolumeClaimName"}, }, }, } @@ -1719,7 +1719,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualDiskPersistentVolumeClaim(re SchemaProps: spec.SchemaProps{ Type: []string{"object"}, Properties: map[string]spec.Schema{ - "storageClass": { + "storageClassName": { SchemaProps: spec.SchemaProps{ Type: []string{"string"}, Format: "", @@ -2432,7 +2432,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineBlockDeviceAttachment SchemaProps: spec.SchemaProps{ Type: []string{"object"}, Properties: map[string]spec.Schema{ - "virtualMachine": { + "virtualMachineName": { SchemaProps: spec.SchemaProps{ Default: "", Type: []string{"string"}, @@ -2446,7 +2446,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineBlockDeviceAttachment }, }, }, - Required: []string{"virtualMachine", "blockDeviceRef"}, + Required: []string{"virtualMachineName", "blockDeviceRef"}, }, }, Dependencies: []string{ @@ -2814,7 +2814,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineIPAddressClaimSpec(re Description: "VirtualMachineIPAddressClaimSpec is the desired state of `VirtualMachineIPAddressClaim`.", Type: []string{"object"}, Properties: map[string]spec.Schema{ - "virtualMachineIPAddressLease": { + "virtualMachineIPAddressLeaseName": { SchemaProps: spec.SchemaProps{ Description: "The issued `VirtualMachineIPAddressLease`, managed automatically.", Default: "", @@ -2838,7 +2838,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineIPAddressClaimSpec(re }, }, }, - Required: []string{"virtualMachineIPAddressLease", "address"}, + Required: []string{"virtualMachineIPAddressLeaseName", "address"}, }, }, } @@ -2851,7 +2851,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineIPAddressClaimStatus( Description: "VirtualMachineIPAddressClaimStatus is the observed state of `VirtualMachineIPAddressClaim`.", Type: []string{"object"}, Properties: map[string]spec.Schema{ - "virtualMachine": { + "virtualMachineName": { SchemaProps: spec.SchemaProps{ Description: "Represents the virtual machine that currently uses this IP address.", Type: []string{"string"}, @@ -2865,7 +2865,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineIPAddressClaimStatus( Format: "", }, }, - "virtualMachineIPAddressLease": { + "virtualMachineIPAddressLeaseName": { SchemaProps: spec.SchemaProps{ Description: "The issued `VirtualMachineIPAddressLease`, managed automatically.", Type: []string{"string"}, @@ -3224,7 +3224,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineOperationSpec(ref com Format: "", }, }, - "virtualMachine": { + "virtualMachineName": { SchemaProps: spec.SchemaProps{ Default: "", Type: []string{"string"}, @@ -3238,7 +3238,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineOperationSpec(ref com }, }, }, - Required: []string{"type", "virtualMachine"}, + Required: []string{"type", "virtualMachineName"}, }, }, } @@ -3290,7 +3290,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineSpec(ref common.Refer Format: "", }, }, - "virtualMachineIPAddressClaim": { + "virtualMachineIPAddressClaimName": { SchemaProps: spec.SchemaProps{ Description: "VirtualMachineIPAddressClaim specifies a name for the associated `VirtualMachineIPAddressClaim` resource. Defaults to `{vm name}`.", Type: []string{"string"}, @@ -3440,14 +3440,14 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineStatus(ref common.Ref Format: "", }, }, - "node": { + "nodeName": { SchemaProps: spec.SchemaProps{ Default: "", Type: []string{"string"}, Format: "", }, }, - "virtualMachineIPAddressClaim": { + "virtualMachineIPAddressClaimName": { SchemaProps: spec.SchemaProps{ Default: "", Type: []string{"string"}, @@ -3501,7 +3501,7 @@ func schema_virtualization_api_core_v1alpha2_VirtualMachineStatus(ref common.Ref }, }, }, - Required: []string{"phase", "node", "virtualMachineIPAddressClaim", "ipAddress", "blockDeviceRefs", "guestOSInfo", "message"}, + Required: []string{"phase", "nodeName", "virtualMachineIPAddressClaimName", "ipAddress", "blockDeviceRefs", "guestOSInfo", "message"}, }, }, Dependencies: []string{ diff --git a/crds/clustervirtualimage.yaml b/crds/clustervirtualimage.yaml index 028601ae7..9db238ae2 100644 --- a/crds/clustervirtualimage.yaml +++ b/crds/clustervirtualimage.yaml @@ -41,6 +41,8 @@ spec: properties: dataSource: type: object + description: | + An origin of the image. required: - type properties: @@ -151,7 +153,8 @@ spec: YWFhCg== objectRef: type: object - description: Reference to existing `VirtualImage` or `ClusterVirtualImage`. + description: | + Use an existing `VirtualImage` or `ClusterVirtualImage` to create an image. required: ["kind", "name"] properties: kind: @@ -293,10 +296,10 @@ spec: type: string description: | Detailed description of the error. human-readable - usedInVMs: + attachedToVirtualMachines: type: array description: | - A list of virtual s and namespaces that use the image + A list of virtual machines and namespaces that use the image example: [ { name: "VM100", namespace: "customer1" }, diff --git a/crds/doc-ru-clustervirtualimage.yaml b/crds/doc-ru-clustervirtualimage.yaml index fae1c7882..c678a9c4e 100644 --- a/crds/doc-ru-clustervirtualimage.yaml +++ b/crds/doc-ru-clustervirtualimage.yaml @@ -16,15 +16,26 @@ spec: description: | Тип источника, из которого будет создан образ. properties: - type: + containerImage: description: | - Доступные типы источников для создания образа: - - * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере. - * `ContainerImage` — создать образ из образа в container registry. - * `VirtualImage` — создать новый образ из существующего `VirtualImage`. - * `ClusterVirtualImage` — создать новый образ из существующего `ClusterVirtualImage`. - * `Upload` — загрузить образ вручную, через веб-интерфейс. + Использование образа, хранящегося во внешнем реестре контейнеров. + Поддерживаются только реестры контейнеров с включенным TLS. + При необходимости используйте поле caBundle, чтобы предоставить собственную цепочку центров сертификации. + properties: + caBundle: + description: | + Цепочка сертификатов в формате Base64 для проверки подключения к container registry. + image: + description: | + Путь к образу в container registry. + imagePullSecret: + properties: + name: + description: | + Имя Secret'а, содержащего учетные данные для подключения к container registry. + namespace: + description: | + Пространство имен, в котором находится imagePullSecret. http: description: | Создание образа из файла, опубликованного по URL. Поддерживаемые схемы: @@ -34,73 +45,62 @@ spec: Для схемы HTTPS есть возможность отключить проверку TLS. properties: - url: - description: | - Для образа расположенного по URL, поддерживаются следующие типы образов: - * qcow2; - * vmdk; - * vdi; - * iso; - * raw. - - Для всех представленных типов образов поддерживается сжатие образов в следующих форматах: - * gz; - * xz. caBundle: description: | Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ. - insecureSkipVerify: - description: | - Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах). checksum: description: | Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам. properties: md5: description: "" - example: f3b59bed9f91e32fac1210184fcff6f5 sha256: description: "" - example: 78be890d71dde316c412da2ce8332ba47b9ce7a29d573801d2777e01aa20b9b5 - containerImage: - description: | - Использование образа, хранящегося во внешнем реестре контейнеров. - Поддерживаются только реестры контейнеров с включенным TLS. - При необходимости используйте поле caBundle, чтобы предоставить собственную цепочку центров сертификации. - properties: - image: + insecureSkipVerify: description: | - Путь к образу в container registry. - imagePullSecret: - properties: - name: - description: | - Имя Secret'а, содержащего учетные данные для подключения к container registry. - namespace: - description: | - Пространство имен, в котором находится imagePullSecret. - caBundle: + Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах). + url: description: | - Цепочка сертификатов в формате Base64 для проверки подключения к container registry. - virtualImage: + Для образа расположенного по URL, поддерживаются следующие типы образов: + * qcow2; + * vmdk; + * vdi; + * iso; + * raw. + + Для всех представленных типов образов поддерживается сжатие образов в следующих форматах: + * gz; + * xz. + objectRef: description: | - Использование существующего `VirtualImage`. + Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`. properties: + kind: + description: | + Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`. name: description: | - Имя существующего `VirtualImage`. + Имя существующего `VirtualImage` или `ClusterVirtualImage`. namespace: description: | - Пространство имен, где `VirtualImage` расположен. - clusterVirtualImage: + Имя namespace'а, гда ресположен `VirtualImage`. + type: description: | - Использовать существующий `ClusterVirtualImage`. - properties: - name: - description: | - Имя существующего `ClusterVirtualImage`. + Доступные типы источников для создания образа: + + * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере. + * `ContainerImage` — создать образ из образа в container registry. + * `VirtualImage` — создать новый образ из существующего `VirtualImage`. + * `ClusterVirtualImage` — создать новый образ из существующего `ClusterVirtualImage`. + * `Upload` — загрузить образ вручную, через веб-интерфейс. status: properties: + attachedToVirtualMachines: + description: | + Список виртуальных машин, использующих этот образ + cdrom: + description: | + Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д. downloadSpeed: description: | Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`. @@ -108,18 +108,38 @@ spec: avg: description: | Средняя скорость загрузки. - current: - description: | - Текущая скорость загрузки. avgBytes: description: | Средняя скорость загрузки в байтах в секунду. + current: + description: | + Текущая скорость загрузки. currentBytes: description: | Текущая скорость загрузки в байтах в секунду. + failureMessage: + description: | + Подробное описание ошибки. + failureReason: + description: | + Краткое описание причины ошибки. format: description: | Обнаруженный формат образа. + phase: + description: | + Текущее состояние ресурса `ClusterVirtualImage`: + + * Pending - Ресурс был создан и находится в очереди ожидания. + * Provisioning - Идет процесс создания ресурса (копирование/загрузка/создание образа). + * WaitForUserUpload - Ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`. + * Ready - Ресурс создан и готов к использованию. + * Failed - При создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`. + * NotReady - Невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован. + * ImageLost - Дочернее образ ресурса отсутствует. Ресурс не может быть использован. + progress: + description: | + Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`. size: description: | Обнаруженные размеры образа. @@ -135,38 +155,11 @@ spec: unpackedBytes: description: | Размер распакованного образа в байтах. - cdrom: - description: | - Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д. target: properties: registryURL: description: | Образ, созданный в DVCR. - phase: - description: | - Текущее состояние ресурса `ClusterVirtualImage`: - - * Pending - Ресурс был создан и находится в очереди ожидания. - * Provisioning - Идет процесс создания ресурса (копирование/загрузка/создание образа). - * WaitForUserUpload - Ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`. - * Ready - Ресурс создан и готов к использованию. - * Failed - При создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`. - * NotReady - Невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован. - * ImageLost - Дочернее образ ресурса отсутствует. Ресурс не может быть использован. - progress: - description: | - Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`. uploadCommand: description: | Команда для загрузки образа для типа 'Upload'. - failureReason: - description: | - Краткое описание причины ошибки. - failureMessage: - type: string - description: | - Подробное описание ошибки. - usedInVMs: - description: | - Список виртуальных машин и из пространств имен, использующих этот образ diff --git a/crds/doc-ru-virtualdisk.yaml b/crds/doc-ru-virtualdisk.yaml index 27aa9e700..7f6e66f87 100644 --- a/crds/doc-ru-virtualdisk.yaml +++ b/crds/doc-ru-virtualdisk.yaml @@ -10,29 +10,25 @@ spec: properties: spec: properties: - persistentVolumeClaim: - description: | - Настройки для создания PVC для хранения диска. - properties: - size: - description: | - Желаемый размер PVC для хранения диска. Если диск создается из образа, то размер должен быть не меньше, чем исходный образ в распакованном состоянии. - storageClass: - description: | - Имя класса StorageClass, требуемого для PersistentVolumeClaim. Дополнительная информация — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1. dataSource: description: | Тип источника, из которого будет создан диск. Если источник (.spec.dataSource) отсутствует, то будет создан пустой диск. properties: - type: + containerImage: description: | - Тип источника, из которого будет создан диск: - - * `HTTP` — создать диск из файла, опубликованного на HTTP/HTTPS-сервере. - * `ContainerImage` — создать диск из образа в container registry. - * `VirtualImage` — создать диск из существующего `VirtualImage`. - * `ClusterVirtualImage` — создать диск из существующего `ClusterVirtualImage`. - * `Upload` — загрузить образ диска вручную, через веб-интерфейс. + Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов. + properties: + caBundle: + description: | + Цепочка сертификатов в формате Base64 для проверки подключения к container registry. + image: + description: | + Путь к образу в container registry. + imagePullSecret: + properties: + name: + description: | + Имя Secret'а, содержащего учетные данные для подключения к container registry. http: description: | Создать диск из файла, опубликованного по URL. Поддерживаемые схемы: @@ -42,26 +38,10 @@ spec: Для схемы HTTPS есть возможность пропустить проверку TLS. properties: - url: - description: | - URL с образом. Поддерживаются следующие типы образов: - * qcow2; - * vmdk; - * vdi; - * iso; - * raw. - - Для всех представленных типов образов поддерживается сжатие образов в следующих форматах: - * gz; - * xz. caBundle: description: | Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ. - insecureSkipVerify: - description: | - Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах). checksum: - type: object description: | Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам. properties: @@ -69,37 +49,58 @@ spec: description: "" sha256: description: "" - containerImage: - description: | - Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов. - properties: - image: + insecureSkipVerify: description: | - Путь к образу в container registry. - imagePullSecret: - properties: - name: - description: | - Имя Secret'а, содержащего учетные данные для подключения к container registry. - caBundle: + Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах). + url: description: | - Цепочка сертификатов в формате Base64 для проверки подключения к container registry. - virtualImage: + URL с образом. Поддерживаются следующие типы образов: + * qcow2; + * vmdk; + * vdi; + * iso; + * raw. + + Для всех представленных типов образов поддерживается сжатие образов в следующих форматах: + * gz; + * xz. + objectRef: description: | - Используйте существующий `VirtualImage`. + Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`. properties: - name: + kind: description: | - Имя существующего `VirtualImage`. - clusterVirtualImage: - description: | - Использовать существующий `ClusterVirtualImage`. - properties: + Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`. name: description: | - Имя существующего `ClusterVirtualImage`. + Имя существующего `VirtualImage` или `ClusterVirtualImage`. + type: + description: | + Тип источника, из которого будет создан диск: + + * `HTTP` — создать диск из файла, опубликованного на HTTP/HTTPS-сервере. + * `ContainerImage` — создать диск из образа в container registry. + * `VirtualImage` — создать диск из существующего `VirtualImage`. + * `ClusterVirtualImage` — создать диск из существующего `ClusterVirtualImage`. + * `Upload` — загрузить образ диска вручную, через веб-интерфейс. + persistentVolumeClaim: + description: | + Настройки для создания PVC для хранения диска. + properties: + size: + description: | + Желаемый размер PVC для хранения диска. Если диск создается из образа, то размер должен быть не меньше, чем исходный образ в распакованном состоянии. + storageClassName: + description: | + Имя класса StorageClass, требуемого для PersistentVolumeClaim. Дополнительная информация — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1. status: properties: + attachedToVirtualMachines: + description: | + Список виртуальных машин, использующих этот диск + capacity: + description: | + Емкость PVC в человекочитаемом формате. downloadSpeed: description: | Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`. @@ -107,25 +108,22 @@ spec: avg: description: | Средняя скорость загрузки. - current: - description: | - Текущая скорость загрузки. avgBytes: description: | Средняя скорость загрузки в байтах в секунду. + current: + description: | + Текущая скорость загрузки. currentBytes: description: | Текущая скорость загрузки в байтах в секунду. - capacity: + failureMessage: description: | - Емкость PVC в человекочитаемом формате. - target: - properties: - persistentVolumeClaim: - description: | - Имя созданного PersistentVolumeClaim для хранилища Kubernetes. + Подробное описание ошибки. + failureReason: + description: | + Краткое описание причины ошибки. phase: - type: string description: | Текущее состояние ресурса `VirtualDisk`: @@ -138,16 +136,11 @@ spec: progress: description: | Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`. + target: + properties: + persistentVolumeClaimName: + description: | + Имя созданного PersistentVolumeClaim для хранилища Kubernetes. uploadCommand: description: | Команда для загрузки образа для типа 'Upload'. - failureReason: - description: | - Краткое описание причины ошибки. - failureMessage: - type: string - description: | - Подробное описание ошибки. - usedInVMs: - description: | - Список виртуальных машин и их пространств имен, использующих этот образ diff --git a/crds/doc-ru-virtualimage.yaml b/crds/doc-ru-virtualimage.yaml index ad73ccb38..0e6af2da9 100644 --- a/crds/doc-ru-virtualimage.yaml +++ b/crds/doc-ru-virtualimage.yaml @@ -3,7 +3,6 @@ spec: - name: v1alpha2 schema: openAPIV3Schema: - type: object description: | Описывает образ диска виртуальной машины, который может использоваться в качестве источника данных для новых `VirtualDisks` или установочный образ (iso), который быть смонтирован в `VirtualMachines` напрямую. @@ -13,24 +12,25 @@ spec: properties: spec: properties: - storage: - description: | - Тип хранилища для хранения образа: - - * `ContainerRegistry` — использовать container registry (DVCR). В этом случае образы будут загружаться в контейнер, а затем в DVCR (поставляется с модулем виртуализации). dataSource: description: | Тип источника, из которого будет создан образ. properties: - type: + containerImage: description: | - Тип источника, из которого будет создан образ: - - * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере. - * `ContainerImage` — создать образ из образа в container registry. - * `VirtualImage` — создать образ из другого существующего `VirtualImage`. - * `ClusterVirtualImage` — создать образ из другого существующего `ClusterVirtualImage`. - * `Upload` — загрузить образ вручную, через веб-интерфейс. + Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов. + properties: + caBundle: + description: | + Цепочка сертификатов в формате Base64 для проверки подключения к container registry. + image: + description: | + Путь к образу в container registry. + imagePullSecret: + properties: + name: + description: | + Имя Secret'а, содержащего учетные данные для подключения к container registry. http: description: | Создать образ из файла, опубликованного по URL. Поддерживаемые схемы: @@ -40,26 +40,10 @@ spec: Для схемы HTTPS есть возможность пропустить проверку TLS. properties: - url: - description: | - URL с образом. Поддерживаются следующие типы образов: - * qcow2; - * vmdk; - * vdi; - * iso; - * raw. - - Для всех представленных типов образов поддерживается сжатие образов в следующих форматах: - * gz; - * xz. caBundle: description: | Цепочка сертификатов в формате Base64 для проверки TLS-сертификата сервера, на котором размещается образ. - insecureSkipVerify: - description: | - Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах). checksum: - type: object description: | Контрольная сумма файла для проверки правильности загрузки или отсутствия изменений. Файл должен соответствовать всем указанным контрольным суммам. properties: @@ -67,44 +51,53 @@ spec: description: "" sha256: description: "" - containerImage: - description: | - Для использования образа, хранящегося во внешнем реестре контейнеров, необходимо убедиться, что используется реестр, работающий по протоколу TLS. При необходимости предоставьте поле caBundle для передачи цепочки сертификатов. - properties: - image: + insecureSkipVerify: description: | - Путь к образу в container registry. - imagePullSecret: - properties: - name: - description: | - Имя Secret'а, содержащего учетные данные для подключения к container registry. - namespace: - description: | - Пространство имен, в котором находится imagePullSecret. - caBundle: + Отключить проверку TLS-сертификата (небезопасно и не должно использоваться в производственных средах). + url: description: | - Цепочка сертификатов в формате Base64 для проверки подключения к container registry. - virtualImage: + URL с образом. Поддерживаются следующие типы образов: + * qcow2; + * vmdk; + * vdi; + * iso; + * raw. + + Для всех представленных типов образов поддерживается сжатие образов в следующих форматах: + * gz; + * xz. + objectRef: description: | - Используйте существующий `VirtualImage`. + Для создания образа использовать существующий `VirtualImage` или `ClusterVirtualImage`. properties: - name: + kind: description: | - Имя существующего `VirtualImage`. - namespace: - description: | - Пространство имен, где `VirtualImage` расположен. - clusterVirtualImage: - description: | - Использовать существующий `ClusterVirtualImage`. - properties: + Ссылка на существующий `VirtualImage` или `ClusterVirtualImage`. name: description: | - Имя существующего `ClusterVirtualImage`. + Имя существующего `VirtualImage` или `ClusterVirtualImage`. + type: + description: | + Тип источника, из которого будет создан образ: + + * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере. + * `ContainerImage` — создать образ из образа в container registry. + * `VirtualImage` — создать образ из другого существующего `VirtualImage`. + * `ClusterVirtualImage` — создать образ из другого существующего `ClusterVirtualImage`. + * `Upload` — загрузить образ вручную, через веб-интерфейс. + storage: + description: | + Тип хранилища для хранения образа: + + * `ContainerRegistry` — использовать container registry (DVCR). В этом случае образы будут загружаться в контейнер, а затем в DVCR (поставляется с модулем виртуализации). status: - type: object properties: + attachedToVirtualMachines: + description: | + Список виртуальных машин, использующих этот образ + cdrom: + description: | + Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д. downloadSpeed: description: | Скорость загрузки образа из внешнего источника. Появляется только на этапе `Provisioning`. @@ -112,18 +105,38 @@ spec: avg: description: | Средняя скорость загрузки. - current: - description: | - Текущая скорость загрузки. avgBytes: description: | Средняя скорость загрузки в байтах в секунду. + current: + description: | + Текущая скорость загрузки. currentBytes: description: | Текущая скорость загрузки в байтах в секунду. + failureMessage: + description: | + Подробное описание ошибки. + failureReason: + description: | + Краткое описание причины ошибки. format: description: | Обнаруженный формат образа. + phase: + description: | + Текущее состояние ресурса `VirtualImage`: + + * Pending — ресурс был создан и находится в очереди ожидания. + * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа). + * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`. + * Ready — ресурс создан и готов к использованию. + * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`. + * NotReady — невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован. + * ImageLost — дочерний образ ресурса отсутствует. Ресурс не может быть использован. + progress: + description: | + Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`. size: description: | Обнаруженные размеры образа. @@ -139,42 +152,11 @@ spec: unpackedBytes: description: | Размер распакованного образа в байтах. - cdrom: - description: | - Является ли образ форматом, который должен быть смонтирован как cdrom, например iso и т. д. target: properties: registryURL: description: | Образ, созданный в DVCR. - persistentVolumeClaim: - description: | - Имя созданного PersistentVolumeClaim для хранилища Kubernetes. - phase: - description: | - Текущее состояние ресурса `VirtualImage`: - - * Pending — ресурс был создан и находится в очереди ожидания. - * Provisioning — идет процесс создания ресурса (копирование/загрузка/создание образа). - * WaitForUserUpload — ожидание загрузки образа пользователем. Путь для загрузки образа указывается в `.status.uploadCommand`. - * Ready — ресурс создан и готов к использованию. - * Failed — при создании ресурса возникла проблема, подробности можно увидеть в `.status.failureReason` и `.status.failureMessage`. - * NotReady — невозможно получить информацию о дочернем образе из-за невозможности подключения к DVCR. Ресурс не может быть использован. - * ImageLost — дочерний образ ресурса отсутствует. Ресурс не может быть использован. - - progress: - description: | - Ход копирования образа из источника в DVCR. Отображается только на этапе `Provisioning`. uploadCommand: description: | Команда для загрузки образа для типа 'Upload'. - failureReason: - description: | - Краткое описание причины ошибки. - failureMessage: - type: string - description: | - Подробное описание ошибки. - usedInVMs: - description: | - Список виртуальных машин и их пространств имен, использующих этот образ diff --git a/crds/doc-ru-virtualmachine.yaml b/crds/doc-ru-virtualmachine.yaml index 6d10bc0b7..bc7ef7237 100644 --- a/crds/doc-ru-virtualmachine.yaml +++ b/crds/doc-ru-virtualmachine.yaml @@ -4,91 +4,10 @@ spec: schema: openAPIV3Schema: description: | - Данный ресурс позволяет управлять конфигурацией виртуальной машины. + Конфигурация виртуальной машины (ВМ). properties: spec: properties: - provisioning: - description: | - Этот блок позволяет настроить сценарий инициализации для ВМ. - properties: - type: - description: | - Поддерживаемые параметры для использования сценария инициализации: - - * UserData — позволяет указать сценарий cloud-init в секции .spec.provisioning.UserData. - * UserDataRef — позволяет использовать существующий Secret со сценарием cloud-init. - * SysprepRef — позволяет автоматизировать установку Windows. - - Дополнительная информация: https://cloudinit.readthedocs.io/en/latest/reference/examples.html - userData: - description: | - Сценарий cloud-init. - userDataRef: - description: | - Ссылка на существующий ресурс со сценарием cloud-init. - properties: - kind: - description: | - Тип ресурса. - name: - description: | - Имя ресурса со сценарием cloud-init. - sysprepRef: - description: | - Ссылка на существующий ресурс со сценарием автоматизации Windows. - properties: - kind: - description: | - Тип ресурса. - name: - description: | - Имя ресурса со сценарием автоматизации. - runPolicy: - description: | - Этот параметр определяет политику запуска ВМ: - - * `AlwaysOn` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС. - * `AlwaysOff` — после создания ВМ всегда находится в выключенном состоянии. - * `Manual` — после создания ВМ выключается, состояние ВМ (включение/выключение) контролируется через API-сервисы или средствами ОС. - * `AlwaysOnUnlessStoppedManually` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС, ВМ может быть выключена с помощью соответствующего API-сервиса. - - virtualMachineIPAddressClaim: - description: | - Имя для связанного ресурса `VirtualMahcineIPAddressClaim`. - - Если не указано, по умолчанию используется `.metadata.name`. - - topologySpreadConstraints: - description: | - [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/), как и в параметре pods `spec.topologySpreadConstraints` в Kubernetes. - - items: - properties: - labelSelector: - description: "" - properties: - matchExpressions: - description: "" - items: - properties: - key: - description: "" - operator: - description: "" - values: - items: - description: "" - description: "" - matchLabels: - description: "" - maxSkew: - description: "" - topologyKey: - description: "" - whenUnsatisfiable: - description: "" - affinity: description: | [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity), как и в параметре pods `spec.affinity` в Kubernetes. @@ -98,429 +17,516 @@ spec: * podAffinityTerm -> virtualMachineAndPodAffinityTerm. properties: nodeAffinity: + description: Описывает правила affiniy узлов для ВМ. properties: preferredDuringSchedulingIgnoredDuringExecution: + description: "" items: + description: "" properties: preference: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchFields: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" - description: "" weight: description: "" - description: "" - description: "" requiredDuringSchedulingIgnoredDuringExecution: + description: "" properties: nodeSelectorTerms: + description: "" items: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchFields: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" - description: "" - description: "" - description: "" - description: Описывает правила планирования affiniy (близости) узлов для ВМ. virtualMachineAndPodAffinity: - description: Описывает правила планирования affiniy (близости) пода и ВМ. + description: Описывает правила affiniy подов и ВМ. properties: preferredDuringSchedulingIgnoredDuringExecution: + description: "" items: + description: "" properties: virtualMachineAndPodAffinityTerm: + description: "" properties: labelSelector: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchLabels: additionalProperties: description: "" description: "" + matchLabelKeys: + description: "" + items: + description: "" + mismatchLabelKeys: description: "" + items: + description: "" namespaceSelector: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchLabels: + additionalProperties: + description: "" description: "" - description: "" namespaces: + description: "" items: description: "" - description: "" topologyKey: description: "" - description: "" weight: description: "" - description: "" - description: "" requiredDuringSchedulingIgnoredDuringExecution: + description: "" items: + description: "" properties: labelSelector: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchLabels: + additionalProperties: + description: "" description: "" + matchLabelKeys: description: "" + items: + description: "" + mismatchLabelKeys: + description: "" + items: + description: "" namespaceSelector: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchLabels: additionalProperties: description: "" description: "" - description: "" namespaces: + description: "" items: description: "" - description: "" topologyKey: description: "" - description: "" - description: "" virtualMachineAndPodAntiAffinity: - description: Описывает правила планирования anti-affiniy пода и ВМ. + description: Описывает правила anti-affiniy пода и ВМ. properties: preferredDuringSchedulingIgnoredDuringExecution: + description: "" items: + description: "" properties: virtualMachineAndPodAffinityTerm: + description: "" properties: labelSelector: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchLabels: + additionalProperties: + description: "" description: "" + matchLabelKeys: description: "" + items: + description: "" + mismatchLabelKeys: + description: "" + items: + description: "" namespaceSelector: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchLabels: + additionalProperties: + description: "" description: "" - description: "" namespaces: + description: "" items: description: "" - description: "" topologyKey: description: "" - description: "" weight: description: "" - description: "" - description: "" requiredDuringSchedulingIgnoredDuringExecution: + description: "" items: + description: "" properties: labelSelector: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchLabels: + additionalProperties: + description: "" description: "" + matchLabelKeys: + description: "" + items: + description: "" + mismatchLabelKeys: description: "" + items: + description: "" namespaceSelector: + description: "" properties: matchExpressions: + description: "" items: + description: "" properties: key: description: "" operator: description: "" values: + description: "" items: description: "" - description: "" - description: "" - description: "" matchLabels: additionalProperties: description: "" description: "" - description: "" namespaces: + description: "" items: description: "" - description: "" topologyKey: description: "" - description: "" - description: "" - - nodeSelector: - description: | - [По аналогии](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes//), как и в параметре pods `spec.nodeSelector` в Kubernetes. - - priorityClassName: - description: | - [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/), как и в параметре pods `spec.priorityClassName` в Kubernetes. - - tolerations: + blockDeviceRefs: description: | - [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/), как и в параметре pods `spec.tolerations` в Kubernetes. + Список блочных устройств, которые могут быть смонтированы в ВМ. + Порядок загрузки определяется порядком в списке. items: - description: "" + description: | + The reference to block device. properties: - effect: - description: "" - key: - description: "" - operator: - description: "" - tolerationSeconds: - description: "" - value: - description: "" + kind: + description: | + Поддерживаемые типы: - disruptions: + * `ClusterVirtualImage` — использовать `ClusterVirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM. + * `VirtualImage` — использовать `VirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM. + * `VirtualDisk` — используйте `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме для чтения и записи (ReadWrite). + name: + description: | + Имя ресурса заданного типа. + bootloader: description: | - Политика применения изменений, требующих перезагрузки ВМ. + Загрузчик для VM: - Некоторые настройки ВМ требуют перезагрузки ВМ при изменении конфигурации. Для перезагрузки необходимо одобрить изменения. Для этого используется параметр `approvalMode`. + * BIOS — использовать BIOS. + * EFI — использовать Unified Extensible Firmware (EFI/UEFI). + * EFIWithSecureBoot — использовать UEFI/EFI с поддержкой SecureBoot. + cpu: + description: | + Блок определяет настройки ЦП для виртуальной машины. + properties: + coreFraction: + description: | + Гарантированная доля времени ЦП, которая будет выделена ВМ. Указывается в процентах. + cores: + description: | + Количество ядер. + virtualMachineCPUModelName: + description: | + Имя ресурса `virtualMachineCPUModelName`, определяющего модель процессора для виртуальной машины. + disruptions: + description: | + Описании политики применения изменений, требующих перезагрузки ВМ. + Изменение некоторых параметров конфигурации ВМ требуют перезагрузки ВМ для их применения. Данная политика позволяет задать поведения, как ВМ будет реагировать на такие изменения. properties: - approvalMode: + restartApprovalMode: description: | Режим одобрения для изменений, требующих перезагрузки ВМ: - - `Manual` — чтобы утвердить изменения, необходимо сделать это вручную, скопировав идентификатор изменения из `.status.changeID` в `.spec.approvedChangeID`. - - `Автоматический` — автоматическое утверждение обновлений. - - terminationGracePeriodSeconds: - description: | - Период ожидания после подачи сигнала (SIGTERM) о прекращении работы ВМ, по истечении которого ВМ принудительно завершается. - + - `Manual` — изменения не будут применены, до тех пока пользователь самостоятельно не осуществит перезагрузку ВМ. + - `Автоматический` — ВМ будет перезагружена, сразу, после сохранения параметров, требующих перезагрузки ВМ. enableParavirtualization: description: | - Использовать шину `virtio` для подключения дисковых устройств. Установите значение false, чтобы отключить `virtio` для этой ВМ. + Использовать шину `virtio` для подключения виртуальных устройств ВМ. Установите значение false, чтобы отключить `virtio` для этой ВМ. + Внимание: Для использования режима паравиртуализации некоторые ОС требуют установки соответствующих драйверов. + memory: + description: | + Блок определяет настройки оперативной памяти для виртуальной машины. + properties: + size: + description: | + Объем оперативной памяти. + nodeSelector: + description: | + [По аналогии](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes//), как и в параметре pods `spec.nodeSelector` в Kubernetes. osType: description: | - Для выбранного типа ОС определяет набор устройств и другие параметры, необходимые для корректной работы, которые будут применяться к ВМ: + Параметр позволяет выбрать тип используемой ОС, для которой будет создана ВМ с оптимальным набором необходимых виртуальных устройств и параметров. * Windows — для ОС семейства Microsoft Windows. * Generic — для других типов ОС. - - bootloader: + priorityClassName: description: | - Определяет загрузчик для VM: - - * BIOS — использовать устаревший BIOS. - * EFI — использовать Unified Extensible Firmware (EFI/UEFI). - * EFIWithSecureBoot — использовать UEFI/EFI с поддержкой SecureBoot. - - cpu: + [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/), как и в параметре pods `spec.priorityClassName` в Kubernetes. + provisioning: description: | - Блок определяет настройки процессора для виртуальной машины. + Блок описания сценария начальной инициализации ВМ. properties: - cores: + sysprepRef: description: | - Количество ядер в виртуальной машине. Значение числа ядер должно быть больше или равно 1. - coreFraction: + Ссылка на существующий ресурс со сценарием автоматизации Windows. + + Структура ресурса для типа SysprepRef: + + * `.data.autounattend.xml` + * `.data.unattend.xml` + properties: + kind: + description: | + Тип ресурса. + name: + description: | + Имя ресурса со сценарием автоматизации. + type: description: | - Гарантированная доля ЦП, которая будет выделена ВМ. Указывается в процентах. - Поддерживаемые значения: `5%`, `10%`, `25%`, `50%`, `100%`. + Поддерживаемые параметры для использования сценария инициализации: - memory: - description: | - Блок определяет настройки оперативной памяти для виртуальной машины. - properties: - size: + * UserData — использовать сценарий cloud-init в секции .spec.provisioning.UserData. + * UserDataRef — использовать сценарий cloud-init, который находится в другом ресурсе. + * SysprepRef — использовать сценарий автоматизации установки Windows, который находится в другом ресурсе. + userData: description: | - Объем оперативной памяти. + Текст сценария cloud-init. - blockDeviceRefs: - description: | - Список блочных устройств, которые могут быть смонтированы в ВМ. + Дополнительная информация: https://cloudinit.readthedocs.io/en/latest/reference/examples.html + userDataRef: + description: | + Ссылка на существующий ресурс со сценарием cloud-init. - Порядок загрузки определяется порядком в списке. - items: - properties: - kind: - description: | - Поддерживаемые типы: + Структура ресурса для типа userDataRef: - * `ClusterVirtualImage` — использовать `ClusterVirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM. - * `VirtualImage` — использовать `VirtualImage` в качестве диска. Этот тип всегда монтируется в режиме для чтения (ReadOnly). Если образ является ISO-образом, он будет смонтирован как устройство CDROM. - * `VirtualDisk` — используйте `VirtualDisk` в качестве диска. Этот тип всегда монтируется в режиме для чтения и записи (ReadWrite). - name: - description: | - Имя ресурса. - restartApprovalID: - description: | - Хэш изменений виртуальной машины из .status.changeID. - Требуется для утверждения разрушительных изменений виртуальной машины (например, перезапуск). - status: - type: object - properties: - guestOSInfo: - type: object + * `.data.userData` + properties: + kind: + description: | + Тип ресурса. + name: + description: | + Имя ресурса со сценарием cloud-init. + runPolicy: description: | - Информация об гостевой ОС, полученная от агента (QEMU Guest Agent). Агент должен быть предварительно установлен. + Этот параметр определяет политику запуска ВМ: - Больше информации об агенте можно прочитать тут: https://www.qemu.org/docs/master/interop/qemu-ga.html. - phase: - type: string + * `AlwaysOn` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС. + * `AlwaysOff` — после создания ВМ всегда находится в выключенном состоянии. + * `Manual` — после создания ВМ выключается, состояние ВМ (включение/выключение) контролируется через API-сервисы или средствами ОС. + * `AlwaysOnUnlessStoppedManually` — после создания ВМ всегда находится в работающем состоянии, даже в случае ее выключения средствами ОС, ВМ может быть выключена с помощью соответствующего API-сервиса. + terminationGracePeriodSeconds: description: | - Текущая фаза виртуальной машины: - - * `Scheduling` — ВМ запланирована для размещения на узлах кластера. - * `Pending` — осуществляется процесс запуска ВМ. - * `Running` — ВМ запущенна. - * `Failed` — произошла ошибка в процессе запуска или работы ВМ. - * `Terminating` — в настоящий момент ВМ завершает свою работу. - * `Stopped` — ВМ остановлена. - enum: - - "Scheduling" - - "Pending" - - "Running" - - "Failed" - - "Terminating" - - "Stopped" - nodeName: + Период ожидания после подачи сигнала (SIGTERM) о прекращении работы ВМ, по истечении которого ВМ принудительно завершается. + tolerations: description: | - Имя узла, на котором в данный момент запущена ВМ. - ipAddressClaim: + [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/), как и в параметре pods `spec.tolerations` в Kubernetes. + items: + description: "" + properties: + effect: + description: "" + key: + description: "" + operator: + description: "" + tolerationSeconds: + description: "" + value: + description: "" + topologySpreadConstraints: description: | - Имя `VirtualMachineIPAddressClaim`, содержащее IP-адрес виртуальной машины. - ipAddress: + [По аналогии](https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/), как и в параметре pods `spec.topologySpreadConstraints` в Kubernetes. + items: + properties: + labelSelector: + description: "" + properties: + matchExpressions: + description: "" + items: + properties: + key: + description: "" + operator: + description: "" + values: + description: "" + items: + description: "" + matchLabels: + additionalProperties: + description: "" + description: "" + maxSkew: + description: "" + topologyKey: + description: "" + whenUnsatisfiable: + description: "" + virtualMachineIPAddressClaimName: description: | - IP-адрес ВМ. + Имя для связанного ресурса `virtualMachineIPAddressClaim`. + + Указывается при необходимости использования ранее созданного IP-адреса ВМ. + + Если не указано явно, по умолчанию для ВМ создается ресурс `virtualMachineIPAddressClaim` с именем аналогичным ресурсу ВМ (`.metadata.name`). + status: + properties: blockDeviceRefs: description: | Список блочных устройств, подключенных к ВМ. @@ -532,15 +538,15 @@ spec: kind: description: | Тип блочного устройства. - name: - description: | - Имя существующего ресурса. - target: + name: description: | - Название подключенного блочного устройства. + Имя существующего ресурса. size: description: | Размер подключенного блочного устройства. + target: + description: | + Название подключенного блочного устройства. conditions: description: | Состояния во время работы виртуальной машины. @@ -558,9 +564,33 @@ spec: description: "" type: description: "" + guestOSInfo: + description: | + Информация об гостевой ОС, полученная от агента (QEMU Guest Agent). Агент должен быть предварительно установлен. + + Больше информации об агенте можно прочитать тут: https://www.qemu.org/docs/master/interop/qemu-ga.html. + ipAddress: + description: | + IP-адрес ВМ. message: description: | Детальное описание состояния ВМ. - changeID: + nodeName: + description: | + Имя узла, на котором в данный момент запущена ВМ. + phase: + description: | + Текущая фаза виртуальной машины: + + * `Scheduling` — ВМ запланирована для размещения на узлах кластера. + * `Pending` — осуществляется процесс запуска ВМ. + * `Running` — ВМ запущенна. + * `Failed` — произошла ошибка в процессе запуска или работы ВМ. + * `Terminating` — в настоящий момент ВМ завершает свою работу. + * `Stopped` — ВМ остановлена. + restartAwaitingChanges: + description: | + Список изменений в конфигурации, требующий перезапуска ВМ. + virtualMachineIPAddressClaimName: description: | - Хэш изменений виртуальной машины. Используйте spec.restartApprovalID для утверждения разрушительных изменений, например перезапуска. + Имя `virtualMachineIPAddressClaimName`, содержащее IP-адрес виртуальной машины. diff --git a/crds/doc-ru-virtualmachineblockdeviceattachment.yaml b/crds/doc-ru-virtualmachineblockdeviceattachment.yaml index 7d62f03f2..7ef2b16aa 100644 --- a/crds/doc-ru-virtualmachineblockdeviceattachment.yaml +++ b/crds/doc-ru-virtualmachineblockdeviceattachment.yaml @@ -8,9 +8,6 @@ spec: properties: spec: properties: - virtualMachine: - description: | - Имя виртуальной машины, к которой подключен диск. blockDeviceRef: description: | Блочное устройство, которое будет подключено к ВМ в качестве диска hotPlug. @@ -23,11 +20,17 @@ spec: name: description: | Имя блочного устройства + virtualMachineName: + description: | + Имя виртуальной машины, к которой подключен диск. status: properties: - virtualMachine: + failureMessage: description: | - Имя виртуальной машины, к которой подключен этот диск. + Подробное описание ошибки. + failureReason: + description: | + Краткое описание причины ошибки. phase: description: | Фаза ресурса: @@ -35,10 +38,6 @@ spec: * InProgress — диск в процессе подключения к ВМ. * Attached — диск подключен к ВМ. * Failed — возникла проблема с подключением диска. Смотрите `.status.failureReason`. - failureReason: - description: | - Краткое описание причины ошибки. - failureMessage: - type: string + virtualMachineName: description: | - Подробное описание ошибки. + Имя виртуальной машины, к которой подключен этот диск. diff --git a/crds/doc-ru-virtualmachinecpumodel.yaml b/crds/doc-ru-virtualmachinecpumodel.yaml new file mode 100644 index 000000000..a1c1743ec --- /dev/null +++ b/crds/doc-ru-virtualmachinecpumodel.yaml @@ -0,0 +1,46 @@ +spec: + versions: + - name: v1alpha2 + schema: + openAPIV3Schema: + description: | + Неизменяемый ресурс описывает модель процессора для использования в ВМ. Ресурс не может быть удален, пока он используется в одной из ВМ. + properties: + spec: + properties: + features: + description: | + Необходимые инструкции для процессора в виде списка Дополнительную информацию о поддерживаемых инструкциях можно найти [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology) + model: + description: | + Название модели процессора. Дополнительная информация о моделях [здесь](https://libvirt.org/formatdomain.html#cpu-model-and-topology) + type: + description: | + В качестве типа ресурса, поддерживаются следующие варианты: + * Host - использовать физический процессор хоста. + * Модель - модель процессора. Модель процессора - это именованный и предварительно определенный набор поддерживаемых инструкций процессора. + * Features - необходимый набор поддерживаемых инструкций для процессора. + status: + properties: + features: + description: | + Информация о поддерживаемых наборах инструкций процессора для данной модели. + Отображается только для `type=Features`. + properties: + enabled: + description: | + Список наборов инструкций процессора для данной модели. + notEnabledCommon: + description: | + Список неиспользуемых инструкций процессора, дополнительно доступных для данной группы узлов. + nodes: + description: | + Список узлов, поддерживающих данную модель процессора. + Не отображается для `type=Host`. + phase: + description: | + Текущий статус ресурса `VirtualMachineCPUModel`: + * Pending - ресурс находится в очереди на обработку. + * InProgress - ресурс находится в процессе создания. + * Ready - ресурс успешно создан. + * Failed - в процессе создания ресурса произошла ошибка. diff --git a/crds/doc-ru-virtualmachineipaddressclaim.yaml b/crds/doc-ru-virtualmachineipaddressclaim.yaml index 5463e8d58..045ec57ba 100644 --- a/crds/doc-ru-virtualmachineipaddressclaim.yaml +++ b/crds/doc-ru-virtualmachineipaddressclaim.yaml @@ -13,9 +13,6 @@ spec: address: description: | Запрашиваемый IP-адрес. Если это значение не задано, будет назначен следующий доступный IP-адрес. - virtualMachineIPAddressLease: - description: | - Выданный `VirtualMachineIPAddressLease`, управляется автоматически. reclaimPolicy: description: | Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`. @@ -23,6 +20,9 @@ spec: * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`. * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную. + virtualMachineIPAddressLeaseName: + description: | + Имя выданного `VirtualMachineIPAddressLease`, управляется автоматически. status: description: | Состояние ресурса `VirtualMachineIPAddressClaim`. @@ -30,9 +30,9 @@ spec: address: description: | Назначенный IP-адрес. - virtualMachine: + conflictMessage: description: | - Имя виртуальной машины, которая в настоящее время использует этот IP-адрес. + Подробное описание ошибки. phase: description: | Представляет текущее состояние ресурса `VirtualMachineIPAddressClaim`. @@ -41,6 +41,6 @@ spec: * Bound - ресурс `VirtualMachineIPAddressClaim` привязан к ресурсу `VirtualMachineIPAddressLease`. * Lost - ресурс `VirtualMachineIPAddressClaim` потерял свойю связку с `VirtualMachineIPAddressLease`. * Conflict - `VirtualMachineIPAddressLease` уже привязан к другом ресурсу `VirtualMachineIPAddressClaim`. - conflictMessage: + virtualMachineName: description: | - Подробное описание ошибки. + Имя виртуальной машины, которая в настоящее время использует этот IP-адрес. diff --git a/crds/doc-ru-virtualmachineipaddresslease.yaml b/crds/doc-ru-virtualmachineipaddresslease.yaml index 924337f14..1acdf9e6c 100644 --- a/crds/doc-ru-virtualmachineipaddresslease.yaml +++ b/crds/doc-ru-virtualmachineipaddresslease.yaml @@ -10,13 +10,6 @@ spec: description: | Параметры конфигурации `VirtualMachineIPAddressLease`. properties: - reclaimPolicy: - description: | - Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`. - - * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`. - - * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную. claimRef: description: | Ссылка на существующие `VirtualMachineIPAddressClaim`. @@ -27,6 +20,13 @@ spec: namespace: description: | Пространство имен ссылающегося `VirtualMachineIPAddressClaim`. + reclaimPolicy: + description: | + Политика Reclaim, определяющая поведение `VirtualMachineIPAddressLease` при удалении `VirtualMachineIPAddressClaim`. + + * `Delete` означает, что `VirtualMachineIPAddressLease` автоматически удаляется, когда пользователь удаляет соответствующий `VirtualMachineIPAddressClaim`. + + * `Retain` — если пользователь удаляет `VirtualMachineIPAddressClaim`, соответствующий `VirtualMachineIPAddressLease` не будет удален. Вместо этого он переходит в фазу Released, где его IP-адрес может быть переиспользован вручную. status: description: | Состояние ресурса `VirtualMachineIPAddressLease`. diff --git a/crds/doc-ru-virtualmachineoperation.yaml b/crds/doc-ru-virtualmachineoperation.yaml index 05dbfdd1e..2cf2e8c4b 100644 --- a/crds/doc-ru-virtualmachineoperation.yaml +++ b/crds/doc-ru-virtualmachineoperation.yaml @@ -15,7 +15,7 @@ spec: * Start - запустить виртуальную машину. * Stop - остановить виртуальную машину. * Restart - перезапустить виртуальную машину. - virtualMachine: + virtualMachineName: description: | Имя виртуальной машины, для которой выполняется операция. force: diff --git a/crds/virtualdisk.yaml b/crds/virtualdisk.yaml index 973636007..e740f9d0d 100644 --- a/crds/virtualdisk.yaml +++ b/crds/virtualdisk.yaml @@ -27,7 +27,7 @@ spec: openAPIV3Schema: type: object description: | - Describes a virtual disk that can be mounted in `Virtuals`. Once the resource is created, only the disk size `.spec.persistentVolumeClaim.size` can be changed, all other fields are immutable. + Describes a virtual disk that can be mounted in `VirtualMachines`. Once the resource is created, only the disk size `.spec.persistentVolumeClaim.size` can be changed, all other fields are immutable. A PVC is created under the hood of the resource, into which the data from the source is filled. required: @@ -48,7 +48,7 @@ spec: description: | Desired size for PVC to store the disk. If the disk is created from an image, the size must be at least as large as the original unpacked image. pattern: "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" - storageClass: + storageClassName: type: string description: | The name of the StorageClass required by the claim. More info — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1 @@ -162,7 +162,8 @@ spec: YWFhCg== objectRef: type: object - description: Reference to existing `VirtualImage` or `ClusterVirtualImage`. + description: | + Use an existing `VirtualImage` or `ClusterVirtualImage` to create an image. required: ["kind", "name"] properties: kind: @@ -227,7 +228,7 @@ spec: target: type: object properties: - persistentVolumeClaim: + persistentVolumeClaimName: type: string description: | Created PersistentVolumeClaim name for Kubernetes storage. @@ -267,10 +268,10 @@ spec: type: string description: | Detailed description of the error. - usedInVMs: + attachedToVirtualMachines: type: array description: | - A list of virtual that use the disk + A list of `VirtualMachines` that use the disk example: [{ name: "VM100" }, { name: "VM200" }] items: type: object @@ -288,8 +289,12 @@ spec: type: string jsonPath: .status.progress priority: 1 - - name: Target PVC - jsonPath: .status.target.persistentVolumeClaim + - name: StorageClass + jsonPath: .spec.persistentVolumeClaim.storageClassName + type: string + priority: 1 + - name: TargetPVC + jsonPath: .status.target.persistentVolumeClaimName type: string priority: 1 - name: Age diff --git a/crds/virtualimage.yaml b/crds/virtualimage.yaml index be7d57233..e27678da7 100644 --- a/crds/virtualimage.yaml +++ b/crds/virtualimage.yaml @@ -158,7 +158,8 @@ spec: YWFhCg== objectRef: type: object - description: Reference to existing `VirtualImage` or `ClusterVirtualImage`. + description: | + Use an existing `VirtualImage` or `ClusterVirtualImage` to create an image. required: ["kind", "name"] properties: kind: @@ -302,10 +303,10 @@ spec: type: string description: | Detailed description of the error. - usedInVMs: + attachedToVirtualMachines: type: array description: | - A list of virtual that use the image + A list of `VirtualMachines` that use the disk example: [{ name: "VM100" }, { name: "VM200" }] items: type: object diff --git a/crds/virtualmachine.yaml b/crds/virtualmachine.yaml index 35dfca7c8..87fbec200 100644 --- a/crds/virtualmachine.yaml +++ b/crds/virtualmachine.yaml @@ -28,7 +28,7 @@ spec: openAPIV3Schema: type: object description: | - Handles the VM according to its configuration and run policy. + Virtual Machine (VM) Configuration. required: - spec properties: @@ -48,11 +48,11 @@ spec: description: | This parameter defines the type of provisioning script: - * UserData - allows the use of inline cloud-init userdata in the .spec.provisioning.UserData section. + Parameters supported for using the provisioning script: - * UserDataRef - allows tto automate OS installation with cloud-init userdata. - - * SysprepRef - allows to automate Windows installation, setup, and custom software provisioning. + * UserData - use the cloud-init in the .spec.provisioning.UserData section. + * UserDataRef - use a cloud-init script that resides in a different resource. + * SysprepRef - Use a Windows Automation script that resides in a different resource. More information: https://cloudinit.readthedocs.io/en/latest/reference/examples.html type: string @@ -66,11 +66,16 @@ spec: type: string userDataRef: description: | - Reference to an existing Secret with a cloud-init userdata script. + A reference to an existing resource with a cloud-init script. + + Resource structure for userDataRef type: + + * `.data.userData`. type: object properties: kind: - description: The kind of an existing Windows sysprep automation. + description: | + The kind of an existing cloud-init automation resource. default: "Secret" type: string enum: @@ -78,15 +83,21 @@ spec: name: type: string description: | - Secret name. + The name of the resource. required: ["name", "kind"] sysprepRef: description: | Reference to an existing Windows sysprep automation. + + Resource structure for the SysprepRef type: + + * `.data.autounattend.xml`. + * `.data.unattend.xml`. type: object properties: kind: - description: The kind of an existing Windows sysprep automation. + description: | + The kind of an existing Windows sysprep automation resource. default: "Secret" type: string enum: @@ -139,13 +150,14 @@ spec: * `Manual` - after creation the VM is switched off, the VM state (switching on/off) is controlled via sub-resources or OS means. * `AlwaysOnUnlessStoppedManually` - after creation the VM is always in a running state, even in case of its shutdown by means of the OS, the VM can be shut down using the corresponding subresource. - virtualMachineIPAddressClaim: + virtualMachineIPAddressClaimName: type: string description: | - The name for associated `VirtualMachineIPAddressClaim` resource. + Name for the associated `virtualMachineIPAddressClaim` resource. + + Specified when it is necessary to use a previously created IP address of the VM. - If specified, VirtualMachineIPAddressClaim should exists on VirtualMachine creation. - If not specified, a VirtualMachine name will be used to create an implicit VirtualMachineIPAddressClaim. This claim will be deleted on VirtualMachine deletion. + If not explicitly specified, by default a `virtualMachineIPAddressClaim` resource is created for the VM with a name similar to the VM resource (`.metadata.name`). topologySpreadConstraints: description: | @@ -790,16 +802,17 @@ spec: default: restartApprovalMode: Manual description: | - Disruptions settings for virtual machine. + Describing the policy for applying changes that require rebooting the VM. - Some virtual machine settings require a reboot of the virtual machine when changing the configuration. To reboot, it is necessary to approve the changes. The `approvalMode` parameter is used for this purpose. + Changes to some VM configuration settings require a reboot of the VM to apply them. This policy allows you to specify the behavior of how the VM will respond to such changes. properties: restartApprovalMode: type: string description: | - The approval mode for disruptive updates: - - `Manual` — restart virtual machine manually to apply disruptive updates. - - `Automatic` — virtual machine will restart automatically to apply disruptive updates. + Approval mode for changes that require rebooting the VM: + + * `Manual` - changes will not be applied until the user reboots the VM himself. + * `Automatic` - the VM will be rebooted immediately after saving the parameters that require rebooting the VM. enum: - Manual - Automatic @@ -815,7 +828,9 @@ spec: type: boolean default: true description: | - Use the `virtio` bus to attach disk devices. Set to false to disable `virtio` for this VM. + Use the `virtio` bus to connect virtual devices of the VM. Set to false to disable `virtio` for this VM. + + Note: To use paravirtualization mode, some operating systems require the appropriate drivers to be installed. osType: type: string @@ -824,9 +839,9 @@ spec: - "Generic" default: "Generic" description: | - For the selected type of operating system, determines the set of devices and other parameters required for correct operation will be applied to VM. + The parameter allows you to select the type of used OS, for which a VM with an optimal set of required virtual devices and parameters will be created. - * Windows - for the Microsoft Windows family of OS. + * Windows - for Microsoft Windows family operating systems. * Generic - for other types of OS. bootloader: @@ -848,11 +863,11 @@ spec: required: - cores properties: - virtualMachineCPUModel: + virtualMachineCPUModelName: type: string default: "generic-v1" description: | - Name of `VirtualMachineCPUModel` resource holding the CPU model of the VirtualMachine. + Name of `virtualMachineCPUModelName` resource holding the CPU model of the VirtualMachine. cores: format: int32 type: integer @@ -864,7 +879,6 @@ spec: enum: ["5%", "10%", "25%", "50%", "100%"] description: | Guaranteed share of CPU that will be allocated to the VM. Specified as a percentage. - Supported values: `5%`, `10%`, `25%`, `50%`, `100%`. memory: type: object @@ -937,14 +951,14 @@ spec: - "Starting" - "Migrating" - "Pause" - node: + nodeName: type: string description: | The name of the node on which the VM is currently running. - virtualMachineIPAddressClaim: + virtualMachineIPAddressClaimName: type: string description: | - Name of `VirtualMachineIPAddressClaim` holding the ip address of the VirtualMachine. + Name of `virtualMachineIPAddressClaimName` holding the ip address of the VirtualMachine. ipAddress: type: string description: | @@ -1027,9 +1041,21 @@ spec: - name: Phase type: string jsonPath: .status.phase + - name: Cores + type: string + jsonPath: .spec.cpu.cores + priority: 1 + - name: CoreFraction + type: string + jsonPath: .spec.cpu.coreFraction + priority: 1 + - name: Memory + type: string + jsonPath: .spec.memory.size + priority: 1 - name: Node type: string - jsonPath: .status.node + jsonPath: .status.nodeName - name: IPAddress type: string jsonPath: .status.ipAddress diff --git a/crds/virtualmachineblockdeviceattachment.yaml b/crds/virtualmachineblockdeviceattachment.yaml index f1ded4d6b..a14bc6138 100644 --- a/crds/virtualmachineblockdeviceattachment.yaml +++ b/crds/virtualmachineblockdeviceattachment.yaml @@ -35,10 +35,10 @@ spec: spec: type: object required: - - virtualMachine + - virtualMachineName - blockDeviceRef properties: - virtualMachine: + virtualMachineName: type: string description: | The name of the virtual machine to which the disk or image is connected. @@ -63,7 +63,7 @@ spec: status: type: object properties: - virtualMachine: + virtualMachineName: type: string description: | The name of the virtual machine to which this disk is attached. @@ -91,9 +91,9 @@ spec: - name: Phase type: string jsonPath: .status.phase - - name: VirtualMachine + - name: virtualMachineName type: string - jsonPath: .status.virtualMachine + jsonPath: .status.virtualMachineName priority: 1 - name: FailureReason type: string diff --git a/crds/virtualmachineipaddressclaim.yaml b/crds/virtualmachineipaddressclaim.yaml index 39e0b3adf..9803a7da8 100644 --- a/crds/virtualmachineipaddressclaim.yaml +++ b/crds/virtualmachineipaddressclaim.yaml @@ -39,9 +39,9 @@ spec: description: | The requested IP address. If omitted the next available IP address will be assigned. type: string - virtualMachineIPAddressLease: + virtualMachineIPAddressLeaseName: description: | - The issued `VirtualMachineIPAddressLease`, managed automatically. + The name of issued `VirtualMachineIPAddressLease`, managed automatically. type: string reclaimPolicy: type: string @@ -61,7 +61,7 @@ spec: description: | The assigned IP address. type: string - virtualMachine: + virtualMachineName: description: | Represents the virtual machine that currently uses this IP address. type: string @@ -96,7 +96,7 @@ spec: - jsonPath: .status.phase name: Status type: string - - jsonPath: .status.virtualMachine + - jsonPath: .status.virtualMachineName name: VM type: string - jsonPath: .metadata.creationTimestamp diff --git a/crds/virtualmachineoperation.yaml b/crds/virtualmachineoperation.yaml index 8fdd87c47..14aa46d86 100644 --- a/crds/virtualmachineoperation.yaml +++ b/crds/virtualmachineoperation.yaml @@ -32,7 +32,7 @@ spec: spec: type: object required: - - virtualMachine + - virtualMachineName properties: type: type: string @@ -42,7 +42,7 @@ spec: * Start - start the virtualmachine. * Stop - stop the virtualmachine. * Restart - restart the virtualmachine. - virtualMachine: + virtualMachineName: type: string description: | The name of the virtual machine for which the operation is performed. @@ -54,7 +54,7 @@ spec: - properties: type: enum: ["Start"] - required: ["virtualMachine"] + required: ["virtualMachineName"] not: anyOf: - required: @@ -62,7 +62,7 @@ spec: - properties: type: enum: ["Restart", "Stop"] - required: ["virtualMachine"] + required: ["virtualMachineName"] status: type: object properties: @@ -93,7 +93,7 @@ spec: type: string jsonPath: .status.phase - name: VM - jsonPath: .spec.virtualMachine + jsonPath: .spec.virtualMachineName type: string - name: Age type: date diff --git a/docs/EXAMPLES.md b/docs/EXAMPLES.md index 7ef97700f..ca5ddf98e 100644 --- a/docs/EXAMPLES.md +++ b/docs/EXAMPLES.md @@ -23,7 +23,7 @@ metadata: spec: persistentVolumeClaim: size: 10Gi - storageClass: local-path + storageClassName: local-path dataSource: type: HTTP http: @@ -279,7 +279,7 @@ metadata: name: vmd-blank spec: persistentVolumeClaim: - storageClass: "your-storage-class-name" + storageClassName: "your-storage-class-name" size: 100M ``` @@ -310,7 +310,7 @@ metadata: spec: persistentVolumeClaim: size: 10Gi - storageClass: "your-storage-class-name" + storageClassName: "your-storage-class-name" dataSource: type: ObjectRef objectRef: @@ -336,7 +336,7 @@ kind: VirtualMachineBlockDeviceAttachment metadata: name: vmd-blank-attachment spec: - virtualMachine: linux-vm # Name of the virtual machine to attach disk to. + virtualMachineName: linux-vm # Name of the virtual machine to attach disk to. blockDevice: type: ObjectRef objectRef: @@ -528,7 +528,7 @@ kind: VirtualMachineOperation metadata: name: restart spec: - virtualMachine: linux-vm + virtualMachineName: linux-vm type: Restart EOF ``` diff --git a/docs/EXAMPLES_RU.md b/docs/EXAMPLES_RU.md index 342f32941..90f52266b 100644 --- a/docs/EXAMPLES_RU.md +++ b/docs/EXAMPLES_RU.md @@ -23,7 +23,7 @@ metadata: spec: persistentVolumeClaim: size: 10Gi - storageClass: local-path + storageClassName: local-path dataSource: type: HTTP http: @@ -286,7 +286,7 @@ metadata: name: vmd-blank spec: persistentVolumeClaim: - storageClass: "your-storage-class-name" + storageClassName: "your-storage-class-name" size: 100M ``` @@ -317,7 +317,7 @@ metadata: spec: persistentVolumeClaim: size: 10Gi - storageClass: "your-storage-class-name" + storageClassName: "your-storage-class-name" dataSource: type: ObjectRef objectRef: @@ -343,11 +343,10 @@ kind: VirtualMachineBlockDeviceAttachment metadata: name: vmd-blank-attachment spec: - virtualMachine: linux-vm # Имя виртуальной машины, к которой будет подключен диск. - blockDevice: - type: VirtualDisk - virtualDisk: - name: vmd-blank # Имя подключаемого диска. + virtualMachineName: linux-vm # Имя виртуальной машины, к которой будет подключен диск. + blockDeviceRef: + kind: VirtualDisk + name: vmd-blank # Имя подключаемого диска. ``` При удалении ресурса `VirtualMachineBlockDeviceAttachment` диск от виртуальной машины будет отключен. @@ -527,7 +526,7 @@ kind: VirtualMachineOperation metadata: name: restart-linux-vm spec: - virtualMachine: linux-vm + virtualMachineName: linux-vm type: Restart EOF ``` diff --git a/docs/FAQ.md b/docs/FAQ.md index da9c8ae94..334839567 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -19,7 +19,7 @@ metadata: spec: persistentVolumeClaim: size: 100Gi - storageClass: local-path + storageClassName: local-path ``` Let's create resources with iso-images of Windows OS and virtio drivers: @@ -80,7 +80,7 @@ spec: Once the resource is created, the virtual machine will be started. You need to connect to it and use the graphical wizard to add the `virtio` drivers and perform the OS installation. ```bash -dvp vnc -n default win-vm +d8 v vnc -n default win-vm ``` After the installation is complete, shut down the virtual machine. @@ -193,7 +193,7 @@ kind: Secret metadata: name: sysprep-config data: - unattend.xml: XXXx # base64 of answer file + unattend.xml: XXXx # base64 of answer file ``` Then create a virtual machine with unattended installation: @@ -228,4 +228,4 @@ spec: name: win-virtio-iso - kind: VirtualDisk name: win-disk -``` \ No newline at end of file +``` diff --git a/docs/FAQ_RU.md b/docs/FAQ_RU.md index 44a577e5b..57450f59f 100644 --- a/docs/FAQ_RU.md +++ b/docs/FAQ_RU.md @@ -19,7 +19,7 @@ metadata: spec: persistentVolumeClaim: size: 100Gi - storageClass: local-path + storageClassName: local-path ``` 2. Создайте ресурсы с ISO-образами ОС Windows и драйверами virtio: @@ -82,7 +82,7 @@ spec: Команда для подключения: ```bash -dvp vnc -n default win-vm +d8 v vnc -n default win-vm ``` 6. После окончания установки завершите работу виртуальной машины. @@ -103,7 +103,7 @@ spec: 8. После внесенных изменений виртуальная машина запустится, для продолжения работы с ней используйте команду: ```bash -dvp vnc -n default win-vm +d8 v vnc -n default win-vm ``` ## Как создать образ виртуальной машины для container registry @@ -270,4 +270,4 @@ spec: name: win-virtio-iso - kind: VirtualDisk name: win-disk -``` \ No newline at end of file +``` diff --git a/docs/README.md b/docs/README.md index 117cd506a..8cbdbe14b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,12 +6,13 @@ moduleStatus: experimental ## Description -This module is designed to run and manage virtual machines and their resources on the Deckhouse platform. +This module is designed to run and manage virtual machines and their resources on [the Deckhouse platform](https://deckhouse.io). It offers the following features: - A simple and intuitive interface for declarative creation and management of virtual machines and their resources. - The ability to run legacy applications that for some reason cannot or are difficult to run in a container. +- Ability to run applications that require non-Linux operating systems. - Ability to run virtual machines and containerized applications in the same environment. - Integration with the existing Deckhouse ecosystem to leverage its capabilities for virtual machines. @@ -20,16 +21,20 @@ It offers the following features: The following conditions are required to run the module: - A processor with x86_64 architecture and support for Intel-VT or AMD-V instructions. +- Cluster resource requirements and configuration specifics are available for reading on [this](https://deckhouse.io/guides/production.html) page. +- Any [compatible](https://deckhouse.io/documentation/v1/supported_versions.html#linux) Linux-based OS is supported for installation. - The Linux kernel on the cluster nodes must be version 5.7 or newer. - The [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) module to provide network connectivity for virtual machines. - Modules [SDS-DRBD](https://deckhouse.io/modules/sds-drbd/stable/) or [CEPH-CSI](/documentation/v1/modules/031-ceph-csi/) for storing virtual machine data. It is also possible to use other storage options that support the creation of block devices with `RWX` (`ReadWriteMany`) access mode. +The command line utility [d8](https://github.com/deckhouse/deckhouse-cli) is used to create cluster resources and connect to virtual machines. For users of the EE-version the ability to manage resources via UI is available. + ## What do I need to enable the module? Procedure for enabling the module 1. Configure the deckhouse cluster -2. Enable the CNI Cilium module +2. Enable the [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) module 3. Install and configure SDS-DRBD/CEPH/etc storage 4. Enable the virtualization module @@ -39,7 +44,7 @@ The module includes the following components: - The module core, based on the KubeVirt project and uses QEMU/KVM + libvirtd to run virtual machines. - Deckhouse Virtualization Container Registry (DVCR) - repository for storing and caching virtual machine images. -- Virtualization-controller - API for creating and managing virtual machine resources. +- Virtualization-API - controller that implements a user API for creating and managing virtual machine resources. The API provides capabilities for creating and managing the following resources: diff --git a/docs/README_RU.md b/docs/README_RU.md index af9964bc8..9271bf2d7 100644 --- a/docs/README_RU.md +++ b/docs/README_RU.md @@ -6,12 +6,13 @@ moduleStatus: experimental ## Описание -Этот модуль предназначен для запуска и управления виртуальными машинами и их ресурсами на платформе Deckhouse. +Этот модуль предназначен для запуска и управления виртуальными машинами и их ресурсами на [платформе Deckhouse](https://deckhouse.ru). Он предлагает следующие возможности: - Простой и интуитивно понятный интерфейс для декларативного создания и управления виртуальными машинами и их ресурсами. - Возможность запуска приложений, которые по каким-то причинам нельзя или сложно запустить в контейнере. +- Возможность запуска приложений, требующих ОС отличных от Linux. - Возможность запуска виртуальных машин и контейнеризованных приложений в одном окружении. - Интеграцию с экосистемой Deckhouse, которая использует ее возможности для виртуальных машин. @@ -20,16 +21,20 @@ moduleStatus: experimental Для запуска модуля требуются следующие условия: - Процессор с архитектурой x86_64 и поддержкой инструкций Intel-VT или AMD-V. +- Требования к ресурсам кластера и особенности их кронфигурации доступны для ознакомления на [этой](https://deckhouse.ru/guides/production.html) странице. +- Для установки поддерживается любая [совместимая](https://deckhouse.ru/documentation/v1/supported_versions.html#linux) ОС на базе Linux. - Ядро Linux на узлах кластера должно быть версии 5.7 или более новой. - Модуль [CNI Cilium](/documentation/v1/modules/021-cni-cilium/) для обеспечения сетевой связности виртуальных машин. - Модули [SDS-DRBD](https://deckhouse.ru/modules/sds-drbd/stable/) или [CEPH-CSI](/documentation/v1/modules/031-ceph-csi/) для хранения данных виртуальных машин. Также возможно использовать другие варианты хранилищ, поддерживающие создание блочных устройств с режимом доступа `RWX` (`ReadWriteMany`). +Для создания ресурсов кластера, и подключения к виртуальным машинам используется утилита командной строки [d8](https://github.com/deckhouse/deckhouse-cli). Для пользователей EE-версии доступна возможность управления ресурсами через UI. + ## Как включить модуль? Порядок действий для включения модуля 1. Настройте кластер deckhouse. -2. Включите модуль CNI Cilium. +2. Включите модуль [CNI Cilium](/documentation/v1/modules/021-cni-cilium/). 3. Установите и настроите хранилище SDS-DRBD/CEPH/etc. 4. Включите модуль virtualization. @@ -39,9 +44,9 @@ moduleStatus: experimental - Ядро модуля, основанное на проекте KubeVirt и использующее QEMU/KVM + libvirtd для запуска виртуальных машин. - Deckhouse Virtualization Container Registry (DVCR) — репозиторий для хранения и кэширования образов виртуальных машин. -- Virtualization-controller — API для создания и управления ресурсами виртуальных машин. +- Virtualization-API — контроллер, реализующий API пользователя для создания и управления ресурсами виртуальных машин. -API предоставляет возможности для создания и управления следующими ресурсами: +API предоставляет возможности для создания, модификации и удаления следующих ресурсов: - образы виртуальных машин и загрузочные образы; - диски виртуальных машин; diff --git a/hack/upload-pvc.sh b/hack/upload-pvc.sh index 2d47c88dc..f8fe21aab 100644 --- a/hack/upload-pvc.sh +++ b/hack/upload-pvc.sh @@ -32,7 +32,7 @@ metadata: spec: storage: Kubernetes persistentVolumeClaim: - storageClass: linstor-thick-data-r3 + storageClassName: linstor-thick-data-r3 dataSource: type: Upload EOF @@ -48,4 +48,4 @@ done uploadCmd=$(echo "$uploadCmd ${FILE}" | sed "s/example.iso//") echo $uploadCmd -eval "${uploadCmd}" \ No newline at end of file +eval "${uploadCmd}" diff --git a/images/pre-delete-hook/entrypoint.sh b/images/pre-delete-hook/entrypoint.sh index b0a404abc..edf626322 100644 --- a/images/pre-delete-hook/entrypoint.sh +++ b/images/pre-delete-hook/entrypoint.sh @@ -3,12 +3,12 @@ set -eu -o pipefail KUBEVIRT_RESOURCE="dvpinternalkubevirts.internal.virtualization.deckhouse.io" echo "Delete Kubevirt configuration ..." -kubectl delete -n d8-virtualization ${KUBEVIRT_RESOURCE} kubevirt || true +kubectl delete -n d8-virtualization ${KUBEVIRT_RESOURCE} config || true echo "Wait for Kubevirt deletion ..." -kubectl wait --for=delete -n d8-virtualization ${KUBEVIRT_RESOURCE} kubevirt --timeout=180s || true +kubectl wait --for=delete -n d8-virtualization ${KUBEVIRT_RESOURCE} config --timeout=180s || true CDI_RESOURCE="dvpinternalcdis.internal.virtualization.deckhouse.io" echo "Delete CDI configuration ..." -kubectl delete ${CDI_RESOURCE} cdi || true +kubectl delete ${CDI_RESOURCE} config || true echo "Wait for CDI deletion ..." -kubectl wait --for=delete ${CDI_RESOURCE} cdi --timeout=180s || true +kubectl wait --for=delete ${CDI_RESOURCE} config --timeout=180s || true diff --git a/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_disk.yaml b/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_disk.yaml index c2cdb823f..152f21c6d 100644 --- a/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_disk.yaml +++ b/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_disk.yaml @@ -5,7 +5,7 @@ metadata: spec: persistentVolumeClaim: size: 10Gi - storageClass: local-path + storageClassName: local-path dataSource: type: HTTP http: diff --git a/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_image.yaml b/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_image.yaml index 21252e82a..4eb0e51c3 100644 --- a/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_image.yaml +++ b/images/virtualization-artifact/config/samples/linux_vm_from_cloudimage_image.yaml @@ -20,7 +20,7 @@ metadata: spec: persistentVolumeClaim: size: 10Gi - storageClass: local-path + storageClassName: local-path dataSource: type: ClusterVirtualImage clusterVirtualImage: diff --git a/images/virtualization-artifact/config/samples/linux_vm_from_iso_image.yaml b/images/virtualization-artifact/config/samples/linux_vm_from_iso_image.yaml index 0fd8fdc48..98cec85a8 100644 --- a/images/virtualization-artifact/config/samples/linux_vm_from_iso_image.yaml +++ b/images/virtualization-artifact/config/samples/linux_vm_from_iso_image.yaml @@ -17,7 +17,7 @@ metadata: spec: persistentVolumeClaim: size: 10Gi - storageClass: linstor-thin-data-r1 + storageClassName: linstor-thin-data-r1 --- apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualMachine diff --git a/images/virtualization-artifact/config/samples/virtual_machine_disk.yaml b/images/virtualization-artifact/config/samples/virtual_machine_disk.yaml index 19a8d4f65..be894207f 100644 --- a/images/virtualization-artifact/config/samples/virtual_machine_disk.yaml +++ b/images/virtualization-artifact/config/samples/virtual_machine_disk.yaml @@ -5,7 +5,7 @@ metadata: spec: persistentVolumeClaim: size: 10Gi - storageClass: local-path + storageClassName: local-path dataSource: type: "HTTP" http: diff --git a/images/virtualization-artifact/config/samples/vmbda.yaml b/images/virtualization-artifact/config/samples/vmbda.yaml index 8fac78e90..6d3d6233d 100644 --- a/images/virtualization-artifact/config/samples/vmbda.yaml +++ b/images/virtualization-artifact/config/samples/vmbda.yaml @@ -3,7 +3,7 @@ kind: VirtualMachineBlockDeviceAttachment metadata: name: vmd-blank-attachment spec: - virtualMachine: linux-vm + virtualMachineName: linux-vm blockDevice: type: VirtualDisk virtualDisk: diff --git a/images/virtualization-artifact/config/samples/vmd_blank.yaml b/images/virtualization-artifact/config/samples/vmd_blank.yaml index 9ce3d376d..af6da7b5a 100644 --- a/images/virtualization-artifact/config/samples/vmd_blank.yaml +++ b/images/virtualization-artifact/config/samples/vmd_blank.yaml @@ -4,5 +4,5 @@ metadata: name: vmd-blank spec: persistentVolumeClaim: - storageClass: "local-path" + storageClassName: "local-path" size: "80M" diff --git a/images/virtualization-artifact/config/samples/vmd_http_auto_sized.yaml b/images/virtualization-artifact/config/samples/vmd_http_auto_sized.yaml index db6a6a984..536bd163e 100644 --- a/images/virtualization-artifact/config/samples/vmd_http_auto_sized.yaml +++ b/images/virtualization-artifact/config/samples/vmd_http_auto_sized.yaml @@ -4,7 +4,7 @@ metadata: name: debian-iso spec: persistentVolumeClaim: - storageClass: "local-path" + storageClassName: "local-path" dataSource: type: "HTTP" http: diff --git a/images/virtualization-artifact/config/samples/vmd_http_sized.yaml b/images/virtualization-artifact/config/samples/vmd_http_sized.yaml index 5f86dbf87..a599c2f69 100644 --- a/images/virtualization-artifact/config/samples/vmd_http_sized.yaml +++ b/images/virtualization-artifact/config/samples/vmd_http_sized.yaml @@ -4,7 +4,7 @@ metadata: name: debian-iso spec: persistentVolumeClaim: - storageClass: "local-path" + storageClassName: "local-path" size: "80Mi" dataSource: type: "HTTP" diff --git a/images/virtualization-artifact/config/samples/vmd_upload_auto_sized.yaml b/images/virtualization-artifact/config/samples/vmd_upload_auto_sized.yaml index d4fd397fe..4ce8cf4bc 100644 --- a/images/virtualization-artifact/config/samples/vmd_upload_auto_sized.yaml +++ b/images/virtualization-artifact/config/samples/vmd_upload_auto_sized.yaml @@ -4,6 +4,6 @@ metadata: name: vmd-upload-auto-sized spec: persistentVolumeClaim: - storageClass: "local-path" + storageClassName: "local-path" dataSource: type: "Upload" diff --git a/images/virtualization-artifact/config/samples/vmd_upload_sized.yaml b/images/virtualization-artifact/config/samples/vmd_upload_sized.yaml index 331df4dc1..3886fddeb 100644 --- a/images/virtualization-artifact/config/samples/vmd_upload_sized.yaml +++ b/images/virtualization-artifact/config/samples/vmd_upload_sized.yaml @@ -4,7 +4,7 @@ metadata: name: vmd-upload-sized spec: persistentVolumeClaim: - storageClass: "local-path" + storageClassName: "local-path" size: "80Mi" dataSource: type: "Upload" diff --git a/images/virtualization-artifact/config/samples/vmi_ubuntu_2_phase.yaml b/images/virtualization-artifact/config/samples/vmi_ubuntu_2_phase.yaml index ac6f7aa9d..4824a6067 100644 --- a/images/virtualization-artifact/config/samples/vmi_ubuntu_2_phase.yaml +++ b/images/virtualization-artifact/config/samples/vmi_ubuntu_2_phase.yaml @@ -8,7 +8,7 @@ spec: # 2. Import from Registry into PVC. storage: Kubernetes persistentVolumeClaim: - storageClass: "local-path" + storageClassName: "local-path" dataSource: type: "HTTP" http: diff --git a/images/virtualization-artifact/config/samples/vmi_ubuntu_datavolume.yaml b/images/virtualization-artifact/config/samples/vmi_ubuntu_datavolume.yaml index 09acab807..cb4fd6931 100644 --- a/images/virtualization-artifact/config/samples/vmi_ubuntu_datavolume.yaml +++ b/images/virtualization-artifact/config/samples/vmi_ubuntu_datavolume.yaml @@ -5,7 +5,7 @@ metadata: spec: storage: Kubernetes persistentVolumeClaim: - storageClass: "local-path" + storageClassName: "local-path" dataSource: type: "ContainerImage" containerImage: diff --git a/images/virtualization-artifact/config/samples/vmi_upload_datavolume.yaml b/images/virtualization-artifact/config/samples/vmi_upload_datavolume.yaml index 8797358a3..ddbb70a6f 100644 --- a/images/virtualization-artifact/config/samples/vmi_upload_datavolume.yaml +++ b/images/virtualization-artifact/config/samples/vmi_upload_datavolume.yaml @@ -5,6 +5,6 @@ metadata: spec: storage: Kubernetes persistentVolumeClaim: - storageClass: "local-path" + storageClassName: "local-path" dataSource: type: "Upload" diff --git a/images/virtualization-artifact/config/samples/vmi_upload_registry.yaml b/images/virtualization-artifact/config/samples/vmi_upload_registry.yaml index 27f152dc1..b1fd6a6ce 100644 --- a/images/virtualization-artifact/config/samples/vmi_upload_registry.yaml +++ b/images/virtualization-artifact/config/samples/vmi_upload_registry.yaml @@ -5,6 +5,6 @@ metadata: spec: storage: ContainerRegistry persistentVolumeClaim: - storageClass: "local-path" + storageClassName: "local-path" dataSource: type: "Upload" diff --git a/images/virtualization-artifact/config/samples/win_vm_from_iso_image.yaml b/images/virtualization-artifact/config/samples/win_vm_from_iso_image.yaml index 91c88f3d2..d0ddbc21c 100644 --- a/images/virtualization-artifact/config/samples/win_vm_from_iso_image.yaml +++ b/images/virtualization-artifact/config/samples/win_vm_from_iso_image.yaml @@ -29,7 +29,7 @@ metadata: spec: persistentVolumeClaim: size: 100Gi - storageClass: local-path + storageClassName: local-path --- apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualMachine diff --git a/images/virtualization-artifact/config/vm_sysprep.yaml b/images/virtualization-artifact/config/vm_sysprep.yaml index 0a11a46fb..a2e0bfc15 100644 --- a/images/virtualization-artifact/config/vm_sysprep.yaml +++ b/images/virtualization-artifact/config/vm_sysprep.yaml @@ -35,7 +35,7 @@ metadata: spec: persistentVolumeClaim: size: 50Gi - storageClass: linstor-test-data-r1 + storageClassName: linstor-test-data-r1 --- apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualMachine diff --git a/images/virtualization-artifact/pkg/controller/vm_reconciler_test.go b/images/virtualization-artifact/pkg/controller/vm_reconciler_test.go index b15e7a7d0..657b3a7bd 100644 --- a/images/virtualization-artifact/pkg/controller/vm_reconciler_test.go +++ b/images/virtualization-artifact/pkg/controller/vm_reconciler_test.go @@ -694,14 +694,14 @@ var _ = Describe("Apply VM changes with manual approval", func() { "path": Equal("cpu"), "operation": Equal(string(vmchange.ChangeReplace)), "currentValue": MatchAllKeys(Keys{ - "virtualMachineCPUModel": BeEquivalentTo(vmcpuName), - "cores": BeEquivalentTo(cpuStartingCores), - "coreFraction": Equal(cpuStartingCoreFraction), + "virtualMachineCPUModelName": BeEquivalentTo(vmcpuName), + "cores": BeEquivalentTo(cpuStartingCores), + "coreFraction": Equal(cpuStartingCoreFraction), }), "desiredValue": MatchAllKeys(Keys{ - "virtualMachineCPUModel": BeEquivalentTo(vmcpuName), - "cores": BeEquivalentTo(cpuNewCores), - "coreFraction": Equal(cpuNewCoreFraction), + "virtualMachineCPUModelName": BeEquivalentTo(vmcpuName), + "cores": BeEquivalentTo(cpuNewCores), + "coreFraction": Equal(cpuNewCoreFraction), }), }), "memory.size": MatchAllKeys(Keys{ diff --git a/templates/cdi/cdi.yaml b/templates/cdi/cdi.yaml index 065505e9e..ebb56659f 100644 --- a/templates/cdi/cdi.yaml +++ b/templates/cdi/cdi.yaml @@ -9,7 +9,7 @@ apiVersion: internal.virtualization.deckhouse.io/v1beta1 kind: DVPInternalCDI metadata: - name: cdi + name: config namespace: d8-{{ .Chart.Name }} {{- include "helm_lib_module_labels" (list .) | nindent 2 }} spec: diff --git a/templates/kubevirt/kubevirt.yaml b/templates/kubevirt/kubevirt.yaml index e82359c1a..f15556e2f 100644 --- a/templates/kubevirt/kubevirt.yaml +++ b/templates/kubevirt/kubevirt.yaml @@ -9,7 +9,7 @@ apiVersion: internal.virtualization.deckhouse.io/v1 kind: DVPInternalKubeVirt metadata: - name: kubevirt + name: config namespace: d8-{{ .Chart.Name }} {{- include "helm_lib_module_labels" (list .) | nindent 2 }} spec: diff --git a/tests/performance/templates/vmds.yaml b/tests/performance/templates/vmds.yaml index 6221df21b..8d466050f 100644 --- a/tests/performance/templates/vmds.yaml +++ b/tests/performance/templates/vmds.yaml @@ -26,7 +26,7 @@ spec: persistentVolumeClaim: size: {{ $.Values.diskSize }} {{- if $.Values.storageClass }} - storageClass: {{ $.Values.storageClass }} + storageClassName: {{ $.Values.storageClass }} {{- end }} dataSource: type: "ObjectRef" diff --git a/tests/performance/values.yaml b/tests/performance/values.yaml index 981a3e7f2..cf8429f83 100644 --- a/tests/performance/values.yaml +++ b/tests/performance/values.yaml @@ -9,5 +9,5 @@ spec: resources: "all" resourcesPrefix: "performance" diskSize: 3Gi -storageClass: "" +storageClassName: "" imageURL: "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"