3.5. 将裸机置备服务(ironic)添加到 control plane
要在 OpenShift (RHOSO)部署的 Red Hat OpenStack Services 上启用裸机置备服务(ironic),您必须将 ironic 服务添加到 control plane 中,并根据需要进行配置。
流程
-
在工作站上打开
OpenStackControlPlane自定义资源(CR)文件openstack_control_plane.yaml。 将以下
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 个字符,且只能包含小写字母数字字符和-符号。
-
启用
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定义您为隔离裸机网络创建的NetworkAttachmentDefinitionCR 的名称,用于裸机网络 用于ironicConductorpod。 -
ironicConductors.provisionNetwork定义您创建的网络服务(neutron)网络的名称,用作 创建裸机网络 中的 provisioning 网络。 -
IronicInspector 定义是否使用
服务。您可以在没有ironicInspectorironicInspector服务的情况下部署裸机置备服务。要部署该服务,请将副本数设置为1。 -
IronicInspector.networkAttachments定义您为隔离裸机网络创建的NetworkAttachmentDefinitionCR 的名称,用于裸机网络 用于ironicInspectorpod。 -
IronicInspector.inspectionNetwork定义您创建的网络服务(neutron)网络的名称,用作 创建裸机网络 中的检查网络。Ironic Inspector API 侦听端口 5050。 -
IronicInspector.override.service.internal.metadata.annotations定义ironicInspector服务的 MetalLB 配置。该服务使用ironic地址池,并与裸机网络上的其他服务共享负载均衡器 IP 地址。
-
指定裸机置备服务用于置备、清理、检查和销毁裸机节点的网络:
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>-
将 <
network_UUID> 替换为您在为该功能 创建裸机网络时创建的网络的 UUID。
-
将 <
配置 OVN 映射:
ovn: template: ovnController: ... nicMappings: datacentre: ocpbr baremetal: ironic-
nicMappings定义键值对列表,它将物理网络供应商映射到NodeNetworkConfigurationPolicy(nncp) CR 中定义的接口名称。
-
更新 control plane:
$ oc apply -f openstack_control_plane.yaml -n openstack等待 RHOCP 创建与
OpenStackControlPlaneCR 相关的资源。运行以下命令来检查状态:$ oc get openstackcontrolplane -n openstack NAME STATUS MESSAGE openstack-control-plane Unknown Setup started当状态为 "Setup complete" 时,会创建
OpenStackControlPlane资源。提示将
-w选项附加到get命令的末尾,以跟踪部署进度。通过查看
openstack命名空间中的 pod 确认 control plane 已部署:$ oc get pods -n openstack当所有 pod 都已完成或运行时,会部署 control plane。
等待 DNS 服务就绪:
$ oc -n openstack wait openstackcontrolplanes.core.openstack.org controlplane \ --for condition=OpenStackControlPlaneDNSReadyCondition --timeout=600s在工作站上创建一个
ServiceCR 文件,以在裸机网络上公开 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)。
-
在集群中创建
ServiceCR:$ oc apply -f dnsmasq-dns-ironic.yaml验证
ServiceCR 是否已创建并分配了负载均衡器 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 1mEXTERNAL-IP列显示裸机节点用于 DNS 解析的 IP 地址。在创建裸机网络 中,您可以在创建裸机网络 时使用此 IP 地址。
验证
打开与
OpenStackClientpod 的远程 shell 连接:$ oc rsh -n openstack openstackclient确认内部服务端点已注册到每个服务:
$ 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 | +--------------+-----------+---------------------------------------------------------------+退出
openstackclientpod:$ exit