10.3. 缩减裸机节点


若要缩减 overcloud 中的裸机节点数量,请标记您要从节点定义文件的堆栈中删除的节点,重新部署 overcloud,然后从 overcloud 中删除裸机节点。

先决条件

  • 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director
  • 成功部署 overcloud。如需更多信息,请参阅 使用预置备节点配置基本 overcloud
  • 如果要替换 Object Storage 节点,请将您要删除的节点中的数据复制到新替换节点。等待新节点上复制传递完成。在 /var/log/swift/swift.log 文件中检查复制传递进度。传递完成后,Object Storage 服务(swift)会将条目添加到类似以下示例的日志中:

    Mar 29 08:49:05 localhost object-server: Object replication complete.
    Mar 29 08:49:11 localhost container-server: Replication run OVER
    Mar 29 08:49:13 localhost account-server: Replication run OVER

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 对于您要缩减的角色,减少 overcloud-baremetal-deploy.yaml 文件中的 count 参数。
  4. 定义您要从堆栈中删除的每个节点的 主机名和 名称 (如果它们尚未在角色的 instances 属性中定义)。
  5. 将 attribute provisioned: false 添加到您要删除的节点。例如,要从堆栈中删除节点 overcloud-objectstorage-1,请在 overcloud-baremetal-deploy.yaml 文件中包含以下代码片段:

    - name: ObjectStorage
      count: 3
      instances:
      - hostname: overcloud-objectstorage-0
        name: node00
      - hostname: overcloud-objectstorage-1
        name: node01
        # Removed from cluster due to disk failure
        provisioned: false
      - hostname: overcloud-objectstorage-2
        name: node02
      - hostname: overcloud-objectstorage-3
        name: node03

    重新部署 overcloud 后,堆栈中不再存在使用 provisioned: false 属性定义的节点。但是,这些节点仍然以置备状态运行。

    注意

    如果要临时从堆栈中删除节点,在使用 provisioned: false 属性部署 overcloud 后,您可以使用 provisioned: true 属性重新部署 overcloud,以将节点返回到堆栈。

  6. 从 overcloud 删除节点:

    $ openstack overcloud node delete \
      --stack <stack> \
      --baremetal-deployment \
       /home/stack/templates/overcloud-baremetal-deploy.yaml
    • & lt;stack> 替换为置备裸机节点的堆栈名称。如果未指定,则默认为 overcloud

      注意

      不要将您要从堆栈中删除的节点作为命令参数包括在 openstack overcloud node delete 命令中。

  7. 删除 ironic 节点:

    $ openstack baremetal node delete <ironic_node_uuid>

    <ironic_node_uuid > 替换为节点的 UUID。

  8. 删除已删除的节点的网络代理:

    (overcloud)$ for AGENT in $(openstack network agent list \
      --host <ironic_node_uuid> -c ID -f value) ; \
      do openstack network agent delete $AGENT ; done
  9. 置备 overcloud 节点以生成更新的 heat 环境文件,以包括在部署命令中:

    $ openstack overcloud node provision \
      --stack <stack> \
      --output <deployment_file> \
      /home/stack/templates/overcloud-baremetal-deploy.yaml
    • <deployment_file> 替换为用于部署命令生成的 heat 环境文件的名称,如 /home/stack/templates/overcloud-baremetal-deployed.yaml
  10. 将 provisioning 命令生成的 overcloud-baremetal-deployed.yaml 文件添加到与其他环境文件的堆栈中,并部署 overcloud:

    $ openstack overcloud deploy \
      ...
      -e /usr/share/openstack-tripleo-heat-templates/environments \
      -e /home/stack/templates/overcloud-baremetal-deployed.yaml \
      --disable-validations \
      ...

10.3.1. 手动删除 Compute 节点

如果因为无法访问的节点而导致 openstack overcloud node delete 命令失败,则必须从 overcloud 手动删除 Compute 节点。

先决条件

流程

  1. 查找 undercloud 配置:

    (overcloud)$ source ~/stackrc
  2. 使用 openstack tripleo launch heat 命令启动临时 heat 进程:

    (undercloud)$ openstack tripleo launch heat --heat-dir /home/stack/overcloud-deploy/overcloud/heat-launcher --restore-db

    命令在启动 heat 进程后退出。heat 进程将继续作为 podman pod 在后台运行。

  3. 使用 podman pod ps 命令来验证 ephemeral-heat 进程是否正在运行:

    (undercloud)$ sudo podman pod ps
    POD ID        NAME            STATUS      CREATED        INFRA ID      # OF CONTAINERS
    958b141609b2  ephemeral-heat  Running     2 minutes ago  44447995dbcf  3
  4. 使用 export 命令导出 OS_CLOUD 环境:

    (undercloud)$ export OS_CLOUD=heat
  5. 使用 openstack stack list 命令列出已安装的堆栈:

    (undercloud)$ openstack stack list
    +--------------------------------------+------------+---------+-----------------+----------------------+--------------+
    | ID                                   | Stack Name | Project | Stack Status    | Creation Time        | Updated Time |
    +--------------------------------------+------------+---------+-----------------+----------------------+--------------+
    | 761e2a54-c6f9-4e0f-abe6-c8e0ad51a76c | overcloud  | admin   | CREATE_COMPLETE | 2022-08-29T20:48:37Z | None         |
    +--------------------------------------+------------+---------+-----------------+----------------------+--------------+
  6. 使用 export 命令导出 OS_CLOUD 环境:

    (undercloud)$ export OS_CLOUD=undercloud
  7. 识别您要删除的节点的 UUID:

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

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

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

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

    (overcloud)$ openstack compute service list
  13. 如果没有禁用 Compute 服务,请禁用它:

    (overcloud)$ openstack compute service set <hostname> nova-compute --disable
  14. 将删除的 Compute 服务作为资源提供商从放置服务中移除:

    (overcloud)$ openstack resource provider list
    (overcloud)$ openstack resource provider delete <uuid>
  15. 在您要删除的 Compute 节点上,以 root 用户身份登录。
  16. 删除在 Red Hat Subscription Management 中注册的系统配置文件:

    # subscription-manager remove --all
    # subscription-manager unregister
    # subscription-manager clean
    注意

    如果无法访问 Compute 节点,您可以删除红帽客户门户网站中的系统配置文件。如需更多信息,请参阅 如何删除注册到 Red Hat Subscription Management (RHSM)的系统的系统 配置文件?

  17. 查找 undercloud 配置:

    (overcloud)$ source ~/stackrc
  18. 从堆栈中删除 Compute 节点:

    (undercloud)$ openstack overcloud node delete --stack <overcloud> <node> --baremetal-deployment <baremetal_deployment_file>
    • <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.

      您可以忽略此消息。

  19. 等待 overcloud 节点删除。
  20. 使用 export 命令导出 OS_CLOUD 环境:

    (undercloud)$ export OS_CLOUD=heat
  21. 当节点删除完成后,检查 overcloud 栈的状态:

    (undercloud)$ openstack stack list
    Expand
    表 10.2. 结果
    状态描述

    UPDATE_COMPLETE

    delete 操作成功完成。

    UPDATE_FAILED

    删除操作失败。

    在处于维护模式时 overcloud 节点无法删除,则问题可能与硬件相关。

  22. 如果启用了 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>
  23. 如果您没有替换 overcloud 上已删除的 Compute 节点,请减少包含节点数的环境文件中的 ComputeCount 参数。此文件通常命名为 overcloud-baremetal-deploy.yaml。例如,如果您删除了一个节点,将节点数从四个节点减小到三个节点:

    parameter_defaults:
      ...
      ComputeCount: 3
      ...

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

    注意

    要在从部署后替换 Compute 节点,请参阅 扩展裸机节点

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部