1.前言
Openstack计算服务通过认证服务获取认证;通过镜像服务获取镜像;通过仪表盘提供的用户界面与用户交互。镜像的存取受工程和用户的限制,配额受工程的限制(例如不同工程允许虚拟机实例数量不同)。Openstack计算服务可以在标准硬件上进行横向扩展,可以下载镜像并开启虚拟机实例。
Openstack计算服务包含如下几部分,每部分都对应一个组件:
-
nova-api
接收并响应终端用户的计算服务API调用。该服务执行若干策略并且发起大多数编排行为,比如运行某个虚拟机实例。
nova-api-metadata 服务
接收来自虚拟机实例的元数据请求。当用户处在多主机模式中与nova-network协作时,通常会使用nova-api-metadata 。更多信息参考Metadata service in the OpenStack Administrator Guide.nova-compute service
一个守护进程(worker daemon),通过虚拟机管理程序的API来创建和销毁虚拟机实例。例如:
XenAPI for XenServer/XCP
libvirt for KVM or QEMU
VMwareAPI for VMware
处理过程是相当复杂的。基本的,该进程接收队列中的动作并且声称一系列系统命令,例如启动一个KVM实例或者在数据库中更新它的状态。nova-scheduler service
从队列中获取虚拟机实例的请求并决定其运行在哪个实际的计算服务节点。nova-conductor module
提供nove-compute服务与数据库的交互方式,防止nova-compute服务与云计算系统数据库有直接的交互。Nova-conductor支持横向扩展。需要注意的是,不要将nova-conductor服务部署在运行着nova-compute服务的节点上。更多信息,参见metadata service
理论上,Openstack计算服务支持任何形式的关系型数据库。一般情况下,测试与研发过程多使用SQLite3,还包括MySQL,PostgreSQL。
2.控制节点安装
2.1安装前提
在安装和配置Nova前,需要创建数据库,服务认证和API endpoint。
2.1.1 创建数据库
创建使用root用户登陆数据库client:
mysql -u root -p
2.创建nova-api和nova数据库
MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
3.给数据库赋予权限
NOVA_DBPASS用合适的密码替代:123456
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
- 4.退出数据库:exit
2.1.2source admin-openrc
. admin-openrc
2.1.3 创建服务授权证书
- 1.创建“nova”user,用户密码为123456
openstack user create --domain default --password-prompt nova
- 2.将admin角色添加到“nova”user
openstack role add --project service --user nova admin
- 3.创建nova服务实例
openstack service create --name nova --description "OpenStack Compute" compute
2.1.4 创建计算服务API endpoint
-
Public
openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1/%\(tenant_id\)s Internal
openstack endpoint create --region RegionOne \
compute internal http://controller:8774/v2.1/%\(tenant_id\)s
- admin
openstack endpoint create --region RegionOne \
compute admin http://controller:8774/v2.1/%\(tenant_id\)s
2.2安装与配置组件
2.2.1安装包
apt-get install nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler
2.2.2配置文件
1.修改配置文件/etc/nova/nova.conf
- 在[DEFAULT]部分
添加如下部分,仅仅enable comput和metadate APIS,其他的部分删除ec2
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
- 在[api_database] 和 [database] 部分
配置数据参数信息,NOVA_DBPASS用nova数据库的密码123456替代。
[api_database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
- 在 [DEFAULT] 和 [oslo_messaging_rabbit] 部分
配置消息队列参数RabbitMQ:RABBIT_PASS用具体密码代替
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
- 在[DEFAULT]和[Keystone_authtoken]
配置身份认证参数,NOVA_PASS用实际的密码123456替换
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = NOVA_PASS
- 在[DEFAULT]里配置网络
添加参数“my_ip”为管理节点的ip地址
[DEFAULT]
...
my_ip = 10.10.80.180
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
- 在[VNC]配置
VNC代理,配置为管理节点$my_ip,值在上一步骤中赋予。
[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
- 在[glance]部分
配置镜像服务API
[glance]
api_servers = http://controller:9292
- 在 [oslo_concurrency] 部分
配置lock path
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
- 在[default]中移除logdir
2.2.3 同步数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova
2.2.4完成安装,重启服务
service nova-api restart
service nova-consoleauth restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart
3.计算节点安装
3.1 安装包
apt-get install nova-compute
3.2 配置文件/etc/nova/nova.conf
- 在[DEFAULT]和[oslo_messaging_rabbit]部分
配置RabbitMQ接口,RABBIT_PASS用实际使用密码123456替代。
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
- 在[DEFAULT]和[keystone_authtoken]部分
配置身份认证接口,NOVA_PASS用认证服务中为nova配置的实际密码123456替代。
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = NOVA_PASS
- 在[DEFAULT]和[keystone_authtoken]部分
配置身份认证接口,NOVA_PASS用认证服务中为nova配置的实际密码123456替代。
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = NOVA_PASS
- 在[DEFAULT]部分
配置my_ip,ip地址为此计算节点的ip
[DEFAULT]
...
my_ip = 10.10.80.181
- 在[DEFAULT]部分
添加支持网络服务参数
[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
- 在[vnc]部分
激活和配置远程端口访问
[vnc]
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
- 在[glance]部分
配置image的API服务
[glance]
api_servers = http://controller:9292
- 在[oslo_concurrency]部分
配置lock路径
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
- 在[default]中移除“logdir”参数
3.3安装完成
3.3.1确定是否计算节点支持虚拟设备的硬件加速
egrep -c '(vmx|svm)' /proc/cpuinfo
如果返回1或更多,则计算节点支持硬件优化,不需要额外配置。
如果返回zero,则计算节点不支持硬件优化,必须配置libvirt来使用QEMU,而不是KVM。具体的配置参考:配置libvirt中finalize installation-1。
3.3.2重启计算服务
service nova-compute restart
4.验证
在控制节点上进行以下操作:
- 1.在/root目录下执行命令
. admin-openrc
- 2.列举所有的服务,验证是否成功启动和注册
openstack compute service list
正常情况在管理节点出现三个激活的服务组件,在计算节点列出一个激活的服务组件: