6.7.2. 部署裸机置备服务


要部署裸机置备服务(ironic),您可以修补禁用 Bare Metal Provisioning 服务的现有 OpenStackControlPlane 自定义资源(CR)。ironic-operator 应用配置并启动裸机置备服务。在服务运行后,裸机置备服务会自动开始轮询它所管理的裸机节点的电源状态。

注意

默认情况下,裸机置备服务的 RHOSO 版本 18.0 及更新的版本包括新的多租户感知基于角色的访问控制(RBAC)模型。因此,在采用 Bare Metal Provisioning 服务后,运行 openstack baremetal node list 命令时可能会缺少裸机节点。您的节点不会被删除。由于 RBAC 模型中的访问限制增加,您必须识别哪个项目拥有缺少的裸机节点,并设置每个缺少的裸机节点上的 owner 字段。

先决条件

  • 您已将服务数据库导入到 control plane 数据库中。
  • 在 RHOSO 18.0 中禁用了裸机置备服务。以下命令应该返回字符串 false

    $ oc get openstackcontrolplanes.core.openstack.org <name> -o jsonpath='{.spec.ironic.enabled}'
    • < name> 替换为现有 OpenStackControlPlane CR 的名称,如 openstack-control-plane
  • Identity 服务(keystone)、网络服务(neutron)和镜像服务(glance)正常运行。

    注意

    如果您在裸机作为服务配置中使用裸机置备服务,在采用裸机置备服务前不要采用 Compute 服务(nova)。

  • 对于裸机置备服务编排器服务,服务必须能够访问配置为由裸机置备服务管理的硬件的 Baseboard Management Controller。如果此硬件无法访问,节点可能会进入 "maintenance" 状态,并在稍后恢复连接前不可用。
  • 您已在本地下载 ironic.conf 文件:

    $CONTROLLER1_SSH cat /var/lib/config-data/puppet-generated/ironic/etc/ironic/ironic.conf > ironic.conf
    注意

    此配置文件必须来自其中一个 Controller 节点,而不是 director Operator undercloud 节点。director Operator undercloud 节点使用不同的配置进行操作,这些配置在采用 Overcloud Ironic 部署时不适用。

  • 如果使用 Ironic Inspector 服务,则需要 IronicInspectorSubnets director Operator 参数的值。使用相同的值在 RHOSO 环境中填充 dhcpRanges 参数。
  • 您已定义以下 shell 变量:将以下示例值替换为应用到您的环境的值:

    $ alias openstack="oc exec -t openstackclient -- openstack"

流程

  1. 修补 OpenStackControlPlane 自定义资源(CR)以部署裸机置备服务:

    $ oc patch openstackcontrolplane openstack --type=merge --patch '
    spec:
      ironic:
        enabled: true
        template:
          rpcTransport: oslo
          databaseInstance: openstack
          ironicAPI:
            replicas: 1
            override:
              service:
                internal:
                  metadata:
                    annotations:
                      metallb.universe.tf/address-pool: internalapi
                      metallb.universe.tf/allow-shared-ip: internalapi
                      metallb.universe.tf/loadBalancerIPs: 172.17.0.80 
    1
    
                  spec:
                    type: LoadBalancer
          ironicConductors:
          - replicas: 1
            networkAttachments:
              - baremetal
            provisionNetwork: baremetal
            storageRequest: 10G
            customServiceConfig: |
              [neutron]
              cleaning_network=<cleaning network uuid>
              provisioning_network=<provisioning network uuid>
              rescuing_network=<rescuing network uuid>
              inspection_network=<introspection network uuid>
              [conductor]
              automated_clean=true
          ironicInspector:
            replicas: 1
            inspectionNetwork: baremetal
            networkAttachments:
              - baremetal
            dhcpRanges:
              - name: inspector-0
                cidr: 172.20.1.0/24
                start: 172.20.1.190
                end: 172.20.1.199
                gateway: 172.20.1.1
            serviceUser: ironic-inspector
            databaseAccount: ironic-inspector
            passwordSelectors:
              database: IronicInspectorDatabasePassword
              service: IronicInspectorPassword
          ironicNeutronAgent:
            replicas: 1
            rabbitMqClusterName: rabbitmq
          secret: osp-secret
    '
    1
    如果使用 IPv6,请将负载均衡器 IP 更改为环境中的负载均衡器 IP,如 metallb.universe.tf/loadBalancerIPs: fd00:bbbb::80
  2. 等待裸机置备服务 control plane 服务 CR 就绪:

    $ oc wait --for condition=Ready --timeout=300s ironics.ironic.openstack.org ironic
  3. 验证单个服务是否已就绪:

    $ oc wait --for condition=Ready --timeout=300s ironicapis.ironic.openstack.org ironic-api
    $ oc wait --for condition=Ready --timeout=300s ironicconductors.ironic.openstack.org ironic-conductor
    $ oc wait --for condition=Ready --timeout=300s ironicinspectors.ironic.openstack.org ironic-inspector
    $ oc wait --for condition=Ready --timeout=300s ironicneutronagents.ironic.openstack.org ironic-ironic-neutron-agent
  4. 更新 provisioning、清理和救援网络上的 DNS Nameservers:

    注意

    要使名称解析用于裸机置备服务操作,您必须将 DNS 名称服务器设置为使用 RHOSO control plane 中的内部 DNS 服务器:

    $ openstack subnet set --dns-nameserver 192.168.122.80 provisioning-subnet
  5. 验证节点列表中没有裸机置备服务节点:

    $ openstack baremetal node list
    重要

    如果 openstack baremetal node list 命令输出报告了不正确的电源状态,请等待几分钟,然后重新运行命令以查看输出是否与被管理的硬件的实际状态同步。Bare Metal Provisioning 服务检查和协调裸机节点的电源状态所需的时间取决于通过 replicas 参数的操作编排器,并在采用裸机置备服务部署中存在这些时间。

  6. 如果 openstack baremetal node list 命令中缺少任何裸机置备服务节点,请临时禁用新的 RBAC 策略来再次查看节点:

    $ oc patch openstackcontrolplane openstack --type=merge --patch '
    spec:
      ironic:
        enabled: true
        template:
          databaseInstance: openstack
          ironicAPI:
            replicas: 1
            customServiceConfig: |
              [oslo_policy]
              enforce_scope=false
              enforce_new_defaults=false
    '

    应用此配置后,Operator 会重启 Ironic API 服务,并禁用默认启用的新 RBAC 策略。

  7. 查看没有分配所有者的裸机节点:

    $ openstack baremetal node list --long -c UUID -c Owner -c 'Provisioning State'
  8. 将没有所有者的所有裸机节点分配给新项目,如 admin 项目:

    ADMIN_PROJECT_ID=$(openstack project show -c id -f value --domain default admin)
    for node in $(openstack baremetal node list -f json -c UUID -c Owner | jq -r '.[] | select(.Owner == null) | .UUID'); do openstack baremetal node set --owner $ADMIN_PROJECT_ID $node; done
  9. 通过删除 customServiceConfig 部分或将 customServiceConfig 部分中的以下值设置为 true 来重新应用默认 RBAC。例如:

    $ oc patch openstackcontrolplane openstack --type=merge --patch '
    spec:
      ironic:
        enabled: true
        template:
          databaseInstance: openstack
          ironicAPI:
            replicas: 1
            customServiceConfig: |
              [oslo_policy]
              enforce_scope=true
              enforce_new_defaults=true
    '

验证

  1. 验证端点列表:

    $ openstack endpoint list |grep ironic
  2. 验证裸机节点列表:

    $ openstack baremetal node list
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部