本文将将介绍如何安装 KubeVirt 和使用 KubeVirt 配置 Windows 虚拟机。
前置条件
-
准备 Ubuntu 操作系统,一定要安装图形化界面。
-
安装 Docker(最新版本)
-
安装
libvirt
和TigerVNC
:apt install libvirt-daemon-system libvirt-clients tigervnc-viewer
-
准备一个 Kubernetes 集群,可以参考此链接
-
在 Kubernetes 集群上准备存储,可以参考此链接
安装 KubeVirt
-
导出最新的 KubeVirt 发行版本:
export RELEASE=$(curl -s https://storage.googleapis.com/kubevirt-prow/release/kubevirt/kubevirt/stable.txt)
-
部署 KubeVirt Operator:
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
-
创建 KubeVirt 自定义资源 (CR) 以触发安装:
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml
-
加载虚拟化所需的内核模块:
modprobe kvm modprobe kvm_intel #如果执行失败,排查是否支持嵌套虚拟化
安装容器化数据导入 (CDI)
安装最新的 CDI 发行版本:
VERSION=$(basename $(curl -s -w %{redirect_url} https://github.com/kubevirt/containerized-data-importer/releases/latest))
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
安装 Virtctl
下载 virtctl
的最新 KubeVirt 版本:
export VERSION=$(curl -s https://storage.googleapis.com/kubevirt-prow/release/kubevirt/kubevirt/stable.txt)
wget https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64
上传 Windows 镜像
- 使用
kubectl get svc -ncdi
获取 uploadproxy-url 的地址,输出如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cdi-api ClusterIP 10.233.33.110 <none> 443/TCP 46h
cdi-prometheus-metrics ClusterIP 10.233.15.23 <none> 8080/TCP 46h
cdi-uploadproxy ClusterIP 10.233.49.108 <none> 443/TCP 46h
使用 virtctl
上传 Windows 镜像:
virtctl image-upload dv win10 --size=10Gi --image-path=./WinSvr2022_2024.0617.iso --storage-class openebs-hostpath --access-mode=ReadWriteOnce --uploadproxy-url=https://10.233.49.108 --insecure --force-bind
创建 vmi
准备以下 vmi.yaml 文件,并执行 kubectl apply -f vmi.yaml
命令来创建 vmi 虚拟机:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: disk-windows
spec:accessModes:- ReadWriteOnceresources:requests:storage: 15GistorageClassName: hostpath
---
apiVersion: kubevirt.io/v1
kind: VirtualMachineInstance
metadata:labels:special: vmi-windowsname: vmi-windows
spec:domain:clock:timer:hpet:present: falsehyperv: {}pit:tickPolicy: delayrtc:tickPolicy: catchuputc: {}cpu:cores: 2devices:disks:- disk:bus: sataname: pvcdisk- cdrom:bus: sataname: winisointerfaces:- masquerade: {}model: e1000name: defaulttpm: {}features:acpi: {}apic: {}hyperv:relaxed: {}spinlocks:spinlocks: 8191vapic: {}smm: {}firmware:bootloader:efi:secureBoot: trueuuid: 5d307ca9-b3ef-428c-8861-06e72d69f223resources:requests:memory: 4Ginetworks:- name: defaultpod: {}terminationGracePeriodSeconds: 0volumes:- name: pvcdiskpersistentVolumeClaim:claimName: disk-windows- name: winisopersistentVolumeClaim:claimName: win11cd-pvc
通过 kubectl get vmi
命令可以看到当前虚拟机的状态:
NAME AGE PHASE IP NODENAME READY
vmi-windows 23h Running 10.233.127.122 ubuntu True
通过 VNC 访问 Windows 虚拟机
使用 VNC 访问虚拟机:
virtctl vnc vmi-windows
就可以在界面上看到以下输出:
有关更详细的步骤,请参考官方指南:使用 KubeVirt 从 ISO 安装 Microsoft Windows 11