Технология KubeVirt позволяет управлять виртуальными машинами в Kubernetes.
Это решение удовлетворяет потребность в запуске некоторых частей приложения, которые нельзя легко поместить в контейнер на виртуальной машине поверх кластера Kubernetes.
Это полезно для разработчиков, которые хотят внедрить Kubernetes, но все еще имеют компоненты приложения, зависящие от виртуальной машины.
Команды, полагающиеся на существующие рабочие нагрузки на основе виртуальных машин, получают возможность быстро контейнеризовать приложения.
С виртуализированными рабочими нагрузками, размещенными непосредственно в воркфлоу, группы могут декомпозировать их с течением времени, по-прежнему используя оставшиеся виртуализированные компоненты по своему усмотрению.
KubeVirt предоставляет вам унифицированную платформу разработки, где вы можете создавать, изменять и развертывать приложения, находящиеся как в контейнерах, так и на виртуальных машинах в общей среде.
Шаг 1. Установите Minikube
Начните с установки Minikube, используя приведенные ниже команды.
Linux:
wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube
macOS:
brew install minikube
Windows:
#Using winget
$ winget install minikube
# Using Chocolatey
$ choco install minikube
Проверьте версию Minikube, чтобы убедиться, что он установлен правильно и работает:
$ minikube version
minikube version: v1.19.0
commit: 15cede53bdc5fe242228853e737333b09d4336b5
Вывод версии может отличаться в зависимости от того, в какое время вы выполняете команды.
Шаг 2. Установите kubectl
Загрузите инструмент командной строки kubectl в свою систему:
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
Сделайте исполняемым бинарник kubectl.
chmod +x ./kubectl
Проверим версию установленного kubectl.
$ kubectl version -o json --client
{
"clientVersion": {
"major": "1",
"minor": "21",
"gitVersion": "v1.21.0",
"gitCommit": "cb303e613a121a29364f75cc67d3d580833a7479",
"gitTreeState": "clean",
"buildDate": "2021-04-08T16:31:21Z",
"goVersion": "go1.16.1",
"compiler": "gc",
"platform": "linux/amd64"
}
}
Шаг 3. Установите платформу виртуализации по своему выбору
В зависимости от вашей системы есть несколько вариантов.
Обычно используемый гипервизор – VirtualBox.
Когда все настроено, запустите экземпляр Minikube:
Если minikube не запускается, обратитесь к странице драйверов, чтобы узнать, как настроить совместимый контейнер или диспетчер виртуальных машин.
Пример вывода для macOS:
😄 minikube v1.19.0 on Darwin 11.2.3
✨ Automatically selected the hyperkit driver. Other choices: vmware, parallels, virtualbox, ssh
💾 Downloading driver docker-machine-driver-hyperkit:
> docker-machine-driver-hyper...: 65 B / 65 B [----------] 100.00% ? p/s 0s
> docker-machine-driver-hyper...: 10.52 MiB / 10.52 MiB 100.00% 4.31 MiB p
🔑 The 'hyperkit' driver requires elevated permissions. The following commands will be executed:
$ sudo chown root:wheel /Users/jkmutai/.minikube/bin/docker-machine-driver-hyperkit
$ sudo chmod u+s /Users/jkmutai/.minikube/bin/docker-machine-driver-hyperkit
Password:
💿 Downloading VM boot image ...
> minikube-v1.19.0.iso.sha256: 65 B / 65 B [-------------] 100.00% ? p/s 0s
> minikube-v1.19.0.iso: 244.49 MiB / 244.49 MiB 100.00% 4.92 MiB p/s 49.90
👍 Starting control plane node minikube in cluster minikube
💾 Downloading Kubernetes v1.20.2 preload ...
> preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB 100.00% 4.86 MiB
🔥 Creating hyperkit VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
🐳 Preparing Kubernetes v1.20.2 on Docker 20.10.4 ...
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Enabled addons: default-storageclass, storage-provisioner
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
Шаг 4: Разверните KubeVirt
KubeVirt можно установить с помощью оператора KubeVirt, который управляет жизненным циклом всех основных компонентов KubeVirt.
Самый простой способ установки – из аддона minikube:
$ minikube addons enable kubevirt
▪ Using image bitnami/kubectl:1.17
🌟 The 'kubevirt' addon is enabled
Проверьте логи пода kubevirt-install-manager:
$ kubectl logs pod/kubevirt-install-manager -n kube-system
v0.40.0
namespace/kubevirt created
customresourcedefinition.apiextensions.k8s.io/kubevirts.kubevirt.io created
priorityclass.scheduling.k8s.io/kubevirt-cluster-critical created
clusterrole.rbac.authorization.k8s.io/kubevirt.io:operator created
serviceaccount/kubevirt-operator created
role.rbac.authorization.k8s.io/kubevirt-operator created
rolebinding.rbac.authorization.k8s.io/kubevirt-operator-rolebinding created
clusterrole.rbac.authorization.k8s.io/kubevirt-operator created
clusterrolebinding.rbac.authorization.k8s.io/kubevirt-operator created
deployment.apps/virt-operator created
use emulation
configmap/kubevirt-config created
kubevirt.kubevirt.io/kubevirt created
Проверить статус развертывания:
$ kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.phase}"
Deployed%
По умолчанию KubeVirt развернет 7 подов, 3 службы, 1 демонсет, 3 деплойментов, 3 репликасета
$ kubectl get all -n kubevirt
Установите KubeVirt, который предоставляет дополнительный бинарник под названием virtctl для быстрого доступа к последовательным и графическим портам виртуальной машины, а также для обработки операций запуска/остановки.
VERSION=$(kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.observedKubeVirtVersion}")
ARCH=$(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/') || windows-amd64.exe
echo ${ARCH}
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-${ARCH}
chmod +x virtctl
sudo install virtctl /usr/local/bin
Подтвердите установку:
$ virtctl version
Client Version: version.Info{GitVersion:"v0.40.0", GitCommit:"127736619519e6b914e75930fc467c672e766e42", GitTreeState:"clean", BuildDate:"2021-04-20T08:34:39Z", GoVersion:"go1.13.14", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{GitVersion:"v0.40.0-dirty", GitCommit:"127736619519e6b914e75930fc467c672e766e42", GitTreeState:"dirty", BuildDate:"2021-04-20T08:57:15Z", GoVersion:"go1.13.14", Compiler:"gc", Platform:"linux/amd64"}
Шаг 5: Использование KubeVirt
Теперь, когда вы установили KubeVirt в свой кластер Kubernetes на базе Minikube, вы можете выполнить примеры его работы, чтобы познакомиться с KubeVirt и тем, как его можно использовать для создания и развертывания виртуальных машин с Kubernetes.
Разверните тестовый экземпляр виртуальной машины.
wget https://raw.githubusercontent.com/kubevirt/kubevirt.github.io/master/labs/manifests/vm.yaml
Применим файл манифеста
$ kubectl apply -f vm.yaml
virtualmachine.kubevirt.io/testvm created
Выполните приведенную ниже команду, чтобы получить список существующих виртуальных машин и статус:
$ kubectl get vms
NAME AGE VOLUME
testvm 76s
Вывод в формате YAML:
$ kubectl get vms -o yaml testvm
Чтобы запустить виртуальную машину, вы можете использовать команду
$ virtctl start testvm
VM testvm was scheduled to start
Проверьте статус виртуальной машины:
$ kubectl get vmis
NAME AGE PHASE IP NODENAME
testvm 2m20s Running 172.17.0.11 minikube
$ kubectl get vmis -o yaml testvm
Подключитесь к последовательной консоли виртуальной машины Cirros.
Несколько раз нажмите Enter и войдите в систему с показанным именем пользователя и паролем.
$ Virtctl console testvm
Successfully connected to testvm console. The escape sequence is ^]
login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
testvm login:
Отключитесь от консоли виртуальной машины, набрав : ctrl+]
.
Выключение виртуальной машины:
$ virtctl stop testvm
VM testvm was scheduled to stop
Удалите виртуальную машину:
$ kubectl delete vm testvm
virtualmachine.kubevirt.io "testvm" deleted