17.5. 触发 Controller 节点替换

完成以下步骤,以删除旧的 Controller 节点,并将它替换为新的 Controller 节点。

步骤

  1. 确定要删除的节点的 UUID,并将其存储在 NODEID 变量中。确保将 NODE_NAME 替换为您要删除的节点的名称:

    $ NODEID=$(openstack server list -f value -c ID --name NODE_NAME)
  2. 要识别 Heat 资源 ID,请输入以下命令:

    $ openstack stack resource show overcloud ControllerServers -f json -c attributes | jq --arg NODEID "$NODEID" -c .attributes.value | keys[] as $k | if .[$k] == $NODEID then "Node index \($k) for \(.[$k])" else empty end
  3. 创建以下环境文件 ~/templates/remove-controller.yaml,并包含您要删除的 Controller 节点的节点索引:

    parameters:
      ControllerRemovalPolicies:
        [{resource_list: [NODE_INDEX]}]
  4. 输入 overcloud 部署命令,在命令中包含 remove-controller.yaml 环境文件以及所有与您环境相关的其他环境文件:

    (undercloud) $ openstack overcloud deploy --templates \
        -e /home/stack/templates/remove-controller.yaml \
        -e /home/stack/templates/node-info.yaml \
        [OTHER OPTIONS]
    注意

    仅对部署命令的这个实例包含 -e ~/templates/remove-controller.yaml。从后续的部署操作中移除此环境文件。

  5. director 会删除旧节点,创建一个新节点并更新 overcloud 栈。您可以使用以下命令检查 overcloud 栈的状态:

    (undercloud) $ openstack stack list --nested
  6. 部署命令完成后,director 会显示旧节点已替换为新节点:

    (undercloud) $ openstack server list -c Name -c Networks
    +------------------------+-----------------------+
    | Name                   | Networks              |
    +------------------------+-----------------------+
    | overcloud-compute-0    | ctlplane=192.168.0.44 |
    | overcloud-controller-0 | ctlplane=192.168.0.47 |
    | overcloud-controller-2 | ctlplane=192.168.0.46 |
    | overcloud-controller-3 | ctlplane=192.168.0.48 |
    +------------------------+-----------------------+

    新节点现在托管运行的 control plane 服务。