10.6. プロビジョニングされていないノードを使用したデータプレーンノードセットの作成
データプレーン内のプロビジョニングされていないノードの論理グループごとに、OpenStackDataPlaneNodeSet カスタムリソース (CR) を定義します (たとえば、ハードウェア、場所、ネットワーク別にグループ化されたノードなど)。デプロイメントに応じて必要な数のノードセットを定義できます。各ノードは、1 つの OpenStackDataPlaneNodeSet CR にのみ含めることができます。各ノードセットは、1 つの Compute セルにのみ接続できます。デフォルトでは、ノードセットは cell1 に接続されます。コントロールプレーンをカスタマイズして Compute セルを追加する場合は、ノードセットの接続先のセルを指定する必要があります。Compute セルの追加の詳細は、Red Hat OpenStack Services on OpenShift デプロイメントのカスタマイズ ガイドの OpenStackDataPlaneNodeSet CR を Compute セルに接続する を参照してください。
nodeTemplate フィールドを使用して、OpenStackDataPlaneNodeSet CR 内のすべてのノードが共有するプロパティーを設定します。nodeTemplate.nodes フィールドを使用して、ノード固有のプロパティーを設定します。ノード固有の設定は、nodeTemplate から継承された値をオーバーライドします。
ベアメタルノードのプロビジョニングの詳細は、デプロイメントの計画 の ベアメタルデータプレーンノードのプロビジョニングの計画 を参照してください。
前提条件
- Cluster Baremetal Operator (CBO) がインストールされ、プロビジョニング用に設定されている。詳細は、デプロイメントの計画 の ベアメタルデータプレーンノードのプロビジョニングの計画 を参照してください。
-
BareMetalHostCR が、各ベアメタルデータプレーンノード用に登録および検査されている。各ベアメタルノードが検査後にAvailable状態になっている必要があります。ベアメタルノードの設定の詳細は、Red Hat OpenShift Container Platform (RHOCP) インストール後の設定 ガイドの ベアメタルの設定 を参照してください。
手順
ワークステーションに
openstack_unprovisioned_node_set.yamlという名前のファイルを作成し、OpenStackDataPlaneNodeSetCR を定義します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: openstack-data-plane1 namespace: openstack spec: tlsEnabled: true env: - name: ANSIBLE_FORCE_COLOR value: "True"- 1
OpenStackDataPlaneNodeSetCR 名は、一意であり、小文字の英数字と-(ハイフン) または.(ピリオド) のみが含まれ、先頭と末尾は英数字で、最大長 53 文字である必要があります。この例の名前を、セット内のノードを表す名前に更新してください。
baremetalSetTemplateフィールドを定義して、ベアメタルノードの設定を記述します。preProvisioned: false baremetalSetTemplate: deploymentSSHSecret: dataplane-ansible-ssh-private-key-secret bmhNamespace: <bmh_namespace> cloudUserName: <ansible_ssh_user> bmhLabelSelector: app: <bmh_label> ctlplaneInterface: <interface>-
<bmh_namespace>は、ノードは対応するBareMetalHostCR で定義されている namespace に置き換えます。 -
<ansible_ssh_user>は、Ansible SSH ユーザーのユーザー名に置き換えます。 -
<bmh_label>は、ノードの対応するBareMetalHostCR で定義されているメタデータラベル (例:openstack) に置き換えます。app、workload、nodeNameなどのメタデータラベルは、ノードにラベル付けするためのキーと値のペアです。対応するBareMetalHostCR 内のラベルと一致する 1 つ以上のラベルに基づいてデータプレーンノードを選択するには、bmhLabelSelectorフィールドを設定します。 -
<interface>は、ノードが接続するコントロールプレーンインターフェイス (例:enp6s0) に置き換えます。
-
デフォルトでは、BMO によって
openshift-machine-apinamespace 内のBareMetalHostCR が管理されます。すべての namespace を監視するようにProvisioningCR を更新する必要があります。$ oc patch provisioning provisioning-configuration --type merge -p '{"spec":{"watchAllNamespaces": true }}'Ansible がデータプレーンノードに接続できるようにするために作成した SSH 鍵シークレットを追加します。
nodeTemplate: ansibleSSHPrivateKeySecret: <secret-key>-
<secret-key>は、データプレーンシークレットの作成 で作成した SSH 鍵のSecretCR の名前 (例:dataplane-ansible-ssh-private-key-secret) に置き換えます。
-
-
ログを保存するために、RHOCP クラスターの
openstacknamespace に永続ボリューム要求 (PVC) を作成します。volumeModeをFilesystemに、accessModesをReadWriteOnceに設定します。NFS ボリュームプラグインを使用する PersistentVolume (PV) からのログのストレージを要求しないでください。NFS は FIFO と互換性がないため、ansible-runnerはログを保存するために書き込む FIFO ファイルを作成します。PVC の詳細は、RHOCP ストレージ ガイドの 永続ストレージについて、および デプロイメントのプランニング の Red Hat OpenShift Container Platform クラスターの要件 を参照してください。 データプレーンノードの永続的なロギングを有効にします。
nodeTemplate: ansibleSSHPrivateKeySecret: <secret-key> extraMounts: - extraVolType: Logs volumes: - name: ansible-logs persistentVolumeClaim: claimName: <pvc_name> mounts: - name: ansible-logs mountPath: "/runner/artifacts"-
<pvc_name>を、RHOCP クラスター上の PVC ストレージの名前に置き換えます。
-
このグループ内のノードセットの共通設定を
nodeTemplateセクションに追加します。このOpenStackDataPlaneNodeSet内の各ノードがこの設定を継承します。詳細は以下を参照してください。
このノードセット内の各ノードを定義します。
nodes: edpm-compute-0:1 hostName: edpm-compute-0 networks:2 - name: ctlplane subnetName: subnet1 defaultRoute: true fixedIP: 192.168.122.1003 - name: internalapi subnetName: subnet1 - name: storage subnetName: subnet1 - name: tenant subnetName: subnet1 ansible: ansibleHost: 192.168.122.100 ansibleUser: cloud-admin ansibleVars:4 fqdn_internal_api: edpm-compute-0.example.com edpm_network_config_nmstate: true5 edpm-compute-1: hostName: edpm-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 ansible: ansibleHost: 192.168.122.101 ansibleUser: cloud-admin ansibleVars: fqdn_internal_api: edpm-compute-1.example.com注記-
nodesセクションに定義するノードには、nodeTemplateセクションで設定されているのと同じ Ansible 変数を設定できます。Ansible 変数が特定のノードとnodeTemplateセクション内の両方に設定されている場合は、ノード固有の値がnodeTemplateセクションの値をオーバーライドします。 -
ノードのすべての
nodeTemplateAnsible 変数を複製してデフォルトをオーバーライドし、ノード固有の値を設定する必要はありません。設定する必要があるのは、オーバーライドするノードの Ansible 変数だけです。 -
多くの
ansibleVarsの名前にはedpmが含まれています。これは "External Data Plane Management (外部データプレーン管理)" の略です。
os-net-configプロバイダーをnmstateに設定します。デフォルト値はtrueです。nmstateプロバイダーの特定の制限によりifcfgプロバイダーを使用する必要がある場合のみ、これをfalseに変更します。nmstateプロバイダーの利点と制限の詳細は、「デプロイメントのプランニング」の https://docs.redhat.com/en/documentation/red_hat_openstack_services_on_openshift/18.0/html/planning_your_deployment/plan-networks_planning#plan-os-net-config_plan-network を参照してください。
ノード属性を設定するために使用できるプロパティーの詳細は、
OpenStackDataPlaneNodeSetCR のプロパティー を参照してください。-
servicesセクションに、データプレーンノードで実行されるサービスの一覧を追加します。nova を、またはnova-custom-sriovnova-custom-ovsdpdkのいずれか、またはその両方に置き換えてください。... services: - bootstrap - download-cache - reboot-os - configure-ovs-dpdk - configure-network - validate-network - install-os - configure-os - ssh-known-hosts - run-os - install-certs - ovn - neutron-ovn - neutron-ovn-igmp - neutron-metadata - libvirt - nova-custom-sriov - nova-custom-ovsdpdk - telemetry ...-
openstack_unprovisioned_node_set.yaml定義ファイルを保存します。 データプレーンリソースを作成します。
$ oc create -f openstack_unprovisioned_node_set.yaml -n openstackデータプレーンリソースが作成されたことを確認します。
$ oc get openstackdataplanenodeset -n openstack NAME STATUS MESSAGE openstack-data-plane False Deployment not started返されるステータスの意味は、「データプレーンの状態」を参照してください。
ノードセットの
Secretリソースが作成されたことを確認します。$ oc get secret -n openstack | grep openstack-data-plane dataplanenodeset-openstack-data-plane Opaque 1 3m50sサービスが作成されたことを確認します。
$ oc get openstackdataplaneservice -n openstack NAME AGE configure-network 6d7h configure-os 6d6h install-os 6d6h run-os 6d6h validate-network 6d6h ovn 6d6h libvirt 6d6h nova 6d6h telemetry 6d6h
10.6.1. プロビジョニングされていないノードの OpenStackDataPlaneNodeSet CR の例 リンクのコピーリンクがクリップボードにコピーされました!
次の OpenStackDataPlaneNodeSet CR の例では、ノード固有の設定を使用して、プロビジョニングされていない Compute ノードからノードセットを作成します。プロビジョニングされていない Compute ノードは、ノードセットの作成時にプロビジョニングされます。例にはオプションのフィールドが含まれています。この例を確認し、オプションのフィールドを環境に適した値に更新するか、削除します。その後、Red Hat OpenStack Services on OpenShift (RHOSO) デプロイメントでこの例を使用します。
この例の OpenStackDataPlaneNodeSet CR の名前を、セット内のノードを表す名前に更新してください。OpenStackDataPlaneNodeSet CR 名は、一意であり、小文字の英数字と - (ハイフン) または . (ピリオド) のみが含まれ、先頭と末尾は英数字で、最大長 53 文字である必要があります。
次の変数は IPAM と DNS から自動生成されるため、ユーザーによって提供されません。
-
ctlplane_dns_nameservers -
dns_search_domains -
ctlplane_host_routes
apiVersion: dataplane.openstack.org/v1beta1
kind: OpenStackDataPlaneNodeSet
metadata:
name: openstack-data-plane
namespace: openstack
spec:
env:
- name: ANSIBLE_FORCE_COLOR
value: "True"
networkAttachments:
- ctlplane
preProvisioned: false
baremetalSetTemplate:
deploymentSSHSecret: dataplane-ansible-ssh-private-key-secret
bmhNamespace: openstack
cloudUserName: cloud-admin
bmhLabelSelector:
app: openstack
ctlplaneInterface: enp1s0
nodeTemplate:
ansibleSSHPrivateKeySecret: dataplane-ansible-ssh-private-key-secret
extraMounts:
- extraVolType: Logs
volumes:
- name: ansible-logs
persistentVolumeClaim:
claimName: <pvc_name>
mounts:
- name: ansible-logs
mountPath: "/runner/artifacts"
managementNetwork: ctlplane
ansible:
ansibleUser: cloud-admin
ansiblePort: 22
ansibleVarsFrom:
- secretRef:
name: subscription-manager
- secretRef:
name: redhat-registry
ansibleVars:
timesync_ntp_servers:
- hostname: ntp.example.com
iburst: true
- hostname: ntp2.example.com
iburst: false
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: []
edpm_network_config_os_net_config_mappings:
edpm-compute-0:
nic1: 52:54:04:60:55:22
edpm-compute-1:
nic1: 52:54:04:60:55:22
neutron_physical_bridge_name: br-ex
neutron_public_interface_name: eth0
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 }}
mtu: {{ min_viable_mtu }}
use_dhcp: false
dns_servers: {{ ctlplane_dns_nameservers }}
domain: {{ dns_search_domains }}
addresses:
- ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }}
routes: {{ ctlplane_host_routes }}
members:
- type: interface
name: nic1
mtu: {{ min_viable_mtu }}
# force the MAC address of the bridge to this interface
primary: true
{% for network in nodeset_networks %}
- type: vlan
mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
addresses:
- ip_netmask:
{{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
{% endfor %}
nodes:
edpm-compute-0:
hostName: edpm-compute-0
networks:
- name: ctlplane
subnetName: subnet1
defaultRoute: true
fixedIP: 192.168.122.100
- name: internalapi
subnetName: subnet1
- name: storage
subnetName: subnet1
- name: tenant
subnetName: subnet1
ansible:
ansibleHost: 192.168.122.100
ansibleUser: cloud-admin
ansibleVars:
fqdn_internal_api: edpm-compute-0.example.com
bmhLabelSelector:
nodeName: edpm-compute-0
edpm-compute-1:
hostName: edpm-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
ansible:
ansibleHost: 192.168.122.101
ansibleUser: cloud-admin
ansibleVars:
fqdn_internal_api: edpm-compute-1.example.com
bmhLabelSelector:
nodeName: edpm-compute-1
services:
- bootstrap
- download-cache
- reboot-os
- configure-ovs-dpdk
- configure-network
- validate-network
- install-os
- configure-os
- ssh-known-hosts
- run-os
- install-certs
- ovn
- neutron-ovn
- neutron-ovn-igmp
- neutron-metadata
- libvirt
- nova-custom-sriov
- nova-custom-ovsdpdk
- telemetry