Модуль находится в процессе активного развития. Функциональность может существенно измениться.
Как установить ОС в виртуальной машине из ISO-образа?
Рассмотрим установку ОС в виртуальной машине из ISO-образа на примере установки ОС Windows.
Для установки ОС нам потребуется ISO-образ ОС Windows. Необходимо его загрузить и опубликовать на каком-либо HTTP-сервисе, доступном из кластера.
Создадим пустой диск для установки ОС:
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineDisk
metadata:
name: win-disk
namespace: default
spec:
persistentVolumeClaim:
size: 100Gi
storageClassName: local-path
Создадим ресурсы с ISO-образами ОС Windows и драйверами virtio:
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: ClusterVirtualMachineImage
metadata:
name: win-11-iso
spec:
dataSource:
type: HTTP
http:
url: "http://example.com/win11.iso"
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: ClusterVirtualMachineImage
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"
Создадим виртуальную машину:
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachine
metadata:
name: win-vm
namespace: default
labels:
vm: win
spec:
runPolicy: Manual
osType: Windows
bootloader: EFI
cpu:
cores: 6
coreFraction: 50%
memory:
size: 8Gi
enableParavirtualization: true
blockDevices:
- type: ClusterVirtualMachineImage
clusterVirtualMachineImage:
name: win-iso
- type: ClusterVirtualMachineImage
clusterVirtualMachineImage:
name: win-virtio-iso
- type: VirtualMachineDisk
virtualMachineDisk:
name: win-disk
После создания ресурса виртуальная машина будет запущена. К ней необходимо подключиться, с помощью графического установщика добавить драйверы virtio
и выполнить установку ОС.
dvp vnc -n default win-vm
После окончания установки завершить работу виртуальной машины.
Далее необходимо модифицировать ресурс VirtualMachine
и применить изменения:
spec:
# ...
runPolicy: AlwaysON
# ...
blockDevices:
# Удалить из блока все ресурсы ClusterVirtualMachineImage с ISO-дисками.
- type: VirtualMachineDisk
virtualMachineDisk:
name: win-disk
Как создать образ виртуальной машины для container registry
Образ диска виртуальной машины, хранящийся в container registry, должен быть сформирован специальным образом.
Пример Dockerfile для создания образа:
FROM scratch
COPY image-name.img /disk/image-name.img
Далее необходимо собрать образ и запушить его в container registry:
docker build -t docker.io/username/image:latest
docker push docker.io/username/image:latest
Как перенаправить трафик на виртуальную машину
Поскольку виртуальная машина функционирует в кластере Kubernetes, направление сетевого трафика на нее осуществляется аналогично направлению трафика на поды.
Для этого нужно всего лишь создать сервис с требуемыми настройками.
Допустим, у нас есть виртуальная машина с HTTP-сервисом, опубликованным на порте 80, и следующим набором меток:
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachine
metadata:
name: web
labels:
vm: web
spec: ...
Чтобы направить сетевой трафик на 80-й порт виртуальной машины, создадим сервис:
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 80
selector:
app: old
Настройки меток виртуальной машины мы можем менять «на лету», то есть изменение меток не требует рестарта виртуальной машины, а это значит, что мы можем конфигурировать перенаправление сетевого трафика с разных сервисов динамически.
Представим, что мы создали новый сервис и хотим перенаправить трафик на нашу виртуальную машину с него:
apiVersion: v1
kind: Service
metadata:
name: svc-2
spec:
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 80
selector:
app: new
Изменив метки на виртуальной машине, мы перенаправим на нее сетевой трафик с сервиса svc-2
:
metadata:
labels:
app: old
Как увеличить размер DVCR
Для увеличения размера нужно задать размер в конфигурации moduleconfig
virtualization
размер больший чем есть
Посмотреть текущий размер dvcr
kubectl get mc virtualization -o jsonpath='{.spec.settings.dvcr.storage.persistentVolumeClaim}'
#Output
{"size":"58G","storageClassName":"linstor-thick-data-r1"}
Задать размер
kubectl patch mc virtualization \
--type merge -p '{"spec": {"settings": {"dvcr": {"storage": {"persistentVolumeClaim": {"size":"59G"}}}}}}'
#Output
moduleconfig.deckhouse.io/virtualization patched
Проверить изменение размера
kubectl get mc virtualization -o jsonpath='{.spec.settings.dvcr.storage.persistentVolumeClaim}'
#Output
{"size":"59G","storageClassName":"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