如果您拥有所需发行版本的基础镜像,您可以参考本文使用virt-manager制作QCOW2格式镜像并导入您的私有镜像到火山引擎平台。
此方式具有更高的定制化性,适用于需要复杂初始化系统镜像的场景,导入平台后,您可以使用该镜像重新部署复杂初始化系统或多次部署同样配置的云服务器。
下文制作方法支持的基础镜像操作系统及相关版本如下,支持32位/64位。
本节适用于没有虚拟机的用户,如果您已有虚拟机,请跳过此步骤。
配置宿主机。
宿主机操作系统的发行版无硬性要求,本文宿主机为X86架构并安装图形化界面(GUI)的CentOS 7.9操作系统。
egrep '(vmx|svm)' /proc/cpuinfo
vmx
或svm
表示已开启虚拟化。uname -r
安装虚拟化软件。
yum install -y qemu-kvm libvirt libvirt-python libvirt-client
systemctl start libvirtd systemctl enable libvirtd # 执行本命令可配置libvirtd服务开机自启动
当回显如下所示时,表示服务启动成功。systemctl status libvirtd
执行如下命令,安装virt-manager。
yum install -y virt-manager
创建启动模式为UEFI
的虚拟机时,还需完成如下配置。
请执行如下命令,安装OVMF。
说明
wget --no-check-certificate http://www.kraxel.org/repos/firmware.repo
-O /etc/yum.repos.d/firmware.repo
命令,安装firmware源。X86_64
架构,若您创建其他架构虚拟机,请安装相应架构的OVMF。yum install -y edk2.git-ovmf-x64.noarch
配置libvirtd以启用UEFI。
执行如下命令,并按i
键进入编辑模式。
vim /etc/libvirt/qemu.conf
在配置文件中插入如下内容,将OVMF和运行时变量模板添加到libvirt配置中。
请将
nvram
参数中路径替换为您安装OVMF的实际路径。
nvram = [ "/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd" ]
按ecs
键,并输入:wq
保存并退出。
执行如下命令,重启libvirtd服务。
systemctl restart libvirtd
开启宿主机ip_forward功能。
执行如下命令,配置ip_forward功能。
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
执行如下命令,使配置生效。
sysctl -p
在宿主机中准备基础镜像,请使用文件系统为EXT3、EXT4的单分区镜像,并且不要创建任何分区,否则可能出现自动扩容或启动异常问题。
说明
执行如下命令,打开virt-manager。
virt-manager
单击图标,开启新建虚拟机向导。
选择“Loca install media(ISO image or CDROM)”选项并单击“Forward”按钮,使用您准备的基础镜像安装虚拟机操作系统.。
单击“Browse...”按钮,打开选择窗口。
单击“Browse Local”按钮打开宿主机存储目录,选择您在宿主机中准备的基础镜像,单击“Open”按钮确认并返回新建虚拟机向导。
取消勾选“Automatically detect operating system based on install media”选项,根据使用的镜像信息自行选择“OS type”(镜像类型)与“Version”(发行版本)。
单击“Forward”按钮,配置虚拟机内存与CPU信息。
您不能分配超过宿主机系统中可用的物理处理器(或超线程)的虚拟CPU,可用的虚拟CPU数量可查看相应配置框下方
Up to X available
信息。
单击“Forward”按钮,配置创建的磁盘镜像大小。
请考虑虚拟机启用及需要在其中安装的应用程序,为其分配足够的空间。
单击“Forward”按钮,配置虚拟机名称与网络,并勾选“Customize configuration before install”。
说明
Virtual network 'default' : NAT'
,如需更改,请在“Network selection”模块下拉选择。确认虚拟机配置后,单击“Finish”按钮创建虚拟机。
在个性化定制页面中,可以配置虚拟机启动模式为UEFI
或调整虚拟机硬件配置。启动模式调整步骤如下:
UEFI
,单击“Apply”按钮即可配置虚拟机启动模式为UEFI
。跟随安装指引进入虚拟机配置页面时,需要您进入网络配置页面开启网络连接。
单击“NETWORK & HOST NAME”按钮,进入网络配置页面。
单击开启选项,确认开启网络连接后,单击左上角“Done”按钮,保存并回到个性化配置页面。
完成其他个性化配置后,单击“Continue”按钮,跟随指引完成虚拟机安装。
您需要登录创建的虚拟机,注释或删除将/etc/fstab文件中存在的数据盘目录信息。
执行如下命令,打开/etc/fstab文件。
vi /etc/fstab
按i
键进入编辑模式,并注释或删除数据盘目录信息。
按esc
键输入:wq
保存并退出编辑。
若您需要制作UEFI
启动模式的镜像,可根据本节指引登录虚拟机,修改虚拟机的启动引导文件。
在虚拟机中执行如下命令,安装grub2-efi。
yum install grub2-efi-x64 && yum install grub2-efi-x64-modules
执行如下命令,以UEFI为引导重装grub。
grub2-install --target=x86_64-efi --efi-directory=/boot/efi /dev/vda grub2-install --target=x86_64-efi --removable --efi-directory=/boot/efi --bootloader-id=GRUB
执行如下命令,重新生成grub2-config文件。
重新生成grub2-config文件将覆盖原有配置,建议您提前备份。
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
执行如下命令,修改grub2-mkconfig文件配置。
sed -i 's/linux16/linuxefi/g' /boot/grub2/grub.cfg sed -i 's/initrd16/initrdefi/g' /boot/grub2/grub.cfg
执行如下命令,下载20.03版本的cloud-init,更多版本请前往cloud-init官网获取下载链接。
wget https://launchpad.net/cloud-init/trunk/20.3/+download/cloud-init-20.3.tar.gz
安装Python3版本和cloud-init依赖。
说明
依次执行以下命令安装Python3和相关依赖。
yum install python3 python3-pip cloud-utils-growpart -y
安装cloud-init: 依次执行以下命令进行安装。
tar zxvf cloud-init-20.3.tar.gz ls cd cloud-init-20.3 pip3 install -r requirements.txt -i https://mirrors.volces.com/pypi/simple/ python3 setup.py build python3 setup.py install --init-system systemd ln -s /usr/local/bin/cloud-init /usr/bin/cloud-init systemctl enable cloud-init-local.service systemctl enable cloud-init.service systemctl enable cloud-config.service systemctl enable cloud-final.service
执行vim /etc/cloud/cloud.cfg
命令,替换cloud-init配置文件为如下内容,执行:wq
保存修改。
注意
若您制作的是CentOS镜像,请在system_info
模块增加distro: rhel
配置。
users: - default disable_root: 0 ssh_pwauth: 1 growpart: mode: auto devices: ['/'] ignore_growroot_disabled: false mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2'] resize_rootfs_tmp: /dev ssh_deletekeys: 1 syslog_fix_perms: ~ disable_vmware_customization: false manage_etc_hosts: localhost cloud_init_modules: - disk_setup - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups - ssh cloud_config_modules: - mounts - locale - set-passwords - rh_subscription - yum-add-repo - package-update-upgrade-install - timezone - puppet - chef - salt-minion - mcollective - disable-ec2-metadata - runcmd cloud_final_modules: - rightscale_userdata - scripts-per-once - scripts-per-boot - scripts-per-instance - scripts-user - ssh-authkey-fingerprints - keys-to-console - phone-home - final-message - power-state-change system_info: # distro: rhel # CentOS镜像需打开此配置 paths: cloud_dir: /var/lib/cloud templates_dir: /etc/cloud/templates ssh_svcname: sshd
更换cloud-init 数据源,执行vim /etc/cloud/cloud.cfg.d/90_dpkg.cfg
命令创建文件,写入以下内容后,执行:wq
保存修改。
datasource_list: [ConfigDrive, OpenStack] datasource: OpenStack: metadata_urls: ["http://100.96.0.96"] max_wait: -1 timeout: 5 retries: 5 apply_network_config: True
执行如下命令,确认当前虚拟机操作系统是否支持Virtio驱动。
grep -i virtio /boot/config-$(uname -r)
回显示例:
结果说明:
请在回显信息中,根据CONFIG_VIRTIO_BLK
数值,进行后续操作。
结果 | 说明 |
---|---|
参数值为 | 表示该操作系统内核支持Virtio驱动。 |
参数值为y | 表示该操作系统内核已经包含了Virtio驱动,您可以请继续安装Virtio1.1驱动。 |
没有这两个参数 | 表示该操作系统内核不支持Virtio驱动。您需要为自行编译安装Virtio驱动。 |
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
回显示例:
结果说明:
CentOS 6/AlmaLinux 8/Fedora 33及以上版本,且内核版本高于2.6.24。
vim /etc/dracut.conf
i
进入编辑模式,然后添加如下内容。add_drivers+="virtio_blk virtio_scsi virtio_net virtio_pci virtio_ring virtio"
Esc
键,并输入:wq
后按下回车键,保存并退出。dracut -f
临时文件修复完成后,可再次执行步骤二命令,验证Virtio驱动已成功包含在临时文件系统initramfs或initrd中。
若制作如下规格的实例使用的镜像,需根据本节指引安装Virtio1.1驱动。各规格详情可查看实例规格介绍。
系统架构 | 类型 | 实例规格 |
---|---|---|
x86计算 | 通用型 |
|
计算型 |
| |
内存型 |
| |
本地SSD型 | 本地SSD型i3s | |
弹性裸金属 | 所有弹性裸金属实例规格 | - |
异构计算 | GPU计算型 | GPU计算型gni3 |
说明
执行如下命令,下载Virtio1.1驱动管理脚本。
wget https://virtio11-drivers.tos-cn-beijing.volces.com/virtio_tool
执行如下命令,为脚本文件添加执行权限。
chmod +x ./virtio_tool
在virtio_tool文件所在目录中,执行如下命令,检查Virtio1.1驱动版本是否符合要求。
./virtio_tool -check
通过virtio_tool安装Virtio1.1驱动。
说明
暂仅支持如下操作系统及内核版本,安装Virtio1.1驱动。
镜像版本 | 内核版本 |
---|---|
CentOS 7.9 64位 | 3.10.0-1160.71.1 |
CentOS 7.8 64位 | 3.10.0-1127.19.1 |
CentOS 7.7 64位 | 3.10.0-1062.18 |
CentOS 7.6 64位 | 3.10.0-957.27.2 |
CentOS 7.5 64位 | 3.10.0-862.14.4 |
CentOS 7.4 64位 | 3.10.0-693.21.1 |
CentOS 7.3 64位 | 3.10.0-514.26.2 |
CentOS 7.2 64位 | 3.10.0-327.36.3 |
在virtio_tool脚本所在目录中,执行如下命令,安装Virtio1.1驱动。
yum -y install rpm-build redhat-lsb-core yum -y install epel-release sed -e 's!^metalink=!#metalink=!g' \ -e 's!^#baseurl=!baseurl=!g' \ -e 's!//download\.fedoraproject\.org/pub!//mirrors.volces.com!g' \ -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo yum -y install --enablerepo=epel dkms ./virtio_tool -install
本节仅适用于制作弹性裸金属实例并采用LTS-内核方式使用的Linux镜像,如果您的镜像不用于该规格实例,请跳过此步骤。
说明
执行如下命令,通过公网下载Virtio1.1驱动管理脚本。
wget https://virtio11-drivers.tos-cn-beijing.volces.com/virtio_tool
执行如下命令,为脚本文件添加执行权限。
chmod +x ./virtio_tool
在virtio_tool文件所在目录中,执行如下命令,检查虚拟机是否已经安装了Virtio1.1驱动。
./virtio_tool -check
若回显如下所示,表示您的虚拟机中已安装Virtio1.1驱动。
请执行如下命令,卸载旧的Virtio1.1驱动后,再继续后续操作。
./virtio_tool -uninstall
卸载成功示例:
若回显如下所示,表示您的虚拟机中未安装Virtio1.1驱动,请继续后续操作。
安装内核与驱动。
安装LTS-内核。
wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-4.9.324-1.x86_64.rpm wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-devel-4.9.324-1.x86_64.rpm wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-headers-4.9.324-1.x86_64.rpm yum install -y kernel-headers-4.9.324-1.x86_64.rpm kernel-devel-4.9.324-1.x86_64.rpm yum install -y kernel-4.9.324-1.x86_64.rpm
wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-4.14.289-1.x86_64.rpm wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-devel-4.14.289-1.x86_64.rpm wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-headers-4.14.289-1.x86_64.rpm yum install -y kernel-headers-4.14.289-1.x86_64.rpm kernel-devel-4.14.289-1.x86_64.rpm yum install -y kernel-4.14.289-1.x86_64.rpm
wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-4.19.253-1.x86_64.rpm wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-devel-4.19.253-1.x86_64.rpm wget https://virtio11-drivers.tos-cn-beijing.volces.com/lts-rpm/kernel-headers-4.19.253-1.x86_64.rpm yum install -y kernel-headers-4.19.253-1.x86_64.rpm kernel-devel-4.19.253-1.x86_64.rpm yum install -y kernel-4.19.253-1.x86_64.rpm
回显示例cat /boot/efi/EFI/centos/grub.cfg |grep menuentry
if [ x"${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" menuentry_id_option="" export menuentry_id_option menuentry 'CentOS Linux (4.9.324) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.19.1.el7.x86_64-advanced-bf734ac7-0328-4e7f-8ada-ca0917a32945' { menuentry 'CentOS Linux (3.10.0-1127.19.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.19.1.el7.x86_64-advanced-bf734ac7-0328-4e7f-8ada-ca0917a32945' { menuentry 'CentOS Linux (0-rescue-ccc58c7f32cb4030969ada15e4ae0d0f) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-ccc58c7f32cb4030969ada15e4ae0d0f-advanced-bf734ac7-0328-4e7f-8ada-ca0917a32945' {
grub2-set-default "CentOS Linux (4.9.324) 7 (Core)"
回显示例:grub2-editenv list
saved_entry=CentOS Linux (4.9.324) 7 (Core)
reboot
回显示例:uname -r
4.9.324
成功切换到LTS-内核版本后,安装LTS-Virtio1.1驱动。
yum -y install rpm-build redhat-lsb-core yum -y install epel-release sed -e 's!^metalink=!#metalink=!g' \ -e 's!^#baseurl=!baseurl=!g' \ -e 's!//download\.fedoraproject\.org/pub!//mirrors.ivolces.com!g' \ -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo yum -y install --enablerepo=epel dkms
yum -y install rpm-build redhat-lsb-core yum -y install epel-release sed -e 's!^metalink=!#metalink=!g' \ -e 's!^#baseurl=!baseurl=!g' \ -e 's!//download\.fedoraproject\.org/pub!//mirrors.volces.com!g' \ -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo yum -y install --enablerepo=epel dkms
wget https://virtio11-drivers.tos-cn-beijing.volces.com/virtio-1.1.0.dkms.tar.gz dkms ldtarball virtio-1.1.0.dkms.tar.gz dkms build virtio/1.1.0 dkms install virtio/1.1.0
CentOS 7/8操作系统,添加内核启动参数。
sed -i 's/\(^GRUB_CMDLINE_LINUX=.*\)"/\1 pci=realloc intel_idle.max_cstate=1 processor.max_cstate=1 iommu=pt"/g' /etc/default/grub grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg dracut --force /boot/initramfs-$(uname -r).img $(uname -r)
如需使用网卡Offload特性,请在虚拟机上安装MLNX驱动,操作详情可查看Linux Drivers。
说明
若您使用支持网卡Offload特性的规格(例如GPU计算型gni2),需要安装MLNX驱动。
注意
若您制作CentOS 7.x、Ubuntu 16.04、Ubuntu 18.04或Debian 9镜像,且该自定义镜像将用于通用型(g3a/g3i)/计算型(c3a/c3i)/内存型(r3a/r3i)规格实例,必须安装本工具。
您可以按照业务的需求,自行将个性化软件安装在系统盘中,例如JDK、Linux图形化桌面。
您可以在虚拟机中运行自定义镜像规范检测工具,检测当前操作系统各项配置是否符合创建云服务器实例规范,避免通过自定义镜像创建出功能不齐全的实例,操作详情可查看使用工具检测自定义镜像规范。
在虚拟机界面顶部选择“Virtual Machine > Shut Down > Shut Down”关闭虚拟机。
在宿主机中执行如下命令,打开存放镜像的文件夹,通过虚拟机名称即可查看镜像文件。
xdg-open /var/lib/libvirt/images/
说明
目前仅支持上传QCOW2或者RAW两种格式的镜像,如果镜像不满足以下两种格式,则需要在宿主机中执行如下命令将镜像格式进行转换。操作详情可查看转换镜像格式。
您可以将创建的镜像文件上传至火山引擎作为自定义镜像,上传成功后,即可使用该镜像创建实例,操作详情可查看导入自定义镜像。