5.4.3. 为一组带有未置备的节点的 Networker 节点创建 OpenStackDataPlaneNodeSet CR


为一组 Networker 节点定义 OpenStackDataPlaneNodeSet 自定义资源(CR)。您可以根据部署需要定义多个节点设置。每个节点只能包含在一个 OpenStackDataPlaneNodeSet CR 中。

您可以使用 nodeTemplate 字段配置通用属性,以应用到 OpenStackDataPlaneNodeSet CR 中的所有节点,以及用于特定于节点属性的 nodeTemplate.nodes 字段。特定于节点的配置覆盖来自 nodeTemplate 的继承值。

提示

有关从未置备的 Networker 节点创建节点设置的 OpenStackDataPlaneNodeSet CR 示例,请参阅 使用 OVS-DPDK 的未置备的 Networker 节点设置 CR 示例。

先决条件

流程

  1. 在工作站上创建一个名为 openstack_unprovisioned_node_set.yaml 的文件,以定义 OpenStackDataPlaneNodeSet CR:

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneNodeSet
    metadata:
      name: openstack-data-plane namespace: openstack spec: tlsEnabled: true env: - name: ANSIBLE_FORCE_COLOR value: "True"**
    • name - OpenStackDataPlaneNodeSet CR 名称必须是唯一的,仅包含小写字母数字字符和 - (hyphens)或 . (periods),以字母数字字符开头和结尾,且最大长度为 53 个字符。将本例中的名称更新为反映集合中节点的名称。
    • env - Optional:传递给 pod 的环境变量列表。
  2. 将数据平面连接到 control plane 网络:

    spec:
      ...
      networkAttachments:
        - ctlplane
  3. 指定此集合中的节点是未置备的,必须在创建资源时被置备:

      preProvisioned: false
  4. 定义 baremetalSetTemplate 字段,以描述创建资源时必须置备的裸机节点的配置:

      baremetalSetTemplate:
        deploymentSSHSecret: dataplane-ansible-ssh-private-key-secret
        bmhNamespace: <bmh_namespace>
        cloudUserName: <ansible_ssh_user>
        bmhLabelSelector:
          app: <bmh_label>
        ctlplaneInterface: <interface>
    • <bmh_namespace > 替换为节点对应的 BareMetalHost CR 中定义的命名空间,如 openshift-machine-api
    • <ansible_ssh_user > 替换为 Ansible SSH 用户的用户名,如 cloud-admin
    • <bmh_label > 替换为节点对应的 BareMetalHost CR 中定义的标签,如 openstack-networker。元数据标签(如 appworkloadnodeName )是键值对,它为标记节点提供不同的粒度级别。将 bmhLabelSelector 字段设置为根据与对应 BareMetalHost CR 中的标签匹配的标签选择 data plane 节点。
    • <interface > 替换为节点连接的 control plane 接口,如 enp6s0
  5. 如果创建了自定义 OpenStackProvisionServer CR,请将其添加到 baremetalSetTemplate 定义中:

      baremetalSetTemplate:
        ...
        provisionServerName: my-os-provision-server
  6. 添加您创建的 SSH 密钥 secret,以便 Ansible 连接到 data plane 节点:

      nodeTemplate:
        ansibleSSHPrivateKeySecret: <secret-key>
    • <secret-key > 替换为您在 <link> 中创建的 SSH 密钥 Secret CR 的名称,如 dataplane-ansible-ssh-private-key-secret
  7. 在 Red Hat OpenShift Container Platform (RHOCP)集群上的 openstack 命名空间中创建持久性卷声明(PVC)以存储日志。将 volumeMode 设置为 Filesystem,将 accessModes 设置为 ReadWriteOnce。不要为使用 NFS 卷插件的 PersistentVolume (PV)的日志请求存储。NFS 与 FIFO 不兼容,ansible-runner 创建一个 FIFO 文件来存储日志。有关 PVC 的详情,请参考 RHOCP Storage 指南中的 了解持久性存储规划部署 中的 Red Hat OpenShift Container Platform 集群要求
  8. 为 data plane 节点启用持久性日志记录:

      nodeTemplate:
        ...
        extraMounts:
          - extraVolType: Logs
            volumes:
            - name: ansible-logs
              persistentVolumeClaim:
                claimName: <pvc_name>
            mounts:
            - name: ansible-logs
              mountPath: "/runner/artifacts"
    • <pvc_name > 替换为 RHOCP 集群中的 PVC 存储名称。
  9. 指定管理网络:

      nodeTemplate:
        ...
        managementNetwork: ctlplane
  10. 指定用于提供用户名和密码的 Secret CR,以注册没有注册到红帽客户门户网站的节点的操作系统,并为节点启用软件仓库。以下示例演示了如何将节点注册到 Red Hat Content Delivery Network (CDN)。有关如何在 Red Hat Satellite 6.13 中注册节点的详情,请参阅管理主机

      nodeTemplate:
        ansible:
          ansibleUser: cloud-admin
          ansiblePort: 22
          ansibleVarsFrom:
            - secretRef:
                name: subscription-manager
            - secretRef:
                name: redhat-registry
          ansibleVars:
            rhc_release: 9.4
            rhc_repositories:
                - {name: "*", state: disabled}
                - {name: "rhel-9-for-x86_64-baseos-eus-rpms", state: enabled}
                - {name: "rhel-9-for-x86_64-appstream-eus-rpms", state: enabled}
                - {name: "rhel-9-for-x86_64-highavailability-eus-rpms", state: enabled}
                - {name: "fast-datapath-for-rhel-9-x86_64-rpms", state: enabled}
                - {name: "rhoso-18.0-for-rhel-9-x86_64-rpms", state: enabled}
                - {name: "rhceph-7-tools-for-rhel-9-x86_64-rpms", state: enabled}
            edpm_bootstrap_release_version_package: []
  11. 添加网络配置模板以应用到您的数据平面节点。

      nodeTemplate:
        ...
        ansible:
          ...
           ansiblePort: 22
          ansibleUser: cloud-admin
          ansibleVars:
            ...
            edpm_enable_chassis_gw: true
            edpm_network_config_nmstate: true
            ...
            neutron_physical_bridge_name: br-ex
            neutron_public_interface_name: eth0
            edpm_network_config_update: false
    • edpm_network_config_update - 在第一次部署设置的节点时,请确保将 edpm_network_config_update 变量设置为 false。如果您稍后修改 edpm_network_config_template,则首先将 edpm_network_config_update 设置为 true。更新后,将其重置为 false

      重要

      edpm_network_config_template 更新后,您必须将 edpm_network_config_update 重置为 false。否则,节点可能会丢失网络访问。每当 edpm_network_config_updatetrue 时,每次创建 OpenStackDataPlaneDeployment CR 时,都会重新应用更新的网络配置,其中包括作为 servicesOverride 列表成员的 configure-network 服务。

      以下示例使用 DPDK 将 VLAN 网络配置应用到一组 data plane Networker 节点:

              edpm_network_config_template: |
                ...
                {% set mtu_list = [ctlplane_mtu] %}
                {% for network in nodeset_networks %}
                {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }}
                {%- endfor %}
                {% set min_viable_mtu = mtu_list | max %}
                network_config:
                - type: ovs_user_bridge
                  name: {{ neutron_physical_bridge_name }}
                  mtu: {{ min_viable_mtu }}
                  use_dhcp: false
                  dns_servers: {{ ctlplane_dns_nameservers }}
                  domain: {{ dns_search_domains }}
                  addresses:
                  - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }}
                  routes: {{ ctlplane_host_routes }}
                  members:
                  - type: ovs_dpdk_port
                    driver: mlx5_core
                    name: dpdk0
                    mtu: {{ min_viable_mtu }}
                    members:
                    - type: sriov_vf
                      device: nic6
                      vfid: 0
                  - type: interface
                    name: nic1
                    mtu: {{ min_viable_mtu }}
                    # force the MAC address of the bridge to this interface
                    primary: true
                {% for network in nodeset_networks %}
                  - type: vlan
                    mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
                    vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
                    addresses:
                    - ip_netmask:
                        {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
                    routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
                {% endfor %}

      以下示例将 VLAN 网络配置应用到没有 DPDK 的 data plane Networker 节点:

      edpm_network_config_template: |
                …---
                {% set mtu_list = [ctlplane_mtu] %}
                {% for network in nodeset_networks %}
                {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }}
                {%- endfor %}
                {% set min_viable_mtu = mtu_list | max %}
                network_config:
                  - type: ovs_bridge
                    name: {{ neutron_physical_bridge_name }}
                    mtu: {{ min_viable_mtu }}
                    use_dhcp: false
                    dns_servers: {{ ctlplane_dns_nameservers }}
                    domain: {{ dns_search_domains }}
                    addresses:
                      - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }}
                    routes: {{ ctlplane_host_routes }}
                    members:
                      - type: interface
                        name: nic2
                        mtu: {{ min_viable_mtu }}
                        # force the MAC address of the bridge to this interface
                        primary: true
                {% for network in nodeset_networks %}
                      - type: vlan
                        mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
                        vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
                        addresses:
                          - ip_netmask: >-
                              {{
                                lookup('vars', networks_lower[network] ~ '_ip')
                              }}/{{
                                lookup('vars', networks_lower[network] ~ '_cidr')
                              }}
                        routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
                {% endfor %}

      有关 data plane 网络配置的更多信息,请参阅配置 网络服务 中的 自定义 数据平面网络

  12. nodeTemplate 部分下,添加此组中节点集合的通用配置。此 OpenStackDataPlaneNodeSet 中的每个节点都会继承此配置。有关可用于配置通用节点属性的属性的信息,请参阅 Deploying Red Hat OpenStack Services on OpenShift 指南中的OpenStackDataPlaneNodeSet CR spec 属性
  13. 在此节点集中定义每个节点:

      nodes:
        edpm-networker-0:
          hostName: networker-0
          networks:
          - name: ctlplane
            subnetName: subnet1
            defaultRoute: true
            fixedIP: 192.168.122.100
          - name: internalapi
            subnetName: subnet1
            fixedIP: 172.17.0.100
          - name: storage
            subnetName: subnet1
            fixedIP: 172.18.0.100
          - name: tenant
            subnetName: subnet1
            fixedIP: 172.19.0.100
          ansible:
            ansibleHost: 192.168.122.100
            ansibleUser: cloud-admin
            ansibleVars:
              fqdn_internal_api: edpm-networker-0.example.com
          bmhLabelSelector:
            nodeName: edpm-networker-0
        edpm-networker-1:
          hostName: edpm-networker-1
          networks:
          - name: ctlplane
            subnetName: subnet1
            defaultRoute: true
            fixedIP: 192.168.122.101
          - name: internalapi
            subnetName: subnet1
            fixedIP: 172.17.0.101
          - name: storage
            subnetName: subnet1
            fixedIP: 172.18.0.101
          - name: tenant
            subnetName: subnet1
            fixedIP: 172.19.0.101
          ansible:
            ansibleHost: 192.168.122.101
            ansibleUser: cloud-admin
            ansibleVars:
              fqdn_internal_api: edpm-networker-1.example.com
          bmhLabelSelector:
            nodeName: edpm-networker-1
    • edpm-networker-0- 节点定义参考,如 edpm-networker-0 。节点集中的每个节点都必须有一个节点定义。
    • networks - 定义节点的 IPAM 和 DNS 记录。
    • fixedIP - 指定网络的可预测 IP 地址,该地址必须在 NetConfig CR 中为网络定义的分配范围内。
    • bmhLabelSelector - 可选:为 data plane 节点选择 BareMetalHost CR 的 BareMetalHost CR 元数据标签。标签可以是 BareMetalHost CR 定义的任何标签。该标签与 baremetalSetTemplate 定义中配置的 bmhLabelSelector 标签一起使用,以选择节点的 BareMetalHost
    注意
    • nodes 部分中定义的节点可以配置 nodeTemplate 部分中配置的同一 Ansible 变量。其中,为特定节点和 nodeTemplate 部分配置了 Ansible 变量,则特定于节点的值会覆盖 nodeTemplate 部分中的值。
    • 您不需要为节点复制所有 nodeTemplate Ansible 变量,以覆盖默认值并设置一些特定于节点的值。您只需要配置您要为节点覆盖的 Ansible 变量。
    • 许多 ansibleVars 在名称中包含 edpm,它代表 "External Data Plane Management"。

    + 有关可用于配置通用节点属性的属性的信息,请参阅 OpenShift 指南中的部署 Red Hat OpenStack Services 中的OpenStackDataPlaneNodeSet CR spec 属性

  14. 保存 openstack_unprovisioned_node_set.yaml 定义文件。
  15. 创建 data plane 资源:

    $ oc create --save-config -f openstack_unprovisioned_node_set.yaml -n openstack
  16. 通过确认状态为 SetupReady 来验证 data plane 资源是否已创建:

    $ oc wait openstackdataplanenodeset openstack-data-plane --for condition=SetupReady --timeout=10m

    当状态为 SetupReady 时,命令会返回一个 condition met 信息,否则会返回超时错误。

    如需有关 data plane 条件和状态的信息,请参阅 在 OpenShift 上部署 Red Hat OpenStack Services 中的 Data plane 条件 和状态

  17. 验证是否为节点集合创建了 Secret 资源:

    $ oc get secret -n openstack | grep openstack-data-plane
    dataplanenodeset-openstack-data-plane Opaque 1 3m50s
  18. 验证节点是否已转换为 置备状态

    $ oc get bmh
    NAME            STATE         CONSUMER               ONLINE   ERROR   AGE
    edpm-networker-0  provisioned   openstack-data-plane   true             3d21h
  19. 验证是否已创建服务:

    $ oc get openstackdataplaneservice -n openstack
    NAME                    AGE
    bootstrap               8m40s
    ceph-client             8m40s
    ceph-hci-pre            8m40s
    configure-network       8m40s
    configure-os            8m40s
    ...
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部