5.3. 事前にプロビジョニングされたノードが含まれるネットワーカーノードセットの OpenStackDataPlaneNodeSet CR を作成する
データプレーン内の事前プロビジョニングされたノード (ネットワーカーノード) の論理グループごとに、OpenStackDataPlaneNodeSet CR を定義できます。デプロイメントに応じて必要な数のノードセットを定義できます。各ノードは、1 つの OpenStackDataPlaneNodeSet CR にのみ含めることができます。
nodeTemplate フィールドを使用して OpenStackDataPlaneNodeSet CR 内のすべてのノードに適用する共通プロパティーを設定し、nodes フィールドを使用してノード固有のプロパティーを設定します。ノード固有の設定は、nodeTemplate から継承された値をオーバーライドします。
事前にプロビジョニングされたネットワーカーノードから OVS-DPDK なしでネットワーカーノードセットを設定する OpenStackDataPlaneNodeSet CR の例については、事前にプロビジョニングされたネットワーカーノードの OpenStackDataPlaneNodeSet CR の例 を参照してください。
+ 事前にプロビジョニングされたネットワーカーノードから OVS-DPDK を使用してネットワーカーノードのセットを設定する OpenStackDataPlaneNodeSet CR の例については、事前にプロビジョニングされた DPDK 対応ネットワーカーノードの OpenStackDataPlaneNodeSet CR の例 を参照してください。
手順
openstack_preprovisioned_networker_node_set.yamlという名前のワークステーションにファイルを作成し、OpenStackDataPlaneNodeSetCR を定義します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: networker-nodes1 namespace: openstack spec: env:2 - name: ANSIBLE_FORCE_COLOR value: "True"servicesフィールドを追加してデフォルトサービスをオーバーライドします。ネットワーカーノードに必要ないnova、libvirt、その他のサービスを削除します。apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: networker-nodes namespace: openstack spec: ... services: - redhat - bootstrap - download-cache - reboot-os - configure-ovs-dpdk1 - configure-network - validate-network - install-os - configure-os - ssh-known-hosts - run-os - install-certs - ovn - neutron-metadata2 - neutron-dhcp3 データプレーンをコントロールプレーンネットワークに接続します。
spec: ... networkAttachments: - ctlplaneシャーシをゲートウェイとして有効にします。
spec: ... nodeTemplate: ansible: ... edpm_enable_chassis_gw: trueこのセット内のノードが事前にプロビジョニングされていることを指定します。
spec: ... nodeTemplate: ansible: ... edpm_enable_chassis_gw: true ... preProvisioned: trueAnsible がデータプレーンノードに接続できるように、作成した SSH キーシークレットを追加します。
nodeTemplate: ansibleSSHPrivateKeySecret: <secret-key>-
<secret-key>は、<link>[データプレーンシークレットの作成] でこのノードセット用に作成した SSH 鍵のSecretCR の名前 (例:dataplane-ansible-ssh-private-key-secret) に置き換えます。
-
-
ログを保存するために、Red Hat OpenShift Container Platform (RHOCP) クラスターの
openstacknamespace に永続ボリューム要求 (PVC) を作成します。volumeModeをFilesystemに、accessModesをReadWriteOnceに設定します。NFS ボリュームプラグインを使用する PersistentVolume (PV) からのログのストレージを要求しないでください。NFS は FIFO と互換性がないため、ansible-runnerはログを保存するために FIFO ファイルを作成します。PVC の詳細は、RHOCP ストレージ ガイドの 永続ストレージについて、および デプロイメントのプランニング の Red Hat OpenShift Container Platform クラスターの要件 を参照してください。 ネットワーカーノードの永続的なロギングを有効にします。
nodeTemplate: ... extraMounts: - extraVolType: Logs volumes: - name: ansible-logs persistentVolumeClaim: claimName: <pvc_name> mounts: - name: ansible-logs mountPath: "/runner/artifacts"-
<pvc_name>を、RHOCP クラスター上の PVC ストレージの名前に置き換えます。
-
管理ネットワークを指定します。
nodeTemplate: ... managementNetwork: ctlplaneRed Hat カスタマーポータルに登録されていないノードのオペレーティングシステムを登録するためのユーザー名とパスワードの取得に使用する
SecretCR を指定し、ノードのリポジトリーを有効にします。次の例は、ノードを Red Hat コンテンツ配信ネットワーク (CDN) に登録する方法を示しています。Red Hat Satellite 6.13 でノードを登録する方法については、ホストの管理 を参照してください。nodeTemplate: ... ansible: ansibleUser: cloud-admin1 ansiblePort: 22 ansibleVarsFrom: - secretRef: name: subscription-manager - secretRef: name: redhat-registry ansibleVars:2 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: []- 1
- <link>[データプレーンシークレットの作成] で作成したシークレットに関連付けられているユーザー。
- 2
- ノードのセットをカスタマイズする Ansible 変数。使用できる Ansible 変数のリストは、https://openstack-k8s-operators.github.io/edpm-ansible/ を参照してください。
Red Hat カスタマーポータル登録コマンドの完全なリストは、https://access.redhat.com/solutions/253273 を参照してください。
registry.redhat.ioにログインする方法は、https://access.redhat.com/RegistryAuthentication#creating-registry-service-accounts-6 を参照してください。ネットワーカーノードに適用するネットワーク設定テンプレートを追加します。
nodeTemplate: ... ansible: ... ansibleVars: ... nodes: ... neutron_physical_bridge_name: br-ex neutron_public_interface_name: eth0 edpm_network_config_nmstate: true1 edpm_network_config_update: false2 - 1
os-net-configプロバイダーをnmstateに設定します。デフォルト値はfalseです。nmstateプロバイダーの特定の制限によりifcfgプロバイダーを使用する必要がある場合を除き、これをtrueに変更します。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 を参照してください。- 2
- ノードセットの初回デプロイ時には、
edpm_network_config_update変数をfalseに設定します。ノードセットを更新または導入する場合は、edpm_network_config_update変数をtrueに設定して、更新時にネットワーク設定の変更を適用します。この変数は、更新後または導入後にfalseにリセットします。これをfalseにリセットしないと、configure-networkサービスが含まれるOpenStackDataPlaneDeploymentCR が作成されるたびに、更新されたネットワーク設定が再適用されます。
次の例では、DPDK を使用してデータプレーンネットワーカーノードのセットに VLAN ネットワーク設定を適用します。
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_user_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: ovs_dpdk_port name: dpdk0 members: - type: interface name: nic1 - type: linux_bond name: bond_api use_dhcp: false bonding_options: "mode=active-backup" dns_servers: {{ ctlplane_dns_nameservers }} members: - type: interface name: nic2 primary: true - type: vlan vlan_id: {{ lookup('vars', networks_lower['internalapi'] ~ '_vlan_id') }} device: bond_api addresses: - ip_netmask: {{ lookup('vars', networks_lower['internalapi'] ~ '_ip') }}/{{ lookup('vars', networks_lower['internalapi'] ~ '_cidr') }} - type: ovs_user_bridge name: br-link0 use_dhcp: false ovs_extra: "set port br-link0 tag={{ lookup('vars', networks_lower['tenant'] ~ '_vlan_id') }}" addresses: - ip_netmask: {{ lookup('vars', networks_lower['tenant'] ~ '_ip') }}/{{ lookup('vars', networks_lower['tenant'] ~ '_cidr')}} members: - type: ovs_dpdk_bond name: dpdkbond0 mtu: 9000 rx_queue: 1 ovs_extra: "set port dpdkbond0 bond_mode=balance-slb" members: - type: ovs_dpdk_port name: dpdk1 members: - type: interface name: nic3 - type: ovs_dpdk_port name: dpdk2 members: - type: interface name: nic4 - type: ovs_user_bridge name: br-link1 use_dhcp: false members: - type: ovs_dpdk_bond name: dpdkbond1 mtu: 9000 rx_queue: 1 ovs_extra: "set port dpdkbond1 bond_mode=balance-slb" members: - type: ovs_dpdk_port name: dpdk3 members: - type: interface name: nic5 - type: ovs_dpdk_port name: dpdk4 members: - type: interface name: nic6 neutron_physical_bridge_name: br-ex次の例では、DPDK を使用せずに VLAN ネットワーク設定をデータプレーンネットワーカーノードのセットに適用します。
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: nic2 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 %}データプレーンネットワーク設定の詳細は、ネットワークサービスの設定 の データプレーンネットワークのカスタマイズ を参照してください。
-
このグループ内のノードセットの共通設定を
nodeTemplateセクションに追加します。このOpenStackDataPlaneNodeSet内の各ノードがこの設定を継承します。共通のノード属性を設定するために使用できるプロパティーの詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドのOpenStackDataPlaneNodeSetCR の spec プロパティー を参照してください。 このノードセット内の各ノードを定義します。
... nodes: edpm-networker-0:1 hostName: networker-0 networks:2 - name: ctlplane subnetName: subnet1 defaultRoute: true fixedIP: 192.168.122.1003 - name: internalapi subnetName: subnet1 fixedIP: 172.17.0.100 - name: storage subnetName: subnet1 fixedIP: 172.18.0.100 - name: tenant subnetName: subnet1 fixedIP: 172.19.0.100 ansible: ansibleHost: 192.168.122.100 ansibleUser: cloud-admin ansibleVars:4 fqdn_internal_api: edpm-networker-0.example.com edpm-networker-1: hostName: edpm-networker-1 networks: - name: ctlplane subnetName: subnet1 defaultRoute: true fixedIP: 192.168.122.101 - name: internalapi subnetName: subnet1 fixedIP: 172.17.0.101 - name: storage subnetName: subnet1 fixedIP: 172.18.0.101 - name: tenant subnetName: subnet1 fixedIP: 172.19.0.101 ansible: ansibleHost: 192.168.122.101 ansibleUser: cloud-admin ansibleVars: fqdn_internal_api: edpm-networker-1.example.com注記-
nodesセクションに定義するノードには、nodeTemplateセクションで設定されているのと同じ Ansible 変数を設定できます。Ansible 変数が特定のノードとnodeTemplateセクション内の両方に設定されている場合は、ノード固有の値がnodeTemplateセクションの値をオーバーライドします。 -
ノードのすべての
nodeTemplateAnsible 変数を複製してデフォルトをオーバーライドし、ノード固有の値を設定する必要はありません。設定する必要があるのは、オーバーライドするノードの Ansible 変数だけです。 -
多くの
ansibleVarsの名前にはedpmが含まれています。これは "External Data Plane Management (外部データプレーン管理)" の略です。
ノード属性を設定するために使用できるプロパティーの詳細は、Red Hat OpenStack Services on OpenShift のデプロイ ガイドの
OpenStackDataPlaneNodeSetCR の spec プロパティー を参照してください。-
-
openstack_preprovisioned_networker_node_set.yaml定義ファイルを保存します。 データプレーンリソースを作成します。
$ oc create --save-config -f openstack_preprovisioned_networker_node_set.yaml -n openstackステータスが
SetupReadyであることを確認して、データプレーンリソースが作成されたことを確認します。$ oc wait openstackdataplanenodeset openstack-data-plane --for condition=SetupReady --timeout=10mステータスが
SetupReadyの場合、コマンドはcondition metメッセージを返し、それ以外の場合はタイムアウトエラーを返します。データプレーンの条件と状態の詳細は、Red Hat OpenStack Services on OpenShift のデプロイ の データプレーンの条件と状態 を参照してください。
ノードセットの
Secretリソースが作成されたことを確認します。$ oc get secret | grep openstack-data-plane dataplanenodeset-openstack-data-plane Opaque 1 3m50sサービスが作成されたことを確認します。
$ oc get openstackdataplaneservice -n openstack NAME AGE bootstrap 46m ceph-client 46m ceph-hci-pre 46m configure-network 46m configure-os 46m ...
5.3.1. 事前プロビジョニングされたネットワーカーノードの OpenStackDataPlaneNodeSet CR の例 リンクのコピーリンクがクリップボードにコピーされました!
次の OpenStackDataPlaneNodeSet CR の例では、ノード固有の設定を使用して、事前にプロビジョニングされたネットワーカーノードからノードセットを作成します。この例の OpenStackDataPlaneNodeSet CR の名前を、セット内のノードを表す名前に更新してください。OpenStackDataPlaneNodeSet CR 名は、一意であり、小文字の英数字と - (ハイフン) または . (ピリオド) のみが含まれ、先頭と末尾は英数字で、最大長 53 文字である必要があります。
apiVersion: dataplane.openstack.org/v1beta1
kind: OpenStackDataPlaneNodeSet
metadata:
name: openstack-networker-nodes
namespace: openstack
spec:
services:
- bootstrap
- download-cache
- reboot-os
- configure-network
- validate-network
- install-os
- configure-os
- ssh-known-hosts
- run-os
- install-certs
- ovn
env:
- name: ANSIBLE_FORCE_COLOR
value: "True"
networkAttachments:
- ctlplane
preProvisioned: true
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:
edpm_bootstrap_command: |
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: []
...
neutron_physical_bridge_name: br-ex
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-networker-0:
hostName: edpm-networker-0
networks:
- name: ctlplane
subnetName: subnet1
defaultRoute: true
fixedIP: 192.168.122.100
- name: internalapi
subnetName: subnet1
fixedIP: 172.17.0.100
- name: storage
subnetName: subnet1
fixedIP: 172.18.0.100
- name: tenant
subnetName: subnet1
fixedIP: 172.19.0.100
ansible:
ansibleHost: 192.168.122.100
ansibleUser: cloud-admin
ansibleVars:
fqdn_internal_api: edpm-networker-0.example.com
edpm-networker-1:
hostName: edpm-networker-1
networks:
- name: ctlplane
subnetName: subnet1
defaultRoute: true
fixedIP: 192.168.122.101
- name: internalapi
subnetName: subnet1
fixedIP: 172.17.0.101
- name: storage
subnetName: subnet1
fixedIP: 172.18.0.101
- name: tenant
subnetName: subnet1
fixedIP: 172.19.0.101
ansible:
ansibleHost: 192.168.122.101
ansibleUser: cloud-admin
ansibleVars:
fqdn_internal_api: edpm-networker-1.example.com
5.3.2. DPDK を備えた事前プロビジョニングされたネットワーカーノードの OpenStackDataPlaneNodeSet CR の例 リンクのコピーリンクがクリップボードにコピーされました!
次の OpenStackDataPlaneNodeSet CR の例では、OVS-DPDK とノード固有の設定を使用して、事前にプロビジョニングされたネットワーカーノードからノードセットを作成します。この例の OpenStackDataPlaneNodeSet CR の名前は、セット内のノードを表す名前に更新してください。OpenStackDataPlaneNodeSet CR 名は、一意であり、小文字の英数字と - (ハイフン) または . (ピリオド) のみが含まれ、先頭と末尾は英数字で、最大長 53 文字である必要があります。
apiVersion: v1
kind: ConfigMap
metadata:
name: networker-nodeset-values
annotations:
config.kubernetes.io/local-config: "true"
data:
root_password: cmVkaGF0Cg==
preProvisioned: false
baremetalSetTemplate:
ctlplaneInterface: <control plane interface>
cloudUserName: cloud-admin
provisioningInterface: <provisioning network interface>
bmhLabelSelector:
app: openstack-networker
passwordSecret:
name: baremetalset-password-secret
namespace: openstack
ssh_keys:
# Authorized keys that will have access to the dataplane networkers via SSH
authorized: <authorized key>
# The private key that will have access to the dataplane networkers via SSH
private: <private key>
# The public key that will have access to the dataplane networkers via SSH
public: <public key>
nodeset:
ansible:
ansibleUser: cloud-admin
ansiblePort: 22
ansibleVars:
edpm_enable_chassis_gw: true
...
ansibleVarsFrom:
- secretRef:
name: subscription-manager
- secretRef:
name: redhat-registry
ansibleVars:
edpm_bootstrap_command: |
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_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: interface
name: nic1
use_dhcp: false
- type: interface
name: nic2
use_dhcp: false
- type: ovs_user_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: ovs_dpdk_port
rx_queue: 1
name: dpdk0
members:
- type: interface
name: nic3
# These vars are for the network config templates themselves and are
# considered EDPM network defaults.
neutron_physical_bridge_name: br-ex
neutron_public_interface_name: nic1
# edpm_nodes_validation
edpm_nodes_validation_validate_controllers_icmp: false
edpm_nodes_validation_validate_gateway_icmp: false
dns_search_domains: []
gather_facts: false
# edpm firewall, change the allowed CIDR if needed
edpm_sshd_configure_firewall: true
edpm_sshd_allowed_ranges:
- 192.168.122.0/24
networks:
- defaultRoute: true
name: ctlplane
subnetName: subnet1
- name: internalapi
subnetName: subnet1
- name: storage
subnetName: subnet1
- name: tenant
subnetName: subnet1
nodes:
edpm-networker-0:
hostName: edpm-networker-0
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-metadata