10.2. 使用 director Operator 从 overcloud 中删除 Compute 节点
要从 overcloud 中删除 Compute 节点,您必须禁用 Compute 节点,将其标记为删除,并减少 compute
OpenStackBaremetalSet
资源的节点数。
如果您使用同一角色中的新节点扩展 overcloud,节点将重复利用主机名,从最低 ID 后缀和对应的 IP 保留开始。
前提条件
- Compute 节点上的工作负载已迁移到其他 Compute 节点。如需更多信息,请参阅在 Compute 节点间迁移虚拟机实例。
流程
访问
openstackclient
的远程 shell:oc rsh -n openstack openstackclient
$ oc rsh -n openstack openstackclient
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 识别您要删除的 Compute 节点:
openstack compute service list
$ openstack compute service list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用节点上的 Compute 服务,以防止节点调度新实例:
openstack compute service set <hostname> nova-compute --disable
$ openstack compute service set <hostname> nova-compute --disable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注解裸机节点,以防止 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
$ 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"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<node
> 替换为BareMetalHost
资源的名称。 -
将
<metal3-pod
> 替换为metal3
pod 的名称。
-
将
以
root
用户身份登录 Compute 节点,并关闭裸机节点:shutdown -h now
[root@compute-0 ~]# shutdown -h now
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 Compute 节点无法访问,请完成以下步骤:
-
以
root
用户身份登录 Controller 节点。 如果启用了 Instance HA,请禁用 Compute 节点的 STONITH 设备:
pcs stonith disable <stonith_resource_name>
[root@controller-0 ~]# pcs stonith disable <stonith_resource_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<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)"'
$ oc get openstackbaremetalset compute -o json | jq '.status.baremetalHosts | to_entries[] | "\(.key) => \(.value | .hostRef)"' "compute-0, openshift-worker-3" "compute-1, openshift-worker-4"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在
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
$ oc annotate -n openshift-machine-api bmh/openshift-worker-3 osp-director.openstack.org/delete-host=true --overwrite
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:确认
OpenStackBaremetalSet
资源中annotatedForDeletion
状态已更改为true
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 减少
compute
OpenStackBaremetalSet
资源的count
参数:oc patch openstackbaremetalset compute --type=merge --patch '{"spec":{"count":1}}' -n openstack
$ oc patch openstackbaremetalset compute --type=merge --patch '{"spec":{"count":1}}' -n openstack
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您减少
OpenStackBaremetalSet
资源的资源数时,您可以触发对应的控制器来处理资源删除,这会导致以下操作:-
director Operator 从
OpenStackIPSet
和OpenStackNetConfig
中删除对应的 IP 保留。 director Operator 将
OpenStackNet
资源中的 IP 保留条目标记为已删除:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
director Operator 从
-
可选: 要使已删除的
OpenStackBaremetalSet
资源的 IP 保留可供其他角色使用,请在OpenStackNetConfig
对象中将spec.preserveReservations
参数的值设置为 false。 访问
openstackclient
的远程 shell:oc rsh openstackclient -n openstack
$ oc rsh openstackclient -n openstack
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 overcloud 中删除 Compute 服务条目:
openstack compute service list openstack compute service delete <service-id>
$ openstack compute service list $ openstack compute service delete <service-id>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 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
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
openstackclient
退出:exit
$ exit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow