1.虚拟机镜像操作:
CDI提供了使用PVC作为虚拟机磁盘的方案,在虚拟机启动前通过下面方式填充PVC:
- 通过URL导入虚拟机镜像到PVC,URL可以是http链接,s3链接
- Clone一个已经存在的PVC
- 通过container registry 导入虚拟机磁盘到PVC,需要结合ContainerDisk使用
- 通过客户端上传本地镜像到PVC
通过virtctl,结合CDI可以上传本地镜像到pvc上,支持的镜像格式有:
- .img
- .qcow2
- .iso
上传虚拟机镜像到服务器:
查看cdi-uoloadproxy的service ip :
# kubectl -n cdi get svc -l cdi.kubevirt.io=cdi-uploadproxy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cdi-uploadproxy ClusterIP 172.10.212.21 <none> 443/TCP 3d1h
查看sc名称(上篇文章创建的):# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 2d7h
将windows镜像上传到PVC:# virtctl image-upload --uploadproxy-url=https://172.10.212.21 --pvc-name=iso-win10 --pvc-size=10Gi --insecure --storage-class=rook-ceph-block --access-mode=ReadWriteMany --block-volume --image-path=./cn_windows_10_business_editions_version_1909_updated_jan_2020_x64.iso
PVC default/iso-win10 not found
PersistentVolumeClaim default/iso-win10 created
Waiting for PVC iso-win10 upload pod to be ready...
Pod now ready
Uploading data to https://172.10.212.214.95 GiB / 4.95 GiB [==========================================================================================================================================================================================================================] 100.00% 25s
Uploading data completed successfully, waiting for processing to complete, you can hit ctrl-c without interrupting the progress
Processing completed successfully
Uploading ./cn_windows_10_business_editions_version_1909_updated_jan_2020_x64.iso completed successfully参数解释:
- --image-path:操作系统镜像地址。
- --pvc-name:指定存储操作系统镜像的pvc,pvc动态创建。
- --pvc-size:pvc大小,根据操作系统镜像大小来设定,一般比上传操作略大就行。
- --uploadproxy-url:cdi-uploadproxy的service Ip。
查看pvc:
2.创建虚拟机:
执行安装文件:
# kubectl apply -f win10.yaml
persistentvolumeclaim/win10-vm1 created
virtualmachine.kubevirt.io/win10 created启动vm:
# virtctl start win10
进入安装界面:
# virtctl vnc win10
正常安装到这一步,如果发现没有硬盘可供使用,需要安装virtio驱动。
点击加载驱动程序,
点击确定,
选择驱动程序
安装完成,这样就能在k8s中使用虚拟机了。
win10.yaml 内容如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: win10-vm1
spec:
accessModes:
- ReadWriteMany
volumeMode: Block
resources:
requests:
storage: 100Gi
storageClassName: rook-ceph-block
---
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
name: win10
spec:
running: false
template:
metadata:
labels:
kubevirt.io/domain: win10
spec:
domain:
cpu:
cores: 4
devices:
disks:
- bootOrder: 1
cdrom:
bus: sata
name: cdromiso
- disk:
bus: sata
name: harddrive
- cdrom:
bus: sata
name: virtiocontainerdisk
interfaces:
- masquerade: {}
model: e1000
name: default
machine:
type: q35
resources:
requests:
memory: 8G
networks:
- name: default
pod: {}
volumes:
- name: cdromiso
persistentVolumeClaim:
claimName: iso-win10
- name: harddrive
persistentVolumeClaim:
claimName: win10-vm1
- containerDisk:
image: kubevirt/virtio-container-disk
name: virtiocontainerdisk
- cdromiso:提供操作系统安装镜像,即上传镜像后生成的pvc。
- harddrive:虚拟机使用的磁盘,即操作系统就会安装在该磁盘上。
- containerDisk:由于Windows默认无法识别raw格式的磁盘,所以需要安装virtio驱动。containerDisk可以将打包好virtio驱动的容器镜像挂载到虚拟机中。
contos的虚拟安装与windows类似,如在安装过程中遇见问题可以留言讨论。