16.3. 删除或替换 Compute 节点
在某些情况下,您需要从 overcloud 中删除 Compute 节点。例如,您可能需要替换有问题的 Compute 节点,或删除一组 Compute 节点来缩减云。当您删除 Compute 节点时,节点索引默认添加到 blocklist 中,以防止在扩展操作期间重复使用索引。
从 overcloud 部署中移除节点后,您可以替换移除的 Compute 节点。
先决条件
您要删除的节点上禁用了 Compute 服务,以防止节点调度新实例。要确认禁用了 Compute 服务,请使用以下命令列出计算服务:
(overcloud)$ openstack compute service list如果没有禁用 Compute 服务,则禁用 Compture 服务:
(overcloud)$ openstack compute service set <hostname> nova-compute --disable将
<hostname> 替换为要禁用的 Compute 节点的主机名。提示使用
--disable-reason选项添加有关为何要禁用该服务的简短说明。如果您打算重新部署 Compute 服务,这非常有用。- Compute 节点上的工作负载已迁移到其他 Compute 节点。如需更多信息,请参阅在 Compute 节点之间迁移虚拟机实例。
如果启用了实例 HA,请选择以下选项之一:
-
如果可以访问计算节点,请以
root用户身份登录计算节点,并使用shutdown -h now命令执行清理关闭。 如果无法访问计算节点,以
root用户身份登录控制器节点,为计算节点禁用 STONITH 设备,并关闭裸机节点:$ sudo pcs stonith disable <compute_UUID>提供
stackrcundercloud 凭证文件并关闭 baremetal 节点:$ source ~/stackrc (undercloud)$ openstack baremetal node power off <compute_UUID>
-
如果可以访问计算节点,请以
-
将
<compute_UUID> 替换为要删除的 Compute 节点的 UUID。
流程
查找
stackrcundercloud 凭证文件:$ source ~/stackrc确定 overcloud 堆栈的名称:
(undercloud)$ openstack stack list识别您要删除的 Compute 节点的 UUID 或主机名:
(undercloud)$ openstack server list可选:使用
--update-plan-only选项运行overcloud deploy命令,以使用模板中的最新配置来更新计划。这样可确保在删除任何 Compute 节点前 overcloud 配置为最新版本:(undercloud)$ openstack overcloud deploy --stack <overcloud> --update-plan-only \ --templates \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ -e /home/stack/templates/network-environment.yaml \ -e /home/stack/templates/storage-environment.yaml \ -e /home/stack/templates/rhel-registration/environment-rhel-registration.yaml \ -e [...]将
<overcloud> 替换为 overcloud 堆栈的名称。注意如果更新了 overcloud 节点块列表,您必须更新 overcloud 计划。有关添加 overcloud 节点到 blocklist 的更多信息,请参阅 阻止节点列表。
从堆栈中删除 Compute 节点:
(undercloud)$ openstack overcloud node delete --stack <overcloud> \ <node_1> ... [node_n]-
将
<overcloud> 替换为 overcloud 堆栈的名称。 将
<node_1>以及选择性地将直至[node_n]的全部节点替换为要删除的 Compute 节点的 Compute 服务主机名或 UUID。不要混合使用 UUID 和主机名。只使用 UUID 或只使用主机名。注意如果节点已经关闭,这个命令会返回一个
WARNING信息:Ansible failed, check log at /var/lib/mistral/overcloud/ansible.log WARNING: Scale-down configuration error. Manual cleanup of some actions may be necessary. Continuing with node removal.要解决关闭节点导致的问题,请手动执行节点,完成 删除无法访问的 Compute 节点的 第 1 到 8 步,然后在此过程中继续执行下一步。
-
将
- 等待 Compute 节点被删除。
删除您删除的每个节点的网络代理:
(undercloud)$ source ~/overcloudrc (overcloud)$ for AGENT in $(openstack network agent list \ --host <scaled_down_node> -c ID -f value) ; \ do openstack network agent delete $AGENT ; done将
<scaled down node> 替换为您删除的节点的主机名。检查命令输出。由于 RHOSP 16.1.7 及更早版本中的一个错误,您可能会看到一条消息表示无法删除代理。
Bad agent request: OVN agents cannot be deleted.如果没有看到
Bad 代理请求消息,请继续下一步。如果您看到
Bad 代理请求消息,请转至 Deleting the network agent: workaround for bug。完成临时解决方案后,请在此处返回并继续下一步。在节点删除完成后,检查 overcloud 栈的状态:
(overcloud)$ source ~/stackrc (undercloud)$ openstack stack listExpand 表 16.2. 结果 状态 描述 UPDATE_COMPLETECompute 节点删除成功完成。继续下一步。
UPDATE_FAILEDCompute 节点删除失败。
Compute 节点删除失败的常见原因是您要删除的节点上无法访问的 IPMI 接口。
删除失败时,您必须手动完成此过程。继续 删除无法访问的 Compute 节点, 以完成 Compute 节点删除。
如果启用了 Instance HA,请执行以下操作:
为 Compute 节点清理 Pacemaker 资源:
$ sudo pcs resource delete <compute_UUID> $ sudo cibadmin -o nodes --delete --xml-text '<node id="<compute_UUID>"/>' $ sudo cibadmin -o fencing-topology --delete --xml-text '<fencing-level target="<compute_UUID>"/>' $ sudo cibadmin -o status --delete --xml-text '<node_state id="<compute_UUID>"/>' $ sudo cibadmin -o status --delete-all --xml-text '<node id="<compute_UUID>"/>' --force删除节点的 STONITH 设备:
$ sudo pcs stonith delete <compute_UUID>
如果您不替换 overcloud 上移除的 Compute 节点,则减少包含节点数的环境文件中的
ComputeCount参数。此文件通常被命名为node-info.yaml。例如,如果您删除了一个节点,将节点数从四个节点减小到三个节点:parameter_defaults: ... ComputeCount: 3减少节点数可确保 director 在运行
openstack overcloud deploy时不置备任何新节点。如果您要替换 overcloud 部署上移除的 Compute 节点,请参阅 替换移除的 Compute 节点。
16.3.1. 完成删除无法访问的 Compute 节点 复制链接链接已复制到粘贴板!
如果因为无法访问的节点而导致 openstack overcloud node delete 命令失败,则必须手动从 overcloud 中删除 Compute 节点。
先决条件
-
执行 删除或替换 Compute 节点 流程会返回
UPDATE_FAILED状态。
流程
确定 overcloud 堆栈的 UUID:
(undercloud)$ openstack stack list识别您要删除的节点的 UUID:
(undercloud)$ openstack baremetal node list将您要删除的节点设置为维护模式:
(undercloud)$ openstack baremetal node maintenance set <UUID>-
将
<UUID> 替换为要置于维护模式的节点 UUID。
-
将
- 等待 Compute 服务将其状态与 Bare Metal 服务同步。这可能需要四分钟。
查找 overcloud 配置:
(undercloud)$ source ~/overcloudrc确认 overcloud 上已删除的节点上禁用了 Compute 服务,以防止节点调度新实例:
(overcloud)$ openstack compute service list如果没有禁用 Compute 服务,则禁用它:
(overcloud)$ openstack compute service set <hostname> nova-compute --disable将
<hostname> 替换为 Compute 节点的主机名。提示使用
--disable-reason选项添加有关为何要禁用该服务的简短说明。如果您打算重新部署 Compute 服务,这非常有用。
从已删除的 Compute 节点中删除 Compute 服务:
(overcloud)$ openstack compute service delete <service_id>-
将 <
service_id> 替换为在删除节点上运行的 Compute 服务的 ID。
-
将 <
将删除的 Compute 服务作为资源提供商从放置服务中移除:
(overcloud)$ openstack resource provider list (overcloud)$ openstack resource provider delete <UUID>查找 undercloud 配置:
(overcloud)$ source ~/stackrc从堆栈中删除 Compute 节点:
(undercloud)$ openstack overcloud node delete --stack <overcloud> <node>-
将
<overcloud>替换为 overcloud 堆栈的名称或 UUID。 将 &
lt;node> 替换为您要删除的 Compute 节点的 Compute 服务主机名或 UUID。注意如果节点已经关闭,这个命令会返回一个
WARNING信息:Ansible failed, check log at `/var/lib/mistral/overcloud/ansible.log` WARNING: Scale-down configuration error. Manual cleanup of some actions may be necessary. Continuing with node removal.您可以忽略此消息。
-
将
- 等待 overcloud 节点被删除。
查找 overcloud 配置:
(undercloud)$ source ~/overcloudrc删除已删除节点的网络代理:
(overcloud)$ for AGENT in $(openstack network agent list \ --host <scaled_down_node> -c ID -f value) ; \ do openstack network agent delete $AGENT ; done-
将
<scaled_down_node> 替换为您删除的节点的名称。
-
将
检查命令输出。由于 RHOSP 16.1.7 及更早版本中的一个错误,您可能会看到一条消息表示无法删除代理。
Bad agent request: OVN agents cannot be deleted.如果没有看到此消息,请继续下一步。
如果您看到此消息,请完成 删除网络代理 中的步骤:临时解决方案。完成临时解决方案后,请在此处返回并继续下一步。
查找 undercloud 配置:
(overcloud)$ source ~/stackrc在节点删除完成后,检查 overcloud 栈的状态:
(undercloud)$ openstack stack listExpand 表 16.3. 结果 状态 描述 UPDATE_COMPLETECompute 节点删除成功完成。继续下一步。
UPDATE_FAILEDCompute 节点删除失败。
如果在节点处于维护模式时 Compute 节点删除失败,则问题可能是硬件。检查硬件。
如果启用了 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删除节点的 STONITH 设备:
$ sudo pcs stonith delete <device-name>
如果您不替换 overcloud 上移除的 Compute 节点,则减少包含节点数的环境文件中的
ComputeCount参数。此文件通常被命名为node-info.yaml。例如,如果您删除了一个节点,将节点数从四个节点减小到三个节点:parameter_defaults: ... ComputeCount: 3 ...减少节点数可确保 director 在运行
openstack overcloud deploy时不置备任何新节点。如果您要替换 overcloud 部署上移除的 Compute 节点,请参阅 替换移除的 Compute 节点。
16.3.2. 删除网络代理:程序错误的临时解决方案 复制链接链接已复制到粘贴板!
删除 Compute 节点后,您必须删除关联的网络代理。如果您的部署使用 RHOSP 16.1.7 或更早版本,则存在一个程序错误,阻止您按预期删除网络代理。请参阅 BZ1788336-ovn-controllers 作为代理,但不能被删除。
在这个版本中,当您试图根据指示删除代理时,网络服务会显示以下出错信息:
Bad agent request: OVN agents cannot be deleted.
如果您看到该错误消息,请执行以下步骤来删除代理。
先决条件
删除 Compute 节点失败后尝试删除网络代理,如以下错误消息所示:
Bad agent request: OVN agents cannot be deleted.
流程
列出 overcloud 节点:
(undercloud)$ openstack server list以具有 root 权限的用户身份登录 Controller 节点。
$ ssh heat-admin@controller-0.ctlplane- 如果您还没有这样做,请设置命令别名来简化 ovn_controller 容器上的 ovn-sbctl 命令的访问。如需更多信息,请参阅为 OVN 故障排除命令创建别名。
从
ovn-controller.log文件中获取 IP 地址:$ sudo less /var/log/containers/openvswitch/ovn-controller.log如果
ovn-controller.log为空,请尝试ovn-controller.log.1。确认 IP 地址正确:
$ ovn-sbctl list encap |grep -a3 <IP_address_from_ovn-controller.log>将 <IP_address_from_ovn-controller.log> 替换为控制器日志文件中的 IP 地址。
删除包含 IP 地址的机箱:
$ ovn-sbctl chassis-del <chassis-name>将 <chassis-id> 替换为上一步中
ovn-sbctl list encap命令的输出中的chassis_name值。检查 Chassis_Private 表以确认已删除 chassis:
$ ovn-sbctl find Chassis_private chassis="[]"如果列出了任何 chasis,使用以下命令删除每个操作:
$ ovn-sbctl destroy Chassis_Private <listed_name>将
<listed_name> 替换为要删除的机箱的名称。- 返回到流程以完成 Compute 节点的删除。
16.3.3. 替换删除的 Compute 节点 复制链接链接已复制到粘贴板!
要替换 overcloud 部署上移除的 Compute 节点,您可以注册并检查新的 Compute 节点,或者重新添加移除的 Compute 节点。您还必须配置 overcloud 以置备节点。
流程
可选: 要重复使用已删除 Compute 节点的索引,在删除 Compute 节点时为角色配置
RemovalPoliciesMode和RemovalPolicies来替换拒绝列表:parameter_defaults: <RoleName>RemovalPoliciesMode: update <RoleName>RemovalPolicies: [{'resource_list': []}]替换删除的 Compute 节点:
- 若要添加新的 Compute 节点,请注册、检查和标记新节点,以准备它以进行调配。如需更多信息,请参阅配置基本 overcloud。
要重新添加您手动删除的 Compute 节点,从维护模式中删除该节点:
$ openstack baremetal node maintenance unset <node_uuid>
-
重新运行用于部署现有 overcloud 的
openstack overcloud deploy命令。 - 等待部署过程完成。
确认 director 已成功注册了新的 Compute 节点:
$ openstack baremetal node list如果您执行了第 1 步,当计算节点被删除时,为角色将
RemovalPoliciesMode设置为update,然后您您需要为角色将RemovalPoliciesMode重新设置为默认值(append),把计算节点索引添加到当前的拒绝列表中:parameter_defaults: <RoleName>RemovalPoliciesMode: append-
重新运行用于部署现有 overcloud 的
openstack overcloud deploy命令。