10.2. 使用 director Operator 从 overcloud 中删除 Compute 节点
要从 overcloud 中删除 Compute 节点,您必须禁用 Compute 节点,将其标记为删除,并减少 compute OpenStackBaremetalSet 资源的节点数。
如果您使用同一角色中的新节点扩展 overcloud,节点将重复利用主机名,从最低 ID 后缀和对应的 IP 保留开始。
先决条件
- Compute 节点上的工作负载已迁移到其他 Compute 节点。如需更多信息,请参阅在 Compute 节点间迁移虚拟机实例。
流程
访问
openstackclient的远程 shell:$ oc rsh -n openstack openstackclient识别您要删除的 Compute 节点:
$ openstack compute service list禁用节点上的 Compute 服务,以防止节点调度新实例:
$ openstack compute service set <hostname> nova-compute --disable注解裸机节点,以防止 Metal3 启动节点:
$ 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> 替换为metal3pod 的名称。
-
将
以
root用户身份登录 Compute 节点,并关闭裸机节点:[root@compute-0 ~]# shutdown -h now如果 Compute 节点无法访问,请完成以下步骤:
-
以
root用户身份登录 Controller 节点。 如果启用了 Instance HA,请禁用 Compute 节点的 STONITH 设备:
[root@controller-0 ~]# pcs stonith disable <stonith_resource_name>-
将
<stonith_resource_name> 替换为与节点对应的 STONITH 资源的名称。资源名称使用<resource_agent>-<host_mac>格式。您可以在fence.yaml文件的FencingConfig部分查找资源代理和主机 MAC 地址。
-
将
- 使用 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,请使用osp-director.openstack.org/delete-host=true注解BareMetalHost资源:$ 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 从已删除节点的
OpenStackIPSet和OpenStackNetConfig中删除对应的 IP 保留。 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 从已删除节点的
-
可选: 要使已删除的
OpenStackBaremetalSet资源的 IP 保留可供其他角色使用,请在OpenStackNetConfig对象中将spec.preserveReservations参数的值设置为 false。 访问
openstackclient的远程 shell:$ oc rsh openstackclient -n openstack从 overcloud 中删除 Compute 服务条目:
$ openstack compute service list $ openstack compute service delete <service-id>检查 overcloud 中的 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