2.2. 使用 RHEL 或 Windows ISO 文件创建实例镜像
您可以从 ISO 文件以 QCOW2 格式创建自定义 Red Hat Enterprise Linux (RHEL)或 Windows 镜像,并将这些镜像上传到 Red Hat OpenStack Platform (RHOSP)镜像,以便在创建实例时使用。
2.2.1. 先决条件
- 用于创建镜像的 Linux 主机机器。这可以是您可以安装和运行 Linux 软件包的任何计算机,但 undercloud 或 overcloud 除外。
advanced-virt
存储库已启用:$ sudo subscription-manager repos --enable=advanced-virt-for-rhel-<ver>-x86_64-rpms
virt-manager
应用程序安装有创建客户机操作系统所需的所有软件包:$ sudo dnf module install -y virt
libguestfs-tools
软件包安装有一组用于访问和修改虚拟机镜像的工具:$ sudo dnf install -y libguestfs-tools-c
- RHEL 9 或 8 ISO 文件或 Windows ISO 文件。有关 RHEL ISO 文件的详情,请参考 RHEL 9.0 Binary DVD 或 RHEL 8.6 Binary DVD。如果您没有 Windows ISO 文件,请参阅 Microsoft 评估中心 下载评估镜像。
-
文本编辑器,如果要更改
kickstart
文件(仅限 RHEL)。
如果在 undercloud 上安装 libguestfs-tools
软件包,请取消激活 iscsid.socket
,以避免在 undercloud 上与 tripleo_iscsid
服务冲突:
$ sudo systemctl disable --now iscsid.socket
当您有先决条件时,您可以继续创建 RHEL 或 Windows 镜像:
2.2.2. 创建 Red Hat Enterprise Linux 9 镜像
您可以使用 Red Hat Enterprise Linux (RHEL) 9 ISO 文件以 QCOW2 格式创建 Red Hat OpenStack Platform (RHOSP)镜像。
流程
-
以
root
用户身份登录您的主机机器。 使用
virt-install
开始安装:[root@host]# virt-install \ --virt-type kvm \ --name <rhel9-cloud-image> \ --ram <2048> \ --cdrom </var/lib/libvirt/images/rhel-9.0-x86_64-dvd.iso> \ --disk <rhel9.qcow2>,format=qcow2,size=<10> \ --network=bridge:virbr0 \ --graphics vnc,listen=127.0.0.1 \ --noautoconsole \ --os-variant=<rhel9.0>
将尖括号 <
;&
gt; 中的值替换为 RHEL 9 镜像的正确值。此命令会启动一个实例并启动安装过程。
注意如果实例没有自动启动,请运行
virt-viewer
命令来查看控制台:[root@host]# virt-viewer <rhel9-cloud-image>
配置实例:
- 在初始安装程序引导菜单中,选择 Install Red Hat Enterprise Linux 9。
- 选择相应的 Language 和 Keyboard 选项。
- 当系统提示安装所使用的设备类型时,请选择 Auto-detected installation media。
- 当提示安装目的地类型时,请选择 Local Standard Disks。对于其他存储选项,请选择 Automatically configure partitioning。
- 在 您想要的安装类型中,选择" 基本服务器 安装",这将安装 SSH 服务器。
- 对于网络和主机名,请选择 eth0 作为网络,然后选择您的设备的主机名。默认主机名是 localhost.localdomain。
- 在 Root Password 字段中输入密码,然后在 Confirm 字段中输入同一密码。
- 当屏幕消息确认安装已完成后,重启实例并以 root 用户身份登录。
更新
/etc/sysconfig/network-scripts/ifcfg-eth0
文件,使其只包含以下值:TYPE=Ethernet DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp NM_CONTROLLED=no
- 重启机器。
使用 Content Delivery Network 注册机器。
# sudo subscription-manager register # sudo subscription-manager attach \ --pool=<pool-id> # sudo subscription-manager repos \ --enable rhel-9-for-x86_64-baseos-rpms \ --enable rhel-9-for-x86_64-appstream-rpms
-
使用有效的池 ID 替换
pool-id
。您可以通过运行subscription-manager list --available
命令来查看可用池 ID 列表。
-
使用有效的池 ID 替换
更新系统:
# dnf -y update
安装
cloud-init
软件包:# dnf install -y cloud-utils-growpart cloud-init
编辑
/etc/cloud/cloud.cfg
配置文件,并在cloud_init_modules
下添加以下内容:- resolv-conf
resolv-conf
选项会在实例第一次引导时自动配置resolv.conf
文件。此文件包含与实例相关的信息,如名称服务器
、域
和其他选项。在
/etc/sysconfig/network
中添加以下行以避免访问 EC2 元数据服务时出现问题:NOZEROCONF=yes
要确保控制台信息会在仪表板的 Log 标签页和
nova console-log
输出中显示,请在/etc/default/grub
文件中添加以下引导选项:GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
运行
grub2-mkconfig
命令:# grub2-mkconfig -o /boot/grub2/grub.cfg
输出如下:
Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-229.9.2.el9.x86_64 Found initrd image: /boot/initramfs-3.10.0-229.9.2.el9.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-121.el9.x86_64 Found initrd image: /boot/initramfs-3.10.0-121.el9.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-b82a3044fb384a3f9aeacf883474428b Found initrd image: /boot/initramfs-0-rescue-b82a3044fb384a3f9aeacf883474428b.img done
取消注册实例,以便生成的镜像不包含此实例的订阅详情:
# subscription-manager repos --disable=* # subscription-manager unregister # dnf clean all
关闭实例:
# poweroff
使用
virt-sysprep
命令重置并清理镜像,以便它可用于在没有问题的情况下创建实例:[root@host]# virt-sysprep -d <rhel9-cloud-image>
通过将磁盘镜像中的任何可用空间转换为主机中的可用空间来减小镜像大小:
[root@host]# virt-sparsify \ --compress <rhel9.qcow2> <rhel9-cloud.qcow2>
此命令在运行命令的位置中创建一个新的 <
rhel9-cloud.qcow
2> 文件。注意您必须根据应用到实例的类别中的磁盘空间手动调整实例的分区大小。
& lt;rhel9-cloud.qcow
2> 镜像文件可上传到镜像服务。有关将此 镜像上传到 RHOSP 部署的更多信息,请参阅将镜像上传到镜像服务。
2.2.3. 创建 Red Hat Enterprise Linux 8 镜像
您可以使用 Red Hat Enterprise Linux (RHEL) 8 ISO 文件以 QCOW2 格式创建 Red Hat OpenStack Platform (RHOSP)镜像。
流程
-
以
root
用户身份登录您的主机机器。 使用
virt-install
开始安装:[root@host]# virt-install \ --virt-type kvm \ --name <rhel86-cloud-image> \ --ram <2048> \ --vcpus <2> \ --disk <rhel86.qcow2>,format=qcow2,size=<10> \ --location <rhel-8.6-x86_64-boot.iso> \ --network=bridge:virbr0 \ --graphics vnc,listen=127.0.0.1 \ --noautoconsole \ --os-variant <rhel8.6>
将尖括号 <
;&
gt; 中的值替换为 RHEL 镜像的正确值。此命令会启动一个实例并启动安装过程。
注意如果实例没有自动启动,请运行
virt-viewer
命令来查看控制台:[root@host]# virt-viewer <rhel86-cloud-image>
配置实例:
- 在初始安装程序引导菜单中,选择 Install Red Hat Enterprise Linux 8。
- 选择相应的 Language 和 Keyboard 选项。
- 当系统提示安装所使用的设备类型时,请选择 基本存储设备。
-
为您的设备选择一个主机名。默认主机名是
localhost.localdomain
。 -
设置 时区和
root
密码。 - 在 您想要的安装类型中,选择" 基本服务器 安装",这将安装 SSH 服务器。
- 当屏幕消息确认安装已完成后,重启实例并以 root 用户身份登录。
更新
/etc/sysconfig/network-scripts/ifcfg-eth0
文件,使其只包含以下值:TYPE=Ethernet DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp NM_CONTROLLED=no
- 重启机器。
使用 Content Delivery Network 注册机器:
# sudo subscription-manager register # sudo subscription-manager attach \ --pool=<pool-id> # sudo subscription-manager repos \ --enable rhel-8-for-x86_64-baseos-rpms \ --enable rhel-8-for-x86_64-appstream-rpms
-
使用有效的池 ID 替换
pool-id
。您可以通过运行subscription-manager list --available
命令来查看可用池 ID 列表。
-
使用有效的池 ID 替换
更新系统:
# dnf -y update
安装
cloud-init
软件包:# dnf install -y cloud-utils-growpart cloud-init
编辑
/etc/cloud/cloud.cfg
配置文件,并在cloud_init_modules
下添加以下内容。- resolv-conf
resolv-conf
选项会在实例第一次引导时自动配置resolv.conf
文件。此文件包含与实例相关的信息,如名称服务器
、域
和其他选项。要防止网络问题,请创建
/etc/udev/rules.d/75-persistent-net-generator.rules
:# echo "#" > /etc/udev/rules.d/75-persistent-net-generator.rules
这可防止创建
/etc/udev/rules.d/70-persistent-net.rules
文件。如果创建了/etc/udev/rules.d/70-persistent-net.rules
文件,当您从快照引导时,网络可能无法正常工作,因为网络接口是作为eth1
而不是eth0
创建的,且 IP 地址没有被分配。在
/etc/sysconfig/network
中添加以下行以避免访问 EC2 元数据服务时出现问题:NOZEROCONF=yes
要确保控制台信息会在仪表板的 Log 标签页和
nova console-log
输出中显示,请在/etc/grub.conf
文件中添加以下引导选项:GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
取消注册实例,以便生成的镜像不包含此实例的相同订阅详情:
# subscription-manager repos --disable=* # subscription-manager unregister # dnf clean all
关闭实例:
# poweroff
使用
virt-sysprep
命令重置并清理镜像,以便它可用于在没有问题的情况下创建实例:[root@host]# virt-sysprep -d <rhel86-cloud-image>
通过将磁盘镜像中的任何可用空间转换为主机中的可用空间来减小镜像大小:
[root@host]# virt-sparsify \ --compress <rhel86.qcow2> <rhel86-cloud.qcow2>
此命令在运行命令的位置中创建一个新的 <
rhel86-cloud.qcow
2> 文件。注意您必须根据应用到实例的类别中的磁盘空间手动调整实例的分区大小。
& lt;rhel86-cloud.qcow
2> 镜像文件可上传到镜像服务。有关将此 镜像上传到 RHOSP 部署的更多信息,请参阅将镜像上传到镜像服务。
2.2.4. 创建 Windows 镜像
您可以使用 Windows ISO 文件以 QCOW2 格式创建 Red Hat OpenStack Platform (RHOSP)镜像。
流程
-
以
root
用户身份登录您的主机机器。 使用
virt-install
开始安装:[root@host]# virt-install \ --name=<windows-image> \ --disk size=<size> \ --cdrom=<file-path-to-windows-iso-file> \ --os-type=windows \ --network=bridge:virbr0 \ --graphics spice \ --ram=<ram>
将尖括号 <
;&
gt; 中的值替换为您的 Windows 镜像的正确值。注意--os-type=windows
参数确保为 Windows 实例正确配置时钟,并启用其 Hyper-Vlightenment 功能。在将镜像上传到镜像服务(glance)之前,还必须在镜像元数据中设置os_type=windows
。
virt-install
命令默认将实例镜像保存为/var/lib/libvirt/images/<windows-image>.qcow2
。如果要在其他位置保留实例镜像,请更改--disk
选项的参数:--disk path=<file-name>,size=<size>
将
<file-name
> 替换为存储实例镜像的文件的名称,以及其路径(可选)。例如,path=win8.qcow2,size=8
在当前工作目录中创建一个名为win8.qcow2
的 8 GB 文件。注意如果实例没有自动启动,请运行
virt-viewer
命令来查看控制台:[root@host]# virt-viewer <windows-image>
有关如何安装 Windows 的更多信息,请参阅 Microsoft 文档。
- 要允许新安装的 Windows 系统使用虚拟化硬件,您可能需要安装 VirtIO 驱动程序。如需更多信息,请参阅 配置和管理虚拟化 中的 为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
要完成配置,请在 Windows 系统上下载并运行 Cloudbase-Init。在安装 Cloudbase-Init 的末尾,选择 Run Sysprep 和 Shutdown 复选框。
Sysprep
工具通过生成操作系统 ID (供某些 Microsoft 服务使用)使实例是唯一的。重要红帽不提供对 Cloudbase-Init 的技术支持。如果您遇到问题,请联系 Cloudbase Solutions。
当 Windows 系统关闭时,&
lt;windows-image.qcow
2> 镜像文件已准备好上传到镜像服务。有关将此 镜像上传到 RHOSP 部署的更多信息,请参阅将镜像上传到镜像服务。