1、概述
使用OpenStack Compute来托管和管理云计算系统。OpenStack Compute是基础架构即服务(IaaS)系统的主要部分。主要模块在Python中实现。
OpenStack Compute与OpenStack Identity进行交互以进行身份验证; 和OpenStack Image交互以进行磁盘和服务器镜像管理; 和OpenStack dashboard交互以提供用户和管理界面的接口。镜像访问受到项目和用户的限制; 每个项目的配额有限(例如数量)。OpenStack Compute可以在标准硬件上水平扩展,并下载镜像以启动实例。
OpenStack Compute由以下几个方面组成:
- 接受并响应最终用户的计算API调用。该服务支持OpenStack Compute API,Amazon EC2 API和特殊的Admin API,用于特权用户执行管理操作。它执行一些策略并启动大多数业务流程活动,例如运行一个实例。
-
接受来自实例的元数据请求。
nova-api-metadata
当您在多主机模式下运行nova-network
安装时,通常使用该服务 。 -
通过虚拟机管理程序API创建和终止虚拟机实例的工作程序守护程序。例如:
- 适用于XenServer / XCP的XenAPI
- KVM或QEMU的libvirt
- 适用于VMware的VMwareAPI
处理相当复杂。基本上,守护程序接受队列中的操作,并执行一系列系统命令,例如启动KVM实例并更新数据库中的状态。
- 从队列获取虚拟机实例请求,并确定运行哪个计算服务器主机。
-
中介
nova-compute
服务和数据库之间的交互。它消除了对nova-compute
服务器所做的云数据库的直接访问。该nova-conductor
模块水平缩放。但是,请勿将其部署到nova-compute
运行服务的节点上 。 -
为X509证书提供Nova Cert服务的服务器守护程序。用于生成证书
euca-bundle-image
。只需要EC2 API。 -
与
nova-compute
服务类似,接受队列中的联网任务并操纵网络。执行诸如设置桥接接口或更改IPtables规则等任务。 -
为控制台代理提供的用户授权令牌。看到
nova-novncproxy
和nova-xvpvncproxy
。此服务必须运行才能使控制台代理工作。您可以在集群配置中针对单个nova-consoleauth服务运行任一类型的代理。 - 提供通过VNC连接访问运行实例的代理。支持基于浏览器的novnc客户端。
- 提供通过SPICE连接访问运行实例的代理。支持基于浏览器的HTML5客户端。
- 提供通过VNC连接访问运行实例的代理。支持特定于OpenStack的Java客户机。
- x509证书。
- 允许用户作为租户管理员或最终用户提交命令。 The queue
- 在守护进程之间传递消息的中心枢纽。通常用 RabbitMQ 实现,也可以用另一个AMQP消息队列来实现,如 ZeroMQ 。 SQL数据库
nova-api
服务
nova-api-metadata
服务
nova-compute
服务
nova-scheduler
服务
nova-conductor
模
nova-cert
模型
nova-network worker
守护进程
nova-consoleauth
守护进程
nova-novncproxy
守护进程
nova-spicehtml5proxy
守护进程
nova-xvpvncproxy
守护进程
nova-cert
守护进程
nova
客户
存储云基础架构的大部分构建时间和运行时状态,包括:
- 可用的实例类型
- 正在使用的实例
- 可用网络
- 项目
理论上,OpenStack Compute可以支持SQL-Alchemy支持的任何数据库。公共数据库是用于测试和开发工作的SQLite3,MySQL,MariaDB和PostgreSQL。
-
2、环境准备
2.1、创建数据库(,服务凭据和API端点)。
2.1.1、连接数据库
# mysql -u root -p
2.1.2、创建nova_api
和nova
数据库
MariaDB [(none)]> CREATE DATABASE nova_api; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> CREATE DATABASE nova; Query OK, 1 row affected (0.00 sec)
2.1.3、授予数据库访问权限
MariaDB [(none)]> grant all privileges on nova_api .* to 'nova'@'localhost' identified by 'daemon'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> grant all privileges on nova_api .* to 'nova'@'%' identified by 'daemon'; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> grant all privileges on nova .* to 'nova'@'localhost' identified by 'daemon'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> grant all privileges on nova .* to 'nova'@'%' identified by 'daemon'; Query OK, 0 rows affected (0.00 sec)
2.2、输入admin
凭据以访问仅管理CLI命令
# source admin-openrc
2.3、创建服务凭据
2.3.1、创建nova
用户
# openstack user create --domain default \ > --password-prompt nova User Password: Repeat User Password: +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 037784f488424d98aa48586caf0813cf | | name | nova | | password_expires_at | None | +---------------------+----------------------------------+
2.3.2、将admin
角色添加到nova
用户
# openstack role add --project service --user nova admin
2.3.3、创建nova
服务实体
# openstack service create --name nova \ > --description "OpenStack Compute" compute +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Compute | | enabled | True | | id | 512ecd99568448178f7beb16720bc7ba | | name | nova | | type | compute | +-------------+----------------------------------+
2.4、创建Compute服务API端点
# openstack endpoint create --region RegionOne \ > compute public http://controller:8774/v2.1/%\(tenant_id\)s +--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | 0b3eaec2ea364ba1b3c1e6b67c99847f | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 512ecd99568448178f7beb16720bc7ba | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1/%(tenant_id)s | +--------------+-------------------------------------------+
# openstack endpoint create --region RegionOne \ > compute internal http://controller:8774/v2.1/%\(tenant_id\)s +--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | 9a8ead97c6f04bb8a88991fa8425e3a0 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 512ecd99568448178f7beb16720bc7ba | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1/%(tenant_id)s | +--------------+-------------------------------------------+
# openstack endpoint create --region RegionOne \ > compute admin http://controller:8774/v2.1/%\(tenant_id\)s +--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | 7d2825d796944fc3a6e8155a7c2b75c9 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 512ecd99568448178f7beb16720bc7ba | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1/%(tenant_id)s | +--------------+-------------------------------------------+
3、在控制节点上安装和配置compute服务
3.1、安装软件包
yum install openstack-nova-api openstack-nova-conductor \ openstack-nova-console openstack-nova-novncproxy \ openstack-nova-scheduler
3.2、配置(/etc/nova/nova.conf)
3.2.1、在[DEFAULT]节
中,仅启用计算和元数据API
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
3.2.2、在[api_database]
和[database]
部分,配置数据库访问
[api_database] ... connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api [database] ... connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
3.2.3、在[DEFAULT]
节中,配置RabbitMQ
消息队列访问
[DEFAULT] ... transport_url = rabbit://openstack:RABBIT_PASS@controller
3.2.4、在[DEFAULT]
和[keystone_authtoken]
部分,配置身份服务访问
[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
NOTICE:注释掉或删除该[keystone_authtoken]
部分中的任何其他选项 。
3.2.5、在[DEFAULT]
节中,配置my_ip
选项以使用控制器节点的管理接口IP地址
[DEFAULT] ... my_ip = 10.0.0.11
3.2.6、在[DEFAULT]
节中,启用对网络服务的支持
[DEFAULT] ... use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver
Notice:默认情况下,Compute使用内部防火墙驱动程序。由于网络服务包含防火墙驱动程序,
因此您必须使用nova.virt.firewall.NoopFirewallDriver
防火墙驱动程序,
禁用Compute防火墙驱动程序。
3.2.7、在[vnc]
节中,配置VNC代理以使用控制器节点的管理接口IP地址
[vnc] ... vncserver_listen = $my_ip vncserver_proxyclient_address = $my_ip
3.2.8、在[glance]
节中,配置Image Service API的位置
[glance] ... api_servers = http://controller:9292
3.2.9、在[oslo_concurrency]节
中,配置锁定路径
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
3.3、完成以上配置之后,填充数据库
# su -s /bin/sh -c "nova-manage api_db sync" nova # su -s /bin/sh -c "nova-manage db sync" nova
忽略此输出中的任何废弃消息。
3.4、完成安装,设置启动和自启动
# systemctl enable openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service # systemctl start openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service
4、在计算节点上安装和配置Compute服务
4.1、安装和配置组件(/etc/nova/nova.conf)
4.1.1、安装软件包
# yum install openstack-nova-compute
4.1.2、配置组件
4.1.2.1、在[DEFAULT]
部分中,仅启用计算和元数据API
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
4.1.2.2、在[DEFAULT]
节中,配置RabbitMQ
消息队列访问
[DEFAULT] ... transport_url = rabbit://openstack:RABBIT_PASS@controller
4.1.2.3、在[DEFAULT]
和[keystone_authtoken]
部分,配置身份服务访问
[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
注释掉或删除该[keystone_authtoken]
部分中的任何其他选项 。
4.1.2.4、在[DEFAULT]
节中,配置my_ip
选项
[DEFAULT] ... my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
替换MANAGEMENT_INTERFACE_IP_ADDRESS
为计算节点上的管理网络接口的IP地址
4.1.2.5、在[DEFAULT]
节中,启用对网络服务的支持
[DEFAULT] ... use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver
默认情况下,Compute使用内部防火墙服务。由于网络包括防火墙服务,因此您必须使用nova.virt.firewall.NoopFirewallDriver
防火墙驱动程序禁用Compute防火墙服务 。
4.1.2.6、在[vnc]
节中,启用和配置远程控制台访问
[vnc] ... enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html
服务器组件侦听所有IP地址,代理组件只侦听计算节点的管理接口IP地址。基本URL表示可以使用Web浏览器访问此计算节点上实例的远程控制台的位置。
4.1.2.7、在[glance]
节中,配置Image Service API的位置
[glance] ... api_servers = http://controller:9292
4.1.2.8、在[oslo_concurrency]
部分中,配置锁定路径
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
4.2、完成安装
4.2.1、确定您的计算节点是否支持虚拟机的硬件加速
# egrep -c '(vmx|svm)' /proc/cpuinfo
如果此命令返回大于0的值,则您的计算节点支持硬件加速,通常不需要额外的配置。
如果此命令返回值0
,则您的计算节点不支持硬件加速,您必须配置libvirt
为使用QEMU而不是KVM。
4.2.1.1、编辑 /etc/nova/nova.conf
文件中的[libvirt]
部分
[libvirt]
...
virt_type = qemu
4.2.2、启动Compute服务,包括其依赖关系,并将其配置为在系统引导时自动启动
# systemctl enable libvirtd.service openstack-nova-compute.service # systemctl start libvirtd.service openstack-nova-compute.service
如果nova-compute
服务无法启动,请检查/var/log/nova/nova-compute.log
。错误消息 可能表示控制器节点上的防火墙阻止访问端口5672。AMQP server on controller:5672 isunreachable
5、问题
5.1、4.2.2中无法启动计算服务
原因为无法连接控制节点5672端口,可以使用以下命令开放该端口
开放5672端口 # firewall-cmd --permanent --add-port=5672/tcp 重启防火墙服务 # systemctl restart firewalld.service
6、在控制器节点上 验证操作
6.1、读取admin
凭据以访问仅管理CLI命令
# source admin-openrc
6.2、列出服务组件,以验证每个进程的成功启动和注册
# openstack compute service list +----+------------------+------------+----------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+------------------+------------+----------+---------+-------+----------------------------+ | 1 | nova-consoleauth | controller | internal | enabled | up | 2017-07-21T02:04:33.000000 | | 2 | nova-conductor | controller | internal | enabled | up | 2017-07-21T02:04:33.000000 | | 5 | nova-scheduler | controller | internal | enabled | up | 2017-07-21T02:04:33.000000 | | 7 | nova-compute | compute | nova | enabled | up | 2017-07-21T02:04:30.000000 | +----+------------------+------------+----------+---------+-------+----------------------------+
该输出应指示在控制器节点上启用的三个服务组件和在计算节点上启用的一个服务组件