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