前言 官方默认搭建的文档是1控制1计算,实际1个计算节点肯定是不行的,这篇文章将基于openstack集群进行增加计算节点,如果是已经正确的搭建过一次1控制1计算的openstack则本文实操起来应该并不难,因为需要安装的组件就两个,下面开始。(S版本)
环境配置 环境是一台CentOS7.9的机器,然后selinux和firewalld都是关闭的,因为条件有限配置是1H1G的配置。
网络环境 主机名为compute2。修改网络内全部的hosts文件,如果有dns则更好
1 2 3 4 5 6 7 8 9 [root@compute2 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.11 controller 10.0.0.31 compute1 10.0.0.32 compute2
时间同步 执行下面命令设置时区以及安装chrony
1 2 [root@compute2 ~]# timedatectl set-timezone Asia/Shanghai [root@compute2 ~]# yum -y install chrony
参考下面配置
1 2 3 4 5 6 7 [root@compute2 ~]# cat /etc/chrony.conf |egrep -v "^#|^$" server controller iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync logdir /var/log/chrony [root@compute2 ~]#
重启服务
1 [root@compute2 ~]# systemctl restart chronyd
执行命令chronyc sources
查看
基础软件包 我这里是安装s版本的openstack,参考文档地址: https://docs.openstack.org/install-guide/environment-packages-rdo.html 所有主机都执行下面命令,用来安装openstack对应的yum仓库。
1 yum install -y centos-release-openstack-stein
在24年12月28日,他自己的这些源有一部分是不可以用的,通过下面命令进行替换阿里的镜像站
1 2 3 4 cd /etc/yum.repos.dsed -i 's/mirrorlist=/#mirrorlist=/g' *.repo sed -i 's/#baseurl=/baseurl=/g' *.repo sed -i 's/mirror.centos.org/mirrors.aliyun.com/g' *.repo
安装openstack的客户端管理工具
1 yum install python-openstackclient -y
组件安装 Nova - 计算组件 下面的操作是在计算节点中操作,文档参考: https://docs.openstack.org/nova/stein/install/compute-install-rdo.html 下面开始安装组件
1 yum install -y openstack-nova-compute
下面开始修改配置
1 2 3 4 cp /etc/nova/nova.conf{,.bak}egrep -v "^$|^#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf
编辑配置/etc/nova/nova.conf
,主要修改下面内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [DEFAULT] use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver my_ip = 10.0.0.32 enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:RABBIT_PASS@controller [api] auth_strategy = keystone [glance] api_servers = http://controller:9292 [keystone_authtoken] auth_url = http://controller:5000/v3 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = NOVA_PASS [oslo_concurrency] lock_path = /var/lib/nova/tmp [placement] region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://controller:5000/v3 username = placement password = PLACEMENT_PASS [vnc] enabled = true server_listen = 0.0.0.0 server_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html
要注意的是my_ip
这里需要改成自己的ip。 启动服务
1 systemctl enable --now libvirtd.service openstack-nova-compute.service
然后验证参考链接: https://docs.openstack.org/nova/stein/install/compute-install-rdo.html#add-the-compute-node-to-the-cell-database 每次加计算节点的时候都需要在控制节点执行
1 su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
这是用来发现主机的,如果不想手动去执行,则可以在nova的控制节点配置中添加这段配置
1 2 [scheduler] discover_hosts_in_cells_interval = 300
Neutron - 网络组件 参考文档: https://docs.openstack.org/neutron/stein/install/compute-install-rdo.html 安装组件
1 yum install -y openstack-neutron-linuxbridge ebtables ipset
备份配置
1 2 3 4 5 6 cp /etc/neutron/neutron.conf{,.bak}cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}egrep -v "^$|^#" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf egrep -v "^$|^#" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
编辑配置/etc/neutron/neutron.conf
主要修改内容如下
1 2 3 4 5 6 7 8 9 10 11 12 [DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@controller auth_strategy = keystone [keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = NEUTRON_PASS [oslo_concurrency] lock_path = /var/lib/neutron/tmp
下面配置ml2
模块,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini
,主要内容和控制节点的一样,直接复制也行,主要内容如下
1 2 3 4 5 6 7 [linux_bridge] physical_interface_mappings = provider:ens33 [vxlan] enable_vxlan = false [securitygroup] enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
下面开始加载系统模块,
1 2 echo "br_netfilter" >> /etc/modules-load.d/bridge.confmodprobe br_netfilter
配置sysctl,编辑/etc/sysctl.conf
1 2 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1
执行sysctl -p
重载 下面在计算节点的计算模块对接一下,编辑/etc/nova/nova.conf
,主要修改内容如下
1 2 3 4 5 6 7 8 9 10 [neutron] url = http://controller:9696 auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS
重启计算节点的nova
服务
1 systemctl restart openstack-nova-compute.service
启动计算节点的neutron
模块
1 systemctl enable --now neutron-linuxbridge-agent.service
其他配置 因为系统是centos7.9默认虚机模拟硬件是rhel7.6,这个是用不了的,实例开机会出现Booting from Hard Disk...
的问题,要解决这个问题可以参考这篇文章的问题解决 ,这里直接做修改 修改nova计算节点的配置文件/etc/nova/nova.conf
,修改内容如下
1 2 3 # libvirt 段增加 [libvirt] hw_machine_type=x86_64=pc-i440fx-rhel7.2.0
修改之后重启服务
1 systemctl restart libvirtd openstack-nova-compute
成果验证 此时去仪表盘中查看计算节点的主机列表 确保实例是运行在第二台机器上的
编写自动脚本 增加计算节点的操作并不多,这里可以直接编写自动脚本实现加节点的操作,脚本如下 要注意的是,这个脚本是基于我当前环境做的,自己用请根据实际情况来编写,我这个只能作为一个参考,编写脚本的时候一开始我认为应该多写一些判断和信息输出,写了一会发现对于我当前的环境写这么多判断和输出意义不大,所以后面就没怎么加了,所以我这个只能作为参考不建议直接拿来用,请根据自己的情况来编写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 #!/bin/bash hostname="compute3" eth_name="ens33" ip=`ip -4 addr show $eth_name | grep inet | awk '{ print $2 }' | cut -d'/' -f1` set_chrony () { if ! rpm -q chrony > /dev/null 2>&1; then echo "[INSTALL]安装chrony中..." yum -y install chrony > /dev/null 2>&1 if ! rpm -q chrony > /dev/null 2>&1; then echo "[ERROR]: Chrony安装失败" exit 1 else echo "[INSTALL] Chrony 安装成功" fi else echo "[INSTALL] Chrony 已经安装" fi cp /etc/chrony.conf{,.bak} cat << EOF > /etc/chrony.conf server controller iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync logdir /var/log/chrony EOF systemctl enable chronyd systemctl restart chronyd } install_base_package (){ yum install -y centos-release-openstack-stein > /dev/null 2>&1 cd /etc/yum.repos.d sed -i 's/mirrorlist=/#mirrorlist=/g' *.repo sed -i 's/#baseurl=/baseurl=/g' *.repo sed -i 's/mirror.centos.org/mirrors.aliyun.com/g' *.repo yum install python-openstackclient -y > /dev/null 2>&1 } install_nova () {yum install -y openstack-nova-compute > /dev/null 2>&1 cp /etc/nova/nova.conf{,.bak}egrep -v "^$|^#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf cat << EOF > /etc/nova/nova.conf [DEFAULT] use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver my_ip = $ip enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:RABBIT_PASS@controller [api] auth_strategy = keystone [api_database] [barbican] [cache] [cells] [cinder] [compute] [conductor] [console] [consoleauth] [cors] [database] [devices] [ephemeral_storage_encryption] [filter_scheduler] [glance] api_servers = http://controller:9292 [guestfs] [healthcheck] [hyperv] [ironic] [key_manager] [keystone] [keystone_authtoken] auth_url = http://controller:5000/v3 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = NOVA_PASS [libvirt] hw_machine_type=x86_64=pc-i440fx-rhel7.2.0 [metrics] [mks] [neutron] url = http://controller:9696 auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS [notifications] [osapi_v21] [oslo_concurrency] lock_path = /var/lib/nova/tmp [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_middleware] [oslo_policy] [pci] [placement] region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://controller:5000/v3 username = placement password = PLACEMENT_PASS [placement_database] [powervm] [privsep] [profiler] [quota] [rdp] [remote_debug] [scheduler] [serial_console] [service_user] [spice] [upgrade_levels] [vault] [vendordata_dynamic_auth] [vmware] [vnc] enabled = true server_listen = 0.0.0.0 server_proxyclient_address = \$my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html [workarounds] [wsgi] [xenserver] [xvp] [zvm] EOF systemctl enable --now libvirtd.service openstack-nova-compute.service } install_neutron () { yum install -y openstack-neutron-linuxbridge ebtables ipset > /dev/null 2>&1 cp /etc/neutron/neutron.conf{,.bak} cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak} egrep -v "^$|^#" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf egrep -v "^$|^#" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak > /etc/neutron/plugins/ml2/linuxbridge_agent.ini cat << EOF > /etc/neutron/neutron.conf [DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@controller auth_strategy = keystone [cors] [database] [keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = NEUTRON_PASS [oslo_concurrency] lock_path = /var/lib/neutron/tmp [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_middleware] [oslo_policy] [privsep] [ssl] EOF cat << EOF > /etc/neutron/plugins/ml2/linuxbridge_agent.ini [DEFAULT] [linux_bridge] physical_interface_mappings = provider:ens33 [vxlan] enable_vxlan = false [securitygroup] enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver EOF echo "br_netfilter" >> /etc/modules-load.d/bridge.conf modprobe br_netfilter echo "net.bridge.bridge-nf-call-iptables = 1 " > /etc/sysctl.conf echo "net.bridge.bridge-nf-call-ip6tables = 1" > /etc/sysctl.conf sysctl -p systemctl enable --now neutron-linuxbridge-agent.service } if [ -z "$eth_name " ] || [ -z "$ip " ]; then echo "ip获取失败,请检查网卡名字和ip" exit 1 fi set_chrony install_base_package install_nova install_neutron echo "安装成功"
验证结果