From ce38e10d0941f894e306a9d71bb3b12a5c8857bd Mon Sep 17 00:00:00 2001 From: Pavel Tishkov Date: Wed, 4 Sep 2024 11:34:04 +0300 Subject: [PATCH] docs(module): add module components info and other small fixes (#308) docs(module): add module components info Signed-off-by: Pavel Tishkov --- crds/clustervirtualimage.yaml | 2 +- crds/doc-ru-clustervirtualimage.yaml | 9 +- crds/doc-ru-virtualdisk.yaml | 37 +- crds/doc-ru-virtualimage.yaml | 9 +- crds/doc-ru-virtualmachine.yaml | 7 +- crds/virtualdisk.yaml | 30 +- crds/virtualimage.yaml | 2 +- crds/virtualmachine.yaml | 11 +- docs/{ADMIN_GUIDE.ru.md => ADMIN_GUIDE_RU.md} | 4 +- ...u.md => CHARACTERISTICS_DESCRIPTION_RU.md} | 0 ...ONFIGURATION.ru.md => CONFIGURATION_RU.md} | 0 docs/{CR.ru.md => CR_RU.md} | 0 docs/EXAMPLES.md | 45 ++- docs/FAQ.md | 2 +- docs/FAQ.ru.md | 264 ++++++------- docs/{INSTALL.ru.md => INSTALL_RU.md} | 56 +-- docs/README.md | 20 +- docs/{README.ru.md => README_RU.md} | 17 + docs/{USER_GUIDE.ru.md => USER_GUIDE_RU.md} | 367 +++++++++--------- docs/images/vd-immediate.drawio | 90 +++++ docs/images/vd-wffc.drawio | 127 ++++++ openapi/config-values.yaml | 2 +- openapi/doc-ru-config-values.yaml | 4 +- 23 files changed, 727 insertions(+), 378 deletions(-) rename docs/{ADMIN_GUIDE.ru.md => ADMIN_GUIDE_RU.md} (98%) rename docs/{CHARACTERISTICS_DESCRIPTION.ru.md => CHARACTERISTICS_DESCRIPTION_RU.md} (100%) rename docs/{CONFIGURATION.ru.md => CONFIGURATION_RU.md} (100%) rename docs/{CR.ru.md => CR_RU.md} (100%) rename docs/{INSTALL.ru.md => INSTALL_RU.md} (87%) rename docs/{README.ru.md => README_RU.md} (63%) rename docs/{USER_GUIDE.ru.md => USER_GUIDE_RU.md} (68%) create mode 100644 docs/images/vd-immediate.drawio create mode 100644 docs/images/vd-wffc.drawio diff --git a/crds/clustervirtualimage.yaml b/crds/clustervirtualimage.yaml index fd7bff579..b1a9bf8c3 100644 --- a/crds/clustervirtualimage.yaml +++ b/crds/clustervirtualimage.yaml @@ -58,7 +58,7 @@ spec: * `HTTP` — create an image from a file published on http/https service at a given url * `ContainerImage` — create the image from image stored in container registry. - * `ObjectRef` — fill the cluster image from another existing `VirtualImage` or `ClusterVirtualImage`. + * `ObjectRef` — fill the disk from another existing resource. * `Upload` — fill the image with data, uploaded by user via the special interface. http: type: object diff --git a/crds/doc-ru-clustervirtualimage.yaml b/crds/doc-ru-clustervirtualimage.yaml index 0992cd226..5de4ee8eb 100644 --- a/crds/doc-ru-clustervirtualimage.yaml +++ b/crds/doc-ru-clustervirtualimage.yaml @@ -88,11 +88,10 @@ spec: description: | Доступные типы источников для создания образа: - * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере. - * `ContainerImage` — создать образ из образа в container registry. - * `VirtualImage` — создать новый образ из существующего `VirtualImage`. - * `ClusterVirtualImage` — создать новый образ из существующего `ClusterVirtualImage`. - * `Upload` — загрузить образ вручную, через веб-интерфейс. + * `HTTP` — создать диск из файла, опубликованного на HTTP/HTTPS-сервере. + * `ContainerImage` — создать диск из образа в container registry. + * `ObjectRef` — создать диск из существующего ресурса. + * `Upload` — загрузить образ диска вручную. status: properties: conditions: diff --git a/crds/doc-ru-virtualdisk.yaml b/crds/doc-ru-virtualdisk.yaml index 5a7e4faa2..75665eaf0 100644 --- a/crds/doc-ru-virtualdisk.yaml +++ b/crds/doc-ru-virtualdisk.yaml @@ -4,9 +4,10 @@ spec: schema: openAPIV3Schema: description: | - Описывает диск виртуальной машины, который может быть смонтирован в `VirtualMachines`. После создания ресурса изменить можно только размер диска `.spec.persistentVolumeClaim.size`, все остальные поля неизменяемы. + Ресурс `VirtualDisk` описывает желаемую конфигурацию диска виртуальной машины. `VirtualDisk` может быть смонтирован в виртуальной машине статически, указав его в списке дисков `.spec.blockDeviceRefs`, или смонтирован «на лету» с помощью ресурса `VirtualMachineBlockDeviceAttachments`. + + После создания `VirtualDisk` можно изменить только размер диска `.spec.persistentVolumeClaim.size`, все остальные поля неизменяемы. - Под капотом ресурса создается PVC, в который заливаются данные из источника. properties: spec: properties: @@ -83,9 +84,8 @@ spec: * `HTTP` — создать диск из файла, опубликованного на HTTP/HTTPS-сервере. * `ContainerImage` — создать диск из образа в container registry. - * `VirtualImage` — создать диск из существующего `VirtualImage`. - * `ClusterVirtualImage` — создать диск из существующего `ClusterVirtualImage`. - * `Upload` — загрузить образ диска вручную, через веб-интерфейс. + * `ObjectRef` — создать диск из существующего ресурса. + * `Upload` — загрузить образ диска вручную. persistentVolumeClaim: description: | Настройки для создания PVC для хранения диска. @@ -93,9 +93,34 @@ spec: size: description: | Желаемый размер PVC для хранения диска. Если диск создается из образа, то размер должен быть не меньше, чем исходный образ в распакованном состоянии. + + Данный параметр можно опустить, если задан блок `.spec.dataSource`, в этом случае контроллер определит размер диска автоматически, на основе размера распакованного образа из источника указанного в `.spec.dataSource`. + storageClassName: description: | - Имя класса StorageClass, требуемого для PersistentVolumeClaim. Дополнительная информация — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1. + Имя StorageClass, требуемого для PersistentVolumeClaim. Дополнительная информация — https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1. + + При создании дисков пользователь может указать требуемый StorageClass для создания диска, либо не указывать явно и в этом случае будет использован StorageClass доступный по умолчанию. + + Особенности диска и поведение виртуальной машины зависят от выбранного StorageClass. + + Параметр `VolumeBindingMode` в StorageClass влияет на процесс создания дисков: + + - `Immediate` - Диск будет создан и доступен для использования сразу после создания. + - `WaitForFirstConsumer` - Диск создается только при его использовании в виртуальной машине. При этом диск будет создан на узле, где будет запущена виртуальная машина. + + StorageClass может поддерживать различные настройки хранения: + + - Создание блочного устройства (`Block`) или файловой системы (`FileSystem`). + - Множественный доступ (`ReadWriteMany`) или единичный доступ (`ReadWriteOnce`). `ReadWriteMany`-диски поддерживают множественный доступ, что позволяет выполнять живую миграцию виртуальных машин. В отличие от них, `ReadWriteOnce`-диски, ограниченные доступом только с одного узла, не могут обеспечить такую возможность. + + Для известных типов хранилищ платформа самостоятельно определит наиболее эффективные настройки при создании дисков (в порядке убывания приоритетов): + + 1. `Block` + `ReadWriteMany` + 2. `FileSystem` + `ReadWriteMany` + 3. `Block` + `ReadWriteOnce` + 4. `FileSystem` + `ReadWriteOnce` + status: properties: conditions: diff --git a/crds/doc-ru-virtualimage.yaml b/crds/doc-ru-virtualimage.yaml index 40dc1c7b7..578fe8258 100644 --- a/crds/doc-ru-virtualimage.yaml +++ b/crds/doc-ru-virtualimage.yaml @@ -77,11 +77,10 @@ spec: description: | Тип источника, из которого будет создан образ: - * `HTTP` — создать образ из файла, опубликованного на HTTP/HTTPS-сервере. - * `ContainerImage` — создать образ из образа в container registry. - * `VirtualImage` — создать образ из другого существующего `VirtualImage`. - * `ClusterVirtualImage` — создать образ из другого существующего `ClusterVirtualImage`. - * `Upload` — загрузить образ вручную, через веб-интерфейс. + * `HTTP` — создать диск из файла, опубликованного на HTTP/HTTPS-сервере. + * `ContainerImage` — создать диск из образа в container registry. + * `ObjectRef` — создать диск из существующего ресурса. + * `Upload` — загрузить образ диска вручную. storage: description: | Тип хранилища для хранения образа: diff --git a/crds/doc-ru-virtualmachine.yaml b/crds/doc-ru-virtualmachine.yaml index 9e6cb703d..9f8e99120 100644 --- a/crds/doc-ru-virtualmachine.yaml +++ b/crds/doc-ru-virtualmachine.yaml @@ -4,7 +4,12 @@ spec: schema: openAPIV3Schema: description: | - Конфигурация виртуальной машины (ВМ). + Ресурс, описывающий конфигурацию и статус виртуальной машины (ВМ). + Для запущенной ВМ изменение параметров может быть применено только после перезагрузки ВМ, за исключением следующих параметров (они применяются на лету): + - `.metadata.labels` + - `.metadata.annotations` + - `.spec.disruptions.restartApprovalMode` + - `.spec.disruptions.runPolicy` properties: spec: properties: diff --git a/crds/virtualdisk.yaml b/crds/virtualdisk.yaml index 55aa67dd8..c405f5633 100644 --- a/crds/virtualdisk.yaml +++ b/crds/virtualdisk.yaml @@ -27,16 +27,14 @@ spec: openAPIV3Schema: type: object description: | - 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. + The `VirtualDisk` resource describes the desired virtual machine disk configuration. A `VirtualDisk` can be mounted statically in the virtual machine by specifying it in the `.spec.blockDeviceRefs` disk list, or mounted on-the-fly using the `VirtualMachineBlockDeviceAttachments` resource. - A PVC is created under the hood of the resource, into which the data from the source is filled. + Once `VirtualDisk` is created, only the disk size `.spec.persistentVolumeClaim.size` can be changed, all other fields are immutable. required: - spec properties: spec: type: object - required: - - persistentVolumeClaim properties: bindingMode: type: string @@ -57,11 +55,31 @@ spec: type: string 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. + + This parameter can be omitted if the `.spec.dataSource` block is specified, in which case the controller will determine the disk size automatically, based on the size of the extracted image from the source specified in `.spec.dataSource`. pattern: "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" 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 + + When creating disks, the user can specify the required StorageClass to create the disk, or not explicitly, in which case the default StorageClass will be used. + + The disk features and virtual machine behavior depend on the selected StorageClass. + + The `VolumeBindingMode` parameter in the StorageClass affects the disk creation process: + - `Immediate` - The disk will be created and available for use immediately after creation. + - `WaitForFirstConsumer` - The disk will be created only when it is used in a virtual machine. In this case, the disk will be created on the host where the virtual machine will be started. + + StorageClass can support different storage settings: + - Creating a block device (`Block`) or file system (`FileSystem`). + - Multiple Access (`ReadWriteMany`) or Single Access (`ReadWriteOnce`). `ReadWriteMany` disks support multiple access, which enables live migration of virtual machines. In contrast, `ReadWriteOnce` disks, which are limited to access from only one host, cannot provide this capability. + + For known storage types, the platform will independently determine the most effective settings when creating disks (in descending order of priority): + 1. `Block` + `ReadWriteMany` + 2. `FileSystem` + `ReadWriteMany` + 3. `Block` + `ReadWriteOnce` + 4. `FileSystem` + `ReadWriteOnce` dataSource: type: object description: | @@ -81,7 +99,7 @@ spec: * `HTTP` — create an image from a file published on http/https service at a given url * `ContainerImage` — create the image from image stored in container registry. - * `ObjectRef` — fill the disk from another existing `VirtualImage` or `ClusterVirtualImage`. + * `ObjectRef` — fill the disk from another existing resource. * `Upload` — fill the disk with data, uploaded by user via the special interface. http: type: object @@ -114,7 +132,7 @@ spec: type: string format: byte description: | - The CA chain in base64 format to verify the url. + A certificate bundle in Base64 format to verify the TLS certificate of the server hosting the image. example: | YWFhCg== checksum: diff --git a/crds/virtualimage.yaml b/crds/virtualimage.yaml index ad1306654..6d2ceeb65 100644 --- a/crds/virtualimage.yaml +++ b/crds/virtualimage.yaml @@ -68,7 +68,7 @@ spec: * `HTTP` — fill the image with data from some external http/https url. * `ContainerImage` — use an image, stored in container registry image. - * `ObjectRef` — fill the disk from another existing `VirtualImage` or `ClusterVirtualImage`. + * `ObjectRef` — fill the disk from another existing resource. * `Upload` — fill the image with data, uploaded by user via the special interface. http: type: object diff --git a/crds/virtualmachine.yaml b/crds/virtualmachine.yaml index 79b138b62..667efe9b2 100644 --- a/crds/virtualmachine.yaml +++ b/crds/virtualmachine.yaml @@ -28,7 +28,12 @@ spec: openAPIV3Schema: type: object description: | - Virtual Machine (VM) Configuration. + This resource describes the configuration and status of a virtual machine (VM). + For a running VM, parameter changes can only be applied after the VM is rebooted, except for the following parameters (they are applied on the fly): + - `.metadata.labels`. + - `.metadata.annotations`. + - `.spec.disruptions.restartApprovalMode`. + - `.spec.disruptions.runPolicy`. required: - spec properties: @@ -1156,6 +1161,10 @@ spec: type: string jsonPath: .status.conditions[?(@.type=="AgentReady")].status priority: 1 + - name: Agent + type: string + jsonPath: .status.conditions[?(@.type=="Migratable")].status + priority: 1 - name: Node type: string jsonPath: .status.nodeName diff --git a/docs/ADMIN_GUIDE.ru.md b/docs/ADMIN_GUIDE_RU.md similarity index 98% rename from docs/ADMIN_GUIDE.ru.md rename to docs/ADMIN_GUIDE_RU.md index fa782318e..84723b09f 100644 --- a/docs/ADMIN_GUIDE.ru.md +++ b/docs/ADMIN_GUIDE_RU.md @@ -165,7 +165,7 @@ generic Ready 6d1h - `host-passthrough` - используется физический CPU узла платформы напрямую без каких-либо изменений. При использовании данного класса, гостевая ВМ может быть мигрирована только на целевой узел, у которого CPU точно соответствует CPU исходного узла. - `generic` - универсальная модель CPU, использующая достаточно старую, но поддерживаемую большинством современных процессоров модель Nehalem. Это позволяет запускать ВМ на любых узлах кластера с возможностью живой миграции. -`VirtualMachineClass` является обязательным для узказания в конфигурации виртуальной машины, пример того как указывать класс в спецификаии ВМ: +`VirtualMachineClass` является обязательным для узказания в конфигурации виртуальной машины, пример того как указывать класс в спецификации ВМ: ```yaml apiVersion: virtualization.deckhouse.io/v1alpha2 @@ -342,7 +342,7 @@ spec: type: Discovery ``` -- чтобы создать vCPU конкретного процессора с предварительно определенным набором интрукций, используем тип `type: Model`. Предварительно, чтобы получить перечень названий поддерживаемых CPU для узла кластера, выполните команду: +- чтобы создать vCPU конкретного процессора с предварительно определенным набором инструкций, используем тип `type: Model`. Предварительно, чтобы получить перечень названий поддерживаемых CPU для узла кластера, выполните команду: ```bash kubectl get nodes -o json | jq '.metadata.labels | to_entries[] | select(.key | test("cpu-model")) | .key | split("/")[1]' -r diff --git a/docs/CHARACTERISTICS_DESCRIPTION.ru.md b/docs/CHARACTERISTICS_DESCRIPTION_RU.md similarity index 100% rename from docs/CHARACTERISTICS_DESCRIPTION.ru.md rename to docs/CHARACTERISTICS_DESCRIPTION_RU.md diff --git a/docs/CONFIGURATION.ru.md b/docs/CONFIGURATION_RU.md similarity index 100% rename from docs/CONFIGURATION.ru.md rename to docs/CONFIGURATION_RU.md diff --git a/docs/CR.ru.md b/docs/CR_RU.md similarity index 100% rename from docs/CR.ru.md rename to docs/CR_RU.md diff --git a/docs/EXAMPLES.md b/docs/EXAMPLES.md index 9dcfd9fd3..f23700c26 100644 --- a/docs/EXAMPLES.md +++ b/docs/EXAMPLES.md @@ -13,7 +13,23 @@ Example of creating a virtual machine with Ubuntu 22.04. kubectl create ns vms ``` -2. Let's create a virtual disk from an external source: +2. Let's create a virtual image from an external source: + +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualImage +metadata: + name: ubuntu + namespace: vms +spec: + storage: ContainerRegistry + dataSource: + type: HTTP + http: + url: "https://cloud-images.ubuntu.com/minimal/releases/jammy/release-20230615/ubuntu-22.04-minimal-cloudimg-amd64.img" +``` + +3. Let's create a virtual disk from created image: ```yaml apiVersion: virtualization.deckhouse.io/v1alpha2 @@ -24,11 +40,12 @@ metadata: spec: persistentVolumeClaim: size: 10Gi - storageClassName: linstor-thin-r2 # Substitute your SC name `kubectl get storageclass`. + storageClassName: linstor-thin-r2 dataSource: - type: HTTP - http: - url: "https://cloud-images.ubuntu.com/minimal/releases/jammy/release-20230615/ubuntu-22.04-minimal-cloudimg-amd64.img" + type: ObjectRef + objectRef: + kind: VirtualImage + name: ubuntu ``` After creating a `VirtualDisk` in the vms namespace, a `pod` named `vd-importer-*` will start, which will load the specified image. @@ -263,18 +280,22 @@ kubectl get clustervirtualimages -o wide ## Disks -Disks are used in virtual machines to write and store data. The storage provided by the platform is used to store disks. +The disks in virtual machines are required to write and store data, allowing applications and operating systems to function fully. Under the hood of these disks is the storage provided by the platform. -1. To see the available options, run the command: +To find out the available storage on the platform, run the following command: ```bash kubectl get storageclass -# NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE -# ceph-pool-r2-csi-rbd rbd.csi.ceph.com Delete WaitForFirstConsumer true 85d -# linstor-thin-r1 linstor.csi.linbit.com Delete WaitForFirstConsumer true 27d -# linstor-thin-r2 linstor.csi.linbit.com Delete WaitForFirstConsumer true 27d -# linstor-thin-r3 linstor.csi.linbit.com Delete WaitForFirstConsumer true 27d +# NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +# ceph-pool-r2-csi-rbd rbd.csi.ceph.com Delete Immediate true 85d +# i-linstor-thin-r1 replicated.csi.storage.deckhouse.io Delete Immediate true 19d +# i-linstor-thin-r2 replicated.csi.storage.deckhouse.io Delete Immediate true 19d +# i-linstor-thin-r3 replicated.csi.storage.deckhouse.io Delete Immediate true 19d +# linstor-thin-r1 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 19d +# linstor-thin-r2 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 19d +# linstor-thin-r3 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 19d +# nfs-4-1-wffc nfs.csi.k8s.io Delete WaitForFirstConsumer true 24h ``` ### Creating a blank disk diff --git a/docs/FAQ.md b/docs/FAQ.md index f04418a86..4ef4e4aac 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -92,7 +92,7 @@ Next, modify the `VirtualMachine` resource and apply the changes: ```yaml spec: # ... - runPolicy: AlwaysON + runPolicy: AlwaysOn # ... blockDeviceRefs: # remove all ClusterVirtualImage resources with iso disks from this section diff --git a/docs/FAQ.ru.md b/docs/FAQ.ru.md index 71b93fb72..2d1115748 100644 --- a/docs/FAQ.ru.md +++ b/docs/FAQ.ru.md @@ -11,73 +11,73 @@ weight: 70 1. Создайте пустой диск для установки ОС: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: VirtualDisk - metadata: - name: win-disk - namespace: default - spec: - persistentVolumeClaim: - size: 100Gi - storageClassName: local-path - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualDisk +metadata: + name: win-disk + namespace: default +spec: + persistentVolumeClaim: + size: 100Gi + storageClassName: local-path +``` 1. Создайте ресурсы с ISO-образами ОС Windows и драйверами virtio: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: ClusterVirtualImage - metadata: - name: win-11-iso - spec: - dataSource: - type: HTTP - http: - url: "http://example.com/win11.iso" - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: ClusterVirtualImage +metadata: + name: win-11-iso +spec: + dataSource: + type: HTTP + http: + url: "http://example.com/win11.iso" +``` - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: ClusterVirtualImage - metadata: - name: win-virtio-iso - spec: - dataSource: - type: HTTP - http: - url: "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso" - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: ClusterVirtualImage +metadata: + name: win-virtio-iso +spec: + dataSource: + type: HTTP + http: + url: "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso" +``` 1. Создайте виртуальную машину: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: VirtualMachine - metadata: - name: win-vm - namespace: default - labels: - vm: win - spec: - virtualMachineClassName: generic - runPolicy: Manual - osType: Windows - bootloader: EFI - cpu: - cores: 6 - coreFraction: 50% - memory: - size: 8Gi - enableParavirtualization: true - blockDeviceRefs: - - kind: ClusterVirtualImage - name: win-11-iso - - kind: ClusterVirtualImage - name: win-virtio-iso - - kind: VirtualDisk - name: win-disk - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualMachine +metadata: + name: win-vm + namespace: default + labels: + vm: win +spec: + virtualMachineClassName: generic + runPolicy: Manual + osType: Windows + bootloader: EFI + cpu: + cores: 6 + coreFraction: 50% + memory: + size: 8Gi + enableParavirtualization: true + blockDeviceRefs: + - kind: ClusterVirtualImage + name: win-11-iso + - kind: ClusterVirtualImage + name: win-virtio-iso + - kind: VirtualDisk + name: win-disk +``` 1. После создания ресурса виртуальная машина будет запущена. К ней необходимо подключиться, и с помощью графического установщика выполнить установку ОС и драйверов `virtio`. @@ -91,16 +91,16 @@ d8 v vnc -n default win-vm 1. Модифицируйте ресурс `VirtualMachine` и примените изменения: - ```yaml - spec: - # ... - runPolicy: AlwaysON - # ... - blockDeviceRefs: - # Удалить из блока все ресурсы ClusterVirtualImage с ISO-дисками. - - kind: VirtualDisk - name: win-disk - ``` +```yaml +spec: + # ... + runPolicy: AlwaysOn + # ... + blockDeviceRefs: + # Удалить из блока все ресурсы ClusterVirtualImage с ISO-дисками. + - kind: VirtualDisk + name: win-disk +``` 1. После внесенных изменений виртуальная машина запустится, для продолжения работы с ней используйте команду: @@ -135,58 +135,58 @@ docker push docker.io/username/image:latest В качестве примера приведена виртуальная машина с HTTP-сервисом, опубликованным на порте 80, и следующим набором меток: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: VirtualMachine - metadata: - name: web - labels: - vm: web - spec: ... - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualMachine +metadata: + name: web + labels: + vm: web +spec: ... +``` 2. Чтобы направить сетевой трафик на 80-й порт виртуальной машины, создайте сервис: - ```yaml - apiVersion: v1 - kind: Service - metadata: - name: svc-1 - spec: - ports: - - name: http - port: 8080 - protocol: TCP - targetPort: 80 - selector: - app: old - ``` +```yaml +apiVersion: v1 +kind: Service +metadata: + name: svc-1 +spec: + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 80 + selector: + app: old +``` Можно изменять метки виртуальной машины без необходимости перезапуска, что позволяет настраивать перенаправление сетевого трафика между различными сервисами в реальном времени. Предположим, что был создан новый сервис и требуется перенаправить трафик на виртуальную машину от этого сервиса: - ```yaml - apiVersion: v1 - kind: Service - metadata: - name: svc-2 - spec: - ports: - - name: http - port: 8080 - protocol: TCP - targetPort: 80 - selector: - app: new - ``` +```yaml +apiVersion: v1 +kind: Service +metadata: + name: svc-2 +spec: + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 80 + selector: + app: new +``` При изменении метки на виртуальной машине, трафик с сервиса `svc-2` будет перенаправлен на виртуальную машину: - ```yaml - metadata: - labels: - app: old - ``` +```yaml +metadata: + labels: + app: old +``` # Как увеличить размер DVCR @@ -194,34 +194,34 @@ docker push docker.io/username/image:latest 1. Проверьте текущий размер dvcr: - ```shell - kubectl get mc virtualization -o jsonpath='{.spec.settings.dvcr.storage.persistentVolumeClaim}' - #Output - {"size":"58G","storageClass":"linstor-thick-data-r1"} - ``` +```shell +kubectl get mc virtualization -o jsonpath='{.spec.settings.dvcr.storage.persistentVolumeClaim}' +#Output +{"size":"58G","storageClass":"linstor-thick-data-r1"} +``` 1. Задайте размер: - ```shell - kubectl patch mc virtualization \ - --type merge -p '{"spec": {"settings": {"dvcr": {"storage": {"persistentVolumeClaim": {"size":"59G"}}}}}}' +```shell +kubectl patch mc virtualization \ + --type merge -p '{"spec": {"settings": {"dvcr": {"storage": {"persistentVolumeClaim": {"size":"59G"}}}}}}' - #Output - moduleconfig.deckhouse.io/virtualization patched - ``` +#Output +moduleconfig.deckhouse.io/virtualization patched +``` 1. Проверьте изменение размера: - ```shell - kubectl get mc virtualization -o jsonpath='{.spec.settings.dvcr.storage.persistentVolumeClaim}' - #Output - {"size":"59G","storageClass":"linstor-thick-data-r1"} +```shell +kubectl get mc virtualization -o jsonpath='{.spec.settings.dvcr.storage.persistentVolumeClaim}' +#Output +{"size":"59G","storageClass":"linstor-thick-data-r1"} - kubectl get pvc dvcr -n d8-virtualization - #Output - NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE - dvcr Bound pvc-6a6cedb8-1292-4440-b789-5cc9d15bbc6b 57617188Ki RWO linstor-thick-data-r1 7d - ``` +kubectl get pvc dvcr -n d8-virtualization +#Output +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE +dvcr Bound pvc-6a6cedb8-1292-4440-b789-5cc9d15bbc6b 57617188Ki RWO linstor-thick-data-r1 7d +``` ## Как предоставить файл ответов windows(Sysprep) diff --git a/docs/INSTALL.ru.md b/docs/INSTALL_RU.md similarity index 87% rename from docs/INSTALL.ru.md rename to docs/INSTALL_RU.md index 9ed553529..c9f81f849 100644 --- a/docs/INSTALL.ru.md +++ b/docs/INSTALL_RU.md @@ -14,7 +14,7 @@ weight: 15 - ядро Linux на узлах кластера должно быть версии 5.7 или более новой; - прочие требования к узлам кластера описаны в документе: [Подготовка к production](https://deckhouse.ru/guides/production.html). -1. Включите необходимые модули. +2. Включите необходимые модули. Для хранения данных виртуальных машин необходимо включить один из следующих модулей согласно инструкции по их установке: @@ -23,33 +23,33 @@ weight: 15 Также возможно использовать другие варианты хранилищ, поддерживающие создание блочных устройств с режимом доступа `RWX` (`ReadWriteMany`). -1. Создайте манифест mc.yaml со следующим содержимым: - - ```yaml - apiVersion: deckhouse.io/v1alpha1 - kind: ModuleConfig - metadata: - name: virtualization - spec: - # Включаем модуль. - enabled: true - version: 1 - settings: - # Перечень подсетей для виртуальных машин. - virtualMachineCIDRs: - - 10.10.10.0/24 - - 10.20.10.0/24 - - 10.30.10.0/24 - - 11.11.22.33/32 - # Настройки параметров хранилища образов виртуальных машин. - dvcr: - storage: - persistentVolumeClaim: - size: 50G - type: PersistentVolumeClaim - ``` - - Примените созданный манифест с использованием команды `d8 k apply -f mc.yaml`. +3. Создайте манифест mc.yaml со следующим содержимым: + +```yaml +apiVersion: deckhouse.io/v1alpha1 +kind: ModuleConfig +metadata: + name: virtualization +spec: +# Включаем модуль. +enabled: true +version: 1 +settings: + # Перечень подсетей для виртуальных машин. + virtualMachineCIDRs: + - 10.10.10.0/24 + - 10.20.10.0/24 + - 10.30.10.0/24 + - 11.11.22.33/32 + # Настройки параметров хранилища образов виртуальных машин. + dvcr: + storage: + persistentVolumeClaim: + size: 50G + type: PersistentVolumeClaim +``` + +Примените созданный манифест с использованием команды `d8 k apply -f mc.yaml`. {{< alert level="info" >}} Полный перечень параметров конфигурации приведен в разеле ["Настройки"](./configuration.html) diff --git a/docs/README.md b/docs/README.md index f29b5d1e1..c6e858b73 100644 --- a/docs/README.md +++ b/docs/README.md @@ -79,6 +79,23 @@ The module includes the following components: - Virtualization-API - controller that implements a user API for creating and managing virtual machine resources. - Routing Controller (ROUTER) - A controller that manages routes to provide network connectivity for virtual machines. +List of controllers and operators deployed in the `d8-virtualization` namespace after enabling the module + +| Name | Component | Comment | +| ----------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `cdi-operator-*` | CORE | The virtualization kernel component for disk and image management. | +| `cdi-apiserver-*` | CORE | The virtualization kernel component for disk and image management. | +| `cdi-deployment-*` | CORE | The virtualization kernel component for disk and image management. | +| `dvcr-*` | DVCR | A registry for storing images | +| `virt-api-*` | CORE | A component of the virtualization kernel for disk and image management. | +| `virt-controller-*` | CORE | The virtualization kernel component for disk and image management. | +| `virt-exportproxy-*` | CORE | The virtualization kernel component for disk and image management. | +| `virt-handler-*` | CORE | A component of the virtualization kernel for disk and image management. Must be present on all nodes in the cluster where the VM will be running. | +| `virt-operator-*` | CORE | The component of the virtualization kernel for disk and image management. | +| `virtualization-api-*` | API | API for creating and managing module resources (images, disks, VMs, ...) | +| `virtualization-controller-*` | API | API for creating and managing module resources (images, disks, VMs, ...) | +| `vm-route-forge-*` | ROUTER | Router, for configuring routes to VMs. Must be present on all nodes in the cluster where the VM will be running. | + The API provides capabilities for creating and managing the following resources: - Virtual Images @@ -114,6 +131,7 @@ Platform-provided storage (`PVC`) is used to store disks. ### Virtual Machine Classes A virtual machine class is designed for: + - configuring the type of virtual machine vCPU - control the placement of virtual machines on the platform nodes - configuring virtual machine resources (vCPU, memory) for more optimal planning and placement of virtual machines on the platform nodes. @@ -155,7 +173,7 @@ The following table shows the access matrix for these roles | D | delete | delete, deletecollection | | Resource | User | PrivilegedUser | Editor | Admin | ClusterEditor | ClusterAdmin | -|--------------------------------------|------|----------------|--------|-------|---------------|--------------| +| ------------------------------------ | ---- | -------------- | ------ | ----- | ------------- | ------------ | | virtualmachines | R | R | CRUD | CRUD | CRUD | CRUD | | virtualdisks | R | R | CRUD | CRUD | CRUD | CRUD | | virtualimages | R | R | R | CRUD | CRUD | CRUD | diff --git a/docs/README.ru.md b/docs/README_RU.md similarity index 63% rename from docs/README.ru.md rename to docs/README_RU.md index ffef176a4..cd339b7d9 100644 --- a/docs/README.ru.md +++ b/docs/README_RU.md @@ -33,6 +33,23 @@ Deckhouse Virtualization Platform позволяет декларативно с - Virtualization-API (API) — контроллер, реализующий API пользователя для создания и управления ресурсами виртуальных машин. - Контроллер маршрутизации (ROUTER) - контроллер, управляющий маршрутами для обеспечения сетевой связности виртуальных машин. +Перечень контроллеров и операторов, разворачивающихся в неймспейсе `d8-virtualization` после включения модуля + +| Название | Компонент | Комментарий | +| ----------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `cdi-operator-*` | CORE | Компонент ядра виртуализации для управления дисками и образами. | +| `cdi-apiserver-*` | CORE | Компонент ядра виртуализации для управления дисками и образами. | +| `cdi-deployment-*` | CORE | Компонент ядра виртуализации для управления дисками и образами. | +| `dvcr-*` | DVCR | Реестр для хранения образов. | +| `virt-api-*` | CORE | Компонент ядра виртуализации для управления дисками и образами. | +| `virt-controller-*` | CORE | Компонент ядра виртуализации для управления дисками и образами. | +| `virt-exportproxy-*` | CORE | Компонент ядра виртуализации для управления дисками и образами. | +| `virt-handler-*` | CORE | Компонент ядра виртуализации для управления дисками и образами. Должен присутствовать на всех узлах кластера, где будут запускается ВМ. | +| `virt-operator-*` | CORE | Компонент ядра виртуализации для управления дисками и образами. | +| `virtualization-api-*` | API | API для создания и управления ресурсами модуля (образы, диски, ВМ, ..) | +| `virtualization-controller-*` | API | API для создания и управления ресурсами модуля (образы, диски, ВМ, ..) | +| `vm-route-forge-*` | ROUTER | Роутер, для настройки маршрутов до ВМ. Должен присутствовать на всех узлах кластера, где буду запускается ВМ. | + API предоставляет возможности для декларативного создания, модификации и удаления следующих ресурсов: - образы виртуальных машин и загрузочные образы; diff --git a/docs/USER_GUIDE.ru.md b/docs/USER_GUIDE_RU.md similarity index 68% rename from docs/USER_GUIDE.ru.md rename to docs/USER_GUIDE_RU.md index 63de72637..6328f422e 100644 --- a/docs/USER_GUIDE.ru.md +++ b/docs/USER_GUIDE_RU.md @@ -14,99 +14,116 @@ weight: 50 1. Создайте namespace для виртуальных машин с помощью команды: - ```bash - kubectl create ns vms - ``` +```bash + kubectl create ns vms +``` -2. Создайте диск виртуальной машины из внешнего источника. Пример: +2. Создайте образ виртуальной машины из внешнего источника. Пример: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: VirtualDisk - metadata: - name: linux-disk - namespace: vms - spec: - persistentVolumeClaim: - size: 10Gi - storageClassName: linstor-thin-r2 # Подставьте ваше название SC `kubectl get storageclass`. - dataSource: - type: HTTP - http: - url: "https://cloud-images.ubuntu.com/minimal/releases/jammy/release-20230615/ubuntu-22.04-minimal-cloudimg-amd64.img" - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualImage +metadata: + name: ubuntu + namespace: vms +spec: + storage: ContainerRegistry + dataSource: + type: HTTP + http: + url: "https://cloud-images.ubuntu.com/minimal/releases/jammy/release-20230615/ubuntu-22.04-minimal-cloudimg-amd64.img" +``` + +3. Создайте диск виртуальной машины из созданного образа. Пример: + +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualDisk +metadata: + name: linux-disk + namespace: vms +spec: + persistentVolumeClaim: + size: 10Gi + storageClassName: linstor-thin-r2 # Подставьте ваше название SC `kubectl get storageclass`. + dataSource: + type: ObjectRef + objectRef: + kind: VirtualImage + name: ubuntu +``` После создания `VirtualDisk` в namespace vms, запустится `pod` с именем `vd-importer-*`, который осуществит загрузку заданного образа. 3. Посмотрите текущий статус ресурса с помощью команды: - ```bash - kubectl -n vms get virtualdisk -o wide +```bash +kubectl -n vms get virtualdisk -o wide - # NAME PHASE CAPACITY PROGRESS STORAGECLASS TARGETPVC AGE - # linux-disk Ready 10Gi 100% linstor-thin-r2 vd-linux-disk-2ee8a41a-a0ed-4a65-8718-c18c74026f3c 5m59s - ``` +# NAME PHASE CAPACITY PROGRESS STORAGECLASS TARGETPVC AGE +# linux-disk Ready 10Gi 100% linstor-thin-r2 vd-linux-disk-2ee8a41a-a0ed-4a65-8718-c18c74026f3c 5m59s +``` 4. Создайте виртуальную машину из следующей спецификации: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: VirtualMachine - metadata: - name: linux-vm - namespace: vms - labels: - vm: linux - spec: - virtualMachineClassName: generic # Класс виртуальный машины, который определяет тп vCPU, политику размера ресурсов и размещение виртуальной машины на узлах кластера. - runPolicy: AlwaysOn # Виртуальная машина должна быть всегда включена. - enableParavirtualization: true # Использовать паравиртуализацию (virtio). - osType: Generic - bootloader: BIOS - cpu: - cores: 1 - coreFraction: 10% # Запросить 10% процессорного времени одного ядра. - memory: - size: 1Gi - provisioning: # Пример cloud-init-сценария для создания пользователя cloud с паролем cloud. - type: UserData - userData: | - #cloud-config - users: - - name: cloud - passwd: $6$rounds=4096$vln/.aPHBOI7BMYR$bBMkqQvuGs5Gyd/1H5DP4m9HjQSy.kgrxpaGEHwkX7KEFV8BS.HZWPitAtZ2Vd8ZqIZRqmlykRCagTgPejt1i. - shell: /bin/bash - sudo: ALL=(ALL) NOPASSWD:ALL - chpasswd: { expire: False } - lock_passwd: false - ssh_authorized_keys: - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTXjTmx3hq2EPDQHWSJN7By1VNFZ8colI5tEeZDBVYAe9Oxq4FZsKCb1aGIskDaiAHTxrbd2efoJTcPQLBSBM79dcELtqfKj9dtjy4S1W0mydvWb2oWLnvOaZX/H6pqjz8jrJAKXwXj2pWCOzXerwk9oSI4fCE7VbqsfT4bBfv27FN4/Vqa6iWiCc71oJopL9DldtuIYDVUgOZOa+t2J4hPCCSqEJK/r+ToHQbOWxbC5/OAufXDw2W1vkVeaZUur5xwwAxIb3wM3WoS3BbwNlDYg9UB2D8+EZgNz1CCCpSy1ELIn7q8RnrTp0+H8V9LoWHSgh3VCWeW8C/MnTW90IR - blockDeviceRefs: - - kind: VirtualDisk - name: linux-disk - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualMachine +metadata: + name: linux-vm + namespace: vms + labels: + vm: linux +spec: + virtualMachineClassName: generic # Класс виртуальный машины, который определяет тп vCPU, политику размера ресурсов и размещение виртуальной машины на узлах кластера. + runPolicy: AlwaysOn # Виртуальная машина должна быть всегда включена. + enableParavirtualization: true # Использовать паравиртуализацию (virtio). + osType: Generic + bootloader: BIOS + cpu: + cores: 1 + coreFraction: 10% # Запросить 10% процессорного времени одного ядра. + memory: + size: 1Gi + provisioning: # Пример cloud-init-сценария для создания пользователя cloud с паролем cloud. + type: UserData + userData: | + #cloud-config + users: + - name: cloud + passwd: $6$rounds=4096$vln/.aPHBOI7BMYR$bBMkqQvuGs5Gyd/1H5DP4m9HjQSy.kgrxpaGEHwkX7KEFV8BS.HZWPitAtZ2Vd8ZqIZRqmlykRCagTgPejt1i. + shell: /bin/bash + sudo: ALL=(ALL) NOPASSWD:ALL + chpasswd: { expire: False } + lock_passwd: false + ssh_authorized_keys: + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTXjTmx3hq2EPDQHWSJN7By1VNFZ8colI5tEeZDBVYAe9Oxq4FZsKCb1aGIskDaiAHTxrbd2efoJTcPQLBSBM79dcELtqfKj9dtjy4S1W0mydvWb2oWLnvOaZX/H6pqjz8jrJAKXwXj2pWCOzXerwk9oSI4fCE7VbqsfT4bBfv27FN4/Vqa6iWiCc71oJopL9DldtuIYDVUgOZOa+t2J4hPCCSqEJK/r+ToHQbOWxbC5/OAufXDw2W1vkVeaZUur5xwwAxIb3wM3WoS3BbwNlDYg9UB2D8+EZgNz1CCCpSy1ELIn7q8RnrTp0+H8V9LoWHSgh3VCWeW8C/MnTW90IR + blockDeviceRefs: + - kind: VirtualDisk + name: linux-disk +``` 5. Проверьте с помощью команды, что виртуальная машина создана и запущена: - ```bash - kubectl -n vms get virtualmachine -o wide +```bash +kubectl -n vms get virtualmachine -o wide - # NAME PHASE CORES COREFRACTION MEMORY NODE IPADDRESS AGE - # linux-vm Running 1 10% 1Gi virtlab-pt-1 10.66.10.2 61s - ``` +# NAME PHASE CORES COREFRACTION MEMORY NODE IPADDRESS AGE +# linux-vm Running 1 10% 1Gi virtlab-pt-1 10.66.10.2 61s +``` 6. Подключитесь с помощью консоли к виртуальной машине (для выхода из консоли необходимо нажать `Ctrl+]`): - ```bash - d8 v console -n vms linux-vm - - # Successfully connected to linux-vm console. The escape sequence is ^] - # - # linux-vm login: cloud - # Password: cloud - # ... - # cloud@linux-vm:~$ - ``` +```bash +d8 v console -n vms linux-vm + +# Successfully connected to linux-vm console. The escape sequence is ^] +# +# linux-vm login: cloud +# Password: cloud +# ... +# cloud@linux-vm:~$ +``` ## Проектные образы @@ -125,28 +142,28 @@ weight: 50 1. Создайте `VirtualImage`: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: VirtualImage - metadata: - name: ubuntu-img - namespace: vms - spec: - storage: ContainerRegistry - dataSource: - type: HTTP - http: - url: "https://cloud-images.ubuntu.com/minimal/releases/jammy/release-20230615/ubuntu-22.04-minimal-cloudimg-amd64.img" - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualImage +metadata: + name: ubuntu-img + namespace: vms +spec: + storage: ContainerRegistry + dataSource: + type: HTTP + http: + url: "https://cloud-images.ubuntu.com/minimal/releases/jammy/release-20230615/ubuntu-22.04-minimal-cloudimg-amd64.img" +``` 2. Проверьте результат с помощью команды: - ```bash - kubectl -n vms get virtualimage -o wide +```bash +kubectl -n vms get virtualimage -o wide - # NAME PHASE CDROM PROGRESS STOREDSIZE UNPACKEDSIZE REGISTRY URL AGE - # ubuntu-img Ready false 100% 285.9Mi 2.2Gi dvcr.d8-virtualization.svc/vi/vms/ubuntu-img 29s - ``` +# NAME PHASE CDROM PROGRESS STOREDSIZE UNPACKEDSIZE REGISTRY URL AGE +# ubuntu-img Ready false 100% 285.9Mi 2.2Gi dvcr.d8-virtualization.svc/vi/vms/ubuntu-img 29s +``` ### Создание и использование образа из container registry @@ -156,114 +173,118 @@ Cформируйте образ для хранения в `container registry` - Загрузите образ локально: - ```bash - curl -L https://cloud-images.ubuntu.com/minimal/releases/jammy/release-20230615/ubuntu-22.04-minimal-cloudimg-amd64.img -o ubuntu2204.img - ``` +```bash +curl -L https://cloud-images.ubuntu.com/minimal/releases/jammy/release-20230615/ubuntu-22.04-minimal-cloudimg-amd64.img -o ubuntu2204.img +``` - Создайте Dockerfile со следующим содержимым: - ```Dockerfile - FROM scratch - COPY ubuntu2204.img /disk/ubuntu2204.img - ``` +```Dockerfile +FROM scratch +COPY ubuntu2204.img /disk/ubuntu2204.img +``` - Соберите образ и загрузите его в `container registry`. В качестве `container registry` в примере ниже использован docker.io. для выполнения вам необходимо иметь учетную запись сервиса и настроенное окружение. - ```bash - docker build -t docker.io/username/ubuntu2204:latest - ``` +```bash +docker build -t docker.io/username/ubuntu2204:latest +``` - где `username` — имя пользователя, указанное при регистрации в docker.io. +где `username` — имя пользователя, указанное при регистрации в docker.io. - Загрузите созданный образ в `container registry` с помощью команды: - ```bash - docker push docker.io/username/ubuntu2204:latest - ``` +```bash +docker push docker.io/username/ubuntu2204:latest +``` - Чтобы использовать этот образ, создайте в качестве примера ресурс `VirtualImage`: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: VirtualImage - metadata: - name: ubuntu-2204 - spec: - storage: ContainerRegistry - dataSource: - type: ContainerImage - containerImage: - image: docker.io/username/ubuntu2204:latest - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualImage +metadata: + name: ubuntu-2204 +spec: + storage: ContainerRegistry + dataSource: + type: ContainerImage + containerImage: + image: docker.io/username/ubuntu2204:latest +``` - Чтобы посмотреть ресурс и его статус, выполните команду: - ```bash - kubectl get virtualimage - ``` +```bash +kubectl get virtualimage +``` ### Загрузка образа из командной строки 1. Чтобы загрузить образ из командной строки, предварительно создайте следующий ресурс, как представлено ниже на примере `VirtualImage`: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: VirtualImage - metadata: - name: some-image - spec: - storage: ContainerRegistry - dataSource: - type: Upload - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualImage +metadata: + name: some-image +spec: + storage: ContainerRegistry + dataSource: + type: Upload +``` 2. После того как ресурс будет создан, проверьте его статус с помощью команды: - ```bash - kubectl get virtualimages some-image -o json | jq .status.uploadCommand -r +```bash +kubectl get virtualimages some-image -o json | jq .status.uploadCommand -r - > uploadCommand: curl https://virtualization.example.com/upload/dSJSQW0fSOerjH5ziJo4PEWbnZ4q6ffc -T example.iso - ``` +> uploadCommand: curl https://virtualization.example.com/upload/dSJSQW0fSOerjH5ziJo4PEWbnZ4q6ffc -T example.iso +``` - > VirtualImage с типом **Upload** ожидает начала загрузки образа 15 минут после создания. По истечении этого срока ресурс перейдет в состояние **Failed**. +> VirtualImage с типом **Upload** ожидает начала загрузки образа 15 минут после создания. По истечении этого срока ресурс перейдет в состояние **Failed**. 3. Загрузите образ Cirros (представлено в качестве примера): - ```bash - curl -L http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img -o cirros.img - ``` +```bash +curl -L http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img -o cirros.img +``` 4. Выполните загрузку образа: - ```bash - curl https://virtualization.example.com/upload/dSJSQW0fSOerjH5ziJo4PEWbnZ4q6ffc -T cirros.img - ``` +```bash +curl https://virtualization.example.com/upload/dSJSQW0fSOerjH5ziJo4PEWbnZ4q6ffc -T cirros.img +``` - После завершения работы команды `curl` образ должен быть создан. +После завершения работы команды `curl` образ должен быть создан. 5. Проверьте, что статус созданного образа `Ready`: - ```bash - kubectl get virtualimages -o wide +```bash +kubectl get virtualimages -o wide - # NAME PHASE CDROM PROGRESS STOREDSIZE UNPACKEDSIZE REGISTRY URL AGE - # some-image Ready false 100% 285.9Mi 2.2Gi dvcr.d8-virtualization.svc/vi/vms/some-image 2m21s - ``` +# NAME PHASE CDROM PROGRESS STOREDSIZE UNPACKEDSIZE REGISTRY URL AGE +# some-image Ready false 100% 285.9Mi 2.2Gi dvcr.d8-virtualization.svc/vi/vms/some-image 2m21s +``` ## Диски -Диски используются в виртуальных машинах для записи и хранения данных. Для хранения дисков используется хранилище, предоставляемое платформой. +Диски в виртуальных машинах необходимы для записи и хранения данных, обеспечивая полноценное функционирование приложений и операционных систем. Под "капотом" этих дисков используется хранилище, предоставляемое платформой. -Чтобы посмотреть доступные варианты, выполните команду: +Чтобы узнать доступные варианты хранилищ на платформе, выполните следующую команду: ```bash kubectl get storageclass -# NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE -# ceph-pool-r2-csi-rbd rbd.csi.ceph.com Delete WaitForFirstConsumer true 85d -# linstor-thin-r1 linstor.csi.linbit.com Delete WaitForFirstConsumer true 27d -# linstor-thin-r2 linstor.csi.linbit.com Delete WaitForFirstConsumer true 27d -# linstor-thin-r3 linstor.csi.linbit.com Delete WaitForFirstConsumer true 27d +# NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +# ceph-pool-r2-csi-rbd rbd.csi.ceph.com Delete Immediate true 85d +# i-linstor-thin-r1 replicated.csi.storage.deckhouse.io Delete Immediate true 19d +# i-linstor-thin-r2 replicated.csi.storage.deckhouse.io Delete Immediate true 19d +# i-linstor-thin-r3 replicated.csi.storage.deckhouse.io Delete Immediate true 19d +# linstor-thin-r1 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 19d +# linstor-thin-r2 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 19d +# linstor-thin-r3 replicated.csi.storage.deckhouse.io Delete WaitForFirstConsumer true 19d +# nfs-4-1-wffc nfs.csi.k8s.io Delete WaitForFirstConsumer true 24h ``` ### Создание пустого диска @@ -272,28 +293,28 @@ kubectl get storageclass 1. Создайте диск: - ```yaml - apiVersion: virtualization.deckhouse.io/v1alpha2 - kind: VirtualDisk - metadata: - name: vd-blank - namespace: vms - spec: - persistentVolumeClaim: - storageClassName: linstor-thin-r2 # Подставьте ваше название SC `kubectl get storageclass`. - size: 100M - ``` +```yaml +apiVersion: virtualization.deckhouse.io/v1alpha2 +kind: VirtualDisk +metadata: + name: vd-blank + namespace: vms +spec: + persistentVolumeClaim: + storageClassName: linstor-thin-r2 # Подставьте ваше название SC `kubectl get storageclass`. + size: 100M +``` - Созданный диск можно использовать для подключения к виртуальной машине. +Созданный диск можно использовать для подключения к виртуальной машине. 2. Проверьте состояние созданного ресурса с помощью команды: - ```bash - kubectl -n vms get virtualdisk -o wide +```bash +kubectl -n vms get virtualdisk -o wide - #NAME PHASE CAPACITY PROGRESS STORAGECLASS TARGETPVC AGE - #vd-blank Ready 97657Ki 100% linstor-thin-r1 vd-vd-blank-f2284d86-a3fc-40e4-b319-cfebfefea778 46s - ``` +#NAME PHASE CAPACITY PROGRESS STORAGECLASS TARGETPVC AGE +#vd-blank Ready 97657Ki 100% linstor-thin-r1 vd-vd-blank-f2284d86-a3fc-40e4-b319-cfebfefea778 46s +``` ### Создание диска из образа diff --git a/docs/images/vd-immediate.drawio b/docs/images/vd-immediate.drawio new file mode 100644 index 000000000..a2bb3e9b5 --- /dev/null +++ b/docs/images/vd-immediate.drawio @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/vd-wffc.drawio b/docs/images/vd-wffc.drawio new file mode 100644 index 000000000..df84384f4 --- /dev/null +++ b/docs/images/vd-wffc.drawio @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openapi/config-values.yaml b/openapi/config-values.yaml index c980d4ab6..4a204cdbb 100644 --- a/openapi/config-values.yaml +++ b/openapi/config-values.yaml @@ -108,7 +108,7 @@ properties: type: string x-examples: ["linstor", "nfs"] description: | - What StorageClass to use for creating persistentvolumeclaim. + What StorageClass to use for creating persistentvolumeclaim. If not specified, the default StorageClass specified in the cluster will be used. size: type: string x-examples: ["10Gi"] diff --git a/openapi/doc-ru-config-values.yaml b/openapi/doc-ru-config-values.yaml index 023cb3598..c6c5d016a 100644 --- a/openapi/doc-ru-config-values.yaml +++ b/openapi/doc-ru-config-values.yaml @@ -10,7 +10,7 @@ properties: Список подсетей используемых для выделения статических IP-адресов виртуальным машинам. ingressClass: description: | - Класс Ingress-контроллера, который использоваться для загрузки изображений. + Класс Ingress-контроллера, который использоваться для загрузки образов. По умолчанию используется глобальное значение `modules.ingressClass`. https: description: | @@ -59,7 +59,7 @@ properties: properties: storageClassName: description: | - Имя StorageClass, используемого для создания persistentvolumeclaim. + Имя StorageClass, используемого для создания persistentvolumeclaim. Если не указан - будет использоваться StorageClass, указанный в кластере по умолчанию. size: description: | Размер pvc.