【版本】
当前版本号v20240314
版本 | 修改说明 |
---|---|
v20240314 | 新增日志查看说明、常见问题和命令结果展示 |
v20240312 | 修正部分错误 |
v20240310 | 新增参考配置 |
v20240305 | 把控制节点nova服务启动命令放回到6.1 |
v20230701 | 文档基于 RockyLinux8 和 Openstack Yoga 开发 |
任务6.1 - 控制节点安装 nova 服务
【任务目的】
- 掌握搭建 Openstack Nova 组件
【任务环境】
- 内存:至少4G
- 硬盘:至少空余40G
- 操作系统: 64位 Windows系统。
【任务资源】
- FinalShell
- RockyLinux 8 系统镜像
- VirtualBox
【任务原理】
- nova-api:接受并响应所有的计算服务请求,管理虚拟机(云主机)生命周期
- nova-compute(多个):真正管理虚拟机
- nova-scheduler:nova调度器(挑选出最合适的nova-compute来创建虚机)
- nova-conductor:帮助nova-compute代理修改数据库中虚拟机的状态
- nova-consoleauth和nova-novncproxy:web版的vnc来直接操作云主机
- novncproxy:web版 vnc客户端
- nova-api-metadata:接受来自虚拟机发送的元数据请求
【任务步骤】
- 使用Root用户登录控制节点(Controller)。输出 Hostname ,确认所在节点时控制节点。
hostname
结果:
controller+你的学号后3位
注意以下步骤在控制节点(Controller)上执行!
创建 nova 相关数据库
- 使用 root 用户登录 MariaDB 数据库,密码为
123456
。创建nova_api
和nova
库,nova 用户和授权。
mysql -u root -p
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';
exit;
控制节点创建 nova 用户
- 在 Keystone 创建系统用户 nova,并关联 admin 角色
source /etc/keystone/admin-openrc
openstack user create --domain default --password NOVA_PASS nova
openstack role add --project service --user nova admin
控制节点创建 nova service 和 endpoint
- 在 Keystone 上创建 Nova Service 和 Endpoint。注意替换你的学号
source /etc/keystone/admin-openrc
openstack service create --name nova --description "OpenStack Compute" compute
openstack endpoint create --region RegionOne compute public http://controller+你学号后3位:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://controller+你学号后3位:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://controller+你学号后3位:8774/v2.1
注意这里的 service 不能重复创建,运行命令
openstack service list
应该只能查看到1个 Nova 的 service,如果有多个可以用openstack service delete '替换为service ID'
命令删除
注意这里 endpoint 不能重复创建,运行命令
openstack endpoint list
应该只能查看到3个 Nova 的 endpoint,如果有多个可以用openstack endpoint delete '替换为endpoint ID'
命令删除
控制节点安装 nova 相关软件并进行配置
- 安装 Nova 服务相应软件包
dnf install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y
- 备份 Nova 的配置文件。
cp /etc/nova/nova.conf{,.bak}
grep '^[a-Z\[]' /etc/nova/nova.conf.bak >/etc/nova/nova.conf
- 修改相应服务的配置文件。注意替换你的学号。
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend rabbit
openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 10.0.0.11
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@controller+你学号后3位:5672/
openstack-config --set /etc/nova/nova.conf DEFAULT verbose True
openstack-config --set /etc/nova/nova.conf DEFAULT debug True
openstack-config --set /etc/nova/nova.conf DEFAULT log_dir /var/log/nova
openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@controller+你学号后3位/nova_api
openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@controller+你学号后3位/nova
openstack-config --set /etc/nova/nova.conf glance api_servers http://controller+你学号后3位:9292
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://controller+你学号后3位:5000
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller+你学号后3位:5000
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller+你学号后3位:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf vnc enabled true
openstack-config --set /etc/nova/nova.conf vnc server_listen '$my_ip'
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip'
openstack-config --set /etc/nova/nova.conf service_user send_service_user_token true
openstack-config --set /etc/nova/nova.conf service_user auth_url http://controller+你学号后3位:5000/identity
openstack-config --set /etc/nova/nova.conf service_user auth_strategy keystone
openstack-config --set /etc/nova/nova.conf service_user auth_type password
openstack-config --set /etc/nova/nova.conf service_user project_domain_name Default
openstack-config --set /etc/nova/nova.conf service_user project_name service
openstack-config --set /etc/nova/nova.conf service_user user_domain_name Default
openstack-config --set /etc/nova/nova.conf service_user username nova
openstack-config --set /etc/nova/nova.conf service_user password NOVA_PASS
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://controller+你学号后3位:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
可以用vim 打开
/etc/nova/nova.conf
配置文件与控制节点 /etc/nova/nova.conf 参考配置进行比对确认。
- 同步
nova_api
数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
- 注册cell0数据库
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
- 创建一个名为
cell1
的 cell(单元)。
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
- 这一步可能会出现以下提示,并不是错误
--transport-url not provided in the command line, using the value [DEFAULT]/transport_url from the configuration file
--database_connection not provided in the command line, using the value [database]/connection from the configuration file
Openstack 的 Cell,指的是一些大型部署使用该功能将计算节点划分为更小的组,每个组成为一个 Cell,并配有自己的数据库和队列。 从未调度的实例将被降级到 cell0 数据库,该数据库实际上是无法启动的实例的墓地。所有成功/正在运行的实例都存储在“cell1”中。
- 查看
cell0
和cell1
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
- 此命令会返回类似以下结果
+-------+--------------------------------------+---------------------------------------------+----------------------------------------------------+----------+
| 名称 | UUID | Transport URL | 数据库连接 | Disabled |
+-------+--------------------------------------+---------------------------------------------+----------------------------------------------------+----------+
| cell0 | 00000000-0000-0000-0000-000000000000 | none:/ | mysql+pymysql://nova:****@controller999/nova_cell0 | False |
| cell1 | 4655af51-a974-41f4-bfa0-ce50a5a537c8 | rabbit://openstack:****@controller999:5672/ | mysql+pymysql://nova:****@controller999/nova | False |
+-------+--------------------------------------+---------------------------------------------+----------------------------------------------------+----------+
- 同步
nova
数据库
su -s /bin/sh -c "nova-manage db sync" nova
控制节点检查 nova 数据库
- 进入 MariaDB 查看是否有表格出现。密码为
NOVA_DBPASS
。如果有则表示数据库同步成功。
mysql -u nova -pNOVA_DBPASS
use nova;
show tables;
use nova_api;
show tables;
use nova_cell0;
show tables;
- 退出 MariaDB 。
exit
- 启动 Nova 系列服务,并设置为开机启动。
systemctl enable \
openstack-nova-api \
openstack-nova-scheduler \
openstack-nova-conductor \
openstack-nova-novncproxy
systemctl start \
openstack-nova-api \
openstack-nova-scheduler \
openstack-nova-conductor \
openstack-nova-novncproxy
任务6.2 - 计算节点安装 nova 服务
【任务目的】
- 掌握搭建 Openstack Nova 组件
【任务环境】
- 内存:至少4G
- 硬盘:至少空余40G
- 操作系统: 64位 Windows系统。
【任务资源】
- FinalShell
- RockyLinux 8 系统镜像
- VirtualBox
【任务原理】
- nova-api:接受并响应所有的计算服务请求,管理虚拟机(云主机)生命周期
- nova-compute(多个):真正管理虚拟机
- nova-scheduler:nova调度器(挑选出最合适的nova-compute来创建虚机)
- nova-conductor:帮助nova-compute代理修改数据库中虚拟机的状态
- nova-consoleauth和nova-novncproxy:web版的vnc来直接操作云主机
- novncproxy:web版 vnc客户端
- nova-api-metadata:接受来自虚拟机发送的元数据请求
【任务步骤】
- 使用Root用户登录计算节点(Compute)。输出 Hostname ,确认所在节点是计算节点。
hostname
结果:
computer+你的学号后3位
注意以下步骤在计算节点(Computer)上执行!
安装nova-compute
- 安装 nova-compute 和 Openstack-utils。
dnf install /opt/repo/openstack-yoga/python3-sqlalchemy-1.4.31-1.el8.x86_64.rpm -y
dnf install openstack-nova-compute -y
dnf install openstack-utils -y
nova.conf配置
- 备份 Nova 的配置文件。
cp /etc/nova/nova.conf{,.bak}
grep '^[a-Z\[]' /etc/nova/nova.conf.bak >/etc/nova/nova.conf
- 修改相应服务的配置文件。注意替换你的学号。
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@controller+你的学号后3位
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 10.0.0.31
openstack-config --set /etc/nova/nova.conf DEFAULT compute_driver libvirt.LibvirtDriver
openstack-config --set /etc/nova/nova.conf DEFAULT verbose True
openstack-config --set /etc/nova/nova.conf DEFAULT debug True
openstack-config --set /etc/nova/nova.conf DEFAULT log_dir /var/log/nova
openstack-config --set /etc/nova/nova.conf DEFAULT instances_path /var/lib/nova/instances
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://controller+你的学号后3位:5000/
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller+你的学号后3位:5000/
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller+你的学号后3位:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf service_user send_service_user_token true
openstack-config --set /etc/nova/nova.conf service_user auth_url http://controller+你的学号后3位:5000/identity
openstack-config --set /etc/nova/nova.conf service_user auth_strategy keystone
openstack-config --set /etc/nova/nova.conf service_user auth_type password
openstack-config --set /etc/nova/nova.conf service_user project_domain_name Default
openstack-config --set /etc/nova/nova.conf service_user project_name service
openstack-config --set /etc/nova/nova.conf service_user user_domain_name Default
openstack-config --set /etc/nova/nova.conf service_user username nova
openstack-config --set /etc/nova/nova.conf service_user password NOVA_PASS
openstack-config --set /etc/nova/nova.conf vnc enabled true
openstack-config --set /etc/nova/nova.conf vnc server_listen 0.0.0.0
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip'
openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://10.0.0.11:6080/vnc_auto.html
openstack-config --set /etc/nova/nova.conf glance api_servers http://controller+你的学号后3位:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://controller+你的学号后3位:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu
openstack-config --set /etc/nova/nova.conf libvirt cpu_mode none
可以用vim 打开
/etc/nova/nova.conf
配置文件与计算节点 /etc/nova/nova.conf 参考配置进行比对确认。
启动服务
- 启动 libvirtd 服务,并设置为开机启动。此处需要启动你的控制节点,否则无法正常启动
openstack-nova-compute
。
systemctl enable libvirtd
systemctl enable openstack-nova-compute
systemctl start libvirtd
systemctl start openstack-nova-compute
计算节点验证
- 查看 OpenStack 相关服务是否是 active 的状态,正常应该出现3个服务 active。
opst-proc-show.sh
- 正常应该返回以下类似结果,状态应该都是
active
。
UNIT LOAD ACTIVE SUB DESCRIPTION
chronyd.service loaded active running NTP client/server
libvirtd.service loaded active running Virtualization daemon
openstack-nova-compute.service loaded active running OpenStack Nova Compute Server
- 验证
nova.conf
配置文件里面 controller 出现的次数。注意替换为你的个人学号。
grep -o controller+你学号后3位 /etc/nova/nova.conf|wc -l
验证结果:
7
- 如果计算节点的 Nova 进程状态出现问题,可以点击下载此 /etc/nova/nova.conf 参考配置 进行对比。
任务6.3 - 控制节点验证 nova 服务是否安装正确
【任务目的】
- 掌握搭建 Openstack Nova 组件
【任务环境】
- 内存:至少4G
- 硬盘:至少空余40G
- 操作系统: 64位 Windows系统。
【任务资源】
- FinalShell
- RockyLinux 8 系统镜像
- VirtualBox
【任务步骤】
本实验控制节点(Controller)和计算节点(Computer)都需要启动
- 使用Root用户登录控制节点(Controller)。输出 Hostname ,确认所在节点时控制节点。
hostname
结果:
controller+你的学号后3位
注意以下步骤在控制节点(Controller)上执行!
- 查看 OpenStack 相关服务是否是 active 的状态,正常应该出现11个服务 active。
opst-proc-show.sh
- 正常应该返回以下类似结果,状态应该都是
active
。
UNIT LOAD ACTIVE SUB DESCRIPTION
chronyd.service loaded active running NTP client/server
etcd.service loaded active running Etcd Server
httpd.service loaded active running The Apache HTTP Server
mariadb.service loaded active running MariaDB 10.3 database server
memcached.service loaded active running memcached daemon
openstack-glance-api.service loaded active running OpenStack Image Service (code-named Glance) API server
openstack-nova-api.service loaded active running OpenStack Nova API Server
openstack-nova-conductor.service loaded active running OpenStack Nova Conductor Server
openstack-nova-novncproxy.service loaded active running OpenStack Nova NoVNC Proxy Server
openstack-nova-scheduler.service loaded active running OpenStack Nova Scheduler Server
rabbitmq-server.service loaded active running RabbitMQ broker
- 运行以下命令,检查
openstack-nova-compute
服务是否运行在控制节点。
systemctl status openstack-nova-compute
如果此服务 active,说明你实验环境有错,把计算节点的命令运行在了控制节点上。
- 验证
nova.conf
配置文件里面 controller 出现的次数。注意替换为你的个人学号。
grep -o controller+你学号后3位 /etc/nova/nova.conf|wc -l
验证结果:
9
- 查询 nova service,表里应该只有一行记录。
source /etc/keystone/admin-openrc
openstack service list |grep -E "ID|nova"
类似结果:
| ID | Name | Type |
| 58dd2fdf5e624592919302df11e8b74f | nova | compute |
- 查询 nova endpoint,表里应该有3行记录。
source /etc/keystone/admin-openrc
openstack endpoint list |grep -E "ID|nova"
类似结果:
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
| 4350cc63081047e495541008324a844c | RegionOne | nova | compute | True | internal | http://controller9999:8774/v2.1/%(tenant_id)s |
| 56211f55db4f4d928660e8415bc85efb | RegionOne | nova | compute | True | public | http://controller9999:8774/v2.1/%(tenant_id)s |
| 5ae3985f807c41359d8b7d2901a06066 | RegionOne | nova | compute | True | admin | http://controller9999:8774/v2.1/%(tenant_id)s |
- 查询 nova user,表里应该有1行记录。
source /etc/keystone/admin-openrc
openstack user list |grep -E "ID|nova"
类似结果:
| ID | Name |
| c5a480d3f8ba41458926135609074b3c | nova |
检查 nova 服务(守护进程)状态
- 查看 Nova 4个服务状态是否已启用(active)。
systemctl -a|grep -E 'UNIT|nova'
- 正常应该返回类似以下内容
UNIT LOAD ACTIVE SUB DESCRIPTION
openstack-nova-api.service loaded active running OpenStack Nova API Server
openstack-nova-conductor.service loaded active running OpenStack Nova Conductor Server
openstack-nova-novncproxy.service loaded active running OpenStack Nova NoVNC Proxy Server
openstack-nova-scheduler.service loaded active running OpenStack Nova Scheduler Server
- 验证 Compute 服务是否和步骤4生成的一致。
openstack compute service list --service nova-compute
- 正常应该返回类似以下内容
+--------------------------------------+--------------+--------------+------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+--------------------------------------+--------------+--------------+------+---------+-------+----------------------------+
| 6fa1f699-f227-4d4c-a771-55fcd8ee179d | nova-compute | computera999 | nova | enabled | up | 2023-07-13T06:08:16.000000 |
+--------------------------------------+--------------+--------------+------+---------+-------+----------------------------+
- 发现计算节点主机。
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
- 正常应该返回以下结果
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1': 4655af51-a974-41f4-bfa0-ce50a5a537c8
Found 0 unmapped computes in cell: 4655af51-a974-41f4-bfa0-ce50a5a537c8
- 如果控制节点的 Nova 出现问题,可以点击下载此 控制节点 /etc/nova/nova.conf 参考配置 进行对比。
【常见问题FAQ】
【后台进程(服务)说明】
如果某个后台进程(服务)无法启动,需要查看日志,可以使用以下命令,日志文件路径在下表有描述。
tail -100 日志文件
服务名称 | 日志目录/路径 | 说明 |
---|---|---|
chronyd | /var/log/chrony | chrony是网络时间协议(NTP)的实现。它可以替代ntpd,实现服务器 |
rabbitmq-server | /var/log/rabbitmq | RabbitMQ 是高级消息队列协议(AMQP)开放标准的实现,常用于服务器之间的消息通讯,Openstack 使用 RabbitMQ 作为底层组件来实现不同模块之间的远程调用(RPC)。 |
mariadb | /var/log/mariadb | MariaDB 是非常流行的开源关系型数据库,它能够兼容MySQL |
memcached | /var/log/messages | Memcached 是一个基于内存的,开源的分布式对象缓存系统。 Openstack 会使用 Memcached 存储一些短期的对象,例如令牌等。 |
httpd | /var/log/httpd | Apache Web 服务器,对外提供 HTTP 等协议的 Web 访问服务 |
openstack-glance-api | /var/log/glance/api.log | 提供Glance API调用服务,对应配置文件/etc/glance/glance-api.conf,进程端口9292 |
openstack-nova-api | /var/log/nova/nova-api.log | 提供Nova API 调用服务,对应配置文件 /etc/nova/nova.conf |
openstack-nova-consoleauth | /var/log/nova/nova-consoleauth.log | Nova控制台认证服务,对应配置文件 /etc/nova/nova.conf |
openstack-nova-scheduler | /var/log/nova/nova-scheduler.log | Nova调度器,根据调度算法从可用资源池中恰当地选择计算节点,对应配置文件 /etc/nova/nova.conf |
openstack-nova-conductor.service | /var/log/nova/nova-conductor.log | Nova指挥器,负责数据库的访问,对应配置文件 /etc/nova/nova.conf |
openstack-nova-novncproxy.service | /var/log/nova/nova-novncproxy.log | Nova 提供 noVNC 远程连接协议的代理服务,对应配置文件 /etc/nova/nova.conf |
openstack-nova-compute.service | /var/log/nova/nova-compute.log | Nova计算节点进程,对应配置文件 /etc/nova/nova.conf |
【思考和探索】
- systemctl 启动、停止、启用、禁用、查看状态的命令分别是?