openstack nova ironic 架构图以及流程

介绍

Ironic 是一个 OpenStack 项目,它提供裸机(而不是虚拟)机器。它可以独立使用,也可以作为 OpenStack 云的一部分使用,并与 OpenStack Identity(keystone)、Compute(nova)、Network(neutron)、Image(一目了然)和 Object(swift)服务集成。

当裸机服务使用计算和网络服务进行适当配置时,可以通过计算服务的 API 预配虚拟机和物理机。但是,由于物理服务器和交换机硬件的不同特性,实例作集是有限的。例如,无法在裸机实例上执行实时迁移。

  • PXE
  • IPMI

社区维护利用开源技术的参考驱动程序(例如 PXE 和 IPMI),以涵盖广泛的硬件。Ironic 的可插拔驱动程序架构还允许硬件供应商编写和贡献驱动程序,这些驱动程序可能会提高性能或添加社区驱动程序未提供的功能。

概念架构

逻辑架构

Ironic 服务由以下组件组成:

  • RESTful API 服务,操作员和其他服务可以通过该服务与托管裸机服务器进行交互。

  • 指挥(Conductor)服务,负责大部分工作。功能通过 API 服务公开。Conductor 和 API 服务通过 RPC 进行通信。

  • 支持异构硬件的各种驱动程序

  • 消息队列

  • 用于存储有关资源的信息的数据库。除其他外,这包括导体、节点(物理服务器)和驱动器的状态。

如图所示。逻辑架构,用户启动实例的请求通过 Nova API 和 Nova Scheduler 传递给 Nova Compute 服务。计算服务将此请求移交给 Ironic 服务,其中请求从 Ironic API 传递给 Conductor,再传递给驱动程序,以成功为用户配置物理服务器。

正如 Nova Compute 服务与各种 OpenStack 服务(如 Glance、Neutron、Swift 等)通信以配置虚拟机实例一样,这里的 Ironic 服务与相同的 OpenStack 服务通信,以满足镜像、网络、磁盘和其他资源需求以配置裸机实例。

1. 裸机托管的关键技术

1.1 预启动执行环境 (PXE)

PXE 是 Intel 和 Microsoft 开发的 Wired for Management (WfM) 规范的一部分。PXE 使系统的 BIOS 和网络接口卡 (NIC) 能够从网络引导计算机代替磁盘。引导是系统将作系统加载到本地内存中以便处理器可以执行的过程。这种允许系统通过网络启动的功能简化了管理员的服务器部署和服务器管理。

1.2 动态主机配置协议 (DHCP)

DHCP 是 Internet 协议 (IP) 网络上使用的一种标准化网络协议,用于动态分配网络配置参数,例如接口和服务的 IP 地址。使用 PXE,BIOS 使用 DHCP 获取网络接口的 IP 地址并定位存储网络引导程序 (NBP) 的服务器。

网络引导程序 (NBP): NBP 相当于 GRUB (GRand Unified Bootloader) 或 LILO (LInux LOader) - 传统上用于本地引导的加载器。与硬盘驱动器环境中的启动程序一样,NBP 负责将作系统内核加载到内存中,以便可以通过网络引导作系统。

1.3 简单文件传输协议 (TFTP)

TFTP 是一种简单的文件传输协议,通常用于在本地环境中的计算机之间自动传输配置或引导文件。在 PXE 环境中,TFTP 用于使用来自 DHCP 服务器的信息通过网络下载 NBP。

1.4 智能平台管理接口(IPMI)

IPMI 是系统管理员用来对计算机系统进行带外管理和监控其运行的标准化计算机系统接口。它是一种通过仅使用与硬件而不是作系统的网络连接来管理可能无响应或断电的系统的方法。

2. 部署架构

Ironic RESTful API 服务用于注册 Ironic 将管理的硬件。云管理员通常注册硬件,指定其属性,例如 MAC 地址和 IPMI 凭据。API 服务可以有多个实例。

Ironic conductor 服务完成了大部分工作。出于安全原因,建议将导体服务放置在隔离的主机上,因为它是唯一需要同时访问数据平面和 IPMI 控制平面的服务。

可以有多个 conductor 服务实例来支持各种类型的驱动程序并管理故障转移。conductor 服务的实例应位于单独的节点上。每个 conductor 本身可以运行许多驱动程序来满足异构硬件场景。如下图所示。

3. 了解裸机部署

当启动实例请求传入时会发生什么?下图演练了预置裸机实例期间所涉及的步骤。

在部署过程之前必须满足以下先决条件:

  • 在运行 ironic-conductor 的裸机服务节点上配置的依赖包,如 tftp-server、ipmi、syslinux 等,用于裸机配置。
  • 必须将 Nova 配置为使用裸机服务端点,并且应将计算驱动程序配置为在 Nova 计算节点上使用 ironic 驱动程序。
  • 要为可用硬件创建 flavor。Nova 必须知道要启动的 flavor。
  • 镜像将在 Glance 中提供。下面列出了成功裸机部署所需的一些镜像类型:
    1. bm-deploy-kernel bm-部署内核
    2. bm-deploy-ramdisk 内存磁盘
    3. user-image 用户镜像
    4. user-image-vmlinuz 用户镜像 vmlinuz
    5. user-image-initrd 用户镜像 初始化 initrd

要通过 Ironic RESTful API 服务注册的硬件。

下图是裸金属部署步骤:

4. 部署进程

  1. 引导实例请求通过 Nova API 通过消息队列传入 Nova 调度程序。

  2. Nova 调度程序应用筛选器并查找符合条件的计算节点。Nova 调度器使用风格 extra_specs 细节,例如"cpu_arch"、"裸机:deploy_kernel_id"、"裸机:deploy_ramdisk_id"等来匹配目标物理节点。

  3. 生成任务由驱动程序放置,其中包含所有信息,例如从哪个映像启动等。它从 Nova 计算的 virt 层调用 driver.spawn。

  4. 从裸机数据库中检索有关裸机节点的信息,并保留该节点。

  5. Glance 中的镜像被下拉到为裸机节点提供服务的 Ironic 导体的本地磁盘。

    1. 对于 pxe_* 驱动程序,这些包括所有镜像:部署 ramdisk 和用户实例镜像。

    2. 对于 agent_* 驱动程序,只有部署 ramdisk 存储在本地。OpenStack 的对象存储服务中的临时 URL 是为用户实例镜像创建的。

  6. 插入虚拟接口,Neutron API 更新 DHCP 端口以支持 PXE/TFTP 选项。

  7. Nova 的 ironic 驱动程序通过 Ironic API 向为裸机节点提供服务的 Ironic 导体发出部署请求。

  8. PXE 驱动程序准备 tftp 引导加载程序。

  9. IPMI 驱动程序发出命令以启用节点的网络启动并打开它。

  10. DHCP 启动部署 ramdisk。接下来,根据所使用的确切驱动程序,conductor 通过 iSCSI 将镜像复制到物理节点(pxe_* 驱动程序组),或者部署 ramdisk 从临时 URL(agent_* 驱动程序组)下载镜像,该 URL 可以由各种对象存储生成,例如 swift、radosgw 等,并上传到 OpenStack 的对象存储服务。在前一种情况下,导体连接到 iSCSI 端点,对卷进行分区,"dd" 镜像并关闭 iSCSI 连接。 部署完成。Ironic 导体会将 pxe 配置切换到服务模式,并在部署成功时通知 ramdisk 代理。

  11. IPMI 驱动程序将重新启动裸机节点。请注意,裸机部署期间有 2 次电源循环;第一次打开电源时,将按照步骤 9 中所述部署镜像。第二次,如本例所示,部署镜像后,节点将通电。

  12. 裸机节点状态更新,节点实例可用。

  13. 示例 1:PXE 启动和 iSCSI 部署过程¶

此过程用于 pxe_*系列驱动程序。

7. 示例 2:PXE 启动和直接部署过程

参考:

  1. docs.openstack.org/ironic/ocat...
  2. docs.openstack.org/ironic/late...
相关推荐
码事漫谈5 分钟前
C++继承中的虚函数机制:从单继承到多继承的深度解析
后端
阿冲Runner6 分钟前
创建一个生产可用的线程池
java·后端
写bug写bug16 分钟前
你真的会用枚举吗
java·后端·设计模式
喵手1 小时前
如何利用Java的Stream API提高代码的简洁度和效率?
java·后端·java ee
掘金码甲哥1 小时前
全网最全的跨域资源共享CORS方案分析
后端
m0_480502641 小时前
Rust 入门 生命周期-next2 (十九)
开发语言·后端·rust
张醒言1 小时前
Protocol Buffers 中 optional 关键字的发展史
后端·rpc·protobuf
鹿鹿的布丁1 小时前
通过Lua脚本多个网关循环外呼
后端
墨子白1 小时前
application.yml 文件必须配置哇
后端
xcya2 小时前
Java ReentrantLock 核心用法
后端