4.2. 创建 control plane


定义 OpenStackControlPlane 自定义资源(CR)来执行以下任务:

  • 创建 control plane。
  • 在 OpenShift (RHOSO)服务中启用 Red Hat OpenStack Services。

以下流程使用每个服务的建议配置创建一个初始 control plane。此流程帮助您快速创建操作 control plane 环境,您可以在添加所有所需自定义前排除问题并测试环境。您可以在部署的环境中添加服务自定义。有关如何在部署后自定义 control plane 的更多信息,请参阅自定义 Red Hat OpenStack Services on OpenShift 部署指南。

如需 OpenStackControlPlane CR 示例,请参阅 OpenStackControlPlane CR 示例

提示

使用以下命令查看 OpenStackControlPlane CRD 定义和规格模式:

$ oc describe crd openstackcontrolplane

$ oc explain openstackcontrolplane.spec
Copy to Clipboard Toggle word wrap

流程

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

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: openstack-control-plane
      namespace: openstack
    Copy to Clipboard Toggle word wrap
  2. 指定您创建的 Secret CR,以便在提供对 OpenShift 服务上的 Red Hat OpenStack Services 的安全访问权限时提供对 RHOSO 服务 pod 的安全访问

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: openstack-control-plane
      namespace: openstack
    spec:
      secret: osp-secret
    Copy to Clipboard Toggle word wrap
  3. 指定您为 Red Hat OpenShift Container Platform (RHOCP)集群存储后端创建的 storageClass

    spec:
      secret: osp-secret
      storageClass: <RHOCP_storage_class>
    Copy to Clipboard Toggle word wrap
    • <RHOCP_storage_class > 替换为您为 RHOCP 集群存储后端创建的存储类。有关存储类的详情,请参考 创建存储类
  4. 添加以下服务配置:

    注意
    • 以下服务示例将默认 RHOSO MetalLB IPAddressPool 范围内的 IP 地址用于 loadBalancerIPs 字段。使用您创建的 MetalLB IPAddressPool 范围内的 IP 地址更新 loadBalancerIPs 字段。
    • 您不能覆盖默认的公共服务端点。默认情况下,公共服务端点以 RHOCP 路由的形式公开,因为只有路由用于公共端点。
    • 块存储服务(cinder):

        cinder:
          apiOverride:
            route: {}
          template:
            databaseInstance: openstack
            secret: osp-secret
            cinderAPI:
              replicas: 3
              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
                    spec:
                      type: LoadBalancer
            cinderScheduler:
              replicas: 1
            cinderBackup:
              networkAttachments:
              - storage
              replicas: 0
            cinderVolumes:
              volume1:
                networkAttachments:
                - storage
                replicas: 0
      Copy to Clipboard Toggle word wrap
    • 计算服务(nova):

        nova:
          apiOverride:
            route: {}
          template:
            apiServiceTemplate:
              replicas: 3
              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
                    spec:
                      type: LoadBalancer
            metadataServiceTemplate:
              replicas: 3
              override:
                service:
                  metadata:
                    annotations:
                      metallb.universe.tf/address-pool: internalapi
                      metallb.universe.tf/allow-shared-ip: internalapi
                      metallb.universe.tf/loadBalancerIPs: 172.17.0.80
                  spec:
                    type: LoadBalancer
            schedulerServiceTemplate:
              replicas: 3
            cellTemplates:
              cell0:
                cellDatabaseAccount: nova-cell0
                cellDatabaseInstance: openstack
                cellMessageBusInstance: rabbitmq
                hasAPIAccess: true
              cell1:
                cellDatabaseAccount: nova-cell1
                cellDatabaseInstance: openstack-cell1
                cellMessageBusInstance: rabbitmq-cell1
                noVNCProxyServiceTemplate:
                  enabled: true
                  networkAttachments:
                  - ctlplane
                hasAPIAccess: true
            secret: osp-secret
      Copy to Clipboard Toggle word wrap
      注意

      默认情况下,为每个默认单元格部署一组完整的 Compute 服务(nova):nova-apinova-metadatanova-schedulernova-conductor 默认情况下,cell1 也启用了 novncproxy 服务。

    • data plane 的 DNS 服务:

        dns:
          template:
            options:
            - key: server
              values:
              - 192.168.122.1
            - key: server
              values:
              - 192.168.122.2
            override:
              service:
                metadata:
                  annotations:
                    metallb.universe.tf/address-pool: ctlplane
                    metallb.universe.tf/allow-shared-ip: ctlplane
                    metallb.universe.tf/loadBalancerIPs: 192.168.122.80
                spec:
                  type: LoadBalancer
            replicas: 2
      Copy to Clipboard Toggle word wrap
      • dns.template.options :通过使用键值对定义每个 DNS 服务器所需的 dnsmasq 实例。在本例中,定义了两个键值对,因为有两个 DNS 服务器配置为将请求转发到。
      • dns.template.options.key :指定要为部署的 dnsmasq 实例自定义的 dnsmasq 参数。设置为以下有效值之一:

        • server
        • rev-server
        • srv-host
        • txt-record
        • ptr-record
        • rebind-domain-ok
        • naptr-record
        • CNAME
        • host-record
        • caa-record
        • dns-rr
        • auth-zone
        • synth-domain
        • no-negcache
        • local
      • dns.template.options.values: 指定 dnsmasq 参数的值。您可以将通用 DNS 服务器指定为值,如 1.1.1.1 或特定域的 DNS 服务器,例如 /google.com/8.8.8.8

        注意

        此 DNS 服务 dnsmasq 为 RHOSO 数据平面上的节点提供 DNS 服务。dnsmasq 与 RHOSO DNS 服务(指定)不同,它为云租户提供 DNS 服务。

    • Identity 服务 (keystone)

        keystone:
          apiOverride:
            route: {}
          template:
            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
                  spec:
                    type: LoadBalancer
            databaseInstance: openstack
            secret: osp-secret
            replicas: 3
      Copy to Clipboard Toggle word wrap
    • 镜像服务(glance):

        glance:
          apiOverrides:
            default:
              route: {}
          template:
            databaseInstance: openstack
            storage:
              storageRequest: 10G
            secret: osp-secret
            keystoneEndpoint: default
            glanceAPIs:
              default:
                replicas: 0 # Configure back end; set to 3 when deploying service
                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
                      spec:
                        type: LoadBalancer
                networkAttachments:
                - storage
      Copy to Clipboard Toggle word wrap
      • glanceapis.default.replicas :您可以在不激活镜像服务(glance)的情况下部署初始 control plane。要部署镜像服务,您必须为该服务设置 副本数,并为该服务配置后端。有关镜像服务推荐副本以及如何为服务配置后端的详情,请参考 配置持久性存储 中的 配置 镜像服务(glance)。如果没有部署镜像服务,则无法将镜像上传到云或启动实例。
    • 密钥管理服务(barbican):

        barbican:
          apiOverride:
            route: {}
          template:
            databaseInstance: openstack
            secret: osp-secret
            barbicanAPI:
              replicas: 3
              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
                    spec:
                      type: LoadBalancer
            barbicanWorker:
              replicas: 3
            barbicanKeystoneListener:
              replicas: 1
      Copy to Clipboard Toggle word wrap
    • Networking 服务(neutron):

        neutron:
          apiOverride:
            route: {}
          template:
            replicas: 3
            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
                  spec:
                    type: LoadBalancer
            databaseInstance: openstack
            secret: osp-secret
            networkAttachments:
            - internalapi
      Copy to Clipboard Toggle word wrap
    • Object Storage 服务(swift):

        swift:
          enabled: true
          proxyOverride:
            route: {}
          template:
            swiftProxy:
              networkAttachments:
              - storage
              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
                    spec:
                      type: LoadBalancer
              replicas: 2
              secret: osp-secret
            swiftRing:
              ringReplicas: 3
            swiftStorage:
              networkAttachments:
              - storage
              replicas: 3
              storageRequest: 10Gi
      Copy to Clipboard Toggle word wrap
    • OVN:

        ovn:
          template:
            ovnDBCluster:
              ovndbcluster-nb:
                replicas: 3
                dbType: NB
                storageRequest: 10G
                networkAttachment: internalapi
              ovndbcluster-sb:
                replcas: 3
                dbType: SB
                storageRequest: 10G
                networkAttachment: internalapi
            ovnNorthd: {}
      Copy to Clipboard Toggle word wrap
    • 放置服务(放置) :

        placement:
          apiOverride:
            route: {}
          template:
            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
                  spec:
                    type: LoadBalancer
            databaseInstance: openstack
            replicas: 3
            secret: osp-secret
      Copy to Clipboard Toggle word wrap
    • Telemetry 服务(ceilometer、prometheus):

        telemetry:
          enabled: true
          template:
            metricStorage:
              enabled: true
              dashboardsEnabled: true
              dataplaneNetwork: ctlplane
              networkAttachments:
                - ctlplane
              monitoringStack:
                alertingEnabled: true
                scrapeInterval: 30s
                storage:
                  strategy: persistent
                  retention: 24h
                  persistent:
                    pvcStorageRequest: 20G
            autoscaling:
              enabled: false
              aodh:
                databaseAccount: aodh
                databaseInstance: openstack
                passwordSelector:
                  aodhService: AodhPassword
                rabbitMqClusterName: rabbitmq
                serviceUser: aodh
                secret: osp-secret
              heatInstance: heat
            ceilometer:
              enabled: true
              secret: osp-secret
            logging:
              enabled: false
      Copy to Clipboard Toggle word wrap
      • Telemetry.template.metricStorage.dataplaneNetwork :定义用于提取 dataplane node_exporter 端点的网络。
      • Telemetry.template.metricStorage.networkAttachments :使用 NetworkAttachmentDefinition 资源名称列出每个服务 pod 附加到的网络。您可以为您指定的每个网络附加配置服务的 NIC。如果您没有配置每个服务 pod 附加到的隔离网络,则使用默认 pod 网络。您必须创建一个与指定为 dataplaneNetwork 的网络匹配的 networkAttachment,以便 Prometheus 可以从 dataplane 节点中提取数据。
      • Telemetry.template.autoscaling :您必须存在 autoscaling 字段,即使禁用了自动扩展。有关自动扩展的更多信息,请参阅实例自动扩展
  5. 添加以下服务配置来实现高可用性(HA):

    • 用于所有 RHOSO 服务(openstack)的 MariaDB Galera 集群,以及用于 cell1 的 Compute 服务使用的 MariaDB Galera 集群(openstack- cell1 ):

        galera:
          templates:
            openstack:
              storageRequest: 5000M
              secret: osp-secret
              replicas: 3
            openstack-cell1:
              storageRequest: 5000M
              secret: osp-secret
              replicas: 3
      Copy to Clipboard Toggle word wrap
    • 包含三个 memcached 服务器的单个 memcached 集群:

        memcached:
          templates:
            memcached:
               replicas: 3
      Copy to Clipboard Toggle word wrap
    • 用于所有 RHOSO 服务的 RabbitMQ 集群(rabbitmq)和 RabbitMQ 集群,供计算服务用于 cell1 (rabbitmq-cell1)使用:

        rabbitmq:
          templates:
            rabbitmq:
              replicas: 3
              override:
                service:
                  metadata:
                    annotations:
                      metallb.universe.tf/address-pool: internalapi
                      metallb.universe.tf/loadBalancerIPs: 172.17.0.85
                  spec:
                    type: LoadBalancer
            rabbitmq-cell1:
              replicas: 3
              override:
                service:
                  metadata:
                    annotations:
                      metallb.universe.tf/address-pool: internalapi
                      metallb.universe.tf/loadBalancerIPs: 172.17.0.86
                  spec:
                    type: LoadBalancer
      Copy to Clipboard Toggle word wrap
      注意

      您不能在同一虚拟 IP (VIP)地址上配置多个 RabbitMQ 实例,因为所有 RabbitMQ 实例都使用相同的端口。如果您需要将多个 RabbitMQ 实例公开给同一网络,则必须使用不同的 IP 地址。

  6. 创建 control plane:

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

    $ oc get openstackcontrolplane -n openstack
    NAME 						STATUS 	MESSAGE
    openstack-control-plane 	Unknown 	Setup started
    Copy to Clipboard Toggle word wrap

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

    提示

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

    注意

    创建 control plane 还会创建一个 OpenStackClient pod,您可以通过远程 shell (rsh)访问以运行 OpenStack CLI 命令。

    $ oc rsh -n openstack openstackclient
    Copy to Clipboard Toggle word wrap
  8. 可选:通过查看 openstack 命名空间中的 pod 确认部署了 control plane:

    $ oc get pods -n openstack
    Copy to Clipboard Toggle word wrap

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

验证

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

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

    $ openstack endpoint list -c 'Service Name' -c Interface -c URL --service glance
    +--------------+-----------+---------------------------------------------------------------+
    | Service Name | Interface | URL                                                           |
    +--------------+-----------+---------------------------------------------------------------+
    | glance       | internal  | https://glance-internal.openstack.svc                     |
    | glance       | public    | https://glance-default-public-openstack.apps.ostest.test.metalkube.org |
    +--------------+-----------+---------------------------------------------------------------+
    Copy to Clipboard Toggle word wrap
  3. 退出 OpenStackClient pod:

    $ exit
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat