Menu Close

16.3. コンピュートノードの削除

オーバークラウドからコンピュートノードを削除する必要がある状況が出てくる可能性があります。たとえば、問題のあるコンピュートノードを置き換える必要がある場合などです。

重要

オーバークラウドからコンピュートノードを削除する前に、負荷をそのノードから別のコンピュートノードに移行してください。詳しくは、「 コンピュートノード間の仮想マシンインスタンスの移行 」を参照してください。

前提条件

  • Placement サービスにクエリーを行うには、アンダークラウドに python3-osc-placement パッケージをインストールします。
  • インスタンス HA が有効な場合は、以下のオプションのいずれかを選択します。

    • コンピュートノードにアクセスできる場合は、root ユーザーとしてコンピュートノードにログインし、shutdown -h now コマンドでクリーンシャットダウンを実行します
    • コンピュートノードにアクセスできない場合には、root ユーザーとしてコントローラーノードにログインし、コンピュートノードの STONITH デバイスを無効にしてベアメタルノードをシャットダウンします。

      [root@controller-0 ~]# pcs stonith disable <stonith_resource_name>
      [stack@undercloud ~]$ source stackrc
      [stack@undercloud ~]$ openstack baremetal node power off <UUID>

手順

  1. source コマンドでオーバークラウド設定を読み込みます。

    $ source ~/overcloudrc
  2. オーバークラウド上で削除するノードの Compute サービスを無効にし、ノードで新規インスタンスがスケジューリングされないようにします。

    (overcloud)$ openstack compute service list
    (overcloud)$ openstack compute service set <hostname> nova-compute --disable
    ヒント

    --disable-reason オプションを使用して、サービスを無効にする理由についての簡単な説明を追加します。これは、Compute サービスを後で再デプロイする場合に役立ちます。

  3. source コマンドでアンダークラウド設定を読み込みます。

    (overcloud)$ source ~/stackrc
  4. オーバークラウドスタックの UUID を特定します。

    (undercloud)$ openstack stack list
  5. 削除するノードの UUID またはホスト名を特定します。

    (undercloud)$ openstack server list
  6. (オプション) --update-plan-only オプションを指定して overcloud deploy コマンドを実行し、テンプレートからの最新の設定でプランを更新します。これにより、コンピュートノードを削除する前に、オーバークラウドの設定が最新の状態になります。

    $ openstack overcloud deploy --update-plan-only \
      --templates  \
      -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
      -e /home/stack/templates/network-environment.yaml \
      -e /home/stack/templates/storage-environment.yaml \
      -e /home/stack/templates/rhel-registration/environment-rhel-registration.yaml \
      [-e |...]
    注記

    オーバークラウドノードのブラックリストを更新した場合は、このステップが必要です。オーバークラウドノードのブラックリスト登録の詳細については、「ノードのブラックリスト登録」を参照してください。

  7. スタックからコンピュートノードを削除します。

    $ openstack overcloud node delete --stack <overcloud> \
     <node_1> ... [node_n]
    • <overcloud> を、オーバークラウドスタックの名前または UUID に置き換えてください。
    • <node1> (およびオプションとして [node_n] までのすべてのノード) を、削除するコンピュートノードの Compute サービスのホスト名または UUID に置き換えます。UUID とホスト名を混在させて使用しないでください。UUID だけ、またはホスト名だけを使用します。

      注記

      ノードの電源がオフになっていると、以下のコマンドは WARNING メッセージを返します。

      Ansible failed, check log at /var/lib/mistral/overcloud/ansible.log
      WARNING: Scale-down configuration error. Manual cleanup of some actions may be necessary. Continuing with node removal.

      このメッセージは無視しても問題ありません。

  8. openstack overcloud node delete コマンドが完全に終了したことを確認します。

    (undercloud)$ openstack stack list

    削除の操作が完了すると、オーバークラウド スタックのステータスは UPDATE_COMPLETE と表示されます。

    1. 削除するノードの IPMI インターフェースに到達できない場合には、openstack overcloud node delete コマンドが失敗し、スタックは UPDATE_FAILED のステータスになります。ノードをメンテナンスモードに切り替え、openstack overcloud node delete コマンドを再実行します。

      $ openstack baremetal node maintenance set <NODE_ID>
    2. コンピュートの数を変更し、既存のオーバークラウドのデプロイに使用した openstack overcloud deploy コマンドを再度実行します。

      重要

      同じホスト名を使用して Compute サービスを再デプロイする場合は、再デプロイするノードに既存のサービスレコードを使用する必要があります。その場合は、この手順の残りのステップを省略して、「同じホスト名を使用した Compute サービスの再デプロイ」の手順に進んでください。

  9. オーバークラウド環境のネットワークエージェントを確認します。

    (overcloud)$ openstack network agent list
  10. 古いノードにエージェントが表示される場合には、そのエージェントを削除します。

    (overcloud)$ for AGENT in $(openstack network agent list --host <scaled_down_node> -c ID -f value) ; do openstack network agent delete $AGENT ; done

    <scaled_down_node> を、削除するノードの名前に置き換えます。

    注記

    ML2/OVN デプロイメントでは、OVN コントローラーおよびメタデータエージェントが削除されないという既知の問題があります。これらの問題に関する進捗を把握するには、BZ1828889 および BZ1738554 を参照してください。

  11. ノード数が含まれる環境ファイルの ComputeCount パラメーターを減らします。このファイルは、通常 node-info.yaml という名前です。たとえば、ノードを 2 つ削除する場合、ノード数を 5 から 3 に減らします。

    parameter_defaults:
      ...
      ComputeCount: 3
      ...

    ノード数を減らすと、openstack overcloud deploy を実行しても director は新規ノードをプロビジョニングしません。

  12. インスタンス HA が有効な場合には、以下のアクションを実行します。

    1. ノードの Pacemaker リソースをクリーンアップします。

      $ sudo pcs resource delete <scaled_down_node>
      $ sudo cibadmin -o nodes --delete --xml-text '<node id="<scaled_down_node>"/>'
      $ sudo cibadmin -o fencing-topology --delete --xml-text '<fencing-level target="<scaled_down_node>"/>'
      $ sudo cibadmin -o status --delete --xml-text '<node_state id="<scaled_down_node>"/>'
      $ sudo cibadmin -o status --delete-all --xml-text '<node id="<scaled_down_node>"/>' --force
    2. ノードの STONITH デバイスを削除します。

      $ sudo pcs stonith delete <device-name>

オーバークラウドからノードを削除して、別の目的でそのノードを再度プロビジョニングすることができます。

同じホスト名を使用した Compute サービスの再デプロイ

無効にした Compute サービスを再デプロイするには、同じホスト名を持つコンピュートノードを再デプロイした後に、Compute サービスを再度有効にします。

手順

  1. 削除した Compute サービスを、Placement サービスのリソースプロバイダーから除外します。

    (undercloud)$ source ~/overcloudrc
    (overcloud)$ openstack resource provider list
    (overcloud)$ openstack resource provider delete <uuid>
    注記

    Placement サービスにクエリーを行うには、アンダークラウドに python3-osc-placement パッケージがインストールされている必要があります。

  2. Compute サービスのステータスを確認します。

    (overcloud)$ openstack compute service list --long
    ...
    | ID | Binary       | Host                  | Zone  | Status   | State | Updated At                 | Disabled Reason      |
    | 80 | nova-compute | compute-1.localdomain | nova  | disabled | up    | 2018-07-13T14:35:04.000000 | gets re-provisioned |
    ...
  3. 再デプロイしたコンピュートノードのサービスの状態が up に変わったら、サービスを再度有効にします。

    (overcloud)$ openstack compute service set compute-1.localdomain nova-compute --enable