iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 29
1
DevOps

從題目中學習k8s系列 第 29

【從題目中學習k8s】-【Day29】K8s未來的趨勢 - KubeVirt


title: 【從題目中學習k8s】-【Day29】K8s未來的趨勢 - KubeVirt
description: 以無比的恆毅力堅持30天鍊成鐵人--連續30天,一天發表一篇IT技術文章

【從題目中學習k8s】-【Day29】K8s未來的趨勢 - KubeVirt

tags: DevOps CICD K8s Docker

KubeVirt 簡介

KubeVirt 是由 Red Hat 於 2017 年初發起的一個容器虛擬化技術 Container-native Virtualization (CNV) 專案,它最主要的目的是讓 Kubernetes 以管理容器的角度來管理 VM

KubeVirt is a virtual machine management add-on for Kubernetes. The aim is to provide a common ground for virtualization solutions on top of Kubernetes

Source: https://github.com/kubevirt


Why KubeVirt

KubeVirt技術可滿足已採用或想要採用Kubernetes但基於現有虛擬機的工作負載而無法輕易將其容器化的需求。也就是說,也許我今天並不想讓我的 infra 設備全部容器化,我可能需要VM的運算資源或更大的儲存空間,但我又想要像K8s管理Container一樣這麼方便的管理VM,那就需要透過KubeVirt了。

KubeVirt可將application以Container或VM的形式佈署在相同的K8s環境中,使環境能兼具傳統VM only的Service及container-based的microservice架構

Source: https://www.youtube.com/watch?v=uusM5SyK-vc&ab_channel=KubeVirt


KubeVirt架構

Source: https://kknews.cc/code/9pkkbzl.html

原先 K8s Pod 裡面的型態應該是 Container,但有了 Kubevirt 這樣的專案後,可以在 Pod 裡面run 起 VM 來讓使用者做使用

技術上來說這個 VM Instance 的實作是採用 KVM/QEMU 的方式進行使用,而他的資源配置方式則同樣採用 YAML 定義資源需求。KubeVirt可以做到的事情包括:

  • Create a predefined VM
  • Schedule a VM on a Kubernetes cluster
  • Launch a VM
  • Stop a VM
  • Delete a VM

這裡有一些KubeVirt的demo影片,有興趣的讀者可以參考看看~


Installing KubeVirt

接著我們介紹一下如何安裝KubeVirt到 kubernetes 環境中

前面提到過的VM Insatnce是透過KVM/QEMU方式完成,因此像是KVM/QEMU這類的prerequisite就必須先安裝到環境中,這邊就不贅述了

KubeVirt安裝選擇目前最新的v0.33.0版本

$ export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | jq -r .tag_name)

$ echo $KUBEVIRT_VERSION

jq命令用於處理json檔案

安裝KubeVirt

$ kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml

$ kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml

建立一個 ConfigMap,讓KubeVirt使用軟體虛擬化的配置,而非使用實際的硬體虛擬化。

$ kubectl create configmap -n kube-system kubevirt-config --from-literal debug.useEmulation=true

檢查一共創立哪些物件

$ kubectl get po -n kubevirt

接著就可以透過KubeVirt佈署VM了,我們先建立一個 test VM:

$ kubectl apply -f https://raw.githubusercontent.com/kubevirt/kubevirt.github.io/master/labs/manifests/vm.yaml

這時若用kubectl get po查看,會發現沒有東西,這是因為VM雖然已經建立了,但是還沒被啟動,所以沒有Pod也沒有vmis,只有vms

$ kubectl get pods
No resources found.

$ kubectl get vms
NAME      AGE
testvm    30s

$ kubectl get vmis
No resources found.

VM還沒啟動是因為YAML中定義的running: false

那要如何啟動VM呢?要透過virtctl,我們先安裝:

$ wget -O virtctl https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64

$ chmod +x virtctl

接著,我們將VM啟動

$ ./virtctl start testvm
VM testvm was scheduled to start

## 等待VM Scheduling
$ kubectl get vmis
NAME        AGE    PHASE        IP    NODENAME
testvm      10s    Scheduling

## VM Scheduling完成
$ kubectl get vmis
NAME     AGE   PHASE     IP            NODENAME
testvm   69s   Running   10.244.0.15   g8node1

到這邊為止,就能成功run起VM囉~
若要停止此VM,可透過./virtctl stop <vm-name>命令:

$ ./virtctl stop testvm
VM testvm was scheduled to stop

結論

KubeVirt可以算是未來Kubernetes的趨勢,它兼具了VM和Container的好處,且可以同時讓兩者在相同環境上一起運行,將來應該是很多企業導入微服務架構的過渡方案,而且現在已經很多企業開始用KubeVirt了,大家有興趣花點時間看看吧~ 好啦,今天就到這囉~ 謝謝大家~

參考資料

Getting to know KubeVirt in 2 minutes
Red Hat OpenShift 把 VM 當 Container 管!?
KubeVirt
KubeVirt on Kubernetes with CRI-O from scratch - Installing KubeVirt

Thank you!

You can find me on

  • george4908090@gmail.com

上一篇
【從題目中學習k8s】-【Day28】K8s威脅偵測引擎 - Falco
下一篇
【從題目中學習k8s】-【Day30】30天鐵人賽總結
系列文
從題目中學習k8s31

尚未有邦友留言

立即登入留言