4.2. コントロールプレーンの作成
コントロールプレーンを作成し、Red Hat OpenStack Services on OpenShift (RHOSO)サービスを有効にするには、OpenStackControlPlane カスタムリソース(CR)を定義する必要があります。
次の手順では、各サービスの推奨設定を使用して初期コントロールプレーンを作成します。この手順により、動作するコントロールプレーン環境を迅速に作成できます。この環境を使用して、問題のトラブルシューティングや環境のテストを実行してから、必要なカスタマイズをすべて追加できます。デプロイした環境にサービスのカスタマイズを追加できます。デプロイ後にコントロールプレーンをカスタマイズする方法の詳細は、Red Hat OpenStack Services on OpenShift デプロイメントのカスタマイズ ガイドを参照してください。
OpenStackControlPlane CR の例は、OpenStackControlPlane CR の例 を参照してください。
OpenStackControlPlane CRD 定義と仕様スキーマを表示するには、次のコマンドを使用します。
$ oc describe crd openstackcontrolplane
$ oc explain openstackcontrolplane.spec
手順
ワークステーションに
openstack_control_plane.yamlという名前のファイルを作成して、OpenStackControlPlaneCR を定義します。apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane metadata: name: openstack-control-plane namespace: openstackRed Hat OpenStack Services on OpenShift へのセキュアなアクセスの提供 で、RHOSO サービス Pod へのセキュアなアクセスを提供するために作成した
SecretCR を指定します。apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane metadata: name: openstack-control-plane namespace: openstack spec: secret: osp-secretRed Hat OpenShift Container Platform (RHOCP) クラスターストレージバックエンド用に作成した
storageClassを指定します。spec: secret: osp-secret storageClass: <RHOCP_storage_class>-
<RHOCP_storage_class>は、RHOCP クラスターストレージバックエンド用に作成したストレージクラスに置き換えます。ストレージクラスの詳細は、ストレージクラスの作成 を参照してください。
-
次のサービス設定を追加します。
注記-
次のサービス例は、
loadBalancerIPsフィールドにデフォルトの RHOSO MetalLBIPAddressPool範囲の IP アドレスを使用します。作成した MetalLBIPAddressPoolの範囲の IP アドレスでloadBalancerIPsフィールドを更新します。 - デフォルトのパブリックサービスエンドポイントをオーバーライドできません。パブリックエンドポイントではルートのみがサポートされているため、パブリックサービスエンドポイントはデフォルトで RHOCP ルートとして公開されます。
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 cinderVolumes: volume1: networkAttachments: - storage replicas: 0-
cinderBackup.replicas:cinderBackupサービスをアクティブ化せずに初期コントロールプレーンをデプロイできます。サービスをデプロイするには、サービスのreplicasの数を設定し、サービスのバックエンドを設定する必要があります。各サービスの推奨レプリカと、Block Storage サービスおよびバックアップサービスのバックエンドを設定する方法は、永続ストレージの設定 の Block Storage バックアップサービスの設定 を参照してください。 -
cinderVolumes.replicas:cinderVolumesサービスをアクティブ化せずに初期コントロールプレーンをデプロイできます。サービスをデプロイするには、サービスのreplicasの数を設定し、サービスのバックエンドを設定する必要があります。cinderVolumesサービスの推奨レプリカと、サービスのバックエンドを設定する方法は、永続ストレージの設定 の ボリュームサービスの設定 を参照してください。
-
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 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注記デフォルトでは、各デフォルトセル (
cell0およびcell1) に対して、Compute サービス (nova) の完全なセット (nova-api、nova-metadata、nova-scheduler、nova-conductor) がデプロイされます。novncproxyサービスも、デフォルトでcell1に対して有効になります。データプレーンの 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-
dns.template.options: キーと値のペアを使用して、各 DNS サーバーに必要なdnsmasqインスタンスを定義します。この例では、要求を転送するように設定された DNS サーバーが 2 つあるため、2 つのキーと値のペアが定義されています。 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は、クラウドテナントに DNS をサービスとして提供する RHOSO DNS サービス (designate) とは異なります。
-
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: 3Image サービス (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-
glanceAPIs.default.replicas: Image サービス (glance) をアクティブ化せずに、初期コントロールプレーンをデプロイできます。Image サービスをデプロイするには、サービスのreplicasの数を設定し、サービスのバックエンドを設定する必要があります。Image サービスの推奨レプリカとサービスのバックエンドの設定方法は、永続ストレージの設定 の Image サービス (glance) の設定 を参照してください。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: 1Networking サービス (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: - internalapiObject 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: 10GiOVN:
ovn: template: ovnDBCluster: ovndbcluster-nb: replicas: 3 dbType: NB storageRequest: 10G networkAttachment: internalapi ovndbcluster-sb: replcas: 3 dbType: SB storageRequest: 10G networkAttachment: internalapi ovnNorthd: {}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-secretTelemetry サービス (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-
telemetry.template.metricStorage.dataplaneNetwork: データプレーンnode_exporterエンドポイントをスクレイピングするために使用するネットワークを定義します。 -
telemetry.template.metricStorage.networkAttachments:NetworkAttachmentDefinitionリソース名を使用して、各サービス Pod がアタッチされているネットワークをリスト表示します。指定したネットワークアタッチメントごとに、サービスの NIC を設定します。各サービス Pod が割り当てられている分離ネットワークを設定しなかった場合は、デフォルトの Pod ネットワークが使用されます。Prometheus がデータプレーンノードからデータをスクレイピングできるように、dataplaneNetworkとして指定したネットワークと一致するnetworkAttachmentを作成する必要があります。 -
telemetry.template.autoscaling: 自動スケーリングが無効になっている場合でも、autoscalingフィールドが存在している必要があります。自動スケーリングの詳細は、インスタンスの自動スケーリング を参照してください。
-
-
次のサービス例は、
次のサービス設定を追加して、高可用性 (HA) を実装します。
すべての RHOSO サービスで使用するための MariaDB Galera クラスター (
openstack) と、cell1の Compute サービスで使用するための MariaDB Galera クラスター (openstack-cell1)。galera: templates: openstack: storageRequest: 5000M secret: osp-secret replicas: 3 openstack-cell1: storageRequest: 5000M secret: osp-secret replicas: 33 つの memcached サーバーが含まれる単一の memcached クラスター。
memcached: templates: memcached: replicas: 3すべての RHOSO サービスで使用される RabbitMQ クラスター (
rabbitmq) と、cell1の Compute サービスで使用される RabbitMQ クラスター (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注記すべての RabbitMQ インスタンスは同じポートを使用するため、同じ仮想 IP (VIP) アドレスに複数の RabbitMQ インスタンスを設定することはできません。複数の RabbitMQ インスタンスを同じネットワークに公開する必要がある場合は、個別の IP アドレスを使用する必要があります。
コントロールプレーンを作成します。
$ oc create -f openstack_control_plane.yaml -n openstackRHOCP が
OpenStackControlPlaneCR に関連するリソースを作成するまで待機します。次のコマンドを実行して、ステータスを確認します。$ oc get openstackcontrolplane -n openstack NAME STATUS MESSAGE openstack-control-plane Unknown Setup startedステータスが "Setup complete" であれば、
OpenStackControlPlaneリソースが作成されています。ヒントデプロイの進行状況を追跡するには、
getコマンドの末尾に-wオプションを追加します。注記コントロールプレーンを作成すると、
OpenStackClientPod も作成されます。この Pod にリモートシェル (rsh) を介してアクセスして、OpenStack CLI コマンドを実行できます。$ oc rsh -n openstack openstackclientオプション:
openstacknamespace 内の Pod を確認して、コントロールプレーンがデプロイされていることを確認します。$ oc get pods -n openstackすべての Pod が完了または実行中の状態であれば、コントロールプレーンがデプロイされています。
検証
OpenStackClientPod へのリモートシェル接続を開きます。$ oc rsh -n openstack openstackclient内部サービスエンドポイントが各サービスに登録されていることを確認します。
$ 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 | +--------------+-----------+---------------------------------------------------------------+OpenStackClientPod を終了します。$ exit