9.2. コントロールプレーンの作成


OpenStackControlPlane カスタムリソース (CR) を定義して、次のタスクを実行します。

  • コントロールプレーンを作成します。
  • Red Hat OpenStack Services on OpenShift (RHOSO) サービスを有効にします。

次の手順では、各サービスのサンプル設定を使用して初期コントロールプレーンを作成します。この手順は、動作するコントロールプレーン環境の作成に役立ちます。この環境を使用して問題をテストし、トラブルシューティングを行ってから、必要なサービスのカスタマイズを追加できます。最初のデプロイ後に、サービスを追加およびカスタマイズできます。

サービスを設定するには、サービス仕様の CustomServiceConfig フィールドを使用して、OpenStack 設定パラメーターを INI ファイル形式で渡します。使用可能な設定パラメーターの詳細は、設定リファレンス を参照してください。

デプロイ後にコントロールプレーンをカスタマイズする方法の詳細は、Red Hat OpenStack Services on OpenShift デプロイメントのカスタマイズ ガイドを参照してください。

詳細は、OpenStackControlPlane CR の例 を参照してください。

ヒント

OpenStackControlPlane CRD 定義と仕様スキーマを表示するには、次のコマンドを使用します。

$ oc describe crd openstackcontrolplane

$ oc explain openstackcontrolplane.spec

NFV 環境の場合、Networking サービス (neutron) および OVN サービス設定を追加するときに、次の情報を指定する必要があります。

  • ゲートウェイが配置されている物理ネットワーク
  • vhost ソケットへのパス
  • VLAN の範囲
  • NUMA ノードの数
  • ゲートウェイネットワークに接続する NIC
注記

SR-IOV を使用する場合は、ネットワークサービス設定に sriovnicswitch メカニズムドライバーも追加する必要があります。

手順

  1. デプロイする RHOSO 環境用の openstack プロジェクトを作成します。

    $ oc new-project openstack
  2. OpenStack Operator による特権 Pod の作成を有効にするために、openstack namespace にラベルが付いていることを確認します。

    $ oc get namespace openstack -ojsonpath='{.metadata.labels}' | jq
    {
      "kubernetes.io/metadata.name": "openstack",
      "pod-security.kubernetes.io/enforce": "privileged",
      "security.openshift.io/scc.podSecurityLabelSync": "false"
    }

    Security Context Constraint (SCC) が "privileged" でない場合は、次のコマンドを使用して変更します。

    $ oc label ns openstack security.openshift.io/scc.podSecurityLabelSync=false --overwrite
    $ oc label ns openstack pod-security.kubernetes.io/enforce=privileged --overwrite
  3. ワークステーションに openstack_control_plane.yaml という名前のファイルを作成して、OpenStackControlPlane CR を定義します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: openstack-control-plane
      namespace: openstack
  4. Red Hat OpenStack Services on OpenShift へのセキュアなアクセスの提供 で、RHOSO サービス Pod へのセキュアなアクセスを提供するために作成した Secret CR を指定します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: openstack-control-plane
    spec:
      secret: osp-secret
  5. Red Hat OpenShift Container Platform (RHOCP) クラスターストレージバックエンド用に作成した storageClass を指定します。

    apiVersion: core.openstack.org/v1beta1
    kind: OpenStackControlPlane
    metadata:
      name: openstack-control-plane
    spec:
      secret: osp-secret
      storageClass: your-RHOCP-storage-class
    注記

    ストレージクラスの詳細は、ストレージクラスの作成 を参照してください。

  6. 次のサービス設定を追加します。

    Block Storage サービス (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 # backend needs to be configured to activate the service
          cinderVolumes:
            volume1:
              networkAttachments:
              - storage
              replicas: 0 # backend needs to be configured to activate the service
    重要

    この Block Storage サービスの定義はサンプルです。場合によっては、実際の NFV 環境に合わせて変更する必要があります。詳細は、デプロイメントのプランニングストレージと共有ファイルシステムのプランニング を参照してください。

    注記

    コントロールプレーンの最初のデプロイでは、cinderBackup および cinderVolumes サービスがデプロイされますが、アクティブ化はされません (replicas: 0)。デプロイ後に、Block Storage サービスとバックアップサービスのバックエンドを使用してコントロールプレーンを設定できます。

    Compute サービス (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
          schedulerServiceTemplate:
            customServiceConfig: |
              [filter_scheduler]
              enabled_filters = AvailabilityZoneFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, PciPassthroughFilter, AggregateInstanceExtraSpecsFilter
              available_filters = nova.scheduler.filters.all_filters
          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
            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
          cellTemplates:
            cell1:
              noVNCProxyServiceTemplate:
                enabled: true
                networkAttachments:
                - ctlplane
          secret: osp-secret
    注記

    デフォルトでは、各デフォルトセル (cell0 および cell1) に対して、Compute サービス (nova) の完全なセット (nova-apinova-metadatanova-schedulernova-conductor) がデプロイされます。novncproxy サービスも、デフォルトで cell1 に対して有効になります。

    データプレーンの DNS サービス
      dns:
        template:
          options:
          - key: server
            values:
            - <IP address for DNS server reachable from dnsmasq pod>
          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
    • options: キーと値のペアを使用して、各 DNS サーバーに必要な dnsmasq インスタンスを定義します。この例では、リクエストの転送先として設定されている DNS サーバーが 1 つしかないため、定義されているキーと値のペアは 1 つだけです。
    • 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
    • values: RHOCP クラスターネットワーク上の dnsmasq Pod から到達可能な DNS サーバーの値を指定します。値として、汎用 DNS サーバー (例: 1.1.1.1) または特定のドメインの DNS サーバー (例: /google.com/8.8.8.8) を指定できます。

      注記

      この DNS サービス (dnsmasq) は、RHOSO データプレーン上のノードに DNS サービスを提供します。dnsmasq は、クラウドテナントに DNS をサービスとして提供する RHOSO DNS サービス (designate) とは異なります。

    Galera クラスター

    すべての RHOSO サービスで使用するための Galera クラスター (openstack) と、cell1 の Compute サービスで使用するための Galera クラスター (openstack-cell1)。

      galera:
        templates:
          openstack:
            storageRequest: 5000M
            secret: osp-secret
            replicas: 3
          openstack-cell1:
            storageRequest: 5000M
            secret: osp-secret
            replicas: 3
    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
    Image サービス (glance)
      glance:
        apiOverrides:
          default:
            route: {}
        template:
          databaseInstance: openstack
          storage:
            storageRequest: 10G
          secret: osp-secret
          keystoneEndpoint: default
          glanceAPIs:
            default:
              replicas: 0 # backend needs to be configured to activate the 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
    注記

    コントロールプレーンの最初のデプロイでは、Image サービスがデプロイされますが、アクティブ化はされません (replicas: 0)。デプロイ後に、Image サービスのバックエンドを使用してコントロールプレーンを設定できます。

    Key Management サービス (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
    Memcached
      memcached:
        templates:
          memcached:
             replicas: 3
    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
          customServiceConfig: |
            [DEFAULT]
            global_physnet_mtu = 9000
            [ml2]
            mechanism_drivers = ovn
            [ovn]
            vhost_sock_dir = <path>
            [ml2_type_vlan]
            network_vlan_ranges = <network_name1>:<VLAN-ID1>:<VLAN-ID2>,<network_name2>:<VLAN-ID1>:<VLAN-ID2>
    • mechanism_drivers - SR-IOV を使用する場合は、sriovnicswitch メカニズムドライバーも追加する必要があります (例: mechanism_drivers = ovn,sriovnicswitch)。
    • vhost_sock_dir - <path> は、vhost ソケットへの絶対パス (例: /var/lib/vhost_sockets) に置き換えます。
    • network_vlan_ranges - <network_name1><network_name2> は、ゲートウェイが配置されている物理ネットワークの名前に置き換えます。(このネットワークは、neutron ネットワーク provider:*name フィールドで設定します。)
    • <VLAN-ID1> - <VLAN-ID1> と <VLAN-ID2> は、使用している VLAN ID に置き換えます。
    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
          swiftRing:
            ringReplicas: 3
          swiftStorage:
            networkAttachments:
            - storage
            replicas: 3
            storageClass: local-storage
            storageRequest: 100Gi
    OVN
      ovn:
        template:
          ovnDBCluster:
            ovndbcluster-nb:
              replicas: 3
              dbType: NB
              storageRequest: 10G
              networkAttachment: internalapi
            ovndbcluster-sb:
              replicas: 3
              dbType: SB
              storageRequest: 10G
              networkAttachment: internalapi
          ovnNorthd: {}
          ovnController:
            networkAttachment: tenant
            nicMappings:
              <network_name>: <NIC_name>
    • nicMappings - <network_name> は、ゲートウェイが配置されている物理ネットワークの名前に置き換えます。(このネットワークは、neutron ネットワーク provider:*name フィールドで設定します。)
    • <NIC_name> - <NIC_name> は、ゲートウェイネットワークに接続する NIC の名前に置き換えます。
    • <network_name>: <NIC_name> - オプション: 必要に応じて、nicMappings の下に <network_name>:<NIC_name> のペアを追加します。
    Placement サービス (placement):
      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
    RabbitMQ
      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
    Telemetry サービス (ceilometer、prometheus)
      telemetry:
        enabled: true
        template:
          metricStorage:
            enabled: true
            monitoringStack:
              alertingEnabled: true
              scrapeInterval: 30s
              storage:
                strategy: persistent
                retention: 24h
                persistent:
                  pvcStorageRequest: 20G
          autoscaling:
            enabled: false
            aodh:
              passwordSelectors:
              databaseAccount: aodh
              databaseInstance: openstack
              memcachedInstance: memcached
              secret: osp-secret
            heatInstance: heat
          ceilometer:
            enabled: true
            secret: osp-secret
          logging:
            enabled: false
    • autoscaling - 自動スケーリングが無効になっている場合でも、autoscaling フィールドが存在している必要があります。
  7. コントロールプレーンを作成します。

    $ oc create -f openstack_control_plane.yaml -n openstack
    注記

    コントロールプレーンを作成すると、OpenStackClient Pod も作成されます。この Pod にリモートシェル (rsh) を介してアクセスして、RHOSO CLI コマンドを実行できます。

    $ oc rsh -n openstack openstackclient
  8. RHOCP が OpenStackControlPlane CR に関連するリソースを作成するまで待機します。コントロールプレーンのデプロイのステータスを確認します。

    $ oc get openstackcontrolplane -n openstack
    出力例
    NAME                      STATUS    MESSAGE
    openstack-control-plane   Unknown   Setup started

    ステータスが "Setup complete" であれば、OpenStackControlPlane リソースが作成されています。

    ヒント

    デプロイの進行状況を追跡するには、get コマンドの末尾に -w オプションを追加します。

    注記

    コントロールプレーンを作成すると、OpenStackClient Pod も作成されます。この Pod にリモートシェル (rsh) を介してアクセスして、RHOSO CLI コマンドを実行できます。

    $ oc rsh -n openstack openstackclient
  9. オプション: openstack namespace 内の Pod を確認して、コントロールプレーンがデプロイされていることを確認します。

    $ oc get pods -n openstack

    すべての Pod が完了または実行中の状態であれば、コントロールプレーンがデプロイされています。

検証

  1. OpenStackClient Pod へのリモートシェル接続を開きます。

    $ oc rsh -n openstack openstackclient
  2. 内部サービスエンドポイントが各サービスに登録されていることを確認します。

    $ openstack endpoint list -c 'Service Name' -c Interface -c URL --service glance
    出力例
    +--------------+-----------+---------------------------------------------------------------+
    | Service Name | Interface | URL                                                           |
    +--------------+-----------+---------------------------------------------------------------+
    | glance       | internal  | http://glance-internal.openstack.svc:9292                     |
    | glance       | public    | http://glance-public-openstack.apps.ostest.test.metalkube.org |
    +--------------+-----------+---------------------------------------------------------------+
  3. OpenStackClient Pod を終了します。

    $ exit
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る