第 4 章 使用 Image 服务(glance)执行操作


您可以在 OpenShift (RHOSO)镜像服务(glance)上的 Red Hat OpenStack Services 中创建和管理镜像。

注意

要在云上执行 openstack 客户端命令,您必须指定 clouds.yaml 文件中详述的云名称。您可以使用以下方法之一指定云的名称:

  • 在每个命令 中使用--os-cloud 选项:
$ openstack flavor list --os-cloud <cloud_name>

如果您访问多个云,则使用此选项。

  • bashrc 文件中为云名称创建一个环境变量:
`export OS_CLOUD=<cloud_name>`

先决条件

  • 管理员已为您创建一个项目,已为您提供了一个 clouds.yaml 文件来访问云。
  • 已安装 python-openstackclient 软件包。

4.1. 创建操作系统镜像

要创建可在镜像服务(glance)中管理的操作系统镜像,您可以使用 Red Hat Enterprise Linux (RHEL)基于内核的虚拟机(KVM)实例镜像,或者您可以使用 RHEL ISO 文件或 Windows ISO 文件手动创建与 QCOW2 格式的 RHOSO 兼容镜像。

4.1.1. 虚拟机镜像格式

虚拟机(VM)镜像是包含安装可引导操作系统的虚拟磁盘的文件。Red Hat OpenStack Services on OpenShift (RHOSO)支持以不同格式的虚拟机镜像。

VM 镜像的磁盘格式是底层磁盘镜像的格式。容器格式指示虚拟机镜像是否为包含虚拟机元数据的文件格式。

将镜像添加到镜像服务(glance)时,您可以使用 openstack image createglance image-create -via-importopenstack image set 命令选项将您的镜像的磁盘 或容器格式设置为下表中的任何值。如果您不确定虚拟机镜像的容器格式,您可以将其设置为 bare

Expand
表 4.1. 磁盘镜像格式
格式描述

aki

表示存储在镜像服务中的 Amazon 内核镜像。

ami

表示存储在镜像服务中的 Amazon 机器镜像。

ari

表示存储在镜像服务中的 Amazon ramdisk 镜像。

iso

磁盘上数据的扇区副本,存储在二进制文件中。虽然 ISO 文件通常不被视为虚拟机镜像格式,但这些文件包含有安装操作系统的可引导文件系统,并且您可以使用与其他虚拟机镜像文件的方式相同。

PLOOP

Virtuozzo 支持并用来运行 OS 容器的磁盘格式。

qcow2

QEMU 模拟器支持。此格式包括 QCOW2v3 (有时称为 QCOW3),这需要 QEMU 1.1 或更高版本。

raw

非结构化磁盘镜像格式.

vdi

VirtualBox VM 监控和 QEMU 模拟器支持。

vhd

虚拟硬盘.虚拟机监控器来自 VMware、VirtualBox 等使用。

vhdx

虚拟硬盘 v2.存储容量大于 VHD 的磁盘镜像格式。

vmdk

虚拟机磁盘.允许从上次备份时间对数据进行增量备份的磁盘镜像格式。

Expand
表 4.2. 容器镜像格式
格式描述

aki

表示存储在镜像服务中的 Amazon 内核镜像。

ami

表示存储在镜像服务中的 Amazon 机器镜像。

ari

表示存储在镜像服务中的 Amazon ramdisk 镜像。

裸机

表示镜像没有容器或元数据信封。

docker

表示存储在镜像服务中的 Docker 容器的 TAR 归档。

ova

指明存储在镜像服务中的开放虚拟设备(OVA) TAR 归档文件。此文件存储在 Open Virtualization Format (OVF)容器文件中。

OVF

OVF 容器文件格式。用于打包并分发虚拟设备或软件在虚拟机上运行的开放式标准。

4.1.2. 创建 RHEL KVM 镜像

使用 Red Hat Enterprise Linux (RHEL)基于内核的虚拟机(KVM)实例镜像创建可在 OpenShift (RHOSO)镜像服务(glance)上的 Red Hat OpenStack Services (RHOSO)镜像服务(glance)中管理的镜像。

4.1.2.1. 使用 RHEL KVM 实例镜像

您可以将以下 Red Hat Enterprise Linux (RHEL)基于内核的虚拟机(KVM)实例镜像与 OpenShift (RHOSO 上的 Red Hat OpenStack Services)搭配使用:

QCOW2 镜像使用 cloud-init 配置,且必须具有 EC2 兼容元数据服务,以便置备 Secure Shell (SSH)密钥才能正常工作。

无法使用 QCOW2 格式的 Windows KVM 实例镜像。

注意

对于 KVM 实例镜像:

  • 镜像中的 root 帐户被取消激活,但 sudo 访问权限被赋予一个名为 cloud-user 的特殊用户。
  • 此映像没有设置 root 密码。

通过将 !! 放置到第二个字段中,将 root 密码锁定在 /etc/shadow 中。

对于 RHOSO 实例,从 RHOSO 控制面板或命令行生成 SSH 密钥对,并使用该密钥组合以 root 用户身份对实例执行 SSH 公钥身份验证。

当您启动实例时,此公钥会注入到其中。然后,您可以使用创建密钥对时下载的私钥进行身份验证。

要为裸机实例创建自定义根分区镜像,请下载基本 Red Hat Enterprise Linux KVM 实例镜像,然后将镜像上传到镜像服务(glance)。

流程

  1. 从客户门户网站下载 基本 Red Hat Enterprise Linux KVM 实例镜像。
  2. 定义 DIB_LOCAL_IMAGE 作为下载的镜像:

    $ export DIB_LOCAL_IMAGE=rhel-<ver>-x86_64-kvm.qcow2
    • <ver > 替换为镜像的 RHEL 版本号。
  3. 根据您的注册方法设置注册信息:

    • 红帽客户门户网站:

      $ export REG_USER='<username>'
      $ export REG_PASSWORD='<password>'
      $ export REG_AUTO_ATTACH=true
      $ export REG_METHOD=portal
      $ export https_proxy='<IP_address:port>' (if applicable)
      $ export http_proxy='<IP_address:port>' (if applicable)
    • Red Hat Satellite:

      $ export REG_USER='<username>'
      $ export REG_PASSWORD='<password>'
      $ export REG_SAT_URL='<satellite-url>'
      $ export REG_ORG='<satellite-org>'
      $ export REG_ENV='<satellite-env>'
      $ export REG_METHOD=<method>
    • 将尖括号 & lt;> 中的值替换为您的红帽客户门户网站或 Red Hat Satellite 注册的正确值。
  4. 可选:如果您有任何离线存储库,您可以将 DIB_YUM_REPO_CONF 定义为本地存储库配置:

    $ export DIB_YUM_REPO_CONF=<file-path>
    • <file-path > 替换为本地存储库配置文件的路径。
  5. 使用 diskimage-builder 工具将内核提取为 rhel-image.vmlinuz,初始 RAM 磁盘作为 rhel-image.initrd

    $ export DIB_RELEASE=<ver>
    $ disk-image-create rhel baremetal \
      -o rhel-image
  6. 将镜像上传到镜像服务:

    $ KERNEL_ID=$(openstack image create \
      --file rhel-image.vmlinuz --public \
      --container-format aki --disk-format aki \
      -f value -c id rhel-image.vmlinuz)
    $ RAMDISK_ID=$(openstack image create \
      --file rhel-image.initrd --public \
      --container-format ari --disk-format ari \
      -f value -c id rhel-image.initrd)
    $ openstack image create \
      --file rhel-image.qcow2   --public \
      --container-format bare \
      --disk-format qcow2 \
      --property kernel_id=$KERNEL_ID \
      --property ramdisk_id=$RAMDISK_ID \
      rhel-root-partition-bare-metal-image

要为裸机实例创建整个磁盘用户镜像,请下载基本 Red Hat Enterprise Linux KVM 实例镜像,然后将镜像上传到镜像服务(glance)。

流程

  1. 从客户门户网站下载 基本 Red Hat Enterprise Linux KVM 实例镜像。
  2. 定义 DIB_LOCAL_IMAGE 作为下载的镜像:

    $ export DIB_LOCAL_IMAGE=rhel-<ver>-x86_64-kvm.qcow2
    • <ver > 替换为镜像的 RHEL 版本号。
  3. 根据您的注册方法设置注册信息:

    • 红帽客户门户网站:

      $ export REG_USER='<username>'
      $ export REG_PASSWORD='<password>'
      $ export REG_AUTO_ATTACH=true
      $ export REG_METHOD=portal
      $ export https_proxy='<IP_address:port>' (if applicable)
      $ export http_proxy='<IP_address:port>' (if applicable)
    • Red Hat Satellite:

      $ export REG_USER='<username>'
      $ export REG_PASSWORD='<password>'
      $ export REG_SAT_URL='<satellite-url>'
      $ export REG_ORG='<satellite-org>'
      $ export REG_ENV='<satellite-env>'
      $ export REG_METHOD=<method>
    • 将尖括号 & lt;> 中的值替换为您的红帽客户门户网站或 Red Hat Satellite 注册的正确值。
  4. 可选:如果您有任何离线存储库,您可以将 DIB_YUM_REPO_CONF 定义为本地存储库配置:

    $ export DIB_YUM_REPO_CONF=<file-path>
    • <file-path > 替换为本地存储库配置文件的路径。
  5. 将镜像上传到镜像服务:

    $ openstack image create \
      --file rhel-image.qcow2 --public \
      --container-format bare \
      --disk-format qcow2 \
      rhel-whole-disk-bare-metal-image

4.1.3. 使用 RHEL 或 Windows ISO 文件创建实例镜像

您可以从 ISO 文件以 QCOW2 格式创建自定义 Red Hat Enterprise Linux (RHEL)或 Windows 镜像,并将这些镜像上传到 OpenShift (RHOSO)镜像服务(glance),以便在创建实例时使用。

4.1.3.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 ISO 文件或 Windows ISO 文件。有关 RHEL ISO 文件的更多信息,请参阅 RHEL 9.0 Binary DVD。如果您没有 Windows ISO 文件,请参阅 Microsoft Evaluation Center 以下载评估镜像。
  • 文本编辑器(如果您想更改 kickstart 文件(仅限 RHEL)。
重要

如果您在 undercloud 上安装 libguestfs-tools 软件包,请停用 iscsid.socket,以避免与 undercloud 上的 tripleo_iscsid 服务的端口冲突:

$ sudo systemctl disable --now iscsid.socket

当您满足先决条件时,您可以继续创建 RHEL 或 Windows 镜像:

4.1.3.2. 创建 Red Hat Enterprise Linux 9 镜像

您可以使用 Red Hat Enterprise Linux (RHEL) 9 ISO 文件以 QCOW2 格式在 OpenShift (RHOSO)镜像创建 Red Hat OpenStack Services。

流程

  1. root 用户身份登录您的主机计算机。
  2. 使用 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>
    • 将尖括号 &lt ;& gt; 中的值替换为 RHEL 9 镜像的正确值。

      这个命令启动一个实例并启动安装过程。

      注意

      如果实例没有自动启动,请运行 virt-viewer 命令来查看控制台:

      [root@host]# virt-viewer <rhel9-cloud-image>
  3. 配置实例:

    1. 在初始安装程序引导菜单中,选择 Install Red Hat Enterprise Linux 9
    2. 选择相应的 LanguageKeyboard 选项。
    3. 当系统提示输入安装所使用的设备类型时,请选择" 自动探测到的安装介质 "。
    4. 当系统提示安装目的地类型时,请选择 Local Standard Disks。对于其他存储选项,请选择 Automatically configure partitioning
    5. Whatch type installation would like? 窗口中,选择 Basic Server install,它将安装 SSH 服务器。
    6. 对于网络和主机名,选择 eth0 作为网络,然后选择设备的主机名。默认主机名是 localhost.localdomain
    7. Root Password 字段中输入密码,并在 Confirm 字段中再次输入相同的密码。
  4. 当屏幕消息确认安装已完成时,重启实例并以 root 用户身份登录。
  5. 更新 /etc/sysconfig/network-scripts/ifcfg-eth0 文件,使其只包含以下值:

    TYPE=Ethernet
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    NM_CONTROLLED=no
  6. 重启机器。
  7. 使用 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 列表。
  8. 更新系统:

    # dnf -y update
  9. 安装 cloud-init 软件包:

    # dnf install -y cloud-utils-growpart cloud-init
  10. 编辑 /etc/cloud/cloud.cfg 配置文件并在 cloud_init_modules 下添加以下内容:

    - resolv-conf

    resolv-conf 选项在第一次启动时自动配置 resolv.conf 文件。此文件包含与实例相关的信息,如 名称服务器 和其他选项。

  11. /etc/sysconfig/network 中添加以下行,以避免访问 EC2 元数据服务时出现问题:

    NOZEROCONF=yes
  12. 要确保控制台信息会在仪表板的 Log 标签页和 nova console-log 输出中显示,请在 /etc/default/grub 文件中添加以下引导选项:

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
  13. 运行 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
  14. 取消注册实例,以便生成的镜像不包含此实例的订阅详情:

    # subscription-manager repos --disable=*
    # subscription-manager unregister
    # dnf clean all
  15. 关闭实例:

    # poweroff
  16. 使用 virt-sysprep 命令重置和清理镜像,以便它可用于在没有问题的情况下创建实例:

    [root@host]# virt-sysprep -d <rhel9-cloud-image>
  17. 通过将磁盘镜像中的任何可用空间转换为主机中的可用空间来减小镜像大小:

    [root@host]# virt-sparsify \
      --compress <rhel9.qcow2> <rhel9-cloud.qcow2>

    这个命令会在运行命令的位置创建一个新的 < rhel9-cloud.qcow 2> 文件。

    注意

    您必须根据应用到实例的类别中的磁盘空间,手动调整实例的分区大小。

& lt;rhel9-cloud.qcow 2> 镜像文件已准备好上传到镜像服务。有关将此 镜像上传到 RHOSO 部署的更多信息,请参阅将镜像上传到镜像服务

4.1.3.3. 创建 Windows 镜像

您可以使用 Windows ISO 文件以 QCOW2 格式在 OpenShift (RHOSO)上创建 Red Hat OpenStack Services。

流程

  1. root 用户身份登录您的主机计算机。
  2. 使用 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>
    • 将尖括号 &lt ;& gt; 中的值替换为您的 Windows 镜像的正确值。

      注意

      the -os-type=windows 参数确保为 Windows 实例正确配置了时钟并启用其 Hyper-V enlightenment 功能。在将镜像上传到镜像服务(glance)之前,还必须在镜像元数据中设置 os_type=windows

  3. 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 文档。

  4. 要允许新安装的 Windows 系统使用虚拟化硬件,您可能需要安装 VirtIO 驱动程序。如需更多信息,请参阅 配置和管理虚拟化 中的 为 Windows 虚拟机安装 KVM 半虚拟驱动程序
  5. 要完成配置,请在 Windows 系统上下载并运行 Cloudbase-Init。在安装 Cloudbase-Init 结束时,选择 Run SysprepShutdown 复选框。Sysprep 工具通过生成操作系统 ID (供某些 Microsoft 服务使用)使实例是唯一的。

    重要

    红帽不提供 Cloudbase-Init 的技术支持。如果您遇到问题,请参阅 Cloudbase Solutions 联系

    当 Windows 系统关闭时,& lt;windows-image.qcow 2> 镜像文件已准备好上传到镜像服务。有关将此 镜像上传到 RHOSO 部署的更多信息,请参阅将镜像上传到镜像服务

4.1.4. 为 UEFI 安全引导创建镜像

如果您的 Red Hat OpenStack Services on OpenShift (RHOSO)部署包含 UEFI 安全引导 Compute 节点,您可以创建一个安全引导镜像,供云用户用来启动安全引导实例。

流程

  1. 为 UEFI 安全引导创建新镜像:

    $ openstack image create \
    --file <base_image_file> \
    --container-format <container_format> \
    --disk-format <disk_format> \
    uefi_secure_boot_image
    • <base_image_file > 替换为支持 UEFI 和 GUID 分区表(GPT)标准的镜像文件,并包括 EFI 系统分区。
    • <container_format > 替换为以下容器格式之一: none, ami, ari, aki, bare, ovf, ova, docker
    • <disk_format > 替换为以下磁盘格式之一: none, ami, ari, aki, vhd, vhdx, vmdk, raw, qcow2, vdi, iso, ploop。
  2. 如果默认机器类型不是 q35,则机器类型设置为 q35

    $ openstack image set --property hw_machine_type=q35 uefi_secure_boot_image
  3. 指定实例必须调度到 UEFI 安全引导主机上:

    $ openstack image set \
     --property hw_firmware_type=uefi \
     --property os_secure_boot=required \
     uefi_secure_boot_image

4.1.5. 虚拟硬件的元数据属性

Compute 服务(nova)已弃用对使用 libosinfo 数据设置默认设备模型的支持。反之,使用以下镜像元数据属性为实例配置最佳虚拟硬件:

  • os_distro
  • os_version
  • hw_cdrom_bus
  • hw_disk_bus
  • hw_scsi_model
  • hw_vif_model
  • hw_video_model
  • hypervisor_type
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部