2.制作一个包含vm镜像的容器镜像
制作一个包含vm镜像的容器镜像¶
在 kubevirt中,可以直接使用containerDisk作为vm启动盘(VirtualMachine.spec.template.spec.volumes.containerDisk) 制作一个包含vm镜像的容器镜像步骤:
- 制作镜像,编写Dockerfile
注意事项:基础镜像使用#FROM kubevirt/container-disk-v1alpha FROM registry.demo.com/kubevirt/container-disk-v1alpha:latest ADD ubuntu-22.04-server-cloudimg-amd64.img /diskkubevirt/container-disk-v1alpha;另外需要事先准备好vm镜像,此处以 ubuntu-22.04-server-cloudimg-amd64.img 为例 使用buildah命令制作镜像,可参考image-from-registry# buildah安装,直接使用 yum安装,openEuler的源是没有buildah的 ### buildah 制作镜像操作步骤 ### # mkdir /tmp/buildah # cp ubuntu_20.04-1.qcow2 /tmp/buildah # cd /tmp/buildah # cat << END > Dockerfile FROM kubevirt/container-disk-v1alpha ADD ubuntu-22.04-server-cloudimg-amd64.img /disk END # buildah bud -t vmidisk/ubuntu22.04:latest /tmp/buildah # 如果使用的是docker,可使用如下命令,将镜像推送到docker本地使用,然后用docker命令导出,也可以直接推送到 harbor仓库 # buildah push localhost/vmidisk/ubuntu22.04 docker-daemon:docker.io/vmidisk/ubuntu22.04:latest # 如果使用的是containerd,则先导出,再用ctr命令导入 # docker save -o ubuntu.tar vmidisk/ubuntu22.04:latest # 使用 ctr 导入时,要指定名称空间为k8s.io,默认为default名称空间 # ctr -n k8s.io images import ubuntu.tar ### docker 制作镜像操作步骤 ### # cd /tmp/buildah # docker build -t registry.demo.com/kubevirt/vmidisk:ubuntu22.04 .- kubevirt使用 containerDisk启动
--- apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vmtest namespace: default spec: running: true template: metadata: labels: kubevirt.io/size: small kubevirt.io/domain: vmutest spec: # 使用docker或buildah制作的镜像在master本地,所以这指定了节点 nodeSelector: kubernetes.io/hostname: k8s04 domain: devices: disks: - name: root-disk disk: bus: virtio interfaces: # 使用默认的伪装模式网络,兼容性较好,但性能较差,不如bridge、macvtap模式,但bridge和macvtap目前还不支持热迁移 - name: default masquerade: {} rng: {} resources: requests: memory: 1024M networks: - name: default pod: {} terminationGracePeriodSeconds: 0 volumes: - name: root-disk containerDisk: image: registry.demo.com/kubevirt/vmidisk:ubuntu22.04 imagePullPolicy: IfNotPresent - name: cloudinitdisk cloudInitNoCloud: userData: |- #cloud-config hostname: test5.com ssh_pwauth: True timezone: Asia/Shanghai disable_root: false chpasswd: {"list":"root:123456",expire: False}