Рубрики
Uncategorized

Kubevirt 介紹 與 初步 教學 使使

KUBEVIRT 介紹 與 初步 教學 教學 使教學 Метки: Кубернеты, Кубиртура, Миникуба, Открытый, Девенс … Tagged Cubernetes, Devops.

Теги: Кубернаны, Кубиртура, Миникуба, Открытый, Дежол

官方 介紹.

先來 看看 官方 介紹:)

Кубиртура Это дополнение виртуальной машины для 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»