19.4. 删除或替换 Compute 节点
在某些情况下,您需要从 overcloud 中删除计算节点。例如,需要替换有问题的 Compute 节点。当您删除 Compute 节点时,节点的索引默认添加到 denylist 中,以防止在扩展操作过程中重复使用索引。
在从 overcloud 部署中删除节点后,您可以替换删除的 Compute 节点。
先决条件
您要删除的节点上禁用了 Compute 服务,以防止节点调度新实例。要确认 Compute 服务已被禁用,请使用以下命令:
openstack compute service list
(overcloud)$ openstack compute service listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有禁用 Compute 服务,则禁用它:
openstack compute service set <hostname> nova-compute --disable
(overcloud)$ openstack compute service set <hostname> nova-compute --disableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示使用
--disable-reason选项添加有关为何要禁用该服务的简短说明。如果您打算重新部署 Compute 服务,这很有用。- Compute 节点上的工作负载已迁移到其他 Compute 节点。有关更多信息,请参阅在 Compute 节点间迁移虚拟机实例。
如果启用了实例 HA,请选择以下选项之一:
-
如果可以访问计算节点,请以
root用户身份登录计算节点,并使用shutdown -h now命令执行清理关闭。 如果无法访问计算节点,以
root用户身份登录控制器节点,为计算节点禁用 STONITH 设备,并关闭裸机节点:pcs stonith disable <stonith_resource_name> source stackrc openstack baremetal node power off <UUID>
[root@controller-0 ~]# pcs stonith disable <stonith_resource_name> [stack@undercloud ~]$ source stackrc [stack@undercloud ~]$ openstack baremetal node power off <UUID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
如果可以访问计算节点,请以
流程
查找 undercloud 配置:
source ~/stackrc
(overcloud)$ source ~/stackrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
为您要缩减的角色减少
overcloud-baremetal-deploy.yaml文件中的count参数。 -
定义您要从堆栈中删除的每个节点的
主机名和名称(如果尚未在角色的instances属性中定义)。 将属性
provisioned: false添加到您要删除的节点。例如,要从堆栈中删除节点overcloud-compute-1,请在overcloud-baremetal-deploy.yaml文件中包含以下片断:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新部署 overcloud 后,堆栈中不再存在使用
provisioned: false属性定义的节点。但是,这些节点仍然以置备状态运行。注意如果要临时从堆栈中删除节点,您可以使用
provisioned: false属性部署 overcloud,然后使用provisioned: true属性重新部署 overcloud,以将节点返回到堆栈。从 overcloud 中删除节点:
openstack overcloud node delete \ --stack <stack> \ --baremetal-deployment /home/stack/templates/overcloud-baremetal-deploy.yaml
(undercloud)$ openstack overcloud node delete \ --stack <stack> \ --baremetal-deployment /home/stack/templates/overcloud-baremetal-deploy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为overcloud。注意不要将您要从堆栈中删除的节点作为命令参数包括在
openstack overcloud node delete命令中。
置备 overcloud 节点,以生成更新的 heat 环境文件,以包含在部署命令中:
openstack overcloud node provision \ --stack <stack> \ --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml
(undercloud)$ openstack overcloud node provision \ --stack <stack> \ --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为overcloud。 -
将
<deployment_file>替换为用于部署命令生成的 heat 环境文件的名称,如/home/stack/templates/overcloud-baremetal-deployed.yaml。
-
将
如果启用了 Instance HA,请执行以下操作:
为节点清理 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
$ 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>"/>' --forceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<scaled_down_node> 替换为已删除节点的名称。
-
将
删除节点的 STONITH 设备:
sudo pcs stonith delete <device-name>
$ sudo pcs stonith delete <device-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 如果要在 overcloud 部署中替换已删除的 Compute 节点,请参阅 替换已删除的 Compute 节点。
19.4.1. 手动删除 Compute 节点 复制链接链接已复制到粘贴板!
如果因为无法访问的节点导致 openstack overcloud node delete 命令失败,则必须从 overcloud 手动删除 Compute 节点。
先决条件
-
执行 删除或替换 Compute 节点 流程会返回
UPDATE_FAILED状态。
流程
查找 undercloud 配置:
source ~/stackrc
(overcloud)$ source ~/stackrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
openstack tripleo launch heat命令启动临时 heat 进程:openstack tripleo launch heat --heat-dir /home/stack/overcloud-deploy/overcloud/heat-launcher --restore-db
(undercloud)$ openstack tripleo launch heat --heat-dir /home/stack/overcloud-deploy/overcloud/heat-launcher --restore-dbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令在启动 heat 进程后退出。heat 进程将继续作为 podman pod 在后台运行。
使用
podman pod ps命令来验证ephemeral-heat进程是否正在运行:sudo podman pod ps
(undercloud)$ sudo podman pod ps POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS 958b141609b2 ephemeral-heat Running 2 minutes ago 44447995dbcf 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
export命令导出OS_CLOUD环境:export OS_CLOUD=heat
(undercloud)$ export OS_CLOUD=heatCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
openstack stack list命令列出已安装的堆栈:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 识别您要删除的节点的 UUID:
openstack baremetal node list
(undercloud)$ openstack baremetal node listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将要删除的节点移至维护模式:
openstack baremetal node maintenance set <node_uuid>
(undercloud)$ openstack baremetal node maintenance set <node_uuid>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 等待 Compute 服务将其状态与 Bare Metal 服务同步。这最多可能需要 4 分钟。
查找 overcloud 配置:
source ~/overcloudrc
(undercloud)$ source ~/overcloudrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除已删除的节点的网络代理:
for AGENT in $(openstack network agent list --host <scaled_down_node> -c ID -f value) ; do openstack network agent delete $AGENT ; done
(overcloud)$ for AGENT in $(openstack network agent list --host <scaled_down_node> -c ID -f value) ; do openstack network agent delete $AGENT ; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<scaled_down_node>替换为要移除的节点的名称。
-
将
确认 overcloud 上已删除节点上禁用了 Compute 服务,以防止节点调度新实例:
openstack compute service list
(overcloud)$ openstack compute service listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有禁用 Compute 服务,请禁用它:
openstack compute service set <hostname> nova-compute --disable
(overcloud)$ openstack compute service set <hostname> nova-compute --disableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将删除的 Compute 服务作为资源提供商从放置服务中移除:
openstack resource provider list openstack resource provider delete <uuid>
(overcloud)$ openstack resource provider list (overcloud)$ openstack resource provider delete <uuid>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 IdM 删除主机。如果您的 IdM 域已集成了 DNS,请使用
--updatedns选项从 DNS 中删除主机任何类型的关联记录:ipa host-del --updatedns <hostname_to_delete>
$ ipa host-del --updatedns <hostname_to_delete>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<hostname_to_delete> 替换为您要删除的主机。
-
将
- 在您要删除的 Compute 节点上,以 root 用户身份登录。
删除在 Red Hat Subscription Management 中注册的系统配置文件:
subscription-manager remove --all subscription-manager unregister subscription-manager clean
# subscription-manager remove --all # subscription-manager unregister # subscription-manager cleanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果无法访问 Compute 节点,您可以删除红帽客户门户网站中的系统配置文件。如需更多信息,请参阅 如何删除注册到 Red Hat Subscription Management (RHSM)的系统的系统 配置文件?
查找 undercloud 配置:
source ~/stackrc
(overcloud)$ source ~/stackrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从堆栈中删除 Compute 节点:
openstack overcloud node delete --stack <overcloud> <node> --baremetal-deployment <baremetal_deployment_file>
(undercloud)$ openstack overcloud node delete --stack <overcloud> <node> --baremetal-deployment <baremetal_deployment_file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<overcloud>替换为 overcloud 堆栈的名称或 UUID。 -
将 &
lt;node> 替换为您要删除的 Compute 节点的 Compute 服务主机名或 UUID。 将
<baremetal_deployment_file> 替换为裸机部署文件的名称。注意如果节点已经关闭,这个命令会返回
WARNING信息:Ansible failed, check log at `~/ansible.log` WARNING: Scale-down configuration error. Manual cleanup of some actions may be necessary. Continuing with node removal.
Ansible failed, check log at `~/ansible.log` WARNING: Scale-down configuration error. Manual cleanup of some actions may be necessary. Continuing with node removal.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以忽略此消息。
-
将
- 等待 overcloud 节点删除。
当节点删除完成后,检查 overcloud 栈的状态:
openstack stack list
(undercloud)$ openstack stack listCopy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表 19.2. 结果 状态 描述 UPDATE_COMPLETEdelete 操作成功完成。
UPDATE_FAILED删除操作失败。
在处于维护模式时 overcloud 节点无法删除,则问题可能与硬件相关。
如果启用了 Instance HA,请执行以下操作:
为节点清理 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
$ 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>"/>' --forceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除节点的 STONITH 设备:
sudo pcs stonith delete <device-name>
$ sudo pcs stonith delete <device-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您没有替换 overcloud 上已删除的 Compute 节点,请减少包含节点数的环境文件中的
ComputeCount参数。此文件通常命名为overcloud-baremetal-deploy.yaml。例如,如果您删除了一个节点,将节点数从四个节点减小到三个节点:parameter_defaults: ... ComputeCount: 3 ...
parameter_defaults: ... ComputeCount: 3 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 减少节点数可确保 director 在运行
openstack overcloud deploy时不置备任何新节点。如果要在 overcloud 部署中替换已删除的 Compute 节点,请参阅 替换已删除的 Compute 节点。
19.4.2. 替换已删除的 Compute 节点 复制链接链接已复制到粘贴板!
要替换 overcloud 部署上已删除的 Compute 节点,您可以注册并检查新的 Compute 节点或重新添加已删除的 Compute 节点。您还必须配置 overcloud 以置备节点。
流程
可选: 要重复使用已删除 Compute 节点的索引,在删除 Compute 节点时为角色配置
RemovalPoliciesMode和RemovalPolicies来替换拒绝列表:parameter_defaults: <RoleName>RemovalPoliciesMode: update <RoleName>RemovalPolicies: [{'resource_list': []}]parameter_defaults: <RoleName>RemovalPoliciesMode: update <RoleName>RemovalPolicies: [{'resource_list': []}]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换已删除的 Compute 节点:
- 若要添加新的 Compute 节点,请注册、检查和标记新节点,以便为它做好调配准备。有关更多信息,请参阅 配置和部署 overcloud。
要重新添加您手动删除的 Compute 节点,从维护模式中删除该节点:
openstack baremetal node maintenance unset <node_uuid>
(undercloud)$ openstack baremetal node maintenance unset <node_uuid>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
重新运行用于部署现有 overcloud 的
openstack overcloud deploy命令。 - 等待部署过程完成。
确认 director 已成功注册新的 Compute 节点:
openstack baremetal node list
(undercloud)$ openstack baremetal node listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您执行了第 1 步,当计算节点被删除时,为角色将
RemovalPoliciesMode设置为update,然后您您需要为角色将RemovalPoliciesMode重新设置为默认值(append),把计算节点索引添加到当前的拒绝列表中:parameter_defaults: <RoleName>RemovalPoliciesMode: append
parameter_defaults: <RoleName>RemovalPoliciesMode: appendCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
重新运行用于部署现有 overcloud 的
openstack overcloud deploy命令。