Openstack_Nova部署(t版)

一.计算服务nova

1.概述

nova:计算服务,是openstack最核心的服务之一,负责维护和管理云环境的计算资源

1.openstack原生架构
nova能提供虚拟化功能/资源

2.核心服务nova
nova是没有虚拟化的能力,靠的是自己虚拟化驱动,通过驱动和底层虚拟化技术,进行交互和调用操作

3.需要keystone、glance、neutron等服务支持,可与这些服务集成

2.nova系统架构

在这里插入图片描述

  • nova架构,需要和其他组件集成
DB 用于数据存储的sql数据库
API 用于接受http服务,转换命令(接受和响应)
scheduler 调度器,用于决定哪台计算节点承载计算实例的nova调度器
network 管理IP转发,网桥或虚拟局域网的nova网络组件
compute 管理虚拟机管理器与虚拟机之间通信的nova组件(负责执行)
conductor 分配协调作用,处理对象转换

二.组件介绍

1.API

API:(公共交互的入口),客户访问nova的http接口,它又nova-api服务实现,api服务接受和响应

  • 来自最终用户的计算api请求,nova-api服务接受和响应来自最终用户的计算api请求,提供了集中的可用查询所有api的端点
  • 所有请求都是首先由nova-api处理,api提供标准调用服务,便于和第三方系统集成,最终用户不会改送RESTFUL API,只需要和nova进行交互

总结:

  • 1.nova可以为op内部提供标准化服务
  • 2.同时也会为op外部相关的一些组件提供标准化服务
  • 3.只要和虚拟机生命周期相关的操作,nova-api都可以响应

nova-api对接收到HTTP API请求做下处理:

  • 1).检查客户端传入的参数是否合法有效

  • 2).调用nova其他服务来处理客户端HTTP请求

  • 3).格式化nova其他子服务返回结果并返回客户端

  • nova-api是外部访问并使用nova提供的各种服务的唯一途径,客户端和nova之间的中间层

2.scheduler调度器

 scheduler:调度器,负责决定实例创建在哪个节点上(根据规则和调度算法)
  • 规则:考虑内存使用率,cpu负载率、cpu架构、多种因素,根据算法
  • 确定在哪一台服务器上,从可用资源池中选择合适的计算节点来创建新的虚拟机实例
  • 创建实例时,会提出资源需求,如cpu、内存、磁盘,openstack将这些需求定义在实例类型中
  • 用户只需指定使用哪个实例类型

1)调度器类型

①随机调度器

  • 从所有正常运行的nova-compute服务节点中随机选择

②过滤器调度器

  • 根据指定的过滤条件及权重选择最佳的节点

③缓存调度器

  • 可看作随机调度器,在随机的基础上将主机资源缓存在本地内存中
  • 通过后台的定时任务,从数据库中获取最新的主机资源信息

2)过滤调度器调度过程

两个阶段

通过指定的过滤器选择满足条件的计算节点
可使用多个过滤器依次进行筛选

过滤后的主机列表进行权重计算并排序,选择最优的计算节点来创建虚拟机实列
(选择最合适/最优的节点)

3)过滤器

当过滤器需要执行调度器操作,会让过滤器对计算节点进行判断

  • /etc/nova/nova.conf配置文件中

scheduler_available_filters可用于配置可用过滤器,
默认是所有nova自带的过滤器,可用于过滤作用

另外一个还有一个选项scheduler_default_filter用于指定nava_scheduler服务真正使用的过滤器

4)过滤调度器按照列表中的顺序依次过滤

  • 再审过滤器:用于过滤掉之前已经调度过的节点

  • 可用区域过滤器:为了提高容灾性并提供隔离服务,可将计算节点划分到不同的可用区域中

  • 内存过滤器:根据可用内存来调度虚拟机创建,将不能满足实例类型内存需求的计算节点过滤,为了提高系统资源利用率,openstack在计算节点的可用内存时允许超过实际内存大小

  • 硬盘调度器:磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉,磁盘同样允许超量

  • 核心过滤器:根据可用cpu核心来调度虚拟机创建,将不能满足实例类型vcpu需求的计算节点顾虑掉,vcpu也允许超量,超量值是通过修改nova.conf中的cpu_allocation_ratio参数控制,默认值是16

  • 计算过滤器:保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器

  • 服务器组反亲和性过滤器:要求尽量将实例分散部署到不同节点上

  • 服务器组亲和性过滤器:尽量将实例部署到同一个计算节点上

  • 权重:nova-scheduler服务可用使用多个过滤器依次进行过滤,过滤之后,节点再通过计算权重选出能够部署实例的节点

三.compute

1.概述

  • 1.在计算节点上运行,负载执行具体的与实例生命周期/管理实例相关的工作
  • 2.报告节点状态(用于写入数据库,保证scheduler读取数据库,数据库信息的实时性、ceilmetor ,监控和管理openstack实例资源并汇报给用户/openstack本身/运维人员

通过Driver(驱动)架构支持多种hypervisor虚拟机管理器
为hypervispor定义统一的接口
只需要实现这些接口,可driver(驱动)形式即插即用到openstack系统中

2.功能

  • 1.定期向openstack报告计算节点的状态
    计算节点的资源使用情况(scheduler)
  • 2.实现虚拟机实例生命周期的管理
    openstcak对虚拟机实列最主要的操作都是通过nova-compute实现

为实例创建为例来说明nova-compute实现过程

  • 1.为实例准备资源
  • 2.创建实例的镜像文件
  • 3.创建实例的xml定义文件

四.conductor

  • 由nova-conductor:模块实现
  • compute服务与数据库之间交互的中间,避免了直接访问由nova-compute创建对数据库

有助于提高数据库的访问性能
可创建多个线程使用远程调用
可增加nova-conductor数量来应付日益增长的计算节点对数据库的访问量

五.placementAPI

1)概述

 placementAPI:将所有计算节点资源情况累加起来,系统中还存在外部资源
  • 由外部系统提供(统计外部资源),管理元需要统一的、简单的管理接口来统计系统中资源使用情况,这个接口就是placementAPI
  • 被消费的资源类型是按类进行跟踪的,如计算节点类、贡献存储池类、IP地址类等

六.虚拟机实例化流程

  • 用户可通过多种方式访问虚拟机的控制台
    nova-novnproxy守护进程:通过vnc连接访问正在运行的实例提供一个代理支持浏览器novnc客户端
  • nova-consoleauth守护进程:负载对访问虚拟机控制台提供用户令牌认证
    这个服务必须与控制台代理程序共同使用

1.控制台接口

  • 1.首先用户执行nova client提供用于创建虚拟机命令
  • 2.nova-api服务监听来自nova client的http请求,将请求转换为AMQP消息之后加入消息队列
  • 3.通过队列调用nova-conductor服务
  • 4.nova-conductor服务从消息队列中接受到虚拟机实列化消息,准备
  • 5.nova-conductor服务通过消息队列告诉nova-scheduler服务去选择一个合适的计算节点来创建虚拟机,nova-scheduler会读取数据库内容
  • 6.nova-conductor服务从nova-scheduler服务得到了合适的将计算节点的信息,通过消息队列来通知
    nova-compute服务实现虚拟机的创建

七.nova部署架构

  • 经典模式:单节点(单中心节点)
  • nova负载均衡部署模式:多节点(多个中心节点)

1)cell架构

  • openstack nova集群的规模变大,数据库和消息服务就会出现瓶颈

  • nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库的消息中间的复杂度,引入cell概念

  • 可看成单元,为支持更大规模的部署,

  • openstacak较大的nova集群分成小的单元

  • 每个单元都又自己的数据库

单cell架构部署

创建虚拟机---->任务(ID用于定位)

  • 1.nova-api 接收、响应请求
  • 2.交给condutor处理/协调
    if conductor------->scheduler----->最适合创建虚拟机的节点
    if scheduler 调度失败,
    then 将调度失败的信息,存放在cell0中
    nova-api会读取cell0数据库,获取到失败的信息/原因,返回给客户端
    elif scheduler 调度成功 a节点适合,
    then conductor 就会将这个任务交割cell1处理(rabbitmq-cell接受、响应)
    (cell1管理的范围,不仅仅只有一个节点 ABCD )
  • 3.rabbitmq-cell ---->conductor-cell----->交给A节点上的compute进行具体创建
    ---->compute 汇报给cell1数据库------->响应给condutor-cell—>rabbitmq-cell–>nova的conductor
  • 4.nova-conductor 接受到cell的返回之后,保存在api数据库中(保存实例创建成功的信息)
  • 5.nova-api组件,会读取api数据库,返回/响应给客户端(若想要获取具体信息,则会访问cell数据库)

多cell架构

 是为了给rabbitmq和mariadb进行分压, 加入condutor-cell组件

mariadb---->全部数据变成只保存的全局信息
rabbitmq---->全部交互传递,一些具体执行的任务,直接交给rabbitmq-cell
condutor---->全部任务的协调分配工作---->把具体任务分配给cell(rabbitmq–cell)

八.OpenStack-NOVA组件部署

配置接:placement部署

  • Nova 计算服务为 OpenStack 云环境提供了计算能力,相关环境需要在控制节点和计算节点分别进行部署。

控制节点ct:VM:192.168.153.10 NAT:192.168.133.70

​nova-api(nova主服务)
​nova-scheduler(nova调度服务)
​nova-conductor(nova数据库服务,提供数据库访问)
​nova-novncproxy(nova的vnc服务,提供实例的控制台)

计算节点c1:VM:192.168.153.20 NAT:192.168.133.80
计算节点c2:VM:192.168.153.30 NAT:192.168.133.90
nova-compute(nova计算服务)

1.在CT控制节点上配置 Nova 服务

CT VM:192.168.153.10 NAT:192.168.133.70

1)创建Nova数据库实例和执行授权

mysql -uroot -p

CREATE DATABASE nova_api;
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';

CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';

CREATE DATABASE nova_cell0;
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';
flush privileges;
exit

在这里插入图片描述

2)创建用户、修改配置文件

创建OpenStack的nova用户

#创建nova用户;验证openstack user list
openstack user create --domain default --password NOVA_PASS nova

#向nova用户添加admin角色;验证openstack role assignment list验证,还要查role、user、project列表看id号
openstack role add --project service --user nova admin

#创建nova服务实体;验证openstack service list
openstack service create --name nova --description "OpenStack Compute" compute

在这里插入图片描述

3)创建 compute API 服务端点

openstack endpoint create --region RegionOne compute public http://ct:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://ct:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://ct:8774/v2.1

在这里插入图片描述

4)安装软件包

yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

在这里插入图片描述

5)修改配置文件

cp -a /etc/nova/nova.conf{
    
    ,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf

在这里插入图片描述

6)添加/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 my_ip 192.168.100.10
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@ct
openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api
openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova
openstack-config --set /etc/nova/nova.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct: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 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 glance api_servers http://ct: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://ct:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7)初始化nova数据库,生成相关表结构

su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
su -s /bin/sh -c "nova-manage db sync" nova

在这里插入图片描述

8)验证 nova cell0 和 cell1 是否正确注册

su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

在这里插入图片描述

9)启动 Nova 服务并配置开机启动

systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

在这里插入图片描述

10)检查nova服务是否启动
netstat -tnlup|egrep '8774|8775'
curl http://ct:8774

在这里插入图片描述

2.在C1、C2计算节点上配置 Nova 服务

c1,VM:192.168.153.20 NAT:192.168.133.80

c2,VM:192.168.153.30 NAT:192.168.133.90

  • 两个节点相同操作
1)安装软件包并修改配置文件
yum -y install openstack-nova-compute
cp -a /etc/nova/nova.conf{
    
    ,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf

在这里插入图片描述

注意:下列命令中第三行需要修改当前节点的IP地址(C1:192.168.153.20 C2:192.168.153.30)

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@ct
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.153.20 
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 api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct: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 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://ct:6080/vnc_auto.html
openstack-config --set /etc/nova/nova.conf glance api_servers http://ct: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://ct: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

查看传参后的配置文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)判断计算机是否支持虚拟机硬件加速

  • 再次检查一下,以防配置失败
egrep -c '(vmx|svm)' /proc/cpuinfo

在这里插入图片描述

上述命令返回值不是 0,则计算节点支持硬件加速,不需要进行下面的配置。
上述命令返回值是 0,则计算节点不支持硬件加速,并且必须配置 libvirt 为使用
QEMU 而不是 KVM,需要编辑/etc/nova/nova.conf 文件中的[libvirt]部分
vim /etc/nova/nova.conf
[libvirt]
virt_type = qemu

3)开启 Nova 计算服务并配置开机启动

systemctl start libvirtd.service openstack-nova-compute.service
systemctl enable libvirtd.service openstack-nova-compute.service

在这里插入图片描述

3.CT控制节点后续操作

CT VM:192.168.153.10 NAT:192.168.133.70

1)添加计算节点到 cell 数据库

openstack compute service list --service nova-compute

在这里插入图片描述

2)发现计算节点

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

在这里插入图片描述
以后添加新的计算节点时,必须在控制器节点上运行 su -s /bin/sh -c “nova-manage cell_v2 discover_hosts --verbose” nova 以注册这些新的计算节点。

3)设置适当的发现时间间隔(可选操作)

vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300

systemctl restart openstack-nova-api.service

在这里插入图片描述
在这里插入图片描述

4)验证计算服务

  • 列出服务组件以验证每个进程的成功启动和注册情况
openstack compute service list

在这里插入图片描述

  • 列出身份服务中的API端点以验证与身份服务的连接
openstack catalog list

在这里插入图片描述

  • 列出图像服务中的图像以验证与图像服务的连接性:
openstack image list

在这里插入图片描述

5)检查Cells和placement API是否正常运行
nova-status upgrade check

在这里插入图片描述

总结

  nova:负责维护和管理云环境的计算资源
1.nova可以为op内部提供标准化服务
2.同时也会为op外部相关的一些组件提供标准化服务
3.只要和虚拟机生命周期相关的操作,nova-api都可以响应

nova-api是外部访问并使用nova提供的各种服务的唯一途径,客户端和nova之间的中间层

Nova分为控制节点、计算节点
Nova组件核心功能是调度资源,在配置文件中需要体现的部分:指向认证节点位置(URL、ENDPOINT)、调用服务、注册、提供支持等,配置文件中的所有配置参数基本都是围绕此范围(对实例生命周期管理)进行设置

猜你喜欢

转载自blog.csdn.net/Wsxyi/article/details/117222243