openstack安装(七)nova服务控制节点安装

(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 :高级消息队列协议提示-->'消息队列挂了'

 

你可能感兴趣的:(openstack)