7.4. 为分布式区创建 OpenStackDataPlaneNodeSet CR


为部署中的每个区定义预置备数据平面节点的 OpenStackDataPlaneNodeSet 自定义资源(CR)。您可以根据部署需要定义多个节点设置。每个节点只能包含在一个 OpenStackDataPlaneNodeSet CR 中。您可以使用 nodeTemplate 字段配置通用属性,以应用到 OpenStackDataPlaneNodeSet CR 中的所有节点,以及节点特定属性的 nodes 字段。特定于节点的配置覆盖来自 nodeTemplate 的继承值。以下流程为 Zone 1 创建节点集。重复上述步骤,为每个区创建 Compute 节点和 Networker 节点所需的节点集。

流程

  1. 在工作站上创建一个文件,为 Zone 1 设置的节点定义 OpenStackDataPlaneNodeSet CR,如 compute_node_set_zone1.yaml

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneNodeSet
    metadata:
      name: compute-node-set-zone1 
    1
    
      namespace: openstack
    spec:
      env: 
    2
    
      - name: ANSIBLE_FORCE_COLOR
        value: "True"
      - name: ANSIBLE_TIMEOUT
        value: "60"
      - name: ANSIBLE_SSH_TIMEOUT
        value: "60"
      - name: ANSIBLE_SSH_RETRIES
        value: "60"
    Copy to Clipboard Toggle word wrap
    1
    OpenStackDataPlaneNodeSet CR 名称必须是唯一的,仅包含小写字母数字字符和 - (hyphens)或 . (periods),以字母数字字符开头和结尾,且最大长度为 53 个字符。将本例中的名称更新为反映集合中节点的名称。
    2
    可选:传递给 pod 的环境变量列表。
  2. 添加要为此节点集合执行的服务列表:

    • 为一组 Compute 节点指定以下服务,将 nova 服务替换为您为节点集合创建的自定义服务:

        services:
        - download-cache
        - bootstrap
        - configure-network
        - validate-network
        - install-os
        - configure-os
        - frr
        - ssh-known-hosts
        - run-os
        - reboot-os
        - install-certs
        - ceph-client
        - ovn
        - neutron-metadata
        - libvirt
        - *nova-custom-az1*
      Copy to Clipboard Toggle word wrap
    • 为一组 Networker 节点指定以下服务:

        services:
        - download-cache
        - bootstrap
        - configure-network
        - validate-network
        - install-os
        - configure-os
        - frr
        - ssh-known-hosts
        - run-os
        - reboot-os
        - install-certs
        - ovn
        - neutron-metadata
        - ovn-bgp-agent
      Copy to Clipboard Toggle word wrap
  3. 将数据平面连接到 control plane 网络:

    spec:
      ...
      networkAttachments:
      - ctlplane
    Copy to Clipboard Toggle word wrap
  4. 指定此集合中的节点是预置备:

      preProvisioned: true
    Copy to Clipboard Toggle word wrap
  5. 添加您创建的 SSH 密钥 secret,以便 Ansible 连接到 data plane 节点:

      nodeTemplate:
        ansibleSSHPrivateKeySecret: <secret-key>
    Copy to Clipboard Toggle word wrap
    • <secret-key > 替换为您在创建 data plane secret 中设置的此节点的 SSH 密钥 Secret CR 的名称,如 dataplane-ansible-ssh-private-key-secret
  6. 如果要创建一组 Compute 节点,请启用 Compute 服务对 Red Hat Ceph Storage secret 的访问:

      nodeTemplate:
        ...
        extraMounts:
        - extraVolType: Ceph
          mounts:
          - mountPath: /etc/ceph
            name: ceph
            readOnly: true
          volumes:
          - name: ceph
            secret:
              secretName: ceph-conf-files-az1
    Copy to Clipboard Toggle word wrap
    注意

    Networker 节点不需要访问 Red Hat Ceph Storage secret。

  7. 指定管理网络:

      nodeTemplate:
        ...
        managementNetwork: ctlplane
    Copy to Clipboard Toggle word wrap
  8. 指定用于提供用户名和密码的 Secret CR,以注册节点的操作系统并启用存储库。以下示例演示了如何将节点注册到 Red Hat Content Delivery Network (CDN)。有关如何在 Red Hat Satellite 6.13 中注册节点的详情,请参阅管理主机

      nodeTemplate:
        ...
        ansible:
          ansibleUser: cloud-admin 
    1
    
          ansiblePort: 22
          ansibleVarsFrom:
            - secretRef:
                name: subscription-manager
            - secretRef:
                name: redhat-registry
          ansibleVars: 
    2
    
            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: []
    Copy to Clipboard Toggle word wrap
    1
    2
    自定义一组节点的 Ansible 变量。有关可以使用的 Ansible 变量的列表,请参阅 https://openstack-k8s-operators.github.io/edpm-ansible/。有关红帽客户门户网站注册命令的完整列表,请参阅 https://access.redhat.com/solutions/253273。有关如何登录到 registry.redhat.io 的详情,请参考 https://access.redhat.com/RegistryAuthentication#creating-registry-service-accounts-6
  9. 配置 OVN BGP 代理用来与数据平面上的 FRRounting (FRR)通信的网络,以及与 BGP peer 进行身份验证的密码:

      nodeTemplate:
        ...
        ansible:
          ...
          ansibleVars:
            ...
            edpm_frr_bfd: false
            edpm_frr_bgp_ipv4_src_network: bgpmainnet
            edpm_frr_bgp_ipv6_src_network: bgpmainnetv6
            edpm_frr_bgp_neighbor_password: f00barZ
    Copy to Clipboard Toggle word wrap
  10. 如果您要创建一组 Networker 节点,请启用 edpm_enable_chassis_gw 字段:

        ansible:
          ...
          ansibleVars:
            ...
            edpm_enable_chassis_gw: true
    Copy to Clipboard Toggle word wrap
  11. 添加要应用到节点的网络配置模板:

            edpm_network_config_hide_sensitive_logs: false
            edpm_network_config_os_net_config_mappings:
              edpm-z1-compute-0:
                nic2: 6a:fe:54:3f:8a:02 
    1
    
              edpm-z1-compute-1:
                nic2: 6b:fe:54:3f:8a:02
            neutron_physical_bridge_name: br-ex
            neutron_public_interface_name: eth1
            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 }}
                use_dhcp: false
              - type: interface
                name: nic1
                use_dhcp: true
                defroute: false
              - type: interface
                name: nic2
                use_dhcp: false
                defroute: false
                dns_servers: {{ ctlplane_dns_nameservers }}
                domain: {{ dns_search_domains }}
                addresses:
                  - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }}
              - type: interface
                name: nic3
                use_dhcp: false
                addresses:
                - ip_netmask: {{ lookup('vars', 'bgpnet0_ip') }}/30
              - type: interface
                name: nic4
                use_dhcp: false
                addresses:
                - ip_netmask: {{ lookup('vars', 'bgpnet1_ip') }}/30
              - type: interface
                name: lo
                addresses:
                - ip_netmask: {{ lookup('vars', 'bgpmainnet_ip') }}/32
                - ip_netmask: {{ lookup('vars', 'bgpmainnetv6_ip') }}/128
                - ip_netmask: {{ lookup('vars', 'internalapi_ip') }}/32
                - ip_netmask: {{ lookup('vars', 'storage_ip') }}/32 
    2
    
                - ip_netmask: {{ lookup('vars', 'tenant_ip') }}/32
    Copy to Clipboard Toggle word wrap
    1
    nic1 字段更新为分配给 NIC 的 MAC 地址,以用于 Compute 节点上的网络配置。
    2
    Networker 节点集合不需要。
  12. 禁用使用 BGP 时不需要的验证:

        	  edpm_nodes_validation_validate_controllers_icmp: false
        	  edpm_nodes_validation_validate_gateway_icmp: false
    Copy to Clipboard Toggle word wrap
  13. 将 OVN BGP 代理配置为不公开租户网络:

        	  edpm_ovn_bgp_agent_expose_tenant_networks: false
    Copy to Clipboard Toggle word wrap
  14. 使用 bgpmainnet 而不是本地 租户网络 将 OVN 配置为通过 BGP 建立隧道:

            edpm_ovn_encap_ip: '{{ lookup(''vars'', ''bgpmainnet_ip'') }}
    Copy to Clipboard Toggle word wrap
  15. 在此节点集中定义每个节点:

      nodes:
        edpm-z1-compute-0: 
    1
    
          hostName: edpm-z1-compute-0
          networks: 
    2
    
          - name: ctlplane
            subnetName: subnet1
            defaultRoute: true
            fixedIP: 192.168.122.100 
    3
    
          - name: internalapi
            subnetName: subnet1
          - name: storage 
    4
    
            subnetName: subnet1
          - name: tenant
            subnetName: subnet1
          - name: Bgpnet0
            subnetName: subnet1
            fixedIP: 100.64.0.2
          - name: Bgpnet1
            subnetName: subnet1
            fixedIP: 100.65.0.2
          - name: Bgpmainnet
            subnetName: subnet1
            fixedIP: 99.99.0.2
          - name: BgpmainnetV6
            subnetName: subnet0
            fixedIP: f00d:f00d:f00d:f00d:f00d:f00d:f00d:0012
          ansible:
            ansibleHost: 192.168.122.100
            ansibleVars: 
    5
    
              edpm_frr_bgp_peers:
              - 100.64.0.1
              - 100.65.0.1
              edpm_ovn_bgp_agent_local_ovn_peer_ips:
              - 100.64.0.1
              - 100.65.0.1
        edpm-z1-compute-1:
          hostName: edpm-z1-compute-1
          networks:
          - name: ctlplane
            subnetName: subnet1
            defaultRoute: true
            fixedIP: 192.168.122.101
          - name: internalapi
            subnetName: subnet1
          - name: storage
            subnetName: subnet1
          - name: tenant
            subnetName: subnet1
          - name: Bgpnet0
            subnetName: subnet1
            fixedIP: 100.64.0.6
          - name: Bgpnet1
            subnetName: subnet1
            fixedIP: 100.65.0.6
          - name: Bgpmainnet
            subnetName: subnet1
            fixedIP: 99.99.0.3
          - name: BgpmainnetV6
            subnetName: subnet0
            fixedIP: f00d:f00d:f00d:f00d:f00d:f00d:f00d:0013
        edpm-z1-compute-2:
          hostName: edpm-z1-compute-2
          networks:
          - name: ctlplane
            subnetName: subnet1
            defaultRoute: true
            fixedIP: 192.168.122.102
          - name: internalapi
            subnetName: subnet1
          - name: storage
            subnetName: subnet1
          - name: tenant
            subnetName: subnet1
          - name: Bgpnet0
            subnetName: subnet1
            fixedIP: 100.64.0.10
          - name: Bgpnet1
            subnetName: subnet1
            fixedIP: 100.65.0.10
          - name: Bgpmainnet
            subnetName: subnet1
            fixedIP: 99.99.0.4
          - name: BgpmainnetV6
            subnetName: subnet0
            fixedIP: f00d:f00d:f00d:f00d:f00d:f00d:f00d:0014
    Copy to Clipboard Toggle word wrap
    1
    节点定义引用,如 edpm-compute-0。节点集中的每个节点都必须有一个节点定义。
    2
    定义节点的 IPAM 和 DNS 记录。
    3
    Networker 节点集合不需要存储网络。
    4
    为网络指定一个可预测的 IP 地址,该地址必须在 NetConfig CR 中为网络定义的分配范围内。
    5
    自定义节点的特定于节点的 Ansible 变量。
    注意
    • nodes 部分中定义的节点可以配置 nodeTemplate 部分中配置的同一 Ansible 变量。其中,为特定节点和 nodeTemplate 部分配置了 Ansible 变量,则特定于节点的值会覆盖 nodeTemplate 部分中的值。
    • 您不需要为节点复制所有 nodeTemplate Ansible 变量,以覆盖默认值并设置一些特定于节点的值。您只需要配置您要为节点覆盖的 Ansible 变量。
    • 许多 ansibleVars 在名称中包含 edpm,它代表 "External Data Plane Management"。
  16. 保存定义文件。
  17. 为 Zone 1 创建节点集:

    $ oc create --save-config -f compute_node_set_zone1.yaml -n openstack
    Copy to Clipboard Toggle word wrap
  18. 通过确认状态为 SetupReady 来验证资源是否已创建:

    $ oc wait openstackdataplanenodeset compute-node-set-zone1 --for condition=SetupReady --timeout=10m
    Copy to Clipboard Toggle word wrap

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

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

    $ oc get secret | grep openstack-data-plane
    compute-node-set-zone1 Opaque 1 3m50s
    Copy to Clipboard Toggle word wrap
  20. 验证是否已创建服务:

    $ oc get openstackdataplaneservice -n openstack
    NAME                AGE
    bootstrap           46m
    ceph-client         46m
    ceph-hci-pre        46m
    configure-network   46m
    configure-os        46m
    ...
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat