安装配置并验证Nova
Nova管理OpenStack项目中虚拟机实例计算资源的全部生命周期,包括创建、调度和结束。
安装 QEMU
使用的是qemu-4.0.0版本。该arm版本暂不支持虚拟机热迁移功能(支持冷迁移),该问题鲲鹏openEuler已解决,若有虚拟机热迁移需求,推荐换用openEuler操作系统。
在计算节点执行以下操作。
- 安装依赖包。
1
yum -y install glib2-devel zlib-devel pixman-devel librbd1-devel libaio-devel
- 下载源码。
- 编译安装。
- 解压并进入QEMU目录。
1 2
tar -xvf qemu-4.0.0.tar.xz cd qemu-4.0.0
- 配置安装。
1
./configure --enable-rbd --enable-linux-aio
1 2
make -j 50 make install
- 解压并进入QEMU目录。
- 添加lib库。
1
sed -i '$ainclude /usr/local/lib' /etc/ld.so.conf
- 使配置生效。
1
ldconfig
安装libvirt
使用的是libvirt 5.6版本。该arm版本暂不支持虚拟机热迁移功能(支持冷迁移),该问题鲲鹏openEuler已解决,若有虚拟机热迁移需求,推荐换用openEuler操作系统。
在计算节点执行以下操作。
- 安装edk2。
- 在线安装
执行如下命令在线安装edk2,如图1所示。
1 2
wget https://www.kraxel.org/repos/firmware.repo -O /etc/yum.repos.d/firmware.repo yum -y install edk2.git-aarch64
- 离线安装
- 在有外网的环境下访问https://mirrors.huaweicloud.com/centos/8-stream/AppStream/aarch64/os/Packages/。
- 查找最新版本edk2-aarch64 rpm包并拷贝至目标服务器系统相应位置。
- 执行如下命令离线安装edk2,如图2所示。
1
rpm -ivh edk2.git-aarch64*.rpm
安装edk2时会有SSL校验,需关闭SSL校验。
- 打开文件。
vim /etc/yum.conf
- 按“i”进入编辑模式,在文件的空白处添加以下信息。
sslverify=false
- 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出。
- 在线安装
- 安装依赖包。
1
yum -y install gnutls-devel libnl-devel libxml2-devel yajl-devel device-mapper-devel libpciaccess-devel
- 安装libvirt-5.6.0(源码编译安装方式)。
- 下载源码。
1
wget https://libvirt.org/sources/libvirt-5.6.0-1.fc30.src.rpm -O /root/libvirt-5.6.0-1.fc30.src.rpm
- 编译,按照如下步骤依次完成:
1 2 3 4
cd /root/ rpm -i libvirt-5.6.0-1.fc30.src.rpm yum -y install libxml2-devel readline-devel ncurses-devel libtasn1-devel gnutls-devel libattr-devel libblkid-devel augeas systemd-devel libpciaccess-devel yajl-devel sanlock-devel libpcap-devel libnl3-devel libselinux-devel dnsmasq radvd cyrus-sasl-devel libacl-devel parted-devel device-mapper-devel xfsprogs-devel librados2-devel librbd1-devel glusterfs-api-devel glusterfs-devel numactl-devel libcap-ng-devel fuse-devel netcf-devel libcurl-devel audit-libs-devel systemtap-sdt-devel nfs-utils dbus-devel scrub numad qemu-img rpm-build iscsi-initiator-utils rpmbuild -ba ~/rpmbuild/SPECS/libvirt.spec
如果出错则可以使用另外一种方法编译:
1
rpmbuild --rebuild /root/libvirt-5.6.0-1.fc30.src.rpm
- 安装。
1
yum install -y /root/rpmbuild/RPMS/aarch64/*.rpm
- 重启libvirt服务。
1
systemctl restart libvirtd
若源码编译安装方式编译失败,可替换为使用另一种方式编译安装:
1
wget https://libvirt.org/sources/libvirt-5.6.0.tar.xz -O /root/libvirt-5.6.0.tar.xz
1 2 3 4 5
tar -xvf /root/libvirt-5.6.0.tar.xz cd /root/libvirt-5.6.0/ ./autogen.sh --system make -j 50 make install
1
systemctl restart libvirtd
- 下载源码。
- 修改配置文件“/etc/libvirt/qemu.conf”。
- 添加AAVMF内容。
1
nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd","/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw"]
- 打开权限。
找到user = "root" group = "root"并取消注释。
- 检验libvirt和QEMU版本。
1
virsh version
其中libvirt版本为5.6.0,如果安装了QEMU,则QEMU应该为4.0.0,否则为默认版本2.12.0。
- 添加AAVMF内容。
创建Nova数据库
在控制节点执行以下操作。
- 使用root用户连接数据库。
1
mysql -u root -p
- 创建nova,nova_api,nova_cell0数据库。
1 2 3
CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0;
- 授予对数据库的适当访问权限。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \ IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \ IDENTIFIED BY '<PASSWORD>';
- 退出数据库。
1
exit
OpenStack Rocky版本需添加Placement数据库,Stein版本已在单独的Placement组件添加,请忽略。
CREATE DATABASE placement; GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '<PASSWORD>'; GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '<PASSWORD>';
创建角色和用户
在控制节点执行以下操作。
- 使用admin用户登录OpenStack命令行。
1
source /etc/keystone/admin-openrc
- 创建nova用户。
1
openstack user create --domain default --password-prompt nova
- 为nova用户创建密码。
- 将admin角色添加到nova用户。
1
openstack role add --project service --user nova admin
- 创建nova实体。
1
openstack service create --name nova --description "OpenStack Compute" compute
- 创建compute API服务端点。
1 2 3
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
OpenStack Rocky版本需添加placement用户,Stein版本已在单独的Placement组件添加,请忽略。
- 创建用户placement并设置密码。
openstack user create --domain default --password-prompt placement
- 添加角色。
openstack role add --project service --user placement admin
- 创建Placement API用户和服务端点。
openstack service create --name placement --description "Placement API" placement openstack endpoint create --region RegionOne placement public http://controller:8778 openstack endpoint create --region RegionOne placement internal http://controller:8778 openstack endpoint create --region RegionOne placement admin http://controller:8778
安装和配置Nova(控制节点)
在控制节点执行以下操作。
- 安装组件。
1
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
OpenStack Rocky版本需在这里安装placement,Stein版本已在单独的placement组件安装,请忽略。
yum -y install openstack-nova-placement-api
- 配置Nova, 编辑“/etc/nova/nova.conf”文件。
- 启用计算和元数据API,配置RabbitMQ消息队列访问以及启用网络服务的支持。
1 2 3 4 5 6 7
[DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:<PASSWORD>@controller my_ip = 172.168.201.11 use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver allow_resize_to_same_host = true
my_ip为控制节点的管理IP,<PASSWORD>为RabbitMQ服务为用户OpenStack设置的密码。
- 配置数据库访问。
1 2 3 4
[api_database] connection = mysql+pymysql://nova:<PASSWORD>@controller/nova_api [database] connection = mysql+pymysql://nova:<PASSWORD>@controller/nova
- 配置身份服务访问。
1 2 3 4 5 6 7 8 9 10 11
[api] auth_strategy = 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 = <PASSWORD>
- 配置“/etc/nova/nova.conf”的[neutron]部分,启用元数据代理并配置密码。
1 2 3 4 5 6 7 8 9 10 11 12
[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 = <PASSWORD> service_metadata_proxy = true metadata_proxy_shared_secret = <PASSWORD>
- 配置VNC代理以使用控制器节点的管理接口IP地址。
1 2 3 4 5 6 7
[vnc] enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip novncproxy_host=0.0.0.0 novncproxy_port=6080 novncproxy_base_url=http://172.168.201.11:6080/vnc_auto.html
注意将172.168.201.11改成相应的控制节点管理IP地址。
- 配置Image服务API的位置。
1 2
[glance] api_servers = http://controller:9292
- 配置锁定路径。
1 2
[oslo_concurrency] lock_path = /var/lib/nova/tmp
- 配置对Placement服务的访问。
1 2 3 4 5 6 7 8 9
[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 = <PASSWORD>
OpenStack Rocky版本,在[placement_database]部分中,配置数据库访问,<PASSWPRD>修改为数据库设置的密码,Stein版本请忽略。
- 编辑“/etc/nova/nova.conf”文件。
[placement_database] connection = mysql+pymysql://placement:<PASSWORD>@controller/placement
- 修改配置文件“/etc/httpd/conf.d/00-nova-placement-api.conf”。
<Directory /usr/bin> <IfVersion >= 2.4> Require all granted </IfVersion> <IfVersion < 2.4> Order allow,deny Allow from all </IfVersion> </Directory>
- 重启HTTP服务。
systemctl restart httpd
- 编辑“/etc/nova/nova.conf”文件。
- 配置元数据代理。
- 编辑“/etc/neutron/metadata_agent.ini”,新增如下配置:
1 2 3
[DEFAULT] nova_metadata_host = controller metadata_proxy_shared_secret = <PASSWORD>
- 填充nova-api数据库。
1 2 3 4
su -s /bin/sh -c "nova-manage api_db sync" nova su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova su -s /bin/sh -c "nova-manage db sync" nova
- 编辑“/etc/neutron/metadata_agent.ini”,新增如下配置:
- 验证cell0和cell1是否正确注册。
1
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
- 启动compute服务并设置为系统引导时启动。
1 2 3 4
systemctl enable openstack-nova-api.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service systemctl start openstack-nova-api.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service
- 启用计算和元数据API,配置RabbitMQ消息队列访问以及启用网络服务的支持。
安装和配置Nova(计算节点)
在计算节点执行以下操作。
- 安装组件。
1
yum -y install openstack-nova-compute
- 编辑文件“/etc/nova/nova.conf”。
- 启用计算和元数据API。
1 2 3 4 5 6
[DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:<PASSWORD>@controller my_ip = 172.168.201.12 use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver
此处的my_ip设置为计算节点的管理IP地址。
- 配置身份服务访问。
1 2 3 4 5 6 7 8 9 10 11
[api] auth_strategy = 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 = <PASSWORD>
- 配置“/etc/nova/nova.conf”的[neutron]部分,在 [neutron]部分,添加如下信息。
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 = <PASSWORD>
- 启用并配置远程控制台访问。
1 2 3 4 5 6
[vnc] enabled = true server_listen = 0.0.0.0 server_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html vncserver_proxyclient_address = $my_ip
- 配置Image服务API的位置。
1 2
[glance] api_servers = http://controller:9292
- 配置锁定路径。
1 2
[oslo_concurrency] lock_path = /var/lib/nova/tmp
- 配置Placement API。
1 2 3 4 5 6 7 8 9
[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 = <PASSWORD>
- 在[libvirt]模块添加如下信息。
1
virt_type = kvm
上述配置文件nova.conf默认创建的虚拟机pci为6,若要修改虚拟机的pci数量,可在计算节点修改配置文件nova.conf,更改num_pcie_ports参数,最多支持设置15个。
1
vim /etc/nova/nova.conf
打开注释并修改以下参数:
1
num_pcie_ports=15
重启虚拟机后进入虚拟机执行lspci可查看。
- 启用计算和元数据API。
- 启动Compute服务及其依赖项,并将它们配置为在系统引导时自动启动。
1 2
systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service
将计算节点添加到单元数据库
在控制节点执行以下操作。
- 使用admin用户登录OpenStack命令行。
1
source /etc/keystone/admin-openrc
- 查看数据库的主机。
1
openstack compute service list --service nova-compute
- 发现主机。
1
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
注意添加新计算节点时,需要在控制器节点执行以下命令,以注册这些新计算节点。
1
nova-manage cell_v2 discover_hosts
或者,在以下位置设置适当的间隔,让控制节点周期性发现计算节点。
1
vim /etc/nova/nova.conf
1 2
[scheduler] discover_hosts_in_cells_interval = 300
验证Nova
在控制节点执行以下操作。
- 使用admin用户登录OpenStack命令行。
1
source /etc/keystone/admin-openrc
- 列出服务组件。
1
openstack compute service list
- 列出Identity服务中的API端点以验证与Identity服务的连接。
1
openstack catalog list
- 列出Glance服务中的Image。
1
openstack image list
- 检查单元格和放置API是否正常运行以及其他必要的先决条件是否到位。
1
nova-status upgrade check
Nova常用命令
命令行 |
功能描述 |
---|---|
openstack flavor create <flavor-name> --vcpus 4 --ram 8192 --disk 20 |
创建指定规格的flavor |
openstack server create --flavor m1.nano --image cirros \ --nic net-id=provider --security-group default \ --key-name mykey provider-vm |
创建虚拟机实例 |
openstack server start provider-vm |
启动实例 |
openstack server list |
查看所有实例 |
openstack server stop vm1 |
关闭实例 |
openstack server delete vm1 |
删除所选的实例 |