10.3. director Operator を使用したオーバークラウドからの Compute ノードの削除
オーバークラウドから Compute ノードを削除するには、Compute ノードを無効にして削除のマークを付け、Compute
OpenStackBaremetalSet
リソースのノード数を減らす必要があります。
同じロールの新規ノードでオーバークラウドをスケーリングする場合に、ノードが一番小さい数値の ID 接尾辞で始まるホスト名と、対応の IP 予約を再利用する。
前提条件
- Compute ノード上のワークロードを他の Compute ノードに移行した。詳細は、コンピュートノード間の仮想マシンインスタンスの移行 を参照してください。
手順
openstackclient
のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclient
削除する Compute ノードを特定します。
$ openstack compute service list
ノード上の Compute サービスを無効にして、ノードが新しいインスタンスをスケジュールできないようにします。
$ openstack compute service set <hostname> nova-compute --disable
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 の名前に置き換えます。
-
root
ユーザーとして Compute ノードにログインし、ベアメタルノードをシャットダウンします。[root@compute-0 ~]# shutdown -h now
Compute ノードにアクセスできない場合は、次の手順を実行します。
-
コントローラーノードに
root
ユーザーとしてログインします。 インスタンス HA が有効になっている場合は、Compute ノードの STONITH デバイスを無効にします。
[root@controller-0 ~]# pcs stonith disable <stonith_resource_name>
-
<stonith_resource_name>
は、ノードに対応する STONITH リソースの名前に置き換えます。リソース名には、<resource_agent>-<host_mac>
という形式が使用されます。リソースエージェントおよびホストの MAC アドレスは、fencing.yaml
ファイルのFencingConfig
セクションに記載されています。
-
- IPMI を使用してベアメタルノードの電源をオフにします。詳細は、ハードウェアベンダーのドキュメントを参照してください。
-
コントローラーノードに
削除するノードに対応する
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"
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
オプション:
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" } }
compute OpenStackBaremetalSet
リソースのcount
パラメーターの値を増やします。$ oc patch openstackbaremetalset compute --type=merge --patch '{"spec":{"count":1}}' -n openstack
OpenStackBaremetalSet
リソースのリソース数を減らすと、対応するコントローラーがリソースの削除を処理するようトリガーされ、以下のアクションが発生します。-
director Operator は、削除されたノードの対応する IP 予約を
OpenStackIPSet
およびOpenStackNetConfig
から削除します。 director Operator は、
OpenStackNet
リソースの IP 予約エントリーを削除済みとしてフラグします。$ oc get osnet ctlplane -o json -n openstack | jq .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" }
-
director Operator は、削除されたノードの対応する IP 予約を
-
オプション: 削除された
OpenStackBaremetalSet
リソースの IP 予約を他のロールが使用できるようにするには、OpenStackNetConfig
オブジェクトでspec.preserveReservations
パラメーターの値を false に設定します。 openstackclient
のリモートシェルにアクセスします。$ oc rsh openstackclient -n openstack
オーバークラウドから Compute サービスエントリーを削除します。
$ openstack compute service list $ openstack compute service delete <service-id>
オーバークラウドの 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
openstackclient
を終了します。$ exit