10.2. director Operator を使用したオーバークラウドからの Compute ノードの削除

オーバークラウドからCompute ノードを削除するには、Compute ノードを無効にして削除のマークを付け、Compute OpenStackBaremetalSet リソースのノード数を減らす必要があります。

注記

同じロールの新しいノードを使用してオーバークラウドをスケーリングすると、ノードは最小の ID 接尾辞で始まるホスト名と対応する IP 予約を再利用します。

前提条件

手順

  1. openstackclient のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. 削除する Compute ノードを特定します。

    $ openstack compute service list
  3. ノード上の Compute サービスを無効にして、ノードが新しいインスタンスをスケジュールできないようにします。

    $ openstack compute service set <hostname> nova-compute --disable
  4. Metal 3 がノードを起動しないようにベアメタルノードにアノテーションを付けます。

    $ oc annotate baremetalhost <node> baremetalhost.metal3.io/detached=true
    $ oc logs --since=1h <metal3-pod> metal3-baremetal-operator | grep -i detach
    $ oc get baremetalhost <node> -o json | jq .status.operationalStatus
    "detached"
    • <node>BareMetalHost リソースの名前に置き換えます。
    • <metal3-pod>metal3 Pod の名前に置き換えます。
  5. root ユーザーとして Compute ノードにログインし、ベアメタルノードをシャットダウンします。

    [root@compute-0 ~]# shutdown -h now

    Compute ノードにアクセスできない場合は、次の手順を実行します。

    1. コントローラーノードに root ユーザーとしてログインします。
    2. インスタンス HA が有効になっている場合は、Compute ノードの STONITH デバイスを無効にします。

      [root@controller-0 ~]# pcs stonith disable <stonith_resource_name>
      • <stonith_resource_name> は、ノードに対応する STONITH リソースの名前に置き換えます。リソース名には <resource_agent>-<host_mac> 形式が使用されます。リソースエージェントおよびホストの MAC アドレスは、fencing.yaml ファイルの FencingConfig セクションに記載されています。
    3. IPMI を使用してベアメタルノードの電源をオフにします。詳細は、ハードウェアベンダーのドキュメントを参照してください。
  6. 削除するノードに対応する BareMetalHost リソースを取得します。

    $ oc get openstackbaremetalset compute -o json | jq '.status.baremetalHosts | to_entries[] | "\(.key) => \(.value | .hostRef)"'
    "compute-0, openshift-worker-3"
    "compute-1, openshift-worker-4"
  7. OpenStackBaremetalSet リソースの annotatedForDeletion パラメーターのステータスを true に変更するには、BareMetalHost リソースに osp-director.openstack.org/delete-host=true のアノテーションを付けます。

    $ oc annotate -n openshift-machine-api bmh/openshift-worker-3 osp-director.openstack.org/delete-host=true --overwrite
  8. オプション: OpenStackBaremetalSet リソースで annotatedForDeletion ステータスが true に変更されたことを確認します。

    $ oc get openstackbaremetalset compute -o json -n openstack | jq .status
    {
      "baremetalHosts": {
        "compute-0": {
          "annotatedForDeletion": true,
          "ctlplaneIP": "192.168.25.105/24",
          "hostRef": "openshift-worker-3",
          "hostname": "compute-0",
          "networkDataSecretName": "compute-cloudinit-networkdata-openshift-worker-3",
          "provisioningState": "provisioned",
          "userDataSecretName": "compute-cloudinit-userdata-openshift-worker-3"
        },
        "compute-1": {
          "annotatedForDeletion": false,
          "ctlplaneIP": "192.168.25.106/24",
          "hostRef": "openshift-worker-4",
          "hostname": "compute-1",
          "networkDataSecretName": "compute-cloudinit-networkdata-openshift-worker-4",
          "provisioningState": "provisioned",
          "userDataSecretName": "compute-cloudinit-userdata-openshift-worker-4"
        }
      },
      "provisioningStatus": {
        "readyCount": 2,
        "reason": "All requested BaremetalHosts have been provisioned",
        "state": "provisioned"
      }
    }
  9. compute OpenStackBaremetalSet リソースの count パラメーターを減らします。

    $ oc patch openstackbaremetalset compute --type=merge --patch '{"spec":{"count":1}}' -n openstack

    OpenStackBaremetalSet リソースのリソース数を減らすと、対応するコントローラーがリソースの削除を処理するようトリガーされ、以下のアクションが発生します。

    • director Operator は、ノードの OpenStackIPSet および OpenStackNetConfig から対応する IP 予約を削除します。
    • director Operator は、OpenStackNet リソースの IP 予約エントリーを削除済みとしてフラグします。

      $ oc get osnet ctlplane -o json -n openstack | jq .status.reservations
      {
        "compute-0": {
          "deleted": true,
          "ip": "172.22.0.140"
        },
        "compute-1": {
          "deleted": false,
          "ip": "172.22.0.100"
        },
        "controller-0": {
          "deleted": false,
          "ip": "172.22.0.120"
        },
        "controlplane": {
          "deleted": false,
          "ip": "172.22.0.110"
        },
        "openstackclient-0": {
          "deleted": false,
          "ip": "172.22.0.251"
        }
  10. オプション: 削除された OpenStackBaremetalSet リソースの IP 予約を他のロールが使用できるようにするには、OpenStackNetConfig オブジェクトで spec.preserveservations パラメーターの値を false に設定します。
  11. openstackclient のリモートシェルにアクセスします。

    $ oc rsh openstackclient -n openstack
  12. オーバークラウドから Compute サービスエントリーを削除します。

    $ openstack compute service list
    $ openstack compute service delete <service-id>
  13. オーバークラウドの Compute ネットワークエージェントエントリーをチェックして、このようなエントリーが存在する場合は削除します。

    $ openstack network agent list
    $ for AGENT in $(openstack network agent list --host <scaled-down-node> -c ID -f value) ; do openstack network agent delete $AGENT ; done
  14. openstackclient を終了します。

    $ exit