火山引擎云服务器怎么制作自定义Linux镜像?

axin 2025-03-31 7人围观 ,发现0个评论 火山引擎云服务器云服务器

👉点击这里申请火山引擎VIP帐号,立即体验火山引擎产品>>>


操作场景

如果您拥有所需发行版本的基础镜像,您可以参考本文使用virt-manager制作QCOW2格式镜像并导入您的私有镜像到火山引擎平台。
此方式具有更高的定制化性,适用于需要复杂初始化系统镜像的场景,导入平台后,您可以使用该镜像重新部署复杂初始化系统或多次部署同样配置的云服务器。

前提条件

下文制作方法支持的基础镜像操作系统及相关版本如下,支持32位/64位。
  • CentOS 7.x 系列

  • CentOS 8.x 系列

  • Ubuntu 系列

  • Debian 系列

第一步:宿主机环境准备(可选)

本节适用于没有虚拟机的用户,如果您已有虚拟机,请跳过此步骤。
  1. 配置宿主机。

    1. 准备一台物理服务器作为镜像制作服务器(即宿主机)。

宿主机操作系统的发行版无硬性要求,本文宿主机为X86架构并安装图形化界面(GUI)的CentOS 7.9操作系统。
    1. 登录宿主机。

    1. 执行如下命令,确认宿主机已开启虚拟化能力。

egrep '(vmx|svm)' /proc/cpuinfo
如下图所示,回显存在vmx或svm表示已开启虚拟化。
    1. 执行如下命令,确认宿主机内核高于3.10版本。

uname -r
如下图所示。
  1. 安装虚拟化软件。

    1. 执行如下命令,安装KVM与相关软件包。

yum install -y qemu-kvm libvirt libvirt-python libvirt-client
    1. 执行如下命令,启动libvirtd服务。

systemctl start libvirtdsystemctl enable libvirtd # 执行本命令可配置libvirtd服务开机自启动
    1. 执行如下命令,确认libvirtd服务是否启动成功。

systemctl status libvirtd
当回显如下所示时,表示服务启动成功。
  1. 执行如下命令,安装virt-manager。

yum install -y virt-manager
  1. 创建启动模式为UEFI的虚拟机时,还需完成如下配置。

    1. 请执行如下命令,安装OVMF。

说明
  • 若您的宿主机操作系统源中没有edk2-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
    1. 配置libvirtd以启用UEFI。

      1. 执行如下命令,并按i键进入编辑模式。

vim /etc/libvirt/qemu.conf
      1. 在配置文件中插入如下内容,将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"]
      1. 按ecs键,并输入:wq按回车键,保存并退出。

      1. 执行如下命令,重启libvirtd服务。

systemctl restart libvirtd
  1. 开启宿主机ip_forward功能。

    1. 执行如下命令,配置ip_forward功能。

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    1. 执行如下命令,使配置生效。

sysctl -p

第二步:在宿主机上创建虚拟机

  1. 在宿主机中准备基础镜像,请使用文件系统为EXT3、EXT4的单分区镜像,并且不要创建任何分区,否则可能出现自动扩容或启动异常问题。

说明
    • 建议您使用官方镜像。

    • 若您可选的镜像文件包括QCOW2、ISO两种格式,建议选择ISO镜像。

  1. 执行如下命令,打开virt-manager。

virt-manager
  1. 单击新建图标,开启新建虚拟机向导。

  1. 选择“Loca install media(ISO image or CDROM)”选项并单击“Forward”按钮,使用您准备的基础镜像安装虚拟机操作系统.。

  1. 单击“Browse...”按钮,打开选择窗口。

  1. 单击“Browse Local”按钮打开宿主机存储目录,选择您在宿主机中准备的基础镜像,单击“Open”按钮确认并返回新建虚拟机向导。

  1. 取消勾选“Automatically detect operating system based on install media”选项,根据使用的镜像信息自行选择“OS type”(镜像类型)与“Version”(发行版本)。

  1. 单击“Forward”按钮,配置虚拟机内存与CPU信息。

您不能分配超过宿主机系统中可用的物理处理器(或超线程)的虚拟CPU,可用的虚拟CPU数量可查看相应配置框下方Up to X available信息。
  1. 单击“Forward”按钮,配置创建的磁盘镜像大小。

请考虑虚拟机启用及需要在其中安装的应用程序,为其分配足够的空间。
  1. 单击“Forward”按钮,配置虚拟机名称与网络,并勾选“Customize configuration before install”。

说明
  • 虚拟机名称可以包含字母、数字和以下字符:下划线(_)、句号(.)和连字符(-)。

  • 网络配置默认为Virtual network 'default' : NAT',如需更改,请在“Network selection”模块下拉选择。

  1. 确认虚拟机配置后,单击“Finish”按钮创建虚拟机。

  1. 在个性化定制页面中,可以配置虚拟机启动模式为UEFI或调整虚拟机硬件配置。启动模式调整步骤如下:

    1. 在左侧目录树选择“Overview”。

    1. 在“Hypervisor Details”模块的“Firmware”选项下拉选择UEFI,单击“Apply”按钮即可配置虚拟机启动模式为UEFI。

c. 单击窗口左上角“Begin Installation”按钮,开始安装虚拟机。
  1. 跟随安装指引进入虚拟机配置页面时,需要您进入网络配置页面开启网络连接。

    1. 单击“NETWORK & HOST NAME”按钮,进入网络配置页面。

    1. 单击开启选项,确认开启网络连接后,单击左上角“Done”按钮,保存并回到个性化配置页面。

  1. 完成其他个性化配置后,单击“Continue”按钮,跟随指引完成虚拟机安装。

第三步:修改虚拟机文件

修改/etc/fstab文件

您需要登录创建的虚拟机,注释或删除将/etc/fstab文件中存在的数据盘目录信息。
  1. 执行如下命令,打开/etc/fstab文件。

vi /etc/fstab
  1. 按i键进入编辑模式,并注释或删除数据盘目录信息。

  1. 按ESC键输入:wq按回车键,保存并退出编辑。

修改启动引导文件(可选)

若您需要制作UEFI启动模式的镜像,可根据本节指引登录虚拟机,修改虚拟机的启动引导文件。

第四步:在虚拟机上安装Cloud-init

  1. 依次执行以下命令,安装Python3版本和cloud-init依赖。

说明
  • 请选择Python3.6以上版本进行安装,否则会出现Python3和部分pip包不兼容的情况,影响cloud-init运行。

  • 建议您从Python官网手动下载安装Python3。

  1. 安装并配置Cloud-init。

说明
您可以按需下载“火山引擎官方提供的Cloud-init”或是“社区版本的Cloud-init”,建议您使用火山引擎官方提供的Cloud-init。

第五步:在虚拟机上安装驱动

安装Virtio驱动

步骤一:确认内核是否支持Virtio驱动

执行如下命令,确认当前虚拟机操作系统是否支持Virtio驱动。
grep -i virtio /boot/config-$(uname -r)
回显示例:
结果说明:
请在回显信息中,根据CONFIG_VIRTIO_BLK数值,进行后续操作。
结果
说明
参数值为m
表示该操作系统内核支持Virtio驱动。
请执行步骤二,确认临时文件系统initramfs或initrd中是否包含Virtio驱动。
参数值为y
表示该操作系统内核已经包含了Virtio驱动,您可以请继续安装Virtio1.1驱动。
没有这两个参数
表示该操作系统内核不支持Virtio驱动。您需要为自行编译安装Virtio驱动。

步骤二:确认临时文件系统是否包含Virtio驱动

回显示例:
结果说明:
  • 回显如上图所示,存在Virtio驱动相关信息,表示临时文件系统initramfs已经包含了virtio_blk驱动,及其依赖的virtio.ko、virtio_pci.ko和virtio_ring.ko,请继续安装Virtio1.1驱动。

  • 若回显为空,表示临时文件系统没有包含Virtio驱动,请执行步骤三修复临时文件系统。

步骤三:修复临时文件系统

步骤四:验证修复结果

临时文件修复完成后,可再次执行步骤二命令,验证Virtio驱动已成功包含在临时文件系统initramfs或initrd中。

安装Virtio1.1驱动

若制作如下规格的实例使用的镜像,需根据本节指引安装Virtio1.1驱动。各规格详情可查看实例规格介绍。
系统架构
类型
实例规格
x86计算
通用型
  • 通用型g3i

  • 通用型g3a

计算型
  • 计算型c3i

  • 计算型c3a

内存型
  • 内存型r3i

  • 内存型r3a

本地SSD型
本地SSD型i3s
弹性裸金属
所有弹性裸金属实例规格
-
异构计算
GPU计算型
GPU计算型gni3
说明
  • 若您在虚拟机中上传的基础镜像是veLinux、CentOS 8.3(及以上版本)、Ubuntu Server 20.xx(及以上版本)及Debian 11(及以上版本)镜像,创建任意规格实例均无需安装Virtio1.1驱动,请跳过此步骤。

  • 安装驱动前:

    • 请为虚拟机安装kernel-headers和kernel-devel,并确保与kernel版本一致,否则可能会出现安装驱动失败的情况(如有升级kernel,请重启后再安装驱动)。您也可以根据驱动源代码进行编译适配,或提交工单获取支持。

    • 确保虚拟机可以访问公网。

  • 安装驱动后,若您在实例内更换了内核版本,需重新安装适配该内核版本的Virtio1.1驱动,否则可能导致实例无法正常使用。

  • 如果您的镜像用于采用LTS-内核的弹性裸金属实例,请参考在虚拟机上安装LTS-内核与Virtio1.1驱动进行操作。

  1. 执行如下命令,下载Virtio1.1驱动管理脚本。

wget -O virtio_tool https://virtio11-drivers.tos-cn-beijing.volces.com/virtio_tool_1.1.1
  1. 执行如下命令,为脚本文件添加执行权限。

chmod +x ./virtio_tool
  1. 在virtio_tool文件所在目录中,执行如下命令,检查Virtio1.1驱动版本是否符合要求。

./virtio_tool -check
    • 若回显如下所示,表示您的虚拟机中已安装符合要求的Virtio1.1驱动,请跳过本节。

    • 若回显如下所示,表示您的虚拟机中未安装符合要求的Virtio1.1驱动,请继续执行本节操作。

  1. 通过virtio_tool安装Virtio1.1驱动。

安装LTS-内核与Virtio1.1驱动(可选)

本节仅适用于制作弹性裸金属实例并采用LTS-内核方式使用的Linux镜像,如果您的镜像不用于该规格实例,请跳过此步骤。
说明
  • 如果您的镜像用于为弹性裸金属实例但不采用LTS-内核的方式,请参考在虚拟机上安装Virtio1.1驱动进行操作。

  • 此操作不可以直接在裸金属实例上执行,需要在火山ECS虚拟机上执行,制作自定义镜像后给裸金属实例使用。

  • 本节仅提供一种裸金属实例使用自定义内核的思路与方法。

  • 整体安装流程:

    • 若存在旧版本的Virtio1.1驱动,需先将其删除。

    • 在火山引擎ECS实例中安装LTS-内核,并重启到指定版本的LTS-内核。

    • 安装LTS-内核版本指定的Virtio1.1驱动包。

    • 更新initramfs/initrd,并重启实例查看是否正常。

  1. 执行如下命令,通过公网下载Virtio1.1驱动管理脚本。

wget -O virtio_tool https://virtio11-drivers.tos-cn-beijing.volces.com/virtio_tool_1.1.1
  1. 执行如下命令,为脚本文件添加执行权限。

chmod +x ./virtio_tool
  1. 在virtio_tool文件所在目录中,执行如下命令,检查虚拟机是否已经安装了Virtio1.1驱动。

./virtio_tool -check
    • 若回显如下所示,表示您的虚拟机中已安装Virtio1.1驱动。

请执行如下命令,卸载旧的Virtio1.1驱动后,再继续后续操作。
./virtio_tool -uninstall
卸载成功示例:
    • 若回显如下所示,表示您的虚拟机中未安装Virtio1.1驱动,请继续后续操作。

  1. 安装内核与驱动。

安装MLNX驱动(可选)

如需使用网卡Offload特性,请在虚拟机上安装MLNX驱动,操作详情可查看Linux Drivers。
说明
若您使用支持网卡Offload特性的规格(例如GPU计算型gni2),需要安装MLNX驱动。

第六步:在虚拟机中安装插件

  • 密码插件

为实现用于重置、绑定/解绑密码功能,您制作的自定义镜像必须安装密码插件,否则可能导致镜像无法正常使用。安装操作可查看安装密码插件。
  • blk-none

为避免在实例中解压大压缩包时出现I/O问题,火山引擎提供了blk-none工具,该工具会根据实例磁盘类型,将磁盘调度算法置为none或者noop避免该问题出现。安装操作详情可查看解决方案。
注意
若您制作CentOS 7.x、Ubuntu 16.04、Ubuntu 18.04或Debian 9镜像,且该自定义镜像将用于通用型(g3a/g3i)/计算型(c3a/c3i)/内存型(r3a/r3i)规格实例,必须安装本工具。
  • 云监控插件

如需从实例内部进行监控,以获取更深层、更准确的实例运行情况,您还可以为自定义镜像安装云监控插件。安装操作可查看安装插件。

第七步:在虚拟机中安装个性化软件(可选)

您可以按照业务的需求,自行将个性化软件安装在系统盘中,例如JDK、Linux图形化桌面。

第八步:检测镜像规范

您可以在虚拟机中运行自定义镜像规范检测工具,检测当前操作系统各项配置是否符合创建云服务器实例规范,避免通过自定义镜像创建出功能不齐全的实例,操作详情可查看使用工具检测自定义镜像规范。

第九步:导出镜像

  1. 在虚拟机界面顶部选择“Virtual Machine > Shut Down > Shut Down”关闭虚拟机。

  1. 在宿主机中执行如下命令,打开存放镜像的文件夹,通过虚拟机名称即可查看镜像文件。

xdg-open /var/lib/libvirt/images/

第十步:转换镜像格式

目前仅支持上传QCOW2、RAW、VHD、VMDK格式的镜像,如果镜像不满足格式要求,则需要在宿主机中执行如下命令将镜像格式进行转换。了解更多。

后续操作

您可以将创建的镜像文件上传至火山引擎作为自定义镜像,上传成功后,即可使用该镜像创建实例,操作详情可查看导入自定义镜像。


请关注微信公众号
微信二维码
不容错过
Powered By TOPYUN 云产品资讯