KubeVirt#
KubeVirt — это инструмент, который обеспечивает возможность создания, развертывания и управления виртуальными машинами как контейнерами. Цель — обеспечить общую основу для решений виртуализации на базе DropApp.
KubeVirt функционально расширяет DropApp, добавляя дополнительные типы ресурсов виртуализации (тип VM) через API CRD kubernetes. Используя этот механизм, API kubernetes можно использовать для виртуальных машин наряду со всеми другими ресурсами, предоставляемыми DropApp.
Для запуска виртуальных машин необходимо добавить в кластер DropApp дополнительную функциональность и бизнес-логику. Эта функциональность добавляется не в kubernetes, а в кластер DropApp путем запуска дополнительных контроллеров и агентов в существующем кластере.
Необходимые контроллеры и агенты предоставляются KubeVirt.
KubeVirt используется в качестве декларативного инструмента для следующих целей:
создание виртуальной машины;
планировки виртуальной машины в кластере DropApp;
запуск виртуальной машины;
остановка виртуальной машины;
удаление виртуальной машины.
В поставке DropApp содержатся следующие образы KubeVirt:
virtctl- предоставляет быстрый доступ к последовательным и графическим портам виртуальной машины, а также необходим для обработки операций запуска/остановки;virt-launcher- предоставляет контрольные группы и namespace, которые будут использоваться для размещения виртуальных машин;virt-operator- отвечает за функциональность виртуализации в масштабе кластера;virt-controller- отслеживает обращение новых виртуальных машин на сервер API Kubernetes, создает pod, в котором будет работать виртуальная машина. Когда pod запланирован на определенном node,virt-controllerобновляет объект VM с именем node и передает дальнейшие обязанности компоненту KubeVirt, специфичному для node;virt-handler- отслеживает изменения объекта виртуальной машины и выполняет все необходимые операции для изменения виртуальной машины для соответствия требуемому состоянию.Virt-handlerссылается на спецификацию виртуальной машины и сигнализирует о создании соответствующего домена, используя экземплярlibvirtdв модуле виртуальной машины. Когда объект виртуальной машины удаляется,virt-handlerнаблюдает за удалением и отключает домен;virt-api- обслуживает все запросы к API для ресурсов виртуализации.
Сценарий развертывания KubeVirt#
KubeVirt можно установить с помощью оператора, который управляет жизненным циклом всех основных компонентов.
Развертывание операторов:
Для развертывания оператора KubeVirt введите команду:
export VERSION=$(curl -s https://<repoexample.ru>/kubevirt-prow/release/kubevirt/kubevirt/stable.txt) echo $VERSION kubectl create -f https://<repoexample.ru>/download/${VERSION}/kubevirt-operator.yaml # Укажите актуальный путь до локального репозиторияДля развертывания CRD KubeVirt введите команду:
kubectl create -f https://<repoexample.ru>/kubevirt/kubevirt/releases/download/${VERSION}/kubevirt-cr.yaml # Укажите актуальный путь до локального репозиторияПроверьте статус развертывания:
kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.phase}"Убедитесь, что KubeVirt развернул 7 модулей, 3 службы, 1 набор демонов, 3 приложения для развертывания, 3 набора реплик.
Проверьте компоненты развертывания:
kubectl get all -n kubevirtУстановите Virtctl:
curl -L -o virtctl https://<repoexample.ru>/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-${ARCH} # Укажите актуальный путь до локального репозитория chmod +x virtctl sudo install virtctl /usr/local/binПосле развертывания KubeVirt можно использовать для создания и развертывания виртуальных машин с помощью DropApp.
Сценарий создания виртуальной машины с использованием KubeVirt#
Для выполнения сценария создания виртуальной машины с использованием KubeVirt:
Создайте манифест виртуальной машины:
kubevirt.yaml
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: testvm spec: running: false template: metadata: labels: kubevirt.io/size: small kubevirt.io/domain: testvm spec: domain: devices: disks: - name: containerdisk disk: bus: virtio - name: cloudinitdisk disk: bus: virtio interfaces: - name: default masquerade: {} resources: requests: memory: 64M networks: - name: default pod: {} volumes: - name: containerdisk containerDisk: image: quay.io/kubevirt/cirros-container-disk-demo - name: cloudinitdisk cloudInitNoCloud: userDataBase64: SGkuXG4=Обратите внимание, что в данном случае используется диск-контейнер, который не сохраняет данные. Для сохранения данных воспользуйтесь сторонним хранилищем, например LinStore (не входит в состав текущей версии DropApp).
Примените манифест в DropApp:
kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml virtualmachine.kubevirt.io "testvm" created virtualmachineinstancepreset.kubevirt.io "small" createdПолучите список существующих виртуальных машин:
kubectl get vms kubectl get vms -o yaml testvmСтатус
runningв выводе команды означает, что виртуальная машина работает.Для запуска виртуальной машины используйте команду:
virtctl start testvmПодключитесь к последовательной консоли виртуальной машины
Cirros. Нажмитеreturn/enterнесколько раз и войдите в систему, используя отображаемые имя пользователя и пароль:virtctl console testvmОтключитесь от консоли виртуальной машины командой
ctrl+].Выключите виртуальную машину:
virtctl stop testvmУдалите виртуальную машину:
kubectl delete vm testvm