将镜像添加到 Image 服务

支持的镜像格式

Ironic 官方支持并测试使用 qcow2 格式的镜像以及 raw 格式的镜像。其他类型的磁盘镜像,例如 vdi 和单个文件 vmdk 文件,已被用户报告在特定情况下可用,但未在上游进行测试。我们建议操作员转换镜像并正确将其上传到 Glance。

Ironic 使用 ironic.conf 中的 [conductor]permitted_image_formats 选项来强制执行支持和允许的镜像格式列表。此设置默认为“raw”和“qcow2”。

Glance 检测到的格式与磁盘镜像文件的实际内容检测到的格式不匹配,将导致部署失败。要纠正这种情况,必须重新上传镜像,并更正声明的 --disk-format 或实际的镜像文件格式。

实例(最终用户)镜像

按照 创建实例镜像 中描述的方式构建或下载用户镜像。

将所有创建的镜像加载到 Image 服务中,并记录每个镜像生成后在 Image 服务中的镜像 UUID。

注意

Ironic 使用的 Glance 中的镜像必须被标记为 public,这需要 Glance 镜像服务的管理员权限才能设置。

注意

从 2025.2 版本开始,Ironic conductor 可以访问与其项目共享的镜像,除了它拥有的镜像之外。

要使用此功能,请确保所需的镜像已与 conductor 凭据关联的项目共享。

  • 对于整盘镜像,只需上传镜像

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

    警告

    对于整盘镜像,不得设置内核/ramdisk 对,否则它们将被误认为是分区镜像。

  • 对于仅与本地启动(默认)一起使用的分区镜像,必须设置 img_type 属性

    $ openstack image create my-image --public \
      --disk-format qcow2 --container-format bare \
      --property img_type=partition --file my-image.qcow2
    
  • 对于与本地网络启动一起使用的分区镜像

    将内核和 ramdisk 镜像添加到 Image 服务

    $ openstack image create my-kernel --public \
      --disk-format raw --container-format bare --file my-image.vmlinuz
    

    将上述步骤中获得的镜像 uuid 存储为 MY_VMLINUZ_UUID

    $ openstack image create my-image.initrd --public \
      --disk-format raw --container-format bare --file my-image.initrd
    

    将上述步骤中获得的镜像 UUID 存储为 MY_INITRD_UUID

    my-image 添加到 Image 服务,它将是用户将要运行的操作系统。还将上述创建的镜像与此操作系统镜像关联。可以通过执行以下命令来完成这两个操作

    $ openstack image create my-image --public \
      --disk-format qcow2 --container-format bare --property \
      kernel_id=$MY_VMLINUZ_UUID --property \
      ramdisk_id=$MY_INITRD_UUID --file my-image.qcow2
    

部署 ramdisk 镜像

  1. 构建或下载部署镜像

    部署镜像最初用于准备服务器(创建磁盘分区),然后再部署实际的操作系统。

    有几种方法可以构建或下载部署镜像,请阅读 构建或下载部署 ramdisk 镜像 部分。

  2. 将部署镜像添加到 Image 服务

    将部署内核和 ramdisk 镜像添加到 Image 服务

    $ openstack image create deploy-vmlinuz --public \
      --disk-format raw --container-format bare \
      --file ironic-python-agent.vmlinuz
    

    将上述步骤中获得的镜像 UUID 存储为 DEPLOY_VMLINUZ_UUID(或者在使用节点架构指定的参数时使用不同的名称)。

    $ openstack image create deploy-initrd --public \
      --disk-format raw --container-format bare \
      --file ironic-python-agent.initramfs
    

    将上述步骤中获得的镜像 UUID 存储为 DEPLOY_INITRD_UUID(或者在使用节点架构指定的参数时使用不同的名称)。

  3. 配置 Bare Metal 服务以使用生成的镜像。可以按节点进行描述,如 使用 Ironic 注册硬件 中所述,或者在配置文件中使用字典按架构(与节点的 cpu_arch 属性匹配)指定它们,如下所示

    [conductor]
    deploy_kernel_by_arch = x86_64:<DEPLOY_VMLINUZ_X86_64_UUID>,aarch64:<DEPLOY_VMLINUZ_AARCH64_UUID>
    deploy_ramdisk_by_arch = x86_64:<DEPLOY_INITRD_X86_64_UUID>,aarch64:<DEPLOY_INITRD_AARCH64_UUID>
    

    或者全局使用常规配置参数

    [conductor]
    deploy_kernel = <insert DEPLOY_VMLINUZ_UUID>
    deploy_ramdisk = <insert DEPLOY_INITRD_UUID>
    

    如果同时定义了常规参数和按架构指定的参数,则按架构指定的参数优先。