添加节点

添加controllers

  1. bootstrap-servers command用于准备即将加入系统的新节点。他会添加新节点的entry到/etc/hosts,并且一些所有controller节点都需要的服务比如RabbitMQ,如果使用–limit选项,确保包含所有的controller节点,比如 --limit control。
kolla-ansible -i <inventory> bootstrap-servers [--limit <limit>]
  1. 拉取镜像,–limit参数可仅仅包含新节点
kolla-ansible -i <inventory> pull [--limit <limit>]
  1. 部署容器到新节点,如果使用–limit选项,全包包含所有的controller节点–limit control。
kolla-ansible -i <inventory> deploy [--limit <limit>]
  1. 到此新的管理节点及部署完毕。建议进行相应的测试以确保新管理节点的功能性是否正常。
  2. 部分资源可能并不会自动的平衡到新的管理节点上。可以手动进行再平衡部分负载到新的节点上。对于如何平衡的具体操作可参照移除管理节点中的操作进行。

添加计算节点

  1. 使用bootstrap-servers command进行新节点的准备工作。
kolla-ansible -i <inventory> bootstrap-servers [--limit <limit>]
  1. 镜像拉取
kolla-ansible -i <inventory> pull [--limit <limit>]
  1. 部署容器到新节点
kolla-ansible -i <inventory> deploy [--limit <limit>]
  1. 建议进行相应的测试进行功能性的检测。
  2. 实例并不会自动的平衡到该新节点,可手动热迁移实例到新节点上。
openstack server migrate <server> --live-migration --host <target-host> --os-compute-api-version 2.30
  1. 通常可使用Watcher工具来自动执行。

移除节点

移除controller

  1. 移除controller或其他节点时,需要考虑集群现在是否有足够的节点。比如集群有3节点的controller,仅仅只能移除一个controller。同时需要考虑在冗余层面的影响。
  2. 在从集群移除controller节点之前,建议先对其上的资源进行迁移。比如由Neutron DHCP agent提供的网络服务以及由Neutron L3 agent提供的路由服务。其他需要的操作根据你的实际运行环境和配置。
  3. 对于即将移除的节点,查找该节点上的Neutron routers并且移动他们。并禁用L3 agent。

L3 agent

l3_id=$(openstack network agent list --host <host> --agent-type l3 -f value -c ID)
target_l3_id=$(openstack network agent list --host <target host> --agent-type l3 -f value -c ID)
openstack router list --agent $l3_id -f value -c ID | while read router;do
	openstack network agent remove router $l3_id $router --l3
	openstack network agent add router $ $target_l3_id $router --l3
done
openstack network agent set $l3_id --disable

DHCP agents

dhcp_id=$(openstack network agent list --host <host> --agent-type dhcp -f value -c ID)
target_dhcp_id=$(openstack network agent list --host <target host> --agent-type dhcp -f value -c ID)
openstack network list --agent $dhcp_id -f value -c ID | while read network;do
	openstack network agent remove network $dhcp_id $network --dhcp
	openstack network agent add network $target_dhcp_id $network --dhcp
done
  1. 停止即将停止的节点上的服务
kolla-ansible -i <inventory> stop --yes-i-really-really-mean-it --limit <limit>
  1. 从ansible inventory中移除hosts。
  2. 重新配置剩下的controllers来更新集群的节点关系,比如mariadb、rabbitmq。使用适当的限制,比如–limit control。
kolla-ansible -i <inventory> deploy [--limit <limit>]
  1. 进行测试验证操作的正确性。
  2. 对每个节点清理服务:
openstack network agent list --host <host> -f value -c ID | while read id;do
	openstack network agent delete $id
done
			
openstack compute service list --os-compute-api-version 2.53 --host <host> -f value -c ID | while read id;do
	openstack compute service delete --os-compute-api-version 2.53 $id
done

移除计算节点

  1. 考虑负载分担到剩余节点是否导致过载。
  2. 移除计算节点之前,需要对实例进行迁移或者删除。
  3. 对于需要移除的节点,禁用compute服务确保不会有新的实例调度到该节点之上。
openstack compute service set <host> nova-compute --disable
  1. 如果可以,迁移实例到其他的节点
openstack server list --host <host> -f value -c ID | while read server;do
	openstack server migrate --live-migration $server			
done
  1. 确认是否迁移成功。
  2. 停止即将移除节点上的所有服务。
kolla-ansible -i <inventory> stop --yes-i-really-really-mean-it [--limit <limit>]
  1. 从ansible inventory中移除删除的主机
  2. 测试集群中剩余的主机操作正常。
  3. 对于每一个节点,清理其服务:
openstack network agent list --host <host> -f value -c ID|while read id;do
	openstack network agent delete $id
done
			
openstack compute service list --os-compute-api-version 2.53 --host <host> -f value -c ID |while read id;do
	openstack compute service delete --os-compute-api-version 2.53 $id
done