16.3. 删除或替换 Compute 节点

在某些情况下,您需要从 overcloud 中删除 Compute 节点。例如,需要替换有问题的 Compute 节点。当您删除 Compute 节点时,节点索引默认添加到 denylist 中,以防止在扩展操作期间重复使用索引。

从 overcloud 部署中移除节点后,您可以替换移除的 Compute 节点。

先决条件

  • 您要删除的节点上禁用了 Compute 服务,以防止节点调度新实例。要确认禁用了 Compute 服务,请使用以下命令:

    (overcloud)$ openstack compute service list

    如果没有禁用 Compute 服务,则禁用它:

    (overcloud)$ openstack compute service set <hostname> nova-compute --disable
    提示

    使用 --disable-reason 选项添加有关为何要禁用该服务的简短说明。如果您打算重新部署 Compute 服务,这非常有用。

  • Compute 节点上的工作负载已迁移到其他 Compute 节点。如需更多信息,请参阅在 Compute 节点之间迁移虚拟机实例
  • 如果启用了实例 HA,请选择以下选项之一:

    • 如果可以访问计算节点,请以 root 用户身份登录计算节点,并使用 shutdown -h now 命令执行清理关闭。
    • 如果无法访问计算节点,以 root 用户身份登录控制器节点,为计算节点禁用 STONITH 设备,并关闭裸机节点:

      [root@controller-0 ~]# pcs stonith disable <stonith_resource_name>
      [stack@undercloud ~]$ source stackrc
      [stack@undercloud ~]$ openstack baremetal node power off <UUID>

流程

  1. 查找 undercloud 配置:

    (overcloud)$ source ~/stackrc
  2. 确定 overcloud 堆栈的 UUID:

    (undercloud)$ openstack stack list
  3. 识别您要删除的 Compute 节点的 UUID 或主机名:

    (undercloud)$ openstack server list
  4. 可选:使用 --update-plan-only 选项运行 overcloud deploy 命令,以使用模板中的最新配置来更新计划。这样可确保在删除任何 Compute 节点前 overcloud 配置为最新版本:

    $ openstack overcloud deploy --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 节点 denylist,则需要这一步。有关将 overcloud 节点添加到 denylist 的更多信息,请参阅 将节点列入黑名单

  5. 从堆栈中删除 Compute 节点:

    $ openstack overcloud node delete --stack <overcloud> \
     <node_1> ... [node_n]
    • <overcloud> 替换为 overcloud 堆栈的名称或 UUID。
    • <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.

      您可以忽略此消息。

  6. 等待 Compute 节点删除。
  7. 删除您删除的每个节点的网络代理:

    (overcloud)$ for AGENT in $(openstack network agent list \
      --host <scaled_down_node> -c ID -f value) ; \
      do openstack network agent delete $AGENT ; done
  8. 在节点删除完成后,检查 overcloud 栈的状态:

    (undercloud)$ openstack stack list

    表 16.2. 结果

    状态描述

    UPDATE_COMPLETE

    删除操作成功完成。

    UPDATE_FAILED

    删除操作失败。

    失败删除操作的常见原因是您要删除的节点上的 IPMI 接口无法访问的 IPMI 接口。

    删除操作失败时,您必须手动删除 Compute 节点。有关更多信息 ,请参阅从 overcloud 手动删除 Compute 节点

  9. 如果启用了 Instance HA,请执行以下操作:

    1. 为节点清理 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
    2. 删除节点的 STONITH 设备:

      $ sudo pcs stonith delete <device-name>
  10. 如果您不替换 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 节点。

先决条件

流程

  1. 确定 overcloud 堆栈的 UUID:

    (undercloud)$ openstack stack list
  2. 识别您要删除的节点的 UUID:

    (undercloud)$ openstack baremetal node list
  3. 将要删除的节点移到维护模式:

    (undercloud)$ openstack baremetal node maintenance set <node_uuid>
  4. 等待 Compute 服务将其状态与 Bare Metal 服务同步。这可能需要四分钟。
  5. 查找 overcloud 配置:

    (undercloud)$ source ~/overcloudrc
  6. 删除已删除节点的网络代理:

    (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> 替换为要移除的节点的名称。
  7. 确认 overcloud 上已删除的节点上禁用了 Compute 服务,以防止节点调度新实例:

    (overcloud)$ openstack compute service list

    如果没有禁用 Compute 服务,则禁用它:

    (overcloud)$ openstack compute service set <hostname> nova-compute --disable
    提示

    使用 --disable-reason 选项添加有关为何要禁用该服务的简短说明。如果您打算重新部署 Compute 服务,这非常有用。

  8. 从节点中删除 Compute 服务:

    (overcloud)$ openstack compute service delete <service_id>
  9. 将删除的 Compute 服务作为资源提供商从放置服务中移除:

    (overcloud)$ openstack resource provider list
    (overcloud)$ openstack resource provider delete <uuid>
  10. 查找 undercloud 配置:

    (overcloud)$ source ~/stackrc
  11. 从堆栈中删除 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.

      您可以忽略此消息。

  12. 等待 overcloud 节点删除。
  13. 在节点删除完成后,检查 overcloud 栈的状态:

    (undercloud)$ openstack stack list

    表 16.3. 结果

    状态描述

    UPDATE_COMPLETE

    删除操作成功完成。

    UPDATE_FAILED

    删除操作失败。

    如果在维护模式下 overcloud 节点无法删除,则问题可能是硬件。

  14. 如果启用了 Instance HA,请执行以下操作:

    1. 为节点清理 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
    2. 删除节点的 STONITH 设备:

      $ sudo pcs stonith delete <device-name>
  15. 如果您不替换 overcloud 上移除的 Compute 节点,则减少包含节点数的环境文件中的 ComputeCount 参数。此文件通常被命名为 node-info.yaml。例如,如果您删除了一个节点,将节点数从四个节点减小到三个节点:

    parameter_defaults:
      ...
      ComputeCount: 3
      ...

    减少节点数可确保 director 在运行 openstack overcloud deploy 时不置备任何新节点。

    如果您要替换 overcloud 部署上移除的 Compute 节点,请参阅 替换移除的 Compute 节点

16.3.2. 替换删除的 Compute 节点

要替换 overcloud 部署上移除的 Compute 节点,您可以注册并检查新的 Compute 节点,或者重新添加移除的 Compute 节点。您还必须配置 overcloud 以置备节点。

流程

  1. 可选: 要重复使用已删除 Compute 节点的索引,在删除 Compute 节点时为角色配置 RemovalPoliciesModeRemovalPolicies 来替换拒绝列表:

    parameter_defaults:
      <RoleName>RemovalPoliciesMode: update
      <RoleName>RemovalPolicies: [{'resource_list': []}]
  2. 替换删除的 Compute 节点:

    • 若要添加新的 Compute 节点,请注册、检查和标记新节点,以准备它以进行调配。如需更多信息,请参阅配置基本 overcloud
    • 要重新添加您手动删除的 Compute 节点,从维护模式中删除该节点:

      (undercloud)$ openstack baremetal node maintenance unset <node_uuid>
  3. 重新运行用于部署现有 overcloud 的 openstack overcloud deploy 命令。
  4. 等待部署过程完成。
  5. 确认 director 已成功注册了新的 Compute 节点:

    (undercloud)$ openstack baremetal node list
  6. 如果您执行了第 1 步,当计算节点被删除时,为角色将 RemovalPoliciesMode 设置为 update,然后您您需要为角色将 RemovalPoliciesMode 重新设置为默认值(append),把计算节点索引添加到当前的拒绝列表中:

    parameter_defaults:
      <RoleName>RemovalPoliciesMode: append
  7. 重新运行用于部署现有 overcloud 的 openstack overcloud deploy 命令。