-
OpenStack Ironic 独立部署入门详解:上
想在云环境中像管理虚拟机(VM)一样管理物理服务器吗?想在物理节点上实现基础设施即代码(IaC)和 CI/CD 流水线吗?下面,让我们通过一些实用、简单且可复现的案例,来揭开私有云基础设施和裸金属生命周期管理的一些神秘面纱,我们将从一个最小化的 OpenStack Ironic “独立”部署开始。
- 使用 OpenStack Kolla 和 Ironic 安装并管理一个简单的裸金属配置系统。
- 管理物理服务器的通用生命周期:上线、资源收集、操作系统安装、故障恢复、回收。
- 应用 IaC 方法进行节点和应用程序的配置。
一旦我们了解了 Ironic 的“独立”模式,将其与 Keystone、Cinder、Nova 和 Neutron 等其他 OpenStack 服务集成就会变得更加简单,从而扩展其功能,将数据中心转变为一个能够同时管理裸金属工作负载和虚拟机的真正私有云。 引 言 日常与 物理服务器 、手动配置、驱动程序、BIOS 以及维护庞大物理机器打交道的人,都深知裸金属管理(即管理未预装操作系统的物理服务器)是多么耗时且繁琐。你肯定对 OpenStack 不陌生。它是一个开源的云服务套件,允许你以代码方式和“as-a-Service”的形式管理虚拟资源(虚拟机、网络、存储)。而 Ironic 正是 OpenStack 中将这一理念延伸到物理机管理的组件。 OpenStack Ironic 是一个裸金属配置和管理服务,它将物理服务器集成到 OpenStack 框架中,视其为云资源。这意味着物理服务器可以通过 API 进行请求、分配、配置和释放,就像操作虚拟机一样。
这与虚拟化无关:Ironic 不会在物理硬件上创建虚拟机。Ironic 管理的是物理硬件本身,它直接在机器上安装操作系统,没有任何中间的虚拟化层。
管理裸金属生命周期 传统上,管理裸金属服务器的生命周期是一个包含多个阶段的过程,通常是手动的且非常耗时: - 采购与物理安装:接收、上架、布线。
- BIOS/UEFI 配置:手动进入、进行特定设置。
- RAID 控制器配置:创建阵列、配置磁盘。
- 操作系统安装:从 CD/USB/PXE 启动,手动或半自动安装。
- 安装后配置:驱动、软件、网络、安全加固。
- 维护与更新:打补丁、升级固件。
- 回收:擦除磁盘、移除设备。
有了 Ironic,整个过程发生了转变,我们就实现了“as-a-Service”的管理方式: - 发现与注册(Onboarding):Ironic 通过 PXE 启动和代理“发现”机器,并将其注册到其清单中。注册后,Ironic 可以直接与其 BMC(管理控制器,如 iLO、iDRAC、IMM)进行交互。
- “As-a-Service”式配置:用户(或自动化服务)可以通过 OpenStack API 请求一台具有特定特性(CPU、RAM、存储)的物理服务器。Ironic 会选择一台可用的服务器,打开电源,安装所选的操作系统(GNU/Linux、Windows、VMware ESXi 等),配置网络,并在短时间内使其可用。
- 远程自动化管理:得益于与 BMC 的集成,Ironic 可以通过程序方式执行诸如开/关机、重启、重置、引导设备管理、固件更新(通过插件)甚至 BIOS/UEFI 设置等操作,所有这些都无需任何手动干预。
- 回收与清理:当不再需要某台服务器时,Ironic 可以执行安全磁盘擦除并重置 BIOS/UEFI 设置,使服务器恢复到“干净”状态,可供重用或最终回收,整个过程完全自动化。
- 与其他 OpenStack 服务集成:最后但同样重要的是,Ironic 可以与用于物理网络管理的 Neutron、用于操作系统镜像管理的 Glance、用于提供持久性存储的 Cinder 以及用于提供统一图形界面的 Horizon 集成。这使得构建复杂的解决方案成为可能,其中裸金属是云基础设施的延伸,不仅可以实现资源的“即服务”消费,还可以实现像 CI/CD 流水线这样的自动化交互。
01 实验环境 让我们考虑一个简化的环境,这样我们就可以用最少的精力来搭建它,并主要关注裸金属配置机制: 
- LAN 网络 192.168.0.0/24:也称为公共网络,这将是一个统一的客户端和服务器网络,通过一个路由器(.254)连接到互联网,该路由器在 x.x.x.101-199 范围内通过 DHCP 分配 IP 地址。
- OOB/IB 网络 172.19.74.0/24 :这个独立的网络由一台小型服务器(图中标记为“bms”)管理,用于控制裸金属节点的配置。这些节点通过 BMC 连接以进行带外管理(iLO、iDRAC、IMM 等),并通过以太网卡进行带内管理(部署、巡检、救援等)。
两个交换机都是非网管交换机,没有 VLAN,这样就可以使用“现成”的硬件,或者用企业级设备、甚至虚拟化环境轻松模拟。
1.1 裸金属服务
bms 服务器,即我们将要安装裸金属配置环境的服务器,并不需要很高的资源。最低规格要求是 4GB 内存、2 个 CPU 核心、2 个网卡和至少 200GB 的磁盘空间(用于托管和构建操作系统镜像及容器)。但是,建议至少使用 8GB 内存和 4 个 CPU 核心,以便将来可以扩展环境并添加更多服务。
在软件方面,将使用以下主要组件:
- OpenStack 2025.1 (Epoxy):在撰写本文时,这是最新的 OpenStack 版本,Kolla 和 Kolla Ansible(本文用于部署 OpenStack 的系统)已经为其发布了即用型容器。
- Debian GNU/Linux 12 (Bookworm):尽管 OpenStack 在很大程度上与各种 GNU/Linux 发行版无关(尤其是在通过容器安装时),但为了避免偏向商业发行版,我们将使用 Debian。
- Podman:它为 Docker 提供了一个轻量级且集成的替代方案,同时保持了与现有生态系统的兼容性,并与像 Kubernetes 这样的“Pod”基础设施保持一致。
02 创建实验环境 - 安装 bms 服务器;
- 安装 Podman 容器管理系统;
- 创建 kolla 管理用户;
- 创建 Python 虚拟环境;
- 安装 OpenStack Kolla Ansible;
- 为裸金属配置进行最小化配置;
- 部署 OpenStack。
2.1 服务器安装(bms)
对于操作系统安装,请选择您偏好的 GNU/Linux 版本并相应地调整配置:
root@bms:~# cat /etc/network/interfacesauto loiface lo inet loopbackauto enp1s0iface enp1s0 inet staticaddress 192.168.0.13/24gateway 192.168.0.254auto enp2s0iface enp2s0 inet staticaddress 172.19.74.1/24root@bms:~# cat /etc/hosts127.0.0.1 localhost172.19.74.1 bms.ironic.lab bmsroot@bms:~# hostname -i172.19.74.1root@bms:~# hostname -fbms.ironic.labenp1s0 (192.168.0.13/24): LAN 网络enp2s0 (172.19.74.1/24): OOB/IB 网络
对于 Kolla Ansible 项目来说,至关重要的一点是服务器名称——在本场景中是 bms 和 bms.ironic.lab——必须解析到 OpenStack 内部服务将要监听的 IP 地址(172.19.74.1)。在所提议的实验中,这个 IP 地址与 OOB/IB 管理网络的 IP 地址相同。
2.2 Podman
作为 Docker 的直接替代品,Podman 即使对新手来说也很容易使用。安装非常直接,因为它已作为标准软件包包含在大多数 GNU/Linux 发行版中:
root@bms:~# apt install -y podman...root@bms:~# podman infohost:arch: amd64buildahVersion: 1.28.2cgroupControllers:- cpu- memory- pidscgroupManager: systemdcgroupVersion: v2...version:APIVersion: 4.3.1Built: 0BuiltTime: Thu Jan 1 01:00:00 1970GitCommit: ""GoVersion: go1.19.8Os: linuxOsArch: linux/amd64Version: 4.3.1如果您习惯使用 Docker 并希望为了方便而保留 docker 命令,您也可以安装 podman-docker 包,它会为此创建一个专用的包装器。然而,在大多数情况下,一个简单的 alias docker=podman 可能就足够了。与 Docker 最明显的区别之一是,Podman 使用调用它的用户来运行容器,而不依赖于一个集中的守护进程。如果多个用户运行容器,那么只有拥有这些容器的用户才能通过 podman container ps 命令看到它们;root 用户也不例外。 2.3 管理用户
创建一个管理用户(例如 kolla)来执行各种操作,始终是一个好的实践。这在安全性和功能性方面都有好处,可以将部署环境与您的个人用户或 root 用户分离开来:
root@bms:~# useradd --system --add-subids-for-system \-d /var/lib/kolla \-c 'Kolla Administrator' \-s /bin/bash \-m kollaroot@bms:~> passwd kollaNew password: *********Retype new password: *********passwd: password updated successfully注意:–add-subids-for-system选项是必需的,以允许即使是系统用户也能执行无根容器 (rootless containers)。确保该用户能够通过 sudo 执行 root 命令: root@bms:~# echo 'kolla ALL=(ALL:ALL) NOPASSWD:ALL' >/etc/sudoers.d/kolla现在我们可以用 kolla 管理用户连接并继续进行服务器配置。2.4 Python 虚拟环境(venv) 用于裸金属配置和部署 OpenStack 本身的 OpenStack 组件也可以作为 PyPI 包 获取。在大多数最新的 GNU/Linux 发行版中,强烈不建议在系统级别安装 Python 包。要拥有一个包含必要软件的 Python 环境,而又不“污染”系统的 Python 环境,最方便的方法是创建一个与先前创建的管理用户相关联的 Python 虚拟环境:
kolla@bms:~$ sudo apt install -y \python3-dbus \python3-venv...kolla@bms:~$ python3 -m venv --system-site-packages $HOME...kolla@bms:~$ cat >>~/.profile <<EOF# 激活 Python 虚拟环境if [ -f "\$HOME/bin/activate" ]; then. "\$HOME/bin/activate"fiEOFkolla@bms:~$ source ~/bin/activatekolla@bms:~$ python3 -m pip install -U pip修改用户主目录中的 .profile 文件可以在每次登录时自动激活虚拟环境。同时,使用 –system-site-packages选项可以访问系统的 Python 库(例如 python3-dbus),而无需重新安装它们。注意:要在虚拟环境中安装 dbus-python 包(相当于系统包 python3-dbus),从而避免使用 –system-site-packages 选项,您需要安装开发工具:sudo apt install build-essential pkg-config libdbus-1-dev libglib2.0-dev python3-dev。如果您选择这条路,最好在生产环境中安装后移除编译器。 2.5 OpenStack Kolla Ansible
Kolla Ansible 项目的主要目标是简化和最大化 OpenStack 配置和管理的效率。为实现这一目标,它利用 Ansible 实现自动化和可复现性,并将 OpenStack 组件封装在 Docker 容器中,以简化其部署、更新和扩展。
Kolla Ansible 依赖于一个特定且严格的 Python 包及其各自版本的链条。使用先前配置的 Python 虚拟环境有助于在 kolla-ansible 包的各种版本之间保持分离和一致性,特别是 Ansible 本身及其各种 Ansible Galaxy 库依赖项。
kolla:~$ sudo apt install -y tree yq...kolla:~$ python3 -m pip install kolla-ansible docker podman...kolla:~$ kolla-ansible --versionkolla-ansible 19.4.0kolla:~$ kolla-ansible install-depsInstalling Ansible Galaxy dependenciesStarting galaxy collection install processProcess install dependency map...kolla:~$ ansible --versionansible [core 2.17.9]config file = Noneconfigured module search path = ['/var/lib/kolla/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /var/lib/kolla/lib/python3.11/site-packages/ansibleansible collection location = /var/lib/kolla/.ansible/collections:/usr/share/ansible/collectionsexecutable location = /var/lib/kolla/bin/ansiblepython version = 3.11.2 (main, Nov 30 2024, 21:22:50) [GCC 12.2.0] (/var/lib/kolla/bin/python3)jinja version = 3.1.6libyaml = True注意:tree 和 yq 包不是必需的;它们包含本文中用于目录检查和简化 YAML 和 JSON 文件管理的实用程序。让我们安装 OpenStack 命令行客户端: kolla@bms:~$ python3 -m pip install \-c https://releases.openstack.org/constraints/upper/master \python-openstackclient \python-ironicclient可选地,如果您想在登录时通过 [tab] 键启用命令自动补全,可以创建以下文件和目录: kolla@bms:~$ mkdir ~/.bash_completion.dkolla@bms:~$ openstack complete >~/.bash_completion.d/openstackkolla@bms:~$ cat >~/.bash_completion <<EOF# 加载本地 bash 补全if [[ -d ~/.bash_completion.d ]]; thenfor i in ~/.bash_completion.d/*; do[[ -f \$i && -r \$i ]] && . "\$i"donefiEOF要配置 Kolla Ansible,您需要提供一对 YAML 文件,globals.yml 和 passwords.yml,它们定义了配置以及与各种已启用组件的系统用户相关联的凭据集。此外,还需要一个 Ansible inventory 文件。所有这些文件都应放在默认目录 /etc/kolla 中,或由 KOLLA_CONFIG_PATH 环境变量指定的目录中。利用 kolla 系统用户的主目录,我们将所有配置文件放在 /var/lib/kolla/etc 中。 注意:拥有一个不同于默认值 (/etc/kolla) 的配置目录,可以防止在重置 Kolla 环境时(例如,使用 kolla-ansible destroy 命令)意外删除其文件。
对于 inventory,我们将使用提供的示例 all-in-one 文件,passwords.yml 文件也类似。后者是一个模板,稍后将使用 kolla-genpwd命令填充:
kolla@bms:~$ export KOLLA_CONFIG_PATH=~/etckolla@bms:~$ cat >>~/.bashrc <<EOF# Kolla Ansible 默认配置路径export KOLLA_CONFIG_PATH=~/etcEOFkolla@bms:~$ cp -a ~/share/kolla-ansible/etc_examples/kolla $KOLLA_CONFIG_PATHkolla@bms:~$ kolla-genpwd --passwords $KOLLA_CONFIG_PATH/passwords.ymlkolla@bms:~$ mkdir -p $KOLLA_CONFIG_PATH/ansible/inventorykolla@bms:~$ ln -s ~/share/kolla-ansible/ansible/inventory/all-in-one $KOLLA_CONFIG_PATH/ansible/inventory/同时,我们将用一个最小化版本替换 globals.yml 配置文件: ---# 主机配置kolla_base_distro: "debian"kolla_container_engine: "podman"# OpenStack 'master' 或发布版本openstack_release: "2025.1"#openstack_tag_suffix: "-aarch64"# OpenStack 服务enable_fluentd: falseenable_haproxy: falseenable_memcached: falseenable_proxysql: falseenable_openstack_core: falseenable_ironic: true# Kolla 配置network_interface: "enp2s0"kolla_internal_vip_address: "172.19.74.1"# Ironic 配置ironic_dnsmasq_interface: "{{ network_interface }}"ironic_dnsmasq_dhcp_ranges:- range: "172.19.74.101,172.19.74.199,255.255.255.0"routers: "172.19.74.1"注意:如果您使用的是基于 ARM 处理器的系统,容器也必须遵循相同的架构。只需取消注释 openstack_tag_suffix: “-aarch64″这一行即可下载正确的容器。在使用 Ansible playbooks 并尝试解读任何以 JSON 表示的错误消息之前,使用一种稍微更易读的输出格式可能会很方便,例如 YAML: kolla@bms:~$ cat >~/.ansible.cfg <<EOF[defaults]stdout_callback = yamlEOF为了验证一切是否正确,让我们运行 kolla-ansible prechecks 命令: 我们收到的红色错误消息表明缺少两个文件,它们代表 Ironic Python Agent (IPA) 的内核和 ramdisk:
failed: [localhost] (item=ironic-agent.kernel) => changed=falseansible_loop_var: itemfailed_when_result: trueitem: ironic-agent.kernelstat:exists: falsefailed: [localhost] (item=ironic-agent.initramfs) => changed=falseansible_loop_var: itemfailed_when_result: trueitem: ironic-agent.initramfsstat:exists: false顾名思义,它是一个用 Python 编写的代理,充当裸金属服务器和 OpenStack Ironic 之间的中介。它由一个实时的、在内存中运行的 GNU/Linux 操作系统组成,通过网络启动(PXE)加载到要管理的服务器上。目前,我们将从 OpenStack 文档 (https://tarballs.opendev.org/openstack/ironic-python-agent/dib/files/)
下载一个预构建的版本:
kolla@bms:~$ mkdir -p $KOLLA_CONFIG_PATH/config/ironickolla@bms:~$ curl https://tarballs.opendev.org/openstack/ironic-python-agent/dib/files/ipa-centos9-master.kernel \-o $KOLLA_CONFIG_PATH/config/ironic/ironic-agent.kernelkolla@bms:~$ curl https://tarballs.opendev.org/openstack/ironic-python-agent/dib/files/ipa-centos9-master.initramfs \-o $KOLLA_CONFIG_PATH/config/ironic/ironic-agent.initramfs这两个文件(ironic-agent.kernel 和 ironic-agent.initramfs)必须放在 $KOLLA_CONFIG_PATH/config/ironic/ 目录中。稍后它们将被一个为我们的需求专门创建的自定义版本所取代。现在我们可以重新运行 kolla-ansible prechecks 命令: 注意:每个报告的错误都必须被纠正,并且预检查步骤必须重新执行,直到获得一个干净的结果(errors=0)。
2.6 OpenStack Ironic “独立”配置
在“独立”模式下,Ironic 可以独立于其他 OpenStack 服务运行。这使您可以使用其功能而无需安装整个云平台(尽管您会放弃私有云环境可能提供的一系列高级功能)。因此,$KOLLA_CONFIG_PATH/globals.yml 文件包含以下几行:
...<SNIP>...enable_openstack_core: falseenable_ironic: true...<SNIP>...enable_openstack_core: false 选项禁用了所有本应由 Kolla Ansible 自动安装的组件,包括 Keystone、Glance、Nova、Neutron、Heat 和 Horizon。相反,enable_ironic: true 只启用了 Ironic。2.6 Ironic 配置 ironic.conf配置文件,应放置在 $KOLLA_CONFIG_PATH/config/ 中,必须包含特定的指令以启用要支持的 BMC 类型(Ironic 称之为 硬件类型 (Hardware Types))以及其他关于如何管理特定领域的说明。
对于 Ironic 管理的每个领域,都有相应的“接口”来控制操作:
- BIOS:管理 BIOS 设置。
- Boot:提供引导机制(例如,PXE、虚拟介质等)。
- Console:访问串行控制台。
- Deploy:管理节点安装和清理。
- Firmware:更新 BIOS/UEFI、RAID 控制器等。
- Inspect:收集硬件配置。
- Management:管理服务器引导模式。
- Network:与 OpenStack 的网络服务交互。
- Power:管理电源状态。
- RAID:配置 RAID 卷。
- Rescue:提供恢复功能。
- Storage:与 OpenStack 的存储系统交互。
- Vendor:提供额外的特定于供应商的功能。
[DEFAULT]enabled_hardware_types = ipmi,redfishenabled_bios_interfaces = no-biosenabled_boot_interfaces = ipxeenabled_console_interface = no-consoleenabled_deploy_interfaces = directenabled_firmware_interfaces = no-firmwareenabled_inspect_interfaces = agentenabled_management_interfaces = ipmitool,redfishenabled_network_interfaces = noopenabled_power_interfaces = ipmitool,redfishenabled_raid_interfaces = agentenabled_rescue_interfaces = agentenabled_storage_interfaces = noopenabled_vendor_interfaces = ipmitool,redfish[conductor]deploy_kernel = http://{{ ironic_http_interface_address }}:{{ ironic_http_port }}/ironic-agent.kerneldeploy_ramdisk = http://{{ ironic_http_interface_address }}:{{ ironic_http_port }}/ironic-agent.initramfsrescue_kernel = http://{{ ironic_http_interface_address }}:{{ ironic_http_port }}/ironic-agent.kernelrescue_ramdisk = http://{{ ironic_http_interface_address }}:{{ ironic_http_port }}/ironic-agent.initramfs在 [conductor] 部分,我们可以指定用于系统安装和恢复的默认内核和 ramdisk。变量 ironic_http_interface_address 和 ironic_http_port——其名称已足够自明——将在实际配置文件创建过程中由 Ansible 用其各自的值进行扩展。2.7 OpenStack 部署 让我们检查一下配置目录 $KOLLA_CONFIG_PATH,它应该包含以下文件:
kolla@bms:~$ tree $KOLLA_CONFIG_PATH/var/lib/kolla/etc├── ansible│ └── inventory│ └── all-in-one├── config│ ├── ironic│ │ ├── ironic-agent.initramfs│ │ └── ironic-agent.kernel│ └── ironic.conf├── globals.yml└── passwords.yml5 directories, 6 files- globals.yml:OpenStack Kolla 的 YAML 配置文件;
- passwords.yml:包含各组件使用的用户和密码的 YAML 文件;
- ansible/inventory/all-in-one:默认的 Ansible inventory;
- config/ironic.conf:包含 OpenStack Ironic 特定配置选项的 INI 文件;
- config/ironic/ironic-agent.{kernel,initramfs}:与 Ironic Python Agent 相关的二进制文件。
要在实际部署前预先验证配置,您可以运行 kolla-ansible validate-config 命令,如果没有错误需要纠正,最终可以继续执行 kolla-ansible deploy 命令:
注意:如果出现错误,为了获得更多的调试信息,您可以通过使用相应数量的“-v”选项重新运行命令来增加 Ansible 消息的“详细程度”(例如,kolla-ansible deploy -vvv)。
部署完成后,将有多个容器处于活动状态:一些是服务容器,另一些是 OpenStack Ironic 特有的容器:
- kolla_toolbox:这是一个管理“代理”容器。
- cron:用于执行计划的批处理操作(例如,logrotate)。
- mariadb[tcp/3306]:用于 OpenStack 持久化数据的数据库。
- rabbitmq[tcp/5672]:用于跟踪事务性或有状态活动的消息队列。
- ironic_conductor:Ironic 的业务逻辑。
- ironic_api[tcp/6385]:RESTful API 前端 (裸金属 API)。
- ironic_tftp[udp/69]:用于通过 PXE 提供内核和 ramdisk 的 Trivial FTP (FTP over UDP)。
- ironic_http[tcp/8089]:HTTP 仓库。
- ironic_dnsmasq[udp/67]:DHCP 服务器。
kolla@bms:~$ sudo podman container ps -aCONTAINER ID IMAGE CREATED STATUS NAMES978e287862b4 kolla-toolbox:2025.1 5 minutes ago Up 5 minutes ago kolla_toolbox6d0150fa51e2 cron:2025.1 5 minutes ago Up 5 minutes ago crona9df741f70c6 mariadb-clustercheck:2025.1 4 minutes ago Up 4 minutes ago mariadb_clusterchecke222e740d7ce mariadb-server:2025.1 4 minutes ago Up 4 minutes ago (healthy) mariadbefe4ebcce42c rabbitmq:2025.1 4 minutes ago Up 4 minutes ago (healthy) rabbitmqfd7169161d76 ironic-conductor:2025.1 3 minutes ago Up 3 minutes ago (healthy) ironic_conductor040e1ae3254e ironic-api:2025.1 3 minutes ago Up 3 minutes ago (healthy) ironic_api6a3956ff2c25 ironic-pxe:2025.1 3 minutes ago Up 3 minutes ago ironic_tftp26f5c058b419 ironic-pxe:2025.1 3 minutes ago Up 3 minutes ago (healthy) ironic_httpbe427175421b dnsmasq:2025.1 3 minutes ago Up 3 minutes ago ironic_dnsmasq相关组件的最终配置可以在 /etc/kolla 目录中找到,该目录只能用 root 权限访问: kolla@bms:~$ sudo tree /etc/kolla/etc/kolla├── cron│ ├── config.json│ └── logrotate.conf├── ironic-api│ ├── config.json│ ├── ironic-api-wsgi.conf│ └── ironic.conf├── ironic-conductor│ ├── config.json│ └── ironic.conf├── ironic-dnsmasq│ ├── config.json│ └── dnsmasq.conf├── ironic-http│ ├── config.json│ ├── httpd.conf│ ├── inspector.ipxe│ ├── ironic-agent.initramfs│ └── ironic-agent.kernel├── ironic-tftp│ └── config.json├── kolla-toolbox│ ├── config.json│ ├── erl_inetrc│ ├── rabbitmq-env.conf│ └── rabbitmq-erlang.cookie├── mariadb│ ├── config.json│ └── galera.cnf├── mariadb-clustercheck│ └── config.json└── rabbitmq├── advanced.config├── config.json├── definitions.json├── enabled_plugins├── erl_inetrc├── rabbitmq.conf└── rabbitmq-env.conf11 directories, 29 files这包括默认的 OpenStack Kolla 配置,并结合了位于由 $KOLLA_CONFIG_PATH 变量标识的目录下 config文件夹中文件的特定变动。在本实验中,该目录是 /var/lib/kolla/etc/config,而默认情况下应为 /etc/kolla/config。或者,托管自定义配置文件的目录可以在 globals.yml文件中通过设置 node_custom_config 变量来定义 。 注意:这些配置文件可以独立于部署过程,使用 kolla-ansible genconfig 命令生成。
要检查 Ironic 服务是否已启动并运行,我们可以直接使用命令 curl http://172.19.74.1:6385 | yq -y 查询 API:
name: OpenStack Ironic APIdescription: Ironic is an OpenStack project which enables the provision and managementof baremetal machines.default_version:id: v1links:- href: http://172.19.74.1:6385/v1/rel: selfstatus: CURRENTmin_version: '1.1'version: '1.96'versions:- id: v1links:- href: http://172.19.74.1:6385/v1/rel: selfstatus: CURRENTmin_version: '1.1'version: '1.96'我们再通过命令行测试一下客户端: kolla@bms:~$ openstack \--os-endpoint=http://172.19.74.1:6385 \--os-auth-type=none \baremetal driver list+---------------------+----------------+| Supported driver(s) | Active host(s) |+---------------------+----------------+| ipmi | bms || redfish | bms |+---------------------+----------------+kolla@bms:~$ openstack \--os-endpoint=http://172.19.74.1:6385 \--os-auth-type=none \baremetal conductor list+----------------+-----------------+-------+| Hostname. | Conductor Group | Alive |+----------------+-----------------+-------+| bms | | True |+----------------+-----------------+-------+kolla@bms:~$ openstack \--os-endpoint=http://172.19.74.1:6385 \--os-auth-type=none \baremetal conductor show bms+-----------------+---------------------------+| Field | Value |+-----------------+---------------------------+| created_at | 2025-03-31T17:50:26+00:00 || updated_at | 2025-04-01T17:16:56+00:00 || hostname | bms || conductor_group | || drivers | ['ipmi', 'redfish'] || alive | True |+-----------------+---------------------------+作为第二种选择,您可以用OS_ENDPOINT和 OS_AUTH_TYPE 环境变量替换 –os-endpoint 和 –auth-type 参数: kolla@bms:~$ export OS_ENDPOINT=http://172.19.74.1:6385/kolla@bms:~$ export OS_AUTH_TYPE=nonekolla@bms:~$ openstack baremetal driver show ipmi -f yaml | grep ^defdefault_bios_interface: no-biosdefault_boot_interface: ipxedefault_console_interface: no-consoledefault_deploy_interface: directdefault_firmware_interface: no-firmwaredefault_inspect_interface: agentdefault_management_interface: ipmitooldefault_network_interface: noopdefault_power_interface: ipmitooldefault_raid_interface: no-raiddefault_rescue_interface: agentdefault_storage_interface: noopdefault_vendor_interface: ipmitoolkolla@bms:~$ openstack baremetal driver show redfish -f yaml | grep ^defdefault_bios_interface: no-biosdefault_boot_interface: ipxedefault_console_interface: no-consoledefault_deploy_interface: directdefault_firmware_interface: no-firmwaredefault_inspect_interface: agentdefault_management_interface: redfishdefault_network_interface: noopdefault_power_interface: redfishdefault_raid_interface: redfishdefault_rescue_interface: agentdefault_storage_interface: noopdefault_vendor_interface: redfish另外,OpenStack 客户端会按特定顺序在以下文件系统位置使用一个名为 clouds.yaml 的文件: - 当前目录
~/.config/openstack目录/etc/openstack目录
kolla@bms:~$ mkdir -p ~/.config/openstackkolla@bms:~$ cat >~/.config/openstack/clouds.yaml <<-EOFclouds:ironic-standalone:endpoint: http://172.19.74.1:6385auth_type: noneEOF注意:如果 clouds.yaml 文件中有多个配置,则必须使用 –os-cloud 命令行选项(例如,openstack –os-cloud=ironic …)或通过 OS_CLOUD 环境变量(例如,export OS_CLOUD=ironic)来指定相关条目。如有相关问题,请在文章后面给小编留言,小编安排作者第一时间和您联系,为您答疑解惑。 未完待续…