1
2
3
4
5
6
7
作者:李晓辉

联系方式:

微信:Lxh_Chat

邮箱:939958092@qq.com

前言

在云计算环境中,虚拟机的高效管理和灵活调度是实现资源弹性伸缩和高效利用的关键。OpenStack作为功能强大的开源云平台,提供了丰富的服务组件来满足这些需求。而Nova服务作为OpenStack的核心组件之一,主要负责虚拟机的生命周期管理,包括虚拟机的创建、启动、停止、删除等操作。通过合理安装和配置Nova服务,可以确保OpenStack环境中的虚拟机资源能够高效地被创建、管理和调度,从而为用户提供灵活的云计算服务。本文将详细介绍如何在OpenStack环境中安装和配置Nova服务,帮助你顺利搭建一个功能完善的云平台。

Nova服务概述

Nova的作用

Nova是OpenStack的核心服务之一,主要负责虚拟机的生命周期管理,其主要功能包括:

  1. 虚拟机创建与启动:Nova可以根据用户的需求创建虚拟机实例,并为其分配计算资源,如CPU、内存等,然后启动虚拟机,使其能够正常运行。

  2. 虚拟机状态管理:Nova能够监控虚拟机的运行状态,如运行中、暂停、停止等,并根据用户的操作指令对虚拟机状态进行切换,例如暂停或恢复虚拟机运行。

  3. 资源调度:Nova会根据计算节点的资源情况和调度策略,合理地将虚拟机分配到合适的计算节点上运行,以实现资源的高效利用和负载均衡。

  4. 虚拟机删除:当用户不再需要某个虚拟机时,Nova可以将其删除,释放其所占用的计算资源,以便这些资源可以被其他虚拟机使用。

Nova的架构

Nova服务由以下几个主要组件构成:

  1. nova-api:这是Nova的核心服务,负责处理来自用户的请求,如创建虚拟机、查询虚拟机状态等。它提供RESTful API接口,供其他OpenStack服务和客户端调用。

  2. nova-scheduler:这个组件负责根据调度策略选择合适的计算节点来运行虚拟机。它会考虑计算节点的资源情况、亲和性规则等因素,以确保虚拟机能够在合适的环境中运行。

  3. nova-conductor:nova-conductor服务作为nova-compute服务和数据库之间的中间层,负责处理与数据库的交互,避免nova-compute服务直接访问数据库,从而提高系统的可扩展性和安全性。

  4. nova-compute:这个组件运行在每个计算节点上,负责管理虚拟机的生命周期,包括创建、启动、停止、删除虚拟机等操作。它与底层的虚拟化技术(如KVM、Xen等)进行交互,以实现对虚拟机的实际操作。

  5. nova-consoleauth:nova-consoleauth服务用于管理对虚拟机控制台的访问权限,确保只有经过授权的用户才能通过控制台访问虚拟机。

  6. nova-novncproxy:nova-novncproxy服务提供了一个基于Web的控制台代理,允许用户通过浏览器访问虚拟机的控制台,方便用户对虚拟机进行管理和操作。

  7. 配置文件:Nova的主要配置文件是nova.conf,其中包含了数据库连接信息、身份认证配置、调度策略配置、计算节点信息等。

工作原理

Nova的工作原理可以概括为以下几个步骤:

  1. 用户请求创建虚拟机:用户通过客户端(如OpenStack命令行工具或Horizon Web界面)向Nova服务发送创建虚拟机的请求,请求中包含虚拟机的配置信息,如镜像ID、规格、网络配置等。

  2. nova-api接收请求:nova-api服务接收到用户请求后,对请求进行验证和解析,然后将其转发给nova-scheduler服务。

  3. nova-scheduler选择计算节点:nova-scheduler根据调度策略和计算节点的资源情况,选择一个合适的计算节点来运行虚拟机,并将选择结果通知nova-conductor服务。

  4. nova-conductor处理请求:nova-conductor服务接收到nova-scheduler的通知后,与nova-compute服务进行通信,将创建虚拟机的请求发送到选定的计算节点上。

  5. nova-compute创建虚拟机:nova-compute服务在计算节点上根据用户请求的配置信息创建虚拟机,并与底层虚拟化技术进行交互,完成虚拟机的创建和启动操作。

  6. 用户访问虚拟机:虚拟机创建完成后,用户可以通过nova-novncproxy服务提供的Web控制台访问虚拟机,或者通过其他方式(如SSH)登录虚拟机进行管理和操作。

通过以上机制,Nova确保了虚拟机的高效创建、管理和调度,为OpenStack环境中的虚拟化资源管理提供了强大的支持。接下来我将详细介绍如何在计算节点上安装和配置Nova服务,以确保你的OpenStack环境能够高效地管理虚拟机资源。

安装配置nova服务

控制节点已经准备好了数据库以及Nova用户密码等信息,无需重复在controller做,只在计算节点。

安装nova服务

在计算节点上安装Nova服务所需的软件包,以及libvirt库,用于管理虚拟机的生命周期。

1
yum install libvirt openstack-nova-compute -y

准备nova配置文件

/etc/nova/nova.conf 是Nova服务的主要配置文件,用于定义Nova的各种运行参数,包括身份认证、消息队列、网络配置等。

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
crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
crudini --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:LiXiaohui@controller
crudini --set /etc/nova/nova.conf DEFAULT my_ip 192.168.8.20
crudini --set /etc/nova/nova.conf DEFAULT compute_driver libvirt.LibvirtDriver
crudini --set /etc/nova/nova.conf DEFAULT log_dir /var/log/nova
crudini --set /etc/nova/nova.conf DEFAULT lock_path /var/lock/nova
crudini --set /etc/nova/nova.conf DEFAULT state_path /var/lib/nova
crudini --set /etc/nova/nova.conf api auth_strategy keystone
crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://controller:5000
crudini --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:5000
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service
crudini --set /etc/nova/nova.conf keystone_authtoken username nova
crudini --set /etc/nova/nova.conf keystone_authtoken password LiXiaohui
crudini --set /etc/nova/nova.conf service_user send_service_user_token true
crudini --set /etc/nova/nova.conf service_user auth_url http://controller:5000/identity
crudini --set /etc/nova/nova.conf service_user auth_strategy keystone
crudini --set /etc/nova/nova.conf service_user auth_type password
crudini --set /etc/nova/nova.conf service_user project_domain_name Default
crudini --set /etc/nova/nova.conf service_user user_domain_name Default
crudini --set /etc/nova/nova.conf service_user project_name service
crudini --set /etc/nova/nova.conf service_user username nova
crudini --set /etc/nova/nova.conf service_user password LiXiaohui
crudini --set /etc/nova/nova.conf neutron url http://controller:9696
crudini --set /etc/nova/nova.conf neutron auth_url http://controller:5000
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name default
crudini --set /etc/nova/nova.conf neutron user_domain_name default
crudini --set /etc/nova/nova.conf neutron region_name RegionOne
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password LiXiaohui
crudini --set /etc/nova/nova.conf neutron service_metadata_proxy True
crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret LiXiaohui
crudini --set /etc/nova/nova.conf vnc enabled true
crudini --set /etc/nova/nova.conf vnc server_listen ' $my_ip'
crudini --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip'
crudini --set /etc/nova/nova.conf vnc novncproxy_base_url http://192.168.8.10:6080/vnc_auto.html
crudini --set /etc/nova/nova.conf glance api_servers http://controller:9292
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
crudini --set /etc/nova/nova.conf placement region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name Default
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name Default
crudini --set /etc/nova/nova.conf placement auth_url http://controller:5000/v3
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password LiXiaohui
crudini --set /etc/nova/nova.conf libvirt virt_type qemu #如果是物理机或者支持虚拟化硬件加速,请设置为kvm

或者

1
2
3
4
5
6
7
8
9
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:LiXiaohui@controller
my_ip = 192.168.8.20
compute_driver = libvirt.LibvirtDriver
log_dir = /var/log/nova
lock_path = /var/lock/nova
state_path = /var/lib/nova
  • enabled_apis: 启用的API服务,包括OpenStack Compute API (osapi_compute) 和元数据服务 (metadata)。

  • transport_url: 消息队列的连接地址,使用RabbitMQ作为消息队列服务,用户名为openstack,密码为LiXiaohui,主机为controller

  • my_ip: 当前计算节点的IP地址,Nova服务会使用这个IP地址进行通信。

  • compute_driver: 指定虚拟化驱动,这里使用libvirt作为虚拟化管理工具。

  • log_dir: Nova服务的日志文件存储目录。

  • lock_path: 用于存储锁文件的路径,防止多个进程同时操作相同的资源。

  • state_path: 用于存储Nova服务的状态信息,如虚拟机的持久化数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[api]
...
auth_strategy = keystone

[keystone_authtoken]
...
www_authenticate_uri = http://controller:5000/
auth_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 = nova
password = LiXiaohui
1
2
3
4
5
6
7
8
9
10
[service_user]
send_service_user_token = true
auth_url = http://controller:5000/identity
auth_strategy = keystone
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = LiXiaohui
1
2
3
4
5
6
[vnc]
...
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://192.168.8.10:6080/vnc_auto.html
  • enabled: 是否启用VNC服务。

  • server_listen: VNC服务器监听的IP地址,这里监听所有网络接口。

  • server_proxyclient_address: VNC代理客户端地址,这里使用my_ip变量,即192.168.8.20

  • novncproxy_base_url: VNC代理的基地址,用于通过Web浏览器访问VNC控制台。这里指向http://192.168.8.10:6080/vnc_auto.html

1
2
3
4
5
6
7
[glance]
...
api_servers = http://controller:9292

[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
1
2
3
4
5
6
7
8
9
10
[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 = LiXiaohui

启动nova服务

在完成配置后,启动Nova服务,并设置为开机自启:

1
systemctl enable libvirtd.service openstack-nova-compute.service --now

启用网络模块支持

为了确保Nova服务能够正常运行,需要启用相关的网络模块支持。以下是启用网络模块支持的命令:

1
2
3
4
5
6
7
8
9
cat <<EOF | sudo tee /etc/modules-load.d/openstack.conf
br_netfilter
EOF
modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

检测虚拟化硬件加速

安装和配置Nova服务,需要确认计算节点是否支持虚拟化硬件加速。这一步对于确保虚拟机能够高效运行至关重要。
运行以下命令来检测计算节点是否支持虚拟化硬件加速:

1
egrep -c '(vmx|svm)' /proc/cpuinfo
  • 返回值为1或更大:表示计算节点支持硬件加速。在这种情况下,Nova服务将使用KVM作为虚拟化技术,这通常不需要额外的配置。

  • 返回值为0:表示计算节点不支持硬件加速。在这种情况下,必须在/etc/nova/nova.conf中将libvirt配置为使用QEMU而不是KVM。

如果计算节点不支持硬件加速,需要在/etc/nova/nova.conf中进行以下配置:

1
2
3
[libvirt]
...
virt_type = qemu # 如果是物理机或者支持虚拟化硬件加速,请设置为kvm

接下来的文章中提供了LinuxBridge、OpenvSwitch两个种方式,随便哪个都可以,但是你只能在集群中启用一种方式。