3.2. 部署后端服务


使用部署基本后端服务创建 OpenStackControlPlane 自定义资源(CR),并禁用所有 Red Hat OpenStack Platform (RHOSP)服务。此 CR 是 control plane 的基础。

先决条件

  • 要采用的云正在运行,它处于 RHOSP 17.1 的最新次要版本。
  • 源云的所有 control plane 和数据平面主机都在运行,并在整个采用过程中继续运行。
  • 部署 openstack-operator,但未部署 OpenStackControlPlane
  • 安装 OpenStack Operator。如需更多信息,请参阅在 OpenShift 上部署 Red Hat OpenStack Services 中的 安装和准备 Operator
  • 如果您在 RHOSP 环境中启用了 TLS (TLS-e),您必须将 tls root CA 从 RHOSP 环境复制到 rootca-internal 签发者。
  • Galera 和 RabbitMQ 有可用的 PV。
  • 为 control plane 部署设置所需的 admin 密码。这可以是来自您原始部署的管理员密码或不同的密码:

    ADMIN_PASSWORD=SomePassword

    使用现有的 RHOSP 部署密码:

    declare -A TRIPLEO_PASSWORDS
    TRIPLEO_PASSWORDS[default]="$HOME/overcloud-passwords.yaml"
    ADMIN_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' AdminPassword:' | awk -F ': ' '{ print $2; }')
  • 设置服务密码变量以匹配原始部署。数据库密码在 control plane 环境中可能会有所不同,但您必须同步服务帐户密码。

    例如,在使用 director 独立的开发人员环境中,可以提取密码:

    AODH_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' AodhPassword:' | awk -F ': ' '{ print $2; }')
    BARBICAN_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' BarbicanPassword:' | awk -F ': ' '{ print $2; }')
    CEILOMETER_METERING_SECRET=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' CeilometerMeteringSecret:' | awk -F ': ' '{ print $2; }')
    CEILOMETER_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' CeilometerPassword:' | awk -F ': ' '{ print $2; }')
    CINDER_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' CinderPassword:' | awk -F ': ' '{ print $2; }')
    GLANCE_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' GlancePassword:' | awk -F ': ' '{ print $2; }')
    HEAT_AUTH_ENCRYPTION_KEY=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' HeatAuthEncryptionKey:' | awk -F ': ' '{ print $2; }')
    HEAT_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' HeatPassword:' | awk -F ': ' '{ print $2; }')
    HEAT_STACK_DOMAIN_ADMIN_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' HeatStackDomainAdminPassword:' | awk -F ': ' '{ print $2; }')
    IRONIC_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' IronicPassword:' | awk -F ': ' '{ print $2; }')
    MANILA_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' ManilaPassword:' | awk -F ': ' '{ print $2; }')
    NEUTRON_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' NeutronPassword:' | awk -F ': ' '{ print $2; }')
    NOVA_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' NovaPassword:' | awk -F ': ' '{ print $2; }')
    OCTAVIA_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' OctaviaPassword:' | awk -F ': ' '{ print $2; }')
    PLACEMENT_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' PlacementPassword:' | awk -F ': ' '{ print $2; }')
    SWIFT_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' SwiftPassword:' | awk -F ': ' '{ print $2; }')

流程

  1. 确保您在使用要部署 control plane 的 Red Hat OpenShift Container Platform (RHOCP)命名空间:

    $ oc project openstack
  2. 创建 RHOSP secret。如需更多信息,请参阅在 OpenShift 上部署 Red Hat OpenStack Services 中的 为 Red Hat OpenStack Services 提供安全访问 OpenShift 服务
  3. 如果 $ADMIN_PASSWORD 与您在 osp-secret 中设置的密码不同,请修改 osp-secret 中的 AdminPassword 键:

    $ oc set data secret/osp-secret "AdminPassword=$ADMIN_PASSWORD"
  4. osp-secret 中设置服务帐户密码,以匹配原始部署中的服务帐户密码:

    $ oc set data secret/osp-secret "AodhPassword=$AODH_PASSWORD"
    $ oc set data secret/osp-secret "BarbicanPassword=$BARBICAN_PASSWORD"
    $ oc set data secret/osp-secret "CeilometerPassword=$CEILOMETER_PASSWORD"
    $ oc set data secret/osp-secret "CinderPassword=$CINDER_PASSWORD"
    $ oc set data secret/osp-secret "GlancePassword=$GLANCE_PASSWORD"
    $ oc set data secret/osp-secret "HeatAuthEncryptionKey=$HEAT_AUTH_ENCRYPTION_KEY"
    $ oc set data secret/osp-secret "HeatPassword=$HEAT_PASSWORD"
    $ oc set data secret/osp-secret "HeatStackDomainAdminPassword=$HEAT_STACK_DOMAIN_ADMIN_PASSWORD"
    $ oc set data secret/osp-secret "IronicPassword=$IRONIC_PASSWORD"
    $ oc set data secret/osp-secret "IronicInspectorPassword=$IRONIC_PASSWORD"
    $ oc set data secret/osp-secret "ManilaPassword=$MANILA_PASSWORD"
    $ oc set data secret/osp-secret "MetadataSecret=$METADATA_SECRET"
    $ oc set data secret/osp-secret "NeutronPassword=$NEUTRON_PASSWORD"
    $ oc set data secret/osp-secret "NovaPassword=$NOVA_PASSWORD"
    $ oc set data secret/osp-secret "OctaviaPassword=$OCTAVIA_PASSWORD"
    $ oc set data secret/osp-secret "PlacementPassword=$PLACEMENT_PASSWORD"
    $ oc set data secret/osp-secret "SwiftPassword=$SWIFT_PASSWORD"
  5. 部署 OpenStackControlPlane CR。确保您只启用 DNS、Galera、Memcached 和 RabbitMQ 服务。所有其他服务必须禁用:

    $ oc apply -f - <<EOF
    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: openstack
    spec:
      secret: osp-secret
      storageClass: <storage_class> 
    1
    
    
      barbican:
        enabled: false
        template:
          barbicanAPI: {}
          barbicanWorker: {}
          barbicanKeystoneListener: {}
    
      cinder:
        enabled: false
        template:
          cinderAPI: {}
          cinderScheduler: {}
          cinderBackup: {}
          cinderVolumes: {}
    
      dns:
        template:
          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 
    2
    
    
              spec:
                type: LoadBalancer
          options:
          - key: server
            values:
            - 192.168.122.1
          replicas: 1
    
      glance:
        enabled: false
        template:
          glanceAPIs: {}
    
      heat:
        enabled: false
        template: {}
    
      horizon:
        enabled: false
        template: {}
    
      ironic:
        enabled: false
        template:
          ironicConductors: []
    
      keystone:
        enabled: false
        template: {}
    
      manila:
        enabled: false
        template:
          manilaAPI: {}
          manilaScheduler: {}
          manilaShares: {}
    
      galera:
        enabled: true
        templates:
          openstack:
            secret: osp-secret
            replicas: 3
            storageRequest: 5G
          openstack-cell1: 
    3
    
            secret: osp-secret
            replicas: 3
            storageRequest: 5G
          openstack-cell2:
            secret: osp-secret
            replicas: 1
            storageRequest: 5G
          openstack-cell3:
            secret: osp-secret
            replicas: 1
            storageRequest: 5G
      memcached:
        enabled: true
        templates:
          memcached:
            replicas: 3
    
      neutron:
        enabled: false
        template: {}
    
      nova:
        enabled: false
        template: {}
    
      ovn:
        enabled: false
        template:
          ovnController:
            networkAttachment: tenant
            nodeSelector:
              node: non-existing-node-name
          ovnNorthd:
            replicas: 0
          ovnDBCluster:
            ovndbcluster-nb:
              replicas: 3
              dbType: NB
              networkAttachment: internalapi
            ovndbcluster-sb:
              replicas: 3
              dbType: SB
              networkAttachment: internalapi
    
      placement:
        enabled: false
        template: {}
    
      rabbitmq:
        templates:
          rabbitmq:
            override:
              service:
                metadata:
                  annotations:
                    metallb.universe.tf/address-pool: internalapi
                    metallb.universe.tf/loadBalancerIPs: 172.17.0.85
                spec:
                  type: LoadBalancer
          rabbitmq-cell1:
            persistence:
              storage: 1G
            override:
              service:
                metadata:
                  annotations:
                    metallb.universe.tf/address-pool: internalapi
                    metallb.universe.tf/loadBalancerIPs: 172.17.0.86
    
                spec:
                  type: LoadBalancer
          rabbitmq-cell2:
            persistence:
              storage: 1G
            override:
              service:
                metadata:
                  annotations:
                    metallb.universe.tf/address-pool: internalapi
                    metallb.universe.tf/loadBalancerIPs: 172.17.0.87
                spec:
                  type: LoadBalancer
          rabbitmq-cell3:
            persistence:
              storage: 1G
            override:
              service:
                metadata:
                  annotations:
                    metallb.universe.tf/address-pool: internalapi
                    metallb.universe.tf/loadBalancerIPs: 172.17.0.88
                spec:
                  type: LoadBalancer
      telemetry:
        enabled: false
      tls: 
    4
    
        podLevel:
          enabled: false
        ingress:
          enabled: false
      swift:
        enabled: false
        template:
          swiftRing:
            ringReplicas: 1
          swiftStorage:
            replicas: 0
          swiftProxy:
            replicas: 1
    EOF
    1
    在 RHOCP 集群中选择一个现有的 < storage_class >。
    2
    <loadBalancer_IP& gt; 替换为 LoadBalancer IP 地址。
    3
    本例为 3 个计算单元提供所需的基础架构数据库和消息传递服务,名为 cell1、 cell2cell3。根据需要,调整每个 Compute 单元 的副本存储 或storage Request 等字段的值。
    4
    如果您在 RHOSP 环境中启用了 TLS-e,在 spec:tls 部分将 tls 设置为以下内容:
    spec:
      ...
      tls:
        podLevel:
          enabled: true
          internal:
            ca:
              customIssuer: rootca-internal
          libvirt:
            ca:
              customIssuer: rootca-internal
          ovn:
            ca:
              customIssuer: rootca-internal
        ingress:
          ca:
            customIssuer: rootca-internal
          enabled: true
    注意

    如果使用 IPv6,请将负载均衡器 IP 更改为环境中的 IP,例如:

    ...
    metallb.universe.tf/allow-shared-ip: ctlplane
    metallb.universe.tf/loadBalancerIPs: fd00:aaaa::80
    ...
    metallb.universe.tf/address-pool: internalapi
    metallb.universe.tf/loadBalancerIPs: fd00:bbbb::85
    ...
    metallb.universe.tf/address-pool: internalapi
    metallb.universe.tf/loadBalancerIPs: fd00:bbbb::86

验证

  • 验证所有定义的单元的 Galera 和 RabbitMQ 状态是否为 Running

    $ RENAMED_CELLS="cell1 cell2 cell3"
    $ oc get pod openstack-galera-0 -o jsonpath='{.status.phase}{"\n"}'
    $ oc get pod rabbitmq-server-0 -o jsonpath='{.status.phase}{"\n"}'
    $ for CELL in $(echo $RENAMED_CELLS); do
    >     oc get pod openstack-$CELL-galera-0 -o jsonpath='{.status.phase}{"\n"}'
    >     oc get pod rabbitmq-$CELL-server-0 -o jsonpath='{.status.phase}{"\n"}'
    > done

    之后,使用环境变量 RENAMED_CELLS 会引用给定的单元名称。在数据库迁移过程中,Nova 单元被重命名。RENAMED_CELLS 变量代表 RHOSO 部署中使用的新单元名称。

  • 确保所有 Rabbitmq 和 Galera CR 的状态都 完成

    $ oc get Rabbitmqs,Galera
    NAME                                                                  STATUS   MESSAGE
    rabbitmq.rabbitmq.openstack.org/rabbitmq                              True     Setup complete
    rabbitmq.rabbitmq.openstack.org/rabbitmq-cell1                        True     Setup complete
    
    NAME                                                               READY   MESSAGE
    galera.mariadb.openstack.org/openstack                             True     Setup complete
    galera.mariadb.openstack.org/openstack-cell1                       True     Setup complete
  • 验证 OpenStackControlPlane CR 是否已等待 openstackclient pod 部署:

    $ oc get OpenStackControlPlane openstack
    NAME        STATUS    MESSAGE
    openstack   Unknown   OpenStackControlPlane Client not started
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部