Теги: Кубернаны, Кубиртура, Миникуба, Открытый, Дежол
官方 介紹.
先來 看看 官方 介紹:)
Кубиртура Это дополнение виртуальной машины для Kubernetes. Цель состоит в том, чтобы обеспечить общее основание для решений для виртуализации на вершине Куберанес.
Примечание : Kubevirt — это тяжелая работа.
Дэвид представляет разговор, показывающий, что такое Kubevirt, а что нет:
- Кубирду не участвует в управлении экземплярами AWS или GCP
- KUBEVIRT не является конкурентом Firecracker или Cata Containers
- KUBEVIRT не является заменой времени выполнения контейнера
Он любит определять кубирду как: KUBEVIRT — это расширение Kubernetes, которое позволяет запускать традиционные рабочие нагрузки VM, исходящим рядом с рабочими нагрузками контейнеров.
介紹.
Kubevirt 是 基於 Kubernetes, 在 2017 由 Redhat 發起.
主要 目標 讓 讓 些 些 些 些 些 與 與 monolith 的 服務 不 相容容器化 時 的.
或是 在 Глубокое обучение 需要 使使 GPU, VGPU 時, 可以 調調. Nvidia 有 Плагин Отказ
運行 模式.
由 圖 可以 可以 得知, Kubevirt 運作 原理 與 kubernetes 相似, 因為 是 基於 k8s xd
那 最 末端都 是 Pods, 一邊 是 POD 包 VM, 一邊 是 POD 包 Контейнер.
層層 也 是 是 透過 API-сервер -> kubelet 來 去 溝通, 所以 kubevirt 遵照 Пользовательское определение ресурсов (CRD) 來 制定 Тип.
而 Кластер 的 Контроллер 會 與 Узел 的 Daemons 遵照 Kubevirt 的 邏輯 去 啟去 運行 或 移除 運行.
而 VM 的 Том 則 是 透過 Kubernetes 的 PVC 來 去 達成.
那 VM 是 如何 跑 在 POD?
透過 圖 可以 可以 看出 是 透過 透過 透過 透過 透過 透過 透過 透過 透過 透過 透過 透過 透過 透過 透過 透過 達成 達成.
更 細節 可以 去 看 看 Гадость Хн
因為 說 那麼 多, 還是 先 來 個 實作 吧! 更 好 去 理解 如何 運行 囉:)
ИДТИ!
實作 1.
這邊 使使 minikube 實作, 請 先 去 官網 安裝:).
Слияние 筆者 偷懶 使偷懶 Mac, 記得 要裝 KVM & QEMU.
啟啟 minikube
$ minikube start --memory=4096 --cpus=2 --network-plugin cni
Слияние VM-драйвер KVM2
這邊 會 使使 Kubevirt 的 版本 為 v0.30.0, 那 也 可以 使使 最 的.
# On other OS you might need to define it like $ export KUBEVIRT_VERSION="v0.30.0" # On Linux you can obtain it using 'curl' via: $ export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases | grep tag_name | grep -v -- - | sort -V | tail -1 | awk -F':' '{print $2}' | sed 's/,//' | xargs)
版本 確認 後, 直接 使直接 github 上 的 yaml.
$ kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/$KUBEVIRT_VERSION/kubevirt-operator.yaml
有 Определение пользовательского ресурса, RBAC 以及 развертывание 等等. 看 一下 建立 了 什麼.
$ kubectl get all -n kubevirt
查看 Расширения виртуализации
# To check if your VM's CPU supports virtualization extensions execute the following command: $ minikube ssh -p kubevirt "egrep 'svm|vmx' /proc/cpuinfo" # If the command doesn't generate any output, create the following ConfigMap so that KubeVirt uses emulation mode, otherwise skip to the next section $ kubectl create configmap kubevirt-config -n kubevirt --from-literal debug.useEmulation=true
確認 好 後後, 來到 最 重要 的 時刻 -> Развернуть кубирду . 專屬 的 Пользовательский ресурс Отказ
$ kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/$KUBEVIRT_VERSION/kubevirt-cr.yaml
查看 部署 了 什麼!
$ kubectl get all -n kubevirt
那 有 了 這些, 才 可以 透過 Virttl
или Kubectl Virt
來 呼叫 API Server 並且 正確 運行.
這裡 使 使 k krew 來 快速 安裝 安裝 kubectl плагины, 如 沒 使使 過 請 參考 此 篇 篇. Kubectl krew Install View
事前 準備 都 好 了! 這裡 就 直接 使使 官方 的 VM! 官方 的 Реестр.
Alpine, Cirros и Fedora, 這邊 使使 Kubevirt/Cirros-реестр-диск-демонстрация.
# 載下來查 $ curl -L -o vm.yaml https://raw.githubusercontent.com/kubevirt/kubevirt.github.io/master/labs/manifests/vm.yaml $ less vm.yaml # 直接使用 $ kubectl apply -f https://raw.githubusercontent.com/kubevirt/kubevirt.github.io/master/labs/manifests/vm.yaml # 查看 $ kubectl get vms
OK! 建立 完成, 到 這裡 就 可以 直接直接 vm 囉, 透過 kubectl virt 來 啟啟.
Слияние 要 啟啟 原因 是 vm.yaml 第六 行 работа: false.
# 啟用 $ kubectl virt start testvm # 查看 $ kubectl get vmis
這裡 連 進去 試試 看 有 沒有 成功.
$ kubectl virt console testvm
Слияние Отключить от консоли виртуальной машины, набрав: Ctrl +]
Отказ
Очистка
$ kubectl virt stop testvm $ kubectl delete vm testvm $ minikube stop $ minikube delete
實作 2
啟啟 minikube
一樣 使使 minikube, 此 次 是 使使 Ubuntu 18.04.4 LTS (GNU/Linux 5.0.0-1032-Azure X86_64)
這裡 要 注意 KVM 有 沒有 已經 啟啟.
$ cat /sys/module/kvm_intel/parameters/nested
要回 y, 如果 不 是 要 去 啟啟:)
$ minikube config -p kubevirt set memory 8192 $ minikube config -p kubevirt set cpus 4 $ minikube config -p kubevirt set vm-driver kvm2 $ minikube config -p kubevirt set disk-size 50g $ minikube start -p kubevirt --network-plugin cni
那 這裡 的 實作 是 !!! 使使 Windows Server 2012 ISO !!!
注意.
這裡 要 一 一個 「CDI」 Kubevirt и CDI уже установлены.
Слияние 實作 1 的 還是 要 再 重裝 唷:)
這裡 使使 的 版本 為 v1.18.0
$ export VERSION=$(curl -s https://github.com/kubevirt/containerized-data-importer/releases/latest | grep -o "v[0-9]\.[0-9]*\.[0-9]*") $ kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-operator.yaml $ kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-cr.yaml
什麼 是 CDI? Контейнерные данные-импортер (CDI), 也 就 是 除了 從 從 從 來 以外, 也 可以 從 pvc 或是或是 檔案 檔案.
那 這裡 создать 後, 來 看看 SVC.
$ kubectl get services -n cdi
ОК! 那 這裡 這裡 這裡 的 題目 是是 Windows Server2012 64bit, 所以 到 Центр оценки Microsoft 下載 файл ISO.
那 下載 完 後, 就 要 使要 Kubectl Virt 傳傳, 這裡 介紹 等等有 使使 的 參數.
image-upload
: Загрузите изображение VM на персистентВолумклонPath-Path
: Путь файла ISO--PC-NAM
E: имя ПВХ для хранения файла ISO, в этом примере ISO-Win2k12-Аксесс-Режим
: Режим доступа для ПВХ, в примере ReadonlyMany.--pvc-размер
: Размер ПВХ, в этом случае будет сохранен ISO, в этом случае ISO составляет 4,3 г, поэтому PVC OS 5G должен быть достаточно--uploadproxy-url
: URL URL CDI-Upload Proxy Service
那 會 看到 SVC 是 Clusterip, 為了 方便, 額外 再 創 一 個 NodePort!
cat <
建立 完成 後, 使使 minikube 參數 來 看 URL.
minikube service cdi-uploadproxy-nodeport --url -n cdi -p kubevirt
請 記得 替換 --uploadproxy-url.
$ kubectl virt image-upload \ --image-path=9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO \ --pvc-name=iso-win2k12 \ --access-mode=ReadOnlyMany \ --pvc-size=5G \ --uploadproxy-url=https://192.168.39.45:31001 \ --insecure \ --wait-secs=240
--insecure
: Разрешить небезопасные серверные соединения при использовании HTTPS- Wait-Second
: Время в секундах, чтобы дождаться загрузки POD для начала. (по умолчанию 60)
傳傳 成功!
Слияние 這裡 要 注意, изображение-загрузка 會 創建 一個atavolume, 會 有 一個 POD 與 PVC 做 連接, 如果 失敗 要 查看 一下 是否 為 pvc 問題 ~
接下來 先 準備 被 掛載 的 ПВХ 以及 主要 運行 的 виртуальная машина.
然後 先 把 Virtio
的 image 載到 本機端.
Слияние Контейнер с драйверами Virtio прикреплен в виде компакт-диска к VM. Контейнерное изображение должно быть вытянуто, чтобы иметь его доступное в локальном реестре.
docker pull kubevirt/virtio-container-disk
創建 win2k12.yml 並 啟啟.
Слияние 這邊 也 要 注意 PVC 掛載 情況.
kubectl apply -f win2k12.yml kubectl virt start win2k12-iso
看看有 沒有 成功
kubectl get vmi
成功 了 !!
到 這裡 成功 Run 起 一 台 VM 了! 來 連線 進去 吧!
kubectl virt vnc win2k12-iso
詳細 安裝 就 直接 來 看 官方 的 影片 吧!
Очистка
$ minikube delete -p kubevirt
結論.
那 KUBEVIRT 也 解決 了 了 了 不 不 方便 方便 或是 無法 的 於 於 是 是 慢慢 變 成熟 要 拿來 於 於 是 是 慢慢 變 現在 現在 拿來 於 於 踩坑 囉 囉 囉 囉 囉 囉 囉 囉 囉 囉 ~. 其實 也 也 多 前輩 及 神 神 神 在踩 飄來 及 也 是 是 是 不 不 不不試:):)
參考.
https://github.com/kubevirt/kubevirt
https://kubevirt.io/
https://kubevirt.io/2020/KubeVirt_deep_dive-virtualized_gpu_workloads.html
https://kubevirt.io/2020/Live-migration.html
Оригинал: «https://dev.to/tasslin/kubevirt-3c0n»