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
部署 Virtink 後,您可以創建虛擬機。

創建虛擬機

將以下清單應用到 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.

 

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料