內容目錄
Virtink 是用於運行Cloud Hypervisor虛擬機的Kubernetes附加組件。通過使用 Cloud Hypervisor 作為底層管理程序,Virtink 支持以一種輕量級且安全的方式在規範的 Kubernetes 集群中運行完全虛擬化的工作負載。
與KubeVirt相比,Virtink:
- 不使用 libvirt 或 QEMU。通過利用 Cloud Hypervisor,VM 具有更低的內存佔用 (≈30MB)、更高的性能和更小的攻擊面。
- 不需要長時間運行的每個 Pod 啟動器進程,這進一步減少了運行時內存開銷(≈80MB)。
- 特別適合在現有 Kubernetes 集群中運行完全隔離的 Kubernetes 集群。有關詳細信息,請參閱我們的集群 API 提供程序和knest工具。
Virtink 由 3 個組件組成:
virt-controller
是集群範圍的控制器,負責創建 Pod 來運行 Cloud Hypervisor VM。virt-daemon
是每個節點的守護進程,負責進一步控制基於節點的 Cloud Hypervisor VM。virt-prerunner
是每個 Pod 的預運行器,負責準備 VM 網絡和構建 Cloud Hypervisor VM 配置。
注意:Virtink 仍在進行中,其 API 可能會更改,恕不另行通知。
安裝
要求
在開始之前需要滿足一些要求:
- Kubernetes 集群 v1.16 ~ v1.24
- Kubernetes apiserver 必須擁有
--allow-privileged=true
才能運行 Virtink 的特權 DaemonSet。它通常是默認設置的。 - cert-manager v1.0 ~ v1.8 安裝在 Kubernetes 集群中。你可以安裝它
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml
。
容器運行時支持
Virtink 目前支持以下容器運行時:
- Docker
- containerd
其他不使用虛擬化功能的容器運行時也應該可以工作。但是,它們沒有經過官方測試。
硬件虛擬化支持
需要具有虛擬化支持的硬件。您應該檢查/dev/kvm
每個 Kubernetes 節點上是否存在。
主機內核版本
- 最低:v4.11
- 推薦:v5.6或以上
安裝 Virtink
安裝所有 Virtink 組件:
kubectl apply -f https://github.com/smartxworks/virtink/releases/download/v0.11.0/virtink.yaml
創建虛擬機
將以下清單應用到 Kubernetes。請注意,它使用容器 rootfs,因此不會持久保存數據。
cat <<EOF | kubectl apply -f - apiVersion: virt.virtink.smartx.com/v1alpha1 kind: VirtualMachine metadata: name: ubuntu-container-rootfs spec: instance: memory: size: 1Gi kernel: image: smartxworks/virtink-kernel-5.15.12 cmdline: "console=ttyS0 root=/dev/vda rw" disks: - name: ubuntu - name: cloud-init interfaces: - name: pod volumes: - name: ubuntu containerRootfs: image: smartxworks/virtink-container-rootfs-ubuntu size: 4Gi - name: cloud-init cloudInit: userData: |- #cloud-config password: password chpasswd: { expire: False } ssh_pwauth: True networks: - name: pod pod: {} EOF
與啟動 pod 一樣,拉取鏡像並開始運行 VM 需要一些時間。您可以等待 VM 開始運行,如下所示:
kubectl wait vm ubuntu-container-rootfs --for jsonpath='{.status.phase}'=Running --timeout -1s
訪問虛擬機(通過 SSH)
訪問 VM 的最簡單方法是通過集群內的 SSH 客戶端。您可以按如下方式訪問上面創建的 VM:
export VM_NAME=ubuntu-container-rootfs export VM_POD_NAME=$(kubectl get vm $VM_NAME -o jsonpath='{.status.vmPodName}') export VM_IP=$(kubectl get pod $VM_POD_NAME -o jsonpath='{.status.podIP}') kubectl run ssh-$VM_NAME --rm --image=alpine --restart=Never -it -- /bin/sh -c "apk add openssh-client && ssh ubuntu@$VM_IP"
提示password
輸入密碼時輸入,由虛擬機清單中的cloud-init數據設置。
管理虛擬機
Virtink 支持各種 VM 電源操作。例如,您可以關閉上面創建的 VM,如下所示:
export VM_NAME=ubuntu-container-rootfs
export POWER_ACTION=PowerOff
kubectl patch vm $VM_NAME --subresource=status --type=merge -p "{\"status\":{\"powerAction\":\"$POWER_ACTION\"}}"
You can also Shutdown, Reset, Reboot or Pause a running VM, or Resume a paused one. To start a powered-off VM, you can PowerOn it.