实验环境
在源码部署 Keystone 和 Glance 之后,继续进行 Nova 的部署。环境设定和 Keystone 部署相关操作见 Ubuntu 18.04 源码安装 Keystone (Victoria) 。
Placement
Placement 用于管理资源,核心功能是帮助用户寻找满足资源需求的设备,Placement 提供 REST API,并使用 json 格式交换数据。使用 Placement 服务的包括 Nova、Neutron 等组件,因此在部署 Nova 前需要部署 Placement ,管理计算资源(主机)。
数据库配置
MySQL 数据库配置,密码 mysql
1 2 3 4
| CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'PLACEMENT_DBPASS'; GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS';
|
身份认证和 API 配置
1 2 3 4 5 6 7 8 9
| . admin-openrc
openstack user create --domain default --password-prompt placement
openstack role add --project service --user placement admin
|
创建服务实体和服务 API 端点
1 2 3 4 5 6 7
| openstack service create --name placement --description "Placement API" placement
openstack endpoint create --region RegionOne placement public http://127.0.0.1:8778 openstack endpoint create --region RegionOne placement internal http://127.0.0.1:8778 openstack endpoint create --region RegionOne placement admin http://127.0.0.1:8778
|
安装依赖
下载 Placement 源码,指定 Victoria 版本
1 2
| git clone https://github.com/openstack/placement.git --branch stable/victoria --single-branch
|
进入 Placement 目录安装相关依赖
1 2 3 4 5
| cd placement
sudo apt install $(bindep -b) -y
|
使用 pip 安装相关依赖
1 2 3 4
| pip install -r requirements.txt pip install -r test-requirements.txt pip install -e .
|
配置文件
使用 tox 生成配置文件
手动创建目录,将配置文件拷贝过去
1 2 3 4 5 6 7 8
| sudo mkdir /etc/placement
sudo cp etc/placement/placement.conf.sample /etc/placement/placement.conf
sudo vim /etc/placement/placement.conf
|
在相应小节添加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [placement_database] connection = mysql+pymysql://placement:PLACEMENT_DBPASS@127.0.0.1/placement
[api] auth_strategy = keystone
[keystone_authtoken] auth_url = http://127.0.0.1:5000/v3
auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = placement password = placement
|
部署 Placement
安装 Placement
1
| sudo python setup.py install
|
启用服务
PS:打印的日志信息提示在生产环境中不要使用 placement-api
1 2 3 4 5 6 7 8
| .tox/shared/bin/placement-manage db sync
service apache2 restart
placement-api --port 8778
|
测试
验证服务正常运行
1 2 3 4 5
| . admin-openrc
placement-status upgrade check
|
Nova
Nova 本身包含多个组件,对外提供 RESTful API,内部组件使用 RPC 和消息队列传递消息。而且每个内部组件都可以横向扩展,部署多个。
环境配置
安装 rabbitmq(官方推荐,也支持其他几个消息队列)
1 2 3 4 5 6 7
| sudo apt install rabbitmq-server -y
sudo rabbitmqctl add_user openstack RABBIT_PASS
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
|
MySQL 数据库配置,密码 mysql
1 2 3 4 5 6 7 8 9 10
| CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0;
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'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
|
身份认证和 API 配置
1 2 3 4 5 6 7 8 9
| . admin-openrc
openstack user create --domain default --password-prompt nova
openstack role add --project service --user nova admin
|
创建服务实体和服务 API 端点
1 2 3 4 5 6 7
| openstack service create --name nova --description "OpenStack Compute" compute
openstack endpoint create --region RegionOne compute public http://127.0.0.1:8774/v2.1 openstack endpoint create --region RegionOne compute internal http://127.0.0.1:8774/v2.1 openstack endpoint create --region RegionOne compute admin http://127.0.0.1:8774/v2.1
|
部署 Nova
下载 Nova 源码,指定 Victoria 版本
1 2
| git clone https://github.com/openstack/nova.git --branch stable/victoria --single-branch
|
进入 Nova 目录安装相关依赖
1 2 3 4 5
| cd nova
sudo apt install $(bindep -b) -y
|
使用 pip 安装相关依赖
1 2 3
| pip install -r requirements.txt pip install -r test-requirements.txt
|
使用 tox 生成配置文件
手动创建目录,将配置文件拷贝过去,paste-ini 文件用于配置 WSGI 程序
1 2 3 4 5 6 7 8 9
| sudo mkdir /etc/nova
sudo cp etc/nova/nova.conf.sample /etc/nova/nova.conf sudo cp etc/nova/api-paste.ini /etc/nova/api-paste.ini
sudo vi /etc/nova/nova.conf
|
在相应的小节添加配置,同样,没有安装 memcached 所以对应的配置注释掉了
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
| [api_database] connection = mysql+pymysql://nova:NOVA_DBPASS@127.0.0.1/nova_api
[database] connection = mysql+pymysql://nova:NOVA_DBPASS@127.0.0.1/nova
[DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@127.0.0.1:5672/ my_ip = 127.0.0.1
[api] auth_strategy = keystone
[keystone_authtoken] www_authenticate_uri = http://127.0.0.1:5000/ auth_url = http://127.0.0.1:5000/
auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = nova
[vnc] enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip novncproxy_base_url = http://127.0.0.1:6080/vnc_auto.html
[glance] api_servers = http://127.0.0.1:9292
[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://127.0.0.1:5000/v3 username = placement password = placement
|
nova-novncproxy 依赖 novnc ,直接克隆到相应目录,该组件用于协调 nova-compute 服务和数据库之间的交互。
1
| sudo git clone https://github.com/novnc/noVNC.git /usr/share/novnc/
|
安装 Nova
1
| sudo python setup.py install
|
启用服务 nova-api、nova-scheduler、nova-conductor、nova-novncproxy 。nova-novncproxy 是可选的,它用于协调 nova-compute 服务和数据库之间的交互。
PS:这里使用 .tox 文件夹下的工具,否则会报错,最终的结果是写入数据库,所以这个问题还是暂时不管
1 2 3 4 5 6 7 8 9 10 11 12
| .tox/shared/bin/nova-manage --config-file /etc/nova/nova.conf api_db sync .tox/shared/bin/nova-manage --config-file /etc/nova/nova.conf cell_v2 map_cell0 .tox/shared/bin/nova-manage --config-file /etc/nova/nova.conf cell_v2 create_cell --name=cell1 --verbose .tox/shared/bin/nova-manage --config-file /etc/nova/nova.conf db sync .tox/shared/bin/nova-manage --config-file /etc/nova/nova.conf cell_v2 list_cells
sudo nova-api --config-file=/etc/nova/nova.conf --config-file=/etc/nova/api-paste.ini --debug sudo nova-scheduler --config-file=/etc/nova/nova.conf --config-file=/etc/nova/api-paste.ini --debug sudo nova-conductor --config-file=/etc/nova/nova.conf --config-file=/etc/nova/api-paste.ini --debug sudo nova-novncproxy --config-file=/etc/nova/nova.conf --config-file=/etc/nova/api-paste.ini --debug
|
nova-compute
由于本地测试环境是单机(Ubuntu 18.04 虚拟机),而且通常 nova-compute 不会装在控制节点上,因此没有进行配置。因为没有使用 nova-compute 所以 nova-novncproxy 和 Placement 都是可选的(应该)。
计算节点,启用 nova-compute
1 2 3 4 5 6
| egrep -c '(vmx|svm)' /proc/cpuinfo
systemctl enable libvirtd.service openstack-nova-compute.service systemctl start libvirtd.service openstack-nova-compute.service
|
配置文件 /etc/nova/nova-compute.conf
1 2
| [libvirt] virt_type = qemu
|
启用服务
1
| service nova-compute restart
|
测试
验证服务正常运行
1 2
| nova-status upgrade check
|
使用 OpenStack Client 执行与计算服务有关的操作
1 2 3 4 5
| . admin-openrc
openstack compute service list
|
参阅