(1)概述
明确1:'计算节点可以有多个',本次实验环境就部署一台
明确2:'每一个计算节点就是一台kvm的物理宿主机'
(2)nova服务组件
nova-api 服务 --->'接收和响应'来自'外部用户'的计算API请求-->类似公司的前台,'外部API请求的入口'-->'然后'向内部的nova组件'小第'来干活
nova-api-metadata 服务 --->'作用:查虚拟机的配置信息';接受'来自虚拟机'发送的'元数据请求'
nova-compute 服务 --->'核心:管理虚拟机的生命周期;支持多种虚拟化技术;通常用'kvm'控制虚拟机,其他基本不用' -->'核心'
支持多种虚拟化技术:'kvm,xen,vmware'
#######特点##########
一个持续工作的'守护进程',通过'Hypervior'的API来创建和销毁虚拟机实例。例如:
XenServer/XCP 的 XenAPI
KVM 或 QEMU 的 libvirt
VMware 的 VMwareAPI
基本原理:守护进程同意了来自队列的动作请求,'转换'为一系列的系统命令如启动一个KVM实例',然后到数据库中'更新它的状态'
################# 分割线
'问题':10个nova-compute的计算节点,现在nova-api接受一个请求,创建一个虚拟机,这个任务最终交给哪个nova-computer?涉及'分配问题'
nova-scheduler 调度服务 --->'拿到'一个来自队列请求虚拟机实例,然后'决定'那台计算服务器主机来运行它
说明:根据10个节点平时汇报的'剩余CPU、磁盘、内存信息',挑出一个'最闲的'
'筛选规则是什么?'
nova-computer'每隔一分钟'上报自身'剩余资源'情况-->nova-schedlue
################# 分割线
nova-conductor 模块 --->专门'帮nova-compute服务'连接数据库;相当于'中间层';nova-coputer不需要配置数据库的连接信息,数据库的信息只会配置'控制节点上'
'原因':早期直接用nova-compute连接数据库;如果有100台computer节点,'每台都要配置'数据库的地址和账户密码,其中一台如果'被黑了',删除nova数据库,所有数据'全部丢失'
'注意':不要将它部署在运行'nova-compute'服务的主机节点上'
################# 分割线
nova-cert 模块 --->'为了安全可以配置ssl证书';服务器守护进程向Nova Cert服务提供X509证书,私有云不需要启用
################# 分割线
nova-network worker 守护进程 --->'从队列中接受网络任务,并且操作网络';执行任务例如创建桥接的接口或者改变IPtables的规则;'已弃用'
备注:'早期是没有neutron网络服务的';把'功能保留(兼老版本容)';老版本可能没有neturn
################# 分割线
nova-consoleauth 守护进程 --->'配合nova-novncproxy使用'
nova-novncproxy --->'提供vnc的控制台;不是任何人都能访问;访问者必须带一个token才能访问控制台;nova-consoleauth提供token'
'功能':提供一个代理,用于访问正在运行的实例,通过VNC协议,支持基于'客户端'浏览器的novnc客户端;'可以通过web界面操作虚拟机'
################# 分割线 --->'下面的不需要'
nova-spicehtml5proxy 守护进程
提供一个代理,用于访问正在运行的实例,通过 'SPICE' 协议,支持基于浏览器的 HTML5 客户端。
nova-xvpvncproxy 守护进程
提供一个代理,用于访问正在运行的实例,通过 'VNC' 协议,支持OpenStack特定的'Java'客户端
nova-cert 守护进程
X509 证书
(3)创库授权
mysql -u root -p
'创'建 nova_api 和 nova 数据'库'
CREATE DATABASE nova_api;
CREATE DATABASE nova;
对数据库进行正确的'授权'
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';
注意:记住'该密码' --> 'NOVA_DBPASS'
获得 admin 凭证来获取只有管理员能执行的命令的访问权限
. admin-openrc
#########################创建服务证书#########################
(1)创建nova用户
openstack user create --domain default --password NOVA_PASS nova
'记住该密码'
(2)给 nova 用户添加 admin 角色
openstack role add --project service --user nova admin
(3)创建 nova 服务实体
openstack service create --name nova \
--description "OpenStack Compute" compute
#########################创建 Compute 服务 API 端点#########################
openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1/%\(tenant_id\)s
############
openstack endpoint create --region RegionOne \
compute internal http://controller:8774/v2.1/%\(tenant_id\)s
############
openstack endpoint create --region RegionOne \
compute admin http://controller:8774/v2.1/%\(tenant_id\)s
'public' -->'internal' -->'admin'
#########################安装nova组件#########################
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler
'安装软件包'
#########################编辑 etc/nova/nova.conf#########################
'启用两个api,就会监听两个api的地址'
enabled_apis = osapi_compute('8774'),metadata('8775')
'连接之前创建的两个数据库'
[api_database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
'openstack支持多种消息队列;并且是跨节点通信,需要用到消息队列'
[DEFAULT]
...
rpc_backend = rabbit --->指定使用的'消息队列','由于跨节点通信,完成数据的一致性'
[oslo_messaging_rabbit]
...
rabbit_host = controller --->'消息队列安装在哪'
rabbit_userid = openstack --->'消息队列的账户和密码'
rabbit_password = RABBIT_PASS
'连接keystone的配置;用到nova的账户和密码'
[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
'控制节点的ip' -->可以以'变量'或者明文的形式
[DEFAULT]
...
my_ip = 10.0.0.11
'禁用nova自带的网络;使用neutron网络';'禁用掉nova计算服务内置的防火墙服务'
[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
'说明:nova.virt.firewall.NoopFirewallDriver-->是一个python包的路径'
'python包的位置-->里面的一个方法'(函数)';pass就是0的含义,功能禁用'
ls /lb64/python2.7/site-packages/nova/virt/firewall
#################
'vnc的连接地址;通过vnc的web界面进行连接'
[vnc]
...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
#################
'配置glance服务地址'
原因:nova在'创建虚拟机'的时候首先需要'下载镜像模板','镜像模板哪里提供','知道glance api地址'
[glance]
...
api_servers = http://controller:9292
#################
'配置锁路径;一个任务没有完成,就创建一个锁文件,直到完成才把锁文件删除,在这期间不会重复执行用户的指令'
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
'举例':创建虚拟机,在虚机没有完全创建完之前,会产生一个锁文件,一直到虚拟创建完成,这个锁文件删除,如果中间又收到同样的任务,则'拒绝'
同步Computer数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova
开机启动
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
报错解决
2020-05-05 22:20:50.519 22552 ERROR oslo_service.service AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism 'AMQPLAIN'. For details see the broker logfile.
'schedule和/var/log/nova/nova-consoleauth.log的日志' -->rabbitmp的密码问题
(4)查看computer服务的状态
openstack computer service list
# 是否都'处于up状态' -->3个,表示控制节点安装ok
shell脚本的锁文件
'实现逻辑':
1)在shell脚本的'第一行','判断锁文件'是否存在,如果存在说明脚本正在执行;如果'重复执行就退出'
2)一旦执行完,'锁文件删除'
3)'避免脚本重复执行产生的问题;是一种规范'
(5)安装和配置计算节点
安装 -->配置 -->启动 ('没有数据库的操作')
novncproxy_base_url = http://controller:6080/vnc_auto.html
含义:'控制节点开启了一个6080端口',利用这个端口反向代理到'计算节点'-->通过vnc连接console'虚拟机控制台'
锁文件作用:'防止脚本或任务被重复执行'
判断:计算节点硬件是否支持虚拟化
egrep '(vmx|svm)' /proc/cpuinfo
'Intel和AMD中的一种'
说明:如果这个命令返回了 one or greater 的值,那么'你的计算节点支持硬件加速且不需要额外的配置'
注意:'计算节点不支持硬件加速策略'
######################
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
注意:'如果其它服务正常,这个服务器启动速度很快'
# 启动不了的话'看日志'
'5672-->定位到消息队列;模拟了消息队列关闭的情况'
'AMQP :高级消息队列协议提示-->'消息队列挂了'