前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ubuntu系统KVM环境下制作qcow2格式镜像

ubuntu系统KVM环境下制作qcow2格式镜像

作者头像
用户9949933
发布2023-02-24 17:23:19
3.1K0
发布2023-02-24 17:23:19
举报

说明:

​ 本文以制作CentOS7.9镜像为例,详细介绍手动制作OpenStack镜像详细步骤,解释每一步这么做的原因。镜像上传到OpenStack glance,支持以下几个功能:

  • 支持密码注入功能(nova boot时通过–admin-pass参数指定设置初始密码)
  • 支持根分区自动调整(根分区自动调整为flavor disk大小,而不是原始镜像分区大小)
  • 支持动态修改密码(使用nova set-password命令可以修改管理员密码)

手动制作镜像非常麻烦和耗时,本文后面会介绍一个专门用于自动化构建镜像的项目DIB,通过DIB只需要在命令行上指定elements即可制作镜像,省去了重复下载镜像、启动虚拟机配置镜像的繁杂步骤。

镜像的宿主机操作系统为Ubuntu 18.04,开启了VT功能(使用kvm-ok命令验证)并安装了libvirt系列工具,包括virsh、virt-manager、libguestfs-tools等。

kvm环境部署请参考这里

手动制作OpenStack镜像

下载镜像

本文镜像下载点击这里 (此链接是为防止官网下载链接失效)

官网镜像下载点击这里

创建虚拟机

首先创建一个qcow2格式镜像文件,用于虚拟机的根磁盘,大小10G就够了。

代码语言:javascript
复制
#cd /data/kvm/
#qemu-img create -f qcow2 centos.qcow2 10G # create disk image
#ll
-rw-r--r-- 1 root root      196768 4月  13 21:32 centos.qcow2
#virt-install --name Centos7.9-1 --ram 4096 --vcpus 4 --network network=default --disk path=/data/kvm/centos.qcow2,format=qcow2,size=30,device=disk,bus=virtio --cdrom /data/iso/CentOS-7.9-x86_64-DVD-2009.iso --vnc --os-type=linux --os-variant=rhel7.0 --vncport=5910 --vnclisten=0.0.0.0

启动完成后,使用vnc client连接或者使用virt-manager、virt-viewer连接。

接下来安装系统的步骤略过

进入虚拟机控制台可以看到CentOS的启动菜单,选择Install Centos 7,继续选择语言后将进入INSTALLION SUMMARY,其中大多数配置默认即可,SOFTWARE SELECTION选择Minimal Install,INSTALLATION DESTINATION需要选择手动配置分区,我们只需要一个根分区即可,不需要swap分区,文件系统选择ext4或者xfs,存储驱动选择Virtio Block Device,如图:

上图步骤中必须只有一个分区不然后面自动扩容磁盘有问题

配置OS
qemu-guest-agent

qemu-guest-agent是运行在虚拟机内部的一个服务,libvirt会在本地创建一个unix socket,模拟为虚拟机内部的一个串口设备,从而实现了宿主机与虚拟机通信,这种方式不依赖于TCP/IP网络,实现方式简单方便。

为了支持OpenStack平台动态修改虚拟机密码功能,我们需要手动安装qemu-guest-agent:

代码语言:javascript
复制
yum install -y qemu-guest-agent

修改/etc/sysconfig/qemu-ga配置文件:

代码语言:javascript
复制
TRANSPORT_METHOD="virtio-serial"
DEVPATH="/dev/virtio-ports/org.qemu.guest_agent.0"
LOGFILE="/var/log/qemu-ga/qemu-ga.log"
PIDFILE="/var/run/qemu-ga.pid"
BLACKLIST_RPC=""
FSFREEZE_HOOK_ENABLE=0
cloud-init

接下来安装cloud-init,cloud-init是虚拟机第一次启动时执行的脚本,主要负责从metadata服务中拉取配置信息,完成虚拟机的初始化工作,比如设置主机名、初始化密码以及注入密钥等。

代码语言:javascript
复制
yum install -y cloud-init

修改/etc/cloud/cloud.cfg允许root密码登录(默认是禁止)

代码语言:javascript
复制
users:

 - defaults

disable_root:1

ssh_pwauth:  0    #0 是关闭状态  就是禁止password认证,修改为 ssh_pwauth: 1
growpart

虚拟机制作镜像时指定了根分区大小(比如我们设置为10GB),为了使虚拟机能够自动调整为flavor disk指定的根磁盘大小,即自动扩容, 我们需要安装glowpart(老版本叫growroot)并完成以下配置:

代码语言:javascript
复制
yum update -y
yum install -y epel-release
yum install -y cloud-utils-growpart
rpm -qa kernel | sed 's/^kernel-//'  | xargs -I {} dracut -f /boot/initramfs-{}.img {} 

完成以上工作后,我们的镜像配置基本结束,删除一些无用文件,清理history命令后执行关机:

移除本地信息

安装virt-sysprep命令

代码语言:javascript
复制
yum install libguestfs-tools -y

在宿主机上运行以下命名,移除宿主机信息,比如mac地址等。

代码语言:javascript
复制
virt-sysprep -d Centos7.9-1
压缩镜像

virt-sparsify compress压缩镜像

代码语言:javascript
复制
virt-sparsify --compress Centos7.9-1.qcow2 Centos7.9-1-mini.qcow2
代码语言:javascript
复制
#ll -trh
-rw------- 1 root         root  31G 4月  13 22:12 Centos7.9-1.qcow2
-rw-r--r-- 1 root         root 689M 4月  13 22:16 Centos7.9-1-mini.qcow2

可以看到压缩之后的镜像比原来的小了很多,只有689M

打包镜像
代码语言:javascript
复制
qemu-img convert -c -O qcow2 Centos7.9-1-mini.qcow2 Centos7.9-2022.04.13.qcow2
代码语言:javascript
复制
#ll -trh
-rw-r--r-- 1 root         root 689M 4月  13 22:24 Centos7.9-2022.04.13.qcow2
上传镜像

把打包好的镜像文件传到OpenStack控制节点上然后使用glance image-create命令上传,最后就可以开实例验证;

代码语言:javascript
复制
glance image-create --name "test-Centos7.9-2022.04.13" --file /root/Centos7.9-2022.04.13.qcow2 --disk-format qcow2 --container-format bare --visibility public --progress
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明:
  • 手动制作OpenStack镜像
    • 下载镜像
      • 创建虚拟机
        • 配置OS
          • qemu-guest-agent
          • cloud-init
          • growpart
        • 移除本地信息
          • 压缩镜像
            • 打包镜像
              • 上传镜像
              相关产品与服务
              专用宿主机
              专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档