3.5. 将裸机置备服务(ironic)添加到 control plane


要在 OpenShift (RHOSO)部署的 Red Hat OpenStack Services 上启用裸机置备服务(ironic),您必须将 ironic 服务添加到 control plane 中,并根据需要进行配置。

流程

  1. 在工作站上打开 OpenStackControlPlane 自定义资源(CR)文件 openstack_control_plane.yaml
  2. 将以下 cellTemplates 配置添加到 nova 服务配置中:

      nova:
        apiOverride:
          route: {}
        template:
          ...
          secret: osp-secret
          cellTemplates:
            cell0:
              cellDatabaseAccount: nova-cell0
              hasAPIAccess: true
            cell1:
              cellDatabaseAccount: nova-cell1
              cellDatabaseInstance: openstack-cell1
              cellMessageBusInstance: rabbitmq-cell1
              hasAPIAccess: true
              novaComputeTemplates:
                compute-ironic:
                  computeDriver: ironic.IronicDriver
    • compute-ironic 定义计算服务的名称。名称限制为 20 个字符,且只能包含小写字母数字字符和 - 符号。
  3. 启用 ironic 服务并指定要连接的网络:

    spec:
      ...
      ironic:
        enabled: true
        template:
          rpcTransport: oslo
          databaseInstance: openstack
          ironicAPI:
            replicas: 1
            override:
              service:
                internal:
                  metadata:
                    annotations:
                      metallb.universe.tf/address-pool: ironic
                      metallb.universe.tf/allow-shared-ip: ironic
                      metallb.universe.tf/loadBalancerIPs: 172.20.1.80
                  spec:
                    type: LoadBalancer
          ironicConductors:
          - replicas: 1
            storageRequest: 10G
            networkAttachments:
            - ironic
            provisionNetwork: ironic
          ironicInspector:
            replicas: 1
            networkAttachments:
            - ironic
            inspectionNetwork: ironic
            override:
              service:
                internal:
                  metadata:
                    annotations:
                      metallb.universe.tf/address-pool: ironic
                      metallb.universe.tf/allow-shared-ip: ironic
                      metallb.universe.tf/loadBalancerIPs: 172.20.1.80
                  spec:
                    type: LoadBalancer
          ironicNeutronAgent:
            replicas: 1
          secret: osp-secret
    • ironicAPI.override.service.internal.metadata.annotations 定义 ironicAPI 服务的 MetalLB 配置。该服务使用 ironic 地址池,并与裸机网络上的其他服务共享负载均衡器 IP 地址。
    • ironicConductors.networkAttachments 定义您为隔离裸机网络创建的 NetworkAttachmentDefinition CR 的名称,用于裸机网络 用于 ironicConductor pod。
    • ironicConductors.provisionNetwork 定义您创建的网络服务(neutron)网络的名称,用作 创建裸机网络 中的 provisioning 网络
    • IronicInspector 定义是否使用 ironicInspector 服务。您可以在没有 ironicInspector 服务的情况下部署裸机置备服务。要部署该服务,请将 副本数 设置为 1
    • IronicInspector.networkAttachments 定义您为隔离裸机网络创建的 NetworkAttachmentDefinition CR 的名称,用于裸机网络 用于 ironicInspector pod。
    • IronicInspector.inspectionNetwork 定义您创建的网络服务(neutron)网络的名称,用作 创建裸机网络 中的检查网络。Ironic Inspector API 侦听端口 5050。
    • IronicInspector.override.service.internal.metadata.annotations 定义 ironicInspector 服务的 MetalLB 配置。该服务使用 ironic 地址池,并与裸机网络上的其他服务共享负载均衡器 IP 地址。
  4. 指定裸机置备服务用于置备、清理、检查和销毁裸机节点的网络:

    spec:
      ...
      ironic:
        ...
          ironicConductors:
          - replicas: 1
            storageRequest: 10G
            networkAttachments:
            - baremetal
            provisionNetwork: baremetal
            customServiceConfig: |
              [neutron]
              cleaning_network = <network_UUID>
              provisioning_network = <network_UUID>
              inspection_network = <network_UUID>
              rescuing_network = <network_UUID>
  5. 配置 OVN 映射:

      ovn:
        template:
          ovnController:
            ...
            nicMappings:
              datacentre: ocpbr
              baremetal: ironic
    • nicMappings 定义键值对列表,它将物理网络供应商映射到 NodeNetworkConfigurationPolicy (nncp) CR 中定义的接口名称。
  6. 更新 control plane:

    $ oc apply -f openstack_control_plane.yaml -n openstack
  7. 等待 RHOCP 创建与 OpenStackControlPlane CR 相关的资源。运行以下命令来检查状态:

    $ oc get openstackcontrolplane -n openstack
    NAME 						STATUS 	MESSAGE
    openstack-control-plane 	Unknown 	Setup started

    当状态为 "Setup complete" 时,会创建 OpenStackControlPlane 资源。

    提示

    -w 选项附加到 get 命令的末尾,以跟踪部署进度。

  8. 通过查看 openstack 命名空间中的 pod 确认 control plane 已部署:

    $ oc get pods -n openstack

    当所有 pod 都已完成或运行时,会部署 control plane。

  9. 等待 DNS 服务就绪:

    $ oc -n openstack wait openstackcontrolplanes.core.openstack.org controlplane \
      --for condition=OpenStackControlPlaneDNSReadyCondition --timeout=600s
  10. 在工作站上创建一个 Service CR 文件,以在裸机网络上公开 DNS 服务,如 dnsmasq-dns-ironic.yaml

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        core.openstack.org/ingress_create: "false"
        metallb.io/ip-allocated-from-pool: ironic
        metallb.universe.tf/address-pool: ironic
        metallb.universe.tf/allow-shared-ip: ironic
        metallb.universe.tf/loadBalancerIPs: 172.20.1.80
      name: dnsmasq-dns-ironic
      namespace: openstack
      labels:
        service: dnsmasq
    spec:
      ports:
        - name: dnsmasq
          port: 53
          protocol: UDP
          targetPort: 5353
        - name: dnsmasq-tcp
          port: 53
          protocol: TCP
          targetPort: 5353
      selector:
        service: dnsmasq
      type: LoadBalancer
    • metadata.annotations.metallb.universe.tf/address-pool 定义 baremetal 网络的 MetalLB 地址池名称。这必须与 为裸机网络 VIP 准备 RHOCP 时创建的 IPAddressPool 资源的名称匹配。
    • metadata.annotations.metallb.universe.tf/loadBalancerIPs 定义用于 DNS 服务的 MetalLB 地址池的 IP 地址。此 IP 地址必须在您为裸机网络创建的 IPAddressPool 资源中定义的范围内。
    • spec.ports 定义映射到 dnsmasq 服务目标端口(5353)的 DNS 端口(53)。
  11. 在集群中创建 Service CR:

    $ oc apply -f dnsmasq-dns-ironic.yaml
  12. 验证 Service CR 是否已创建并分配了负载均衡器 IP 地址:

    $ oc get -n openstack service dnsmasq-dns-ironic

    输出示例

    NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                     AGE
    dnsmasq-dns-ironic     LoadBalancer   172.30.123.45   172.20.1.80    53:31234/UDP,53:31235/TCP   1m

    EXTERNAL-IP 列显示裸机节点用于 DNS 解析的 IP 地址。在创建裸机网络 中,您可以在创建裸机网络 时使用此 IP 地址

验证

  1. 打开与 OpenStackClient pod 的远程 shell 连接:

    $ oc rsh -n openstack openstackclient
  2. 确认内部服务端点已注册到每个服务:

    $ openstack endpoint list -c 'Service Name' -c Interface -c URL --service ironic
    +--------------+-----------+---------------------------------------------------------------+
    | Service Name | Interface | URL                                                           |
    +--------------+-----------+---------------------------------------------------------------+
    | ironic       | internal  | http://ironic-internal.openstack.svc:9292                     |
    | ironic       | public    | http://ironic-public-openstack.apps.ostest.test.metalkube.org |
    +--------------+-----------+---------------------------------------------------------------+
  3. 退出 openstackclient pod:

    $ exit
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部