Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

第2章 Bare Metal デプロイメントの設定

OpenStack 環境でのベアメタルデプロイメントが可能となるように Bare Metal Provisioning、Image service、および Compute を設定します。以下の項では、ベアメタルノードのデプロイを正常に実行するのに必要な追加の設定ステップについて説明します。

2.1. Bare Metal Provisioning サービス用の OpenStack 設定の作成

2.1.1. OpenStack Networking 構成の設定

OpenStack Networking が DHCP、PXE ブートおよびその他の必要な場合に Bare Metal Provisioning と通信するように設定します。以下の手順では、単一のフラットなネットワークをベアメタルにプロビジョニングするユースケースで OpenStack Networking を設定します。この設定には ML2 プラグインと Open vSwitch エージェントを使用します。

プロビジョニングに使用するネットワークインターフェースは、OpenStack Networking ノード上でリモート接続に使用しているネットワークインターフェースとは別であることを確認してください。この手順では、ベアメタルプロビジョニングネットワーク用のインターフェースを使用するブリッジを作成し、リモート接続を解除します。

以下の手順に記載するステップはすべて、OpenStack Networking をホストするサーバーに root ユーザーとしてログインして実行する必要があります。

OpenStack Networking が Bare Metal Provisioning と通信するための設定

  1. Identity に管理ユーザーとしてアクセスするためのシェルを設定します。

    # source ~stack/overcloudrc
  2. ベアメタルインスタンスをプロビジョニングするためのフラットなネットワークを作成します。

    # neutron net-create --tenant-id TENANT_ID sharednet1 --shared \
    --provider:network_type flat --provider:physical_network PHYSNET

    TENANT_ID はネットワークを作成するテナントの一意識別子に、PHYSNET は物理ネットワークの名前に置き換えます。

  3. フラットネットワーク上にサブネットを作成します。

    # neutron subnet-create sharednet1 NETWORK_CIDR --name SUBNET_NAME \
    --ip-version 4 --gateway GATEWAY_IP --allocation-pool \
    start=START_IP,end=END_IP --enable-dhcp

    以下の値を置き換えてください。

    • NETWORK_CIDR は、サブネットが示す IP アドレスブロックの Classless Inter-Domain Routing (CIDR) 表記に置き換えます。 START_IP で始まり END_IP で終る範囲で指定する IP アドレスブロックは、NETWORK_CIDR で指定されている IP アドレスブロックの範囲内に入る必要があります。
    • SUBNET_NAME はサブネットの名前に置き換えます。
    • GATEWAY_IP は新しいサブネットのゲートウェイとして機能するシステムの IP アドレスまたはホスト名に置き換えます。このアドレスは、 NETWORK_CIDR で指定されている IP アドレスブロック内で、かつ START_IP で始まり END_IP で終わる範囲で指定されている IP アドレスブロック外である必要があります。
    • START_IP は、Floating IP アドレスの割り当て元となる新規サブネット内の IP アドレス範囲の開始アドレスを示す IP アドレスに置き換えます。
    • END_IP は、Floating IP アドレスの割り当て元となる新規サブネット内の IP アドレス範囲の終了アドレスを示す IP アドレスに置き換えます。
  4. ネットワークとサブネットをルーターに接続して、メタデータ要求が OpenStack Networking サービスによって応答されるようにします。

    # neutron router-create ROUTER_NAME

    ROUTER_NAME はルーターの名前に置き換えます。

  5. ベアメタルのサブネットにこのルーターをインターフェースとして追加します。

    # neutron router-interface-add ROUTER_NAME BAREMETAL_SUBNET

    ROUTER_NAME は、ルーターの名前に、BAREMETAL_SUBNET は以前に作成した ID またはサブネット名に置き換えます。これにより、cloud-init からのメタデータ要求に応答することができます。

  6. Bare Metal Provisioning サービスを実行するコンピュートノード上の /etc/ironic/ironic.conf ファイルを更新して、クリーニングサービスに同じネットワークを使用するようにします。Bare Metal Provisioning を実行しているコンピュートノードにログインして、以下のコマンドを root ユーザーとして実行します。

    # openstack-config --set /etc/ironic/ironic.conf neutron cleaning_network_uuid NETWORK_UUID

    NETWORK_UUID は、前のステップで作成したベアメタルプロビジョニングネットワークの ID に置き換えます。

  7. Bare Metal Provisioning サービスを再起動します。

    # systemctl restart openstack-ironic-conductor.service

2.1.2. Bare Metal Provisioning フレーバーの作成

デプロイメントの一部として使用するフレーバーを作成する必要があります。このフレーバーの仕様 (メモリー、CPU、ディスク) はベアメタルノードが提供する仕様以下である必要があります。

  1. 既存のフレーバーを一覧表示します。

    # openstack flavor list
  2. Bare Metal Provisioning サービス向けに新規フレーバーを作成します。

    # openstack flavor create --id auto --ram RAM --vcpus VCPU --disk DISK --public baremetal

    RAM は RAM のメモリーに、VCPU は仮想 CPU 数に、DISK はディスクストレージの値に置き換えます。

  3. フレーバーがローカルディスクから起動するように設定します。設定しない場合には、デフォルトで netboot メソッドが使用されます。

    # openstack flavor set --property capabilities:boot_option='local' baremetal
  4. 指定したそれぞれの値を使用して新規フレーバーが作成されたことを確認します。

    # openstack flavor list

2.1.3. ベアメタルイメージの作成

Bare Metal Provisioning のデプロイメントには、deploy イメージと user イメージの 2 セットのイメージが必要です。deploy は、ノードを起動して、Bare Metal Provisioning ノードに user イメージを コピーすることを唯一の目的とする基本的なイメージで、deploy イメージが Image サービスにアップロードされた後には、Bare Metal Provisioning ノードを更新して、deploy イメージをブートイメージとして使用するように設定することができます。deploy イメージ、アンダークラウドによってオーバークラウドがデプロイされた際にすでに使用されているので作成する必要はありませんdeploy イメージは、以下のように kernelramdisk の 2 つの部分に分けることができます。

ironic-python-agent.kernel
ironic-python-agent.initramfs

これらのイメージは、削除していなければ、~/stack/images ディレクトリーにあるはずです。見つからない場合には、rhosp-director-images-ips パッケージがインストールされているので、これらのイメージは /usr/share/rhosp-director-images/ironic-python-agent*.el7ost.tar ファイル内にあります。

イメージを抽出して Image サービスにロードします。

# openstack image create --container-format aki --disk-format aki --public --file ./ironic-python-agent.kernel bm-deploy-kernel
# openstack image create --container-format ari --disk-format ari --public --file ./ironic-python-agent.initramfs bm-deploy-ramdisk

最終的に必要なイメージは、Bare Metal Provisioning ノードに実際にデプロイされるイメージです。たとえば、cloud-init がすでにあるので、Red Hat Enterprise Linux KVM イメージをダウンロードすることができます。

Image サービスへのイメージのアップロード

# openstack image create --container-format bare --disk-format qcow2 --public --file ./IMAGE_FILE rhel

2.1.4. Bare Metal Provisioning サービスへの Bare Metal Provisioning ノードの追加

Bare Metal Provisioning ノードを Bare Metal Provisioning サービスに追加するには、クラウドをインスタンス化するのに使用された instackenv.json ファイルのセクションをコピーして、必要に応じて変更します。

  1. overcloudrc ファイルを読み込んで、.json ファイルをインポートします。

    # source ~stack/overcloudrc
    # openstack baremetal import --json ./baremetal.json
  2. Bare Metal Provisioning サービス内のベアメタルノードの driver_info セクションの deploy_kerneldeploy_ramdisk を指定して、そのノードが初期ブートイメージとしてデプロイ済みのイメージを使用するように設定します。

    # ironic node-update NODE_UUID add driver_info/deploy_kernel=DEPLOY_KERNEL_ID driver_info/deploy_ramdisk=DEPLOY_RAMDISK_ID

NODE_UUID は、ベアメタルノードの UUID に置き換えます。この値は、director ノードで ironic node-list コマンドを実行すると取得することができます。DEPLOY_KERNEL_ID は deploy kernel イメージの ID に置き換えます。この値は、director ノード上で glance image-list コマンドを実行すると取得することができます。DEPLOY_RAMDISK_ID は deploy ramdisk イメージの ID に置き換えます。この値は、director ノード上で glance image-list コマンドを実行すると取得することができます。

2.1.5. Bare Metal Provisioning ノードのデプロイ

nova boot コマンドを使用して Bare Metal Provisioning ノードをデプロイします。

# nova  boot --image BAREMETAL_USER_IMAGE --flavor BAREMETAL_FLAVOR --nic net-id=IRONIC_NETWORK_ID --key default MACHINE_HOSTNAME

BAREMETAL_USER_IMAGE は Image サービスにアップロードされたイメージに、BAREMETAL_FLAVOR はそのベアメタルデプロイメント用のフレーバーに、IRONIC_NETWORK_ID は OpenStack Networking 内のベアメタルプロビジョニングネットワークの ID に、MACHINE_HOSTNAME はデプロイ後のマシンのホスト名に置き換えます。

2.2. ハードウェアイントロスペクションの設定

ハードウェアイントロスペクションにより、Bare Metal Provisioning はノード上のハードウェア情報を検出することができます。イントロスペクションは、検出したイーサネットの MAC アドレスも作成します。または、各ノードにハードウェア情報を手動で追加することが可能です。詳しくは、「手動によるノードの追加」を参照してください。以下の手順に記載するステップはすべて、Bare Metal Provisioning コンダクターサービスをホストするサーバーで root ユーザーとしてログインして実行する必要があります。

ハードウェアイントロスペクションは、以下のドライバーを使用するインバンドでサポートされます。

  • pxe_drac
  • pxe_ipmitool
  • pxe_ssh

ハードウェアイントロスペクションの設定

  1. PXE ブートを使用したベアメタルシステムの検出に使用する Ironic Python Agent の kernel と ramdisk のイメージを取得します。これらのイメージは、https://access.redhat.com/downloads/content/191/ver=8/rhel---7/8/x86_64/product-softwareIronic Python Agent Image for RHOSP director 8.0 というラベルの付いた TAR アーカイブで提供されています。この TAR アーカイブをダウンロードして、そこからイメージファイル (ironic-python-agent.kernel および ironic-python-agent.initramfs) を抽出してから、それらを TFTP サーバーの /tftpboot ディレクトリーにコピーしてください。
  2. ハードウェアイントロスペクションをホストするサーバーで Red Hat OpenStack Platform 9 director for RHEL 7 (RPMs) チャンネルを有効にします。

    # subscription-manager repos --enable=rhel-7-server-openstack-8-director-rpms
  3. openstack-ironic-inspector パッケージをインストールします。

    # yum install openstack-ironic-inspector
  4. ironic.conf ファイルでイントロスペクションを有効にします。

    # openstack-config --set /etc/ironic/ironic.conf \
       inspector enabled True
  5. ハードウェアイントロスペクションサービスを別のサーバーでホストする場合には、コンダクターサービスをホストするサーバーでその URL を設定します。

    # openstack-config --set /etc/ironic/ironic.conf \
       inspector service_url http://INSPECTOR_IP:5050

    INSPECTOR_IP はハードウェアイントロスペクションをホストするサーバーのホスト名または IP アドレスに置き換えます。

  6. ハードウェアイントロスペクションサービスに認証情報を提供します。

    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken identity_uri http://IDENTITY_IP:35357
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken auth_uri http://IDENTITY_IP:5000/v2.0
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken admin_user ironic
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken admin_password PASSWORD
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       keystone_authtoken admin_tenant_name services
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       ironic os_auth_url http://IDENTITY_IP:5000/v2.0
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       ironic os_username ironic
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       ironic os_password PASSWORD
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       ironic os_tenant_name service
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       firewall dnsmasq_interface br-ironic
    # openstack-config --set /etc/ironic-inspector/inspector.conf \
       database connection sqlite:////var/lib/ironic-inspector/inspector.sqlite

    以下の値を置き換えてください。

    • IDENTITY_IP は Identity サーバーの IP アドレスまたはホスト名に置き換えます。
    • PASSWORD は、Bare Metal Provisioning が Identity との認証で使用するパスワードに置き換えます。
  7. オプションで、ハードウェアイントロスペクションが RAM ディスクのログを保管するように設定します。

    # openstack-config --set /etc/ironic-inspector/inspector.conf \
    processing ramdisk_logs_dir /var/log/ironic-inspector/ramdisk
  8. オプションで、複数のローカルディスクを使用するベアメタルマシンでブロックデバイスを収集してルートデバイスを公開する追加のデータ処理プラグインを有効にします。ramdisk_errorroot_disk_selectionschedulervalidate_interfaces はデフォルトで有効化され、無効にすべきではありません。以下のコマンドを実行して、root_device_hint を一覧に追加します。

    # openstack-config --set /etc/ironic-inspector/inspector.conf \
    processing processing_hooks '$default_processing_hooks,root_device_hint'
  9. 初期 ironic inspector データベースを生成します。

    # ironic-inspector-dbsync --config-file /etc/ironic-inspector/inspector.conf upgrade
  10. inspector データベースファイルを更新して、ironic-inspector が所有するようにします。

    # chown ironic-inspector /var/lib/ironic-inspector/inspector.sqlite
  11. テキストエディターで /etc/ironic-inspector/dnsmasq.conf ファイルを開き、以下に示す PXE ブート設定を openstack-ironic-inspector-dnsmasq サービスに設定します。

    port=0
    interface=br-ironic
    bind-interfaces
    dhcp-range=START_IP,END_IP
    enable-tftp
    tftp-root=/tftpboot
    dhcp-boot=pxelinux.0

    以下の値を置き換えてください。

    • INTERFACE はプロビジョニングネットワークインターフェースの名前に置き換えます。
    • START_IP は、Floating IP アドレスを割り当てる元となる IP アドレス範囲の開始アドレスを示す IP アドレスに置き換えます。
    • END_IP は、Floating IP アドレスを割り当てる元となる IP アドレス範囲の終了アドレスを示す IP アドレスに置き換えます。
  12. syslinux bootloadertftp ディレクトリーにコピーします。

    # cp /usr/share/syslinux/pxelinux.0 /tftpboot/pxelinux.0
  13. オプションとして、swift section of the /etc/ironic-inspector/inspector.conf ファイルの swift セクションに、メタデータを保管するためのハードウェアイントロスペクションサービスを設定することができます。

    [swift]
    username = ironic
    password = PASSWORD
    tenant_name = service
    os_auth_url = http://IDENTITY_IP:5000/v2.0

    以下の値を置き換えてください。

    • IDENTITY_IP は Identity サーバーの IP アドレスまたはホスト名に置き換えます。
    • PASSWORD は、Bare Metal Provisioning が Identity との認証で使用するパスワードに置き換えます。
  14. テキストエディターで /tftpboot/pxelinux.cfg/default ファイルを開き、以下のオプションを設定します。

    default discover
    
    label discover
    kernel ironic-python-agent.kernel
    append initrd=ironic-python-agent.initramfs \
    ipa-inspection-callback-url=http://INSPECTOR_IP:5050/v1/continue
    ipa-api-url=http://IRONIC_API_IP:6385
    
    ipappend 3

    INSPECTOR_IP はハードウェアイントロスペクションをホストするサーバーのホスト名または IP アドレスに置き換えます。上記のブロックに \ で示したように、append から /continue までのテキストは、一行に記載する必要がある点に注意してください。

  15. /tftpboot/ ディレクトリーおよびそのファイルのセキュリティーコンテキストをリセットします。

    # restorecon -R /tftpboot/

    このステップでは、ディレクトリーに正しい SELinux セキュリティーラベルが設定され、dnsmasq サービスがディレクトリーにアクセスできることを確認します。

  16. ハードウェアイントロスペクションサービスと dnsmasq サービスを起動して、ブート時に開始するように設定します。

    # systemctl start openstack-ironic-inspector.service
    # systemctl enable openstack-ironic-inspector.service
    # systemctl start openstack-ironic-inspector-dnsmasq.service
    # systemctl enable openstack-ironic-inspector-dnsmasq.service

    ハードウェアイントロスペクションは、Bare Metal Provisioning に登録された後に、ノードで使用することができます。

2.3. ベアメタルノードとしての物理マシンの追加

インスタンスをプロビジョニングする物理マシンをノードとして追加し、Compute に対して利用可能なハードウェアが表示されることを確認します。Compute のリソーストラッカーは一定の時間間隔で同期するので、新規リソースは Compute に即時には通知されません。変更は次の定期タスクが実行された後に表示されるようになります。この値 (scheduler_driver_task_period) は、/etc/nova/nova.conf で更新することができます。デフォルトの間隔は 60 秒です。

システムがベアメタルノードとして登録されると、ハードウェアの詳細は、ハードウェアイントロスペクションを使用して検出するか、手動で追加することができます。

2.3.1. ハードウェアイントロスペクションを使用したノードの追加

物理マシンをベアメタルノードとして登録してから、openstack-ironic-inspector を使用してノードのハードウェア情報を検出し、各イーサネット MAC アドレス用にポートを作成します。以下の手順に記載するステップはすべて、Bare Metal Provisioning コンダクターサービスをホストするサーバーに root ユーザーとしてログインして実行する必要があります。

ハードウェアイントロスペクションを使用してノードを追加する方法

  1. Identity を管理ユーザーとして使用するためのシェルを設定します。

    # source ~/keystonerc_admin
  2. 新規ノードを追加します。

    # ironic node-create -d DRIVER_NAME

    DRIVER_NAME は、Bare Metal Provisioning がこのノードのプロビジョニングに使用するドライバーの名前に置き換えます。このドライバーは、/etc/ironic/ironic.conf ファイルで有効にしておく必要があります。ノードを作成するには、少なくともドライバーの名前を指定する必要があります。

    重要

    ノードの一意識別子を書き留めておきます。

  3. ノードは論理名または UUID で参照することができます。オプションで、ノードに論理名を割り当てます。

    # ironic node-update NODE_UUID add name=NAME

    NODE_UUID は、ノードの一意識別子に置き換えます。NAME は、ノードの論理名に置き換えます。

  4. ドライバーが必要とするノードの情報を確認してから、Bare Metal Provisioning がノードを管理するようにノードドライバーの情報を更新します。

    # ironic driver-properties DRIVER_NAME
    # ironic node-update NODE_UUID add \
       driver_info/PROPERTY=VALUE \
       driver_info/PROPERTY=VALUE

    以下の値を置き換えてください。

    • DRIVER_NAME は、プロパティーを表示するドライバーの名前に置き換えます。この情報は、/etc/ironic/ironic.conf ファイルでドライバーを有効にしていなければ返されません。
    • NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。
    • PROPERTY は、ironic driver-properties コマンドで返された必要なプロパティーに置き換えます。
    • VALUE は、プロパティーの有効な値に置き換えます。
  5. ノードドライバーのデプロイカーネルとデプロイ RAM ディスクを指定します。

    # ironic node-update NODE_UUID add \
      driver_info/deploy_kernel=KERNEL_UUID \
      driver_info/deploy_ramdisk=INITRAMFS_UUID

    以下の値を置き換えてください。

    • NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。
    • KERNEL_UUID は、Image サービスにアップロードされた .kernel イメージの一意識別子に置き換えます。
    • INITRAMFS_UUID は、Image サービスにアップロードされた .initramfs イメージの一意識別子に置き換えます。
  6. ノードを設定して、初回のデプロイの後には、PXE や仮想メディアの代わりに、そのノードのディスクにインストールされたローカルのブートローダーからリブートするようにします。ノードのプロビジョニングに使用するフレーバーでも、ローカルブートの機能を設定する必要があります。ローカルブートを有効にするには、ノードのデプロイに使用するイメージに grub2 が含まれる必要があります。ローカルブートを以下のように設定します。

    # ironic node-update NODE_UUID add \
       properties/capabilities="boot_option:local"

    NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。

  7. ベアメタルノードを manageable 状態に切り替えます。

    # ironic node-set-provision-state NODE_UUID manage

    NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。

  8. イントロスペクションを開始します。

    # openstack baremetal introspection start NODE_UUID --discoverd-url http://overcloud IP:5050
    • NODE_UUID はノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。ノードをプロビジョニングする前に、ノードの検出およびイントロスペクションプロセスは完了するまで実行する必要があります。ノードのイントロスペクションのステータスを確認するには、ironic node-list を実行して Provision State の箇所を探します。イントロスペクションが正常に完了すると、ノードは available の状態になります。
    • overcloud IPironic.conf で以前設定した service_url の値に置き換えます。
  9. ノードの設定を検証します。

    # ironic node-validate NODE_UUID
    +------------+--------+----------------------------+
    | Interface  | Result | Reason                     |
    +------------+--------+----------------------------+
    | console    | None   | not supported              |
    | deploy     | True   |                            |
    | inspect    | True   |                            |
    | management | True   |                            |
    | power      | True   |                            |
    +------------+--------+----------------------------+

    NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。上記のコマンドの出力には、各インターフェースが True または None のいずれかと報告されるはずです。None とマークされたインターフェースは、設定していないか、ドライバーがサポートしていないインターフェースです。

2.3.2. 手動によるノードの追加

物理マシンをベアメタルノードとして登録してから、ノードのハードウェア情報を追加し、各イーサネット MAC アドレス用にポートを作成します。以下の手順に記載するステップはすべて、Bare Metal Provisioning コンダクターサービスをホストするサーバーに root ユーザーとしてログインして実行する必要があります。

ハードウェアイントロスペクションを使用せずにノードを追加する方法

  1. Identity を管理ユーザーとして使用するためのシェルを設定します。

    # source ~/keystonerc_admin
  2. 新規ノードを追加します。

    # ironic node-create -d DRIVER_NAME

    DRIVER_NAME は、Bare Metal Provisioning がこのノードのプロビジョニングに使用するドライバーの名前に置き換えます。このドライバーは、/etc/ironic/ironic.conf ファイルで有効にしておく必要があります。ノードを作成するには、少なくともドライバーの名前を指定する必要があります。

    重要

    ノードの一意識別子を書き留めておきます。

  3. ノードは論理名または UUID で参照することができます。オプションで、ノードに論理名を割り当てます。

    # ironic node-update NODE_UUID add name=NAME

    NODE_UUID は、ノードの一意識別子に置き換えます。NAME は、ノードの論理名に置き換えます。

  4. ドライバーが必要とするノードの情報を確認してから、Bare Metal Provisioning がノードを管理するようにノードドライバーの情報を更新します。

    # ironic driver-properties DRIVER_NAME
    # ironic node-update NODE_UUID add \
       driver_info/PROPERTY=VALUE \
       driver_info/PROPERTY=VALUE

    以下の値を置き換えてください。

    • DRIVER_NAME は、プロパティーを表示するドライバーの名前に置き換えます。この情報は、/etc/ironic/ironic.conf ファイルでドライバーを有効にしていなければ返されません。
    • NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。
    • PROPERTY は、ironic driver-properties コマンドで返された必要なプロパティーに置き換えます。
    • VALUE は、プロパティーの有効な値に置き換えます。
  5. ノードドライバーのデプロイカーネルとデプロイ RAM ディスクを指定します。

    # ironic node-update NODE_UUID add \
      driver_info/deploy_kernel=KERNEL_UUID \
      driver_info/deploy_ramdisk=INITRAMFS_UUID

    以下の値を置き換えてください。

    • NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。
    • KERNEL_UUID は、Image サービスにアップロードされた .kernel イメージの一意識別子に置き換えます。
    • INITRAMFS_UUID は、Image サービスにアップロードされた .initramfs イメージの一意識別子に置き換えます。
  6. ノードのプロパティーを更新して、ノード上のハードウェアの仕様と一致するようにします。

    # ironic node-update NODE_UUID add \
       properties/cpus=CPU \
       properties/memory_mb=RAM_MB \
       properties/local_gb=DISK_GB \
       properties/cpu_arch=ARCH

    以下の値を置き換えてください。

    • NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。
    • CPU は、使用する CPU 数に置き換えます。
    • RAM_MB は、使用するメモリー (MB 単位) に置き換えます。
    • DISK_GB は、使用するディスクサイズ (GB 単位) に置き換えます。
    • ARCH は使用するアーキテクチャーのタイプに置き換えます。
  7. ノードを設定して、初回のデプロイの後には、PXE や仮想メディアの代わりに、そのノードのディスクにインストールされたローカルのブートローダーからリブートするようにします。ノードのプロビジョニングに使用するフレーバーでも、ローカルブートの機能を設定する必要があります。ローカルブートを有効にするには、ノードのデプロイに使用するイメージに grub2 が含まれる必要があります。ローカルブートを以下のように設定します。

    # ironic node-update NODE_UUID add \
       properties/capabilities="boot_option:local"

    NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。

  8. Bare Metal Provisioning にノードのネットワークインターフェースカードの情報を提供します。各 NIC の MAC アドレスでポートを作成します。

    # ironic port-create -n NODE_UUID -a MAC_ADDRESS

    NODE_UUID は、ノードの一意識別子に置き換えます。MAC_ADDRESS は、ノード上の NIC の MAC アドレスに置き換えます。

  9. ノードの設定を検証します。

    # ironic node-validate NODE_UUID
    +------------+--------+----------------------------+
    | Interface  | Result | Reason                     |
    +------------+--------+----------------------------+
    | console    | None   | not supported              |
    | deploy     | True   |                            |
    | inspect    | None   | not supported              |
    | management | True   |                            |
    | power      | True   |                            |
    +------------+--------+----------------------------+

    NODE_UUID は、ノードの一意識別子に置き換えます。もしくは、ノードの論理名を使用します。上記のコマンドの出力には、各インターフェースが True または None のいずれかと報告されるはずです。None とマークされたインターフェースは、設定していないか、ドライバーがサポートしていないインターフェースです。

2.4. ホストアグリゲートを使用した物理/仮想マシンのプロビジョニングの分離

ホストアグリゲートは、OpenStack Compute がアベイラビリティーゾーンを分割して、共通する特定のプロパティーでノードをグループ化するのに使用します。キーと値のペアは、ホストアグリゲートとインスタンスのフレーバーの両方で設定され、これらのプロパティーを定義します。インスタンスのプロビジョニング時には、Compute のスケジューラーがフレーバー上のキーと値のペアをホストアグリゲートに割り当てられたキーと値のペアと比較し、物理マシン上または openstack-nova-compute ノード上の仮想マシンとして、インスタンスが正しいアグリゲート内かつ正しいホスト上にプロビジョニングされるようにします。

Red Hat OpenStack Platform 環境がベアメタルマシンと仮想マシンの両方をプロビジョニングするように設定されている場合には、ホストアグリゲートを使用してインスタンスが物理マシンまたは仮想マシンとして起動するように指示します。 以下の手順では、ベアメタルホスト用のホストアグリゲートを作成し、ホストの種別を baremetal に指定してキーと値のペアを追加します。このアグリゲートに分類されたベアメタルノードはいずれも、このキーと値のペアを継承します。同じキーと値のペアは、その後にインスタンスのプロビジョニングに使用されるフレーバーに追加されます。

ベアメタルのプロビジョニングに使用するイメージ (1 つまたは複数) が hypervisor_type=ironic プロパティーを設定して Image サービスにアップロードされた場合には、スケジューラーもスケジューリングの決定でそのキーと値のペアを使用します。イメージのプロパティーが適用されなかった場合に有効なスケジューリングを行うようにするには、イメージプロパティーの設定に加えて、ホストアグリゲートを追加で設定します。イメージのビルド/アップロードについての詳しい情報は、「ベアメタルイメージの作成」を参照してください。

Bare Metal Provisioning 向けのホストアグリゲートの作成

  1. デフォルトの nova アベイラビリティーゾーンで baremetal 用のホストアグリゲートを作成します。

    # nova aggregate-create baremetal nova
  2. アグリゲートに追加されたホストに hypervisor_type=ironic プロパティーを割り当てる baremetal アグリゲート上のメタデータを設定します。

    # nova aggregate-set-metadata baremetal hypervisor_type=ironic
  3. openstack-nova-compute ノードを Bare Metal Provisioning ドライバーとともに baremetal アグリゲートに追加します。

    # nova aggregate-add-host baremetal COMPUTE_HOSTNAME

    COMPUTE_HOSTNAME は、openstack-nova-compute サービスをホストするシステムのホスト名に置き換えます。Bare Metal Provisioning の全要求を処理するには、専用のコンピュートホストを 1 台使用するべきです。

  4. プロビジョニング用に作成したフレーバー (1 つまたは複数) に ironic のハイパーバイザーのプロパティーを追加します。

    # nova flavor-key FLAVOR_NAME set hypervisor_type="ironic"

    FLAVOR_NAME はフレーバー名に置き換えます。

  5. /etc/nova/nova.confscheduler_default_filters の下にある既存の一覧に以下の Compute フィルタースケジューラーを追加します。

    AggregateInstanceExtraSpecsFilter

    このフィルターは、ホストアグリゲートに割り当てられたキーと値のペアを Compute のスケジューラーが確実に処理するようにします。

2.5. SSH と virsh を使用した Bare Metal Provisioning のテスト例

単一の物理ホストで、ベアメタルノードとして機能する 2 つの仮想マシン上にインスタンスをデプロイして、Bare Metal Provisioning の設定をテストします。両仮想マシンは libvirtvirsh を使用して仮想化されます。

重要

この SSH ドライバーは、検証および評価のみを目的としており、Red Hat OpenStack Platform のエンタープライズ環境には推奨されません。

このシナリオには以下のリソースが必要です。

  • Bare Metal Provisioning をオーバークラウドノード上に設定した Red Hat OpenStack Platform 環境を 1 つ。本ガイドの全ステップを完了しておく必要があります。
  • Red Hat Enterprise Linux 7.2 と libvirt 仮想化ツールをインストール済みのベアメタルマシンを 1 つ。このシステムは、仮想ベアメタルノードが属するホストとして機能します。
  • Bare Metal Provisioning ノードと、仮想ベアメタルノードが属するホストとの間のネットワーク接続を 1 つ。このネットワークはベアメタルプロビジョニングネットワークとして機能します。

2.5.1. 仮想ベアメタルノードの作成

テストシナリオでベアメタルノードとして機能する仮想マシンを 2 つ作成します。 ノードは Node1 および Node2 と呼びます。

仮想ベアメタルノードの作成

  1. libvirt ホストから仮想マシンマネージャーにアクセスします。
  2. 以下の設定で仮想マシンを 2 つ作成します。

    • 1 x 仮想 CPU
    • 2048 MB のメモリー
    • ネットワークブート (PXE)
    • 20 GB のストレージ
    • ネットワークソース: ホストデバイス eth0: macvtapソースモード: Bridge。macvtap を選択すると、仮想マシンはホストのイーサネットネットワークインターフェースを共有します。このように設定すると、Bare Metal Provisioning ノードは仮想ノードに直接アクセスすることが可能となります。
  3. 両仮想マシンをシャットダウンします。

2.5.2. SSH キーペアの作成

Bare Metal Provisioning ノードが libvirt ホストに接続できるようにする SSH キーペアを作成します。

SSH キーペアの作成

  1. Bare Metal Provisioning ノードで、SSH キーを作成します。

    # ssh-keygen -t rsa -b 2048 -C "user@domain.com" -f ./virtkey

    user@domain.com は、このキーを特定するメールアドレスまたはその他のコメントに置き換えます。コマンドがパスフレーズの入力を要求したら、パスフレーズは入力せずに Enter を押して次に進みます。このコマンドにより、秘密鍵 (virtkey) と公開鍵 (virtkey.pub) の 2 つのファイルが作成されます。

  2. 公開鍵の内容を libvirt ホストの root ユーザーの /root/.ssh/authorized_keys ファイルにコピーします。

    # ssh-copy-id -i virtkey root@LIBVIRT_HOST

    LIBVIRT_HOSTlibvirt ホストの IP アドレスまたはホスト名に置き換えます。

秘密鍵 (virtkey) は、ノードの登録時に使用されます。

2.5.3. ベアメタルノードとしての仮想ノードの追加

インスタンスをプロビジョニングする仮想マシンをノードとして追加します。以下の例では、ドライバーの詳細は手動で指定し、ノードの詳細はハードウェアイントロスペクションを使用して検出します。ノードの詳細は、ノード別に手動で追加することも可能です。詳しくは、「手動によるノードの追加」を参照してください。

仮想ノードをベアメタルノードとして追加する手順

  1. Bare Metal Provisioning コンダクターサービスノードで、pxe_ssh ドライバーを有効にします。

    # openstack-config --set /etc/ironic/ironic.conf \
       DEFAULT enabled_drivers pxe_ssh

    pxe_ssh を既存のドライバーの一覧に追加する場合には、ファイルを開いて、enabled_drivers に記載されているリストにドライバーをコンマ区切りで追加します。

  2. Identity を管理ユーザーとして使用するためのシェルを設定します。

    # source ~/keystonerc_admin
  3. 最初のノードを追加して、libvirt ホストの SSH 情報を登録します。

    # ironic node-create -d pxe_ssh -n Node1 \
       -i ssh_virt_type=virsh \
       -i ssh_username=root \
       -i ssh_key_filename=VIRTKEY_FILE_PATH \
       -i ssh_address=LIBVIRT_HOST_IP \
       -i deploy_kernel=KERNEL_UUID \
       -i deploy_ramdisk=INITRAMFS_UUID

    以下の値を置き換えてください。

    • VIRTKEY_FILE_PATHvirtkey SSH 秘密鍵ファイルの絶対パスに置き換えます。
    • LIBVIRT_HOST_IP は、libvirt ホストの IP アドレスまたはホスト名に置き換えます。
    • KERNEL_UUID は、Image サービスにアップロードされた .kernel イメージの一意識別子に置き換えます。
    • INITRAMFS_UUID は、Image サービスにアップロードされた .initramfs イメージの一意識別子に置き換えます。
  4. 上記と同じコマンドで、 Node1Node2 に置き換えて実行し、2 番目のノードを追加します。
  5. ノードを設定して、初回のデプロイの後には、PXE や仮想メディアの代わりに、そのノードのディスクにインストールされたローカルのブートローダーからリブートするようにします。ノードのプロビジョニングに使用するフレーバーでも、ローカルブートの機能を設定しておく必要があります。ローカルブートを有効にするには、ノードのデプロイに使用するイメージに grub2 が含まれる必要があります。ローカルブートを以下のように設定します。

    # ironic node-update Node1 add \
       properties/capabilities="boot_option:local"
    # ironic node-update Node2 add \
       properties/capabilities="boot_option:local"
  6. ノードを管理可能な状態に切り替えます。

    # ironic node-set-provision-state Node1 manage
    # ironic node-set-provision-state Node2 manage
  7. ノードに対するイントロスペクションを開始します。

    # ironic node-set-provision-state Node1 inspect
    # ironic node-set-provision-state Node2 inspect

    ノードをプロビジョニングする前に、ノードの検出およびイントロスペクションプロセスは完了するまで実行する必要があります。ノードのイントロスペクションのステータスを確認するには、ironic node-list を実行して Provision State の箇所を探します。イントロスペクションが正常に完了すると、ノードは available の状態になります。

  8. ノードの設定を検証します。

    # ironic node-validate Node1
    # ironic node-validate Node2
    +------------+--------+----------------------------+
    | Interface  | Result | Reason                     |
    +------------+--------+----------------------------+
    | console    | None   | not supported              |
    | deploy     | True   |                            |
    | inspect    | True   |                            |
    | management | True   |                            |
    | power      | True   |                            |
    +------------+--------+----------------------------+

    上記のコマンドの出力には、各インターフェースが True または None と報告されるはずです。None とマークされたインターフェースは、設定していないか、ドライバーがサポートしていないインターフェースです。

  9. ノードの追加が正常に完了したら、「3章ベアメタルインスタンスの起動」の手順に従って 2 つのノードを起動します。