Установка ОС в виртуальной машине из ISO-образа
Рассмотрим пример установки ОС из ISO-образа ОС Windows. Для этого загрузите и опубликуйте его на каком-либо HTTP-сервисе, доступном из кластера.
-
Создайте пустой диск для установки ОС:
1 apiVersion: virtualization.deckhouse.io/v1alpha2 2 kind: VirtualDisk 3 metadata: 4 name: win-disk 5 namespace: default 6 spec: 7 persistentVolumeClaim: 8 size: 100Gi 9 storageClassName: local-path
-
Создайте ресурсы с ISO-образами ОС Windows и драйверами virtio:
1 apiVersion: virtualization.deckhouse.io/v1alpha2 2 kind: ClusterVirtualImage 3 metadata: 4 name: win-11-iso 5 spec: 6 dataSource: 7 type: HTTP 8 http: 9 url: "http://example.com/win11.iso"
1 apiVersion: virtualization.deckhouse.io/v1alpha2 2 kind: ClusterVirtualImage 3 metadata: 4 name: win-virtio-iso 5 spec: 6 dataSource: 7 type: HTTP 8 http: 9 url: "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso"
-
Создайте виртуальную машину:
1 apiVersion: virtualization.deckhouse.io/v1alpha2 2 kind: VirtualMachine 3 metadata: 4 name: win-vm 5 namespace: default 6 labels: 7 vm: win 8 spec: 9 virtualMachineClassName: generic 10 runPolicy: Manual 11 osType: Windows 12 bootloader: EFI 13 cpu: 14 cores: 6 15 coreFraction: 50% 16 memory: 17 size: 8Gi 18 enableParavirtualization: true 19 blockDeviceRefs: 20 - kind: VirtualDisk 21 name: win-disk 22 - kind: ClusterVirtualImage 23 name: win-11-iso 24 - kind: ClusterVirtualImage 25 name: win-virtio-iso
-
После создания ресурса запустите ВМ:
1 d8 v vnc -n default win-vm
-
К ней необходимо подключиться и с помощью графического установщика и выполнить установку ОС и драйверов
virtio
:1d8 v vnc -n default win-vm
-
После окончания установки перезагрузите виртуальную машину.
-
Для продолжения работы с виртуальной машиной также используйте команду:
1d8 v vnc -n default win-vm
Предоставление файла ответов Windows (Sysprep)
Чтобы выполнить автоматическую установку Windows, создайте файл ответов (обычно именуются unattend.xml или autounattend.xml). Для примера возьмем файл, позволяющий:
- Добавить русский язык и раскладку;
- Указать расположение virtio драйверов, необходимых для установки (поэтому важен порядок дисковых устройств в спецификации ВМ);
- Разметить диски для установки Windows на ВМ c EFI;
- Создать в группе администраторов пользователя cloud с паролем cloud;
- Создать непривилегированного пользователя user с паролем user.
Создайте секрет из этого xml файла:
1d8 k create secret generic sysprep-config --type="provisioning.virtualization.deckhouse.io/sysprep" --from-file=./autounattend.xml
Затем можно создать виртуальную машину, которая в процессе установки будет использовать файл ответов. Чтобы предоставить виртуальной машине Windows файл ответов, необходимо указать provisioning с типом SysprepRef. Вы также можете указать здесь другие файлы в формате base64 (customize.ps1, id_rsa.pub,…), необходимые для успешного выполнения скриптов внутри файла ответов.
1apiVersion: virtualization.deckhouse.io/v1alpha2
2kind: VirtualMachine
3metadata:
4 name: win-vm
5 namespace: default
6 labels:
7 vm: win
8spec:
9 virtualMachineClassName: generic
10 provisioning:
11 type: SysprepRef
12 sysprepRef:
13 kind: Secret
14 name: sysprep-config
15 runPolicy: AlwaysOn
16 osType: Windows
17 bootloader: EFI
18 cpu:
19 cores: 6
20 coreFraction: 50%
21 memory:
22 size: 8Gi
23 enableParavirtualization: true
24 blockDeviceRefs:
25 - kind: VirtualDisk
26 name: win-disk
27 - kind: ClusterVirtualImage
28 name: win-11-iso
29 - kind: ClusterVirtualImage
30 name: win-virtio-iso
Перенаправление трафика на виртуальную машину
Виртуальная машина функционирует в кластере Kubernetes, поэтому направление сетевого трафика осуществляется аналогично направлению трафика на поды.
В качестве примера приведена виртуальная машина с HTTP-сервисом, опубликованным на порте 80, и следующим набором меток:
-
Создайте сервис с требуемыми настройками. В качестве примера приведена виртуальная машина с HTTP-сервисом, опубликованным на порте 80, и следующим набором меток:
1 apiVersion: virtualization.deckhouse.io/v1alpha2 2 kind: VirtualMachine 3 metadata: 4 name: web 5 labels: 6 vm: web 7 spec: ...
-
Чтобы направить сетевой трафик на 80-й порт виртуальной машины, создайте сервис:
1 apiVersion: v1 2 kind: Service 3 metadata: 4 name: svc-1 5 spec: 6 ports: 7 - name: http 8 port: 8080 9 protocol: TCP 10 targetPort: 80 11 selector: 12 app: old
Изменение меток виртуальной машины без необходимости перезапуска
Можно изменять метки виртуальной машины без необходимости перезапуска, что позволяет настраивать перенаправление сетевого трафика между различными сервисами в реальном времени.
Предположим, что был создан новый сервис и требуется перенаправить трафик на виртуальную машину от этого сервиса:
1apiVersion: v1
2kind: Service
3metadata:
4 name: svc-2
5spec:
6 ports:
7 - name: http
8 port: 8080
9 protocol: TCP
10 targetPort: 80
11 selector:
12 app: new
При изменении метки на виртуальной машине, трафик с сервиса svc-2
будет перенаправлен на виртуальную машину:
1metadata:
2labels:
3 app: old