1、OpenStack云计算实战大数据创新人才培养系列第7章 人民邮电出版社OpenStack计算服务OpenStack计算服务基础Nova部署架构Nova的元数据工作机制使用和管理计算服务手动安装和部署Nova7.1 OpenStack计算服务基础lNova是OpenStack中的计算服务项目,计算实例生命周期的所有活动都由Nova管理。lNova支持创建虚拟机和裸金属服务器(通过使用Ironic),并且有限支持系统容器。lNova需要下列OpenStack其他服务的支持。KeystoneGlanceNeutronCinder和Swift什么是Nova7.1 OpenStack计算服务基础Nov
2、a系统架构7.1 OpenStack计算服务基础lAPI是客户(Client)访问Nova的HTTP接口。l它由nova-api服务实现。nova-api服务接收和响应来自最终用户的计算API请求。lnova-api提供了一个集中的可以查询所有API的端点。l它作为整个Nova组件的门户,所有对Nova的请求都首先由nova-api处理。lnova-api对接收到的HTTP API请求会做如下处理:API组件(nova-api服务)(1)检查客户端传入的参数是否合法有效。(2)调用Nova其他服务的处理客户端HTTP请求。(3)格式化Nova其他子服务返回的结果并返回给客户端。7.1 Open
3、Stack计算服务基础lNova调度器类型随机调度器(Chance Scheduler)过滤器调度器(Filter Scheduler)缓存调度器(Caching Scheduler)l过滤器调度器调度过程Scheduler组件7.1 OpenStack计算服务基础l过滤器(Filter)RetryFilter(再审过滤器)AvailabilityZoneFilter(可用区域过滤器)RamFilter(内存过滤器)DiskFilter(磁盘过滤器)CoreFilter(核心过滤器)ComputeFilter(计算过滤器)ComputeCapabilitiesFilter(计算能力过滤器)Im
4、agePropertiesFilter(镜像属性过滤器)ServerGroupAntiAffinityFilter(服务器组反亲和性过滤器)ServerGroupAffinityFilter(服务器组亲和性过滤器)Scheduler组件7.1 OpenStack计算服务基础l权重(Weight)nova-scheduler服务可以使用多个过滤器依次进行过滤,过滤之后的节点再通过计算权重选出最适合的能够部署实例的节点。所有的权重实现模块位于nova/scheduler/weights目录。目前nova-scheduler的默认实现是RAMWeighter,根据计算节点空闲的内存量计算权重值,空闲
5、内存越多,权重越大,实例将被部署到当前空闲内存最多的计算节点上。Scheduler组件7.1 OpenStack计算服务基础l通过Driver(驱动)架构支持多种Hypervisor虚拟机管理器面对多种Hypervisor,nova-compute为这些Hypervisor定义统一的接口.Hypervisor只需要实现这些接口,就可以Driver的形式即插即用到OpenStack系统中Compute组件7.1 OpenStack计算服务基础l定期向OpenStack报告计算节点的状态每隔一段时间,nova-compute就会报告当前计算节点的资源使用情况和nova-compute服务状态。no
6、va-compute是通过Hypervisor的驱动获取这些信息的。l实现虚拟机实例生命周期的管理OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的。以实例创建为例来说明nova-compute的实现过程。Compute组件(1)为实例准备资源。(2)创建实例的镜像文件。(3)创建实例的XML定义文件。(4)创建虚拟网络并启动虚拟机。7.1 OpenStack计算服务基础lConductor组件由nova-conductor模块实现,旨在为数据库的访问提供一层安全保障。lnova-compute需要获取和更新数据库中虚拟机实例的信息。lnova-conductor
7、可以解决这些问题,将nova-compute访问数据库的全部操作都改到nova-conductor中,nova-conductor作为对此数据库操作的一个代理,而且nova-conductor是部署在控制节点上的。lnova-conductor也有助于提供数据库访问的性能,nova-compute可以创建多个线程使用RPC(远程过程调用)访问nova-conductor。lnova-conductor将nova-compute与数据库分离之后提高了Nova的伸缩性。Conductor组件7.1 OpenStack计算服务基础lOpenStack从Newton版本开始引入Placement AP
8、I,由nova-placement-api服务来实现,旨在追踪记录资源提供者(resources provider)的目录和资源使用情况。l被消费的资源类型是按类跟踪的。nova-placement-api服务提供一套标准的资源类(如DISK_GB、MEMORY_MB和VCPU),也支持按需自定义的资源类。Placement API组件7.1 OpenStack计算服务基础lnova-novncproxy守护进程lnova-spicehtml5proxy守护进程lnova-xvpvncproxy守护进程lnova-consoleauth守护进程控制台接口7.1 OpenStack计算服务基础虚
9、拟机实例化流程(1)首先用户(可以是OpenStack最终用户,也可以是其他程序)执行Nova Client提供的用于创建虚拟机的命令。(2)nova-api服务监听到来自于Nova Client的HTTP请求,并将这些请求转换为AMQP消息之后加入消息队列。(3)通过消息队列调用nova-conductor服务。(4)nova-conductor服务从消息队列中接收到虚拟机实例化请求消息后,进行一些准备工作。(5)nova-conductor服务通过消息队列告诉nova-scheduler服务去选择一个合适的计算节点来创建虚拟机,此时nova-scheduler会读取数据库的内容。(6)no
10、va-conductor服务从nova-scheduler服务得到了合适的将计算节点的信息后,在通过消息队列来通知nova-compute服务实现虚拟机的创建。OpenStack计算服务基础Nova部署架构Nova的元数据工作机制使用和管理计算服务手动安装和部署Nova7.2 Nova部署架构Nova物理部署Nova经典部署模式Nova负载均衡部署模式7.2 Nova部署架构lCells V2的架构Nova的Cell架构7.2 Nova部署架构lAPI节点上的数据库nova_api数据库中存放全局信息,这些全局数据表是从nova库迁过来的,如flavor(实例模型)、instance grou
11、ps(实例组)、quota(配额)。nova_cell0数据库的模式与nova一样,主要用途就是当实例调度失败时,实例的信息不属于任何一个Cell,因而存放到nova_cell0数据库中。Nova的Cell架构7.2 Nova部署架构lCell部署单Cell部署Nova的Cell架构7.2 Nova部署架构lCell部署多Cell部署Nova的Cell架构7.2 Nova部署架构lCell管理主要使用nova-manage cell_v2命令来管理。下列命令用于查看Cell:nova-manage cell_v2 list_cells-verbose添加Cell的命令:nova-manage
12、cell_v2 create_cell-verbose-name cell1-database_connection mysql+pymysql:/nova:magine198910.1.1.56/nova_cell1-transport-url rabbit:/guest:guest10.1.1.56:5672/发现主机:nova-manage cell_v2 discover_hostsNova的Cell架构OpenStack计算服务基础Nova部署架构Nova的元数据工作机制使用和管理计算服务手动安装和部署Nova7.3 Nova的元数据工作机制lOpenStack的实例是基于镜像部署的
13、,镜像中包含了操作系统、最常用的软件(如SSH)以及最通用的配置(如网卡设置)。lOpenStack将cloud-init定制虚拟机实例配置时获取的元数据信息元数据(metadata)用户数据(user data)机制lOpenStack将元数据和用户数据的配置信息注入机制配置驱动器(config drive)机制元数据服务(metadata service)机制元数据及其注入7.3 Nova的元数据工作机制lSSH密钥注入实现过程元数据及其注入(1)OpenStack创建一个SSH密钥对,将其中的公钥(public key)存放在OpenStack数据库中,而将私钥(private key)
14、提供给用户(可下载)。(2)创建一个实例时选择该SSH密钥对,完成实例创建之后,cloud-init将其中的公钥写入到实例,一般会保存到.ssh/authorized_keys目录中。(3)用户可以用该SSH密钥对的私钥直接登录该实例。7.3 Nova的元数据工作机制l实现机制OpenStack将元数据信息写入实例的一个特殊的配置设备中,然后在实例启动时,自动挂载该设备,并由cloud-init读取其中的元数据信息,从而实现配置信息注入。配置驱动器的具体实现会根据Hypervisor的不同和配置有所不同。l应用场合如果实例无法通过DHCP正确获取网络信息时,则使用配置驱动器就非常必要。配置驱动
15、器主要用于配置实例的网络信息,包括IP、子网掩码、网关等。l对计算主机和镜像的要求使用配置驱动器对计算主机和镜像有一定的要求。配置驱动器7.3 Nova的元数据工作机制l启用和访问配置驱动器要启用配置驱动器,将-config-drive true参数传入到openstack server create命令。可以在/etc/nova/nova.conf配置文件中设置以下选项,来设置计算服务在创建实例时默认使用配置驱动器机制。配置驱动器openstack server create-config-drive true-image my-image-name -flavor 1-key-name m
16、ykey-user-data./my-user-data.txt -file/etc/network/interfaces=/home/myuser/instance-interfaces -file known_hosts=/home/myuser/.ssh/known_hosts -property role=webservers-property essential=false MYINSTANCEforce_config_drive=true7.3 Nova的元数据工作机制l配置驱动器格式配置驱动器默认格式是ISO 9660文件系统。可在/etc/nova/nova.conf文件中明确
17、定义。默认情况下不能将配置驱动器镜像作为一个CDROM来替换磁盘驱动器。为添加CDROM,可以在/etc/nova/nova.conf文件中定义。配置驱动器config_drive_format=iso9660config_drive_cdrom=true7.3 Nova的元数据工作机制l元数据服务的基本架构元数据服务7.3 Nova的元数据工作机制l虚拟机实例获取元数据的大致流程元数据服务(1)实例通过项目网络将元数据请求发送到neutron-ns-metadata-proxy,此时会在请求中添加router-id和network-id。(2)neutron-ns-metadata-prox
18、y通过unix domain socket将请求发送给neutron-metadata-agent。此时根据请求中的router-id、network-id和IP,获取端口信息,从而获得instance-id和project-id(tenant-id)并加入到请求中。(3)neutron-metadata-agent通过内部管理网络将请求转发给nova-api-metadata。此时利用instance-id和project-id(tenant-id)获取实例的元数据。(4)将获取的元数据原路返回给发出请求的实例。7.3 Nova的元数据工作机制l计算节点为虚拟机实例使用元数据服务来获取指定实
19、例的数据。l元数据和用户数据都可以由实例访问。只有当-user-data选项和包含用户内容的文件被传入到openstack server create命令,或者在图形界面通过配置驱动器注入用户数据时,才会出现像user_data这样的用户数据文件,不过user_data不是JSON格式。虚拟机实例访问元数据服务OpenStack计算服务基础Nova部署架构Nova的元数据工作机制使用和管理计算服务手动安装和部署Nova7.4 使用和管理计算服务lHorizon(Dashboard):OpenStack项目的Web图形界面。lOpenStack客户端(openstack):OpenStack项目
20、的命令行。lNova客户端(nova):对于Nova的一些高级特性或管理命令,需要使用该工具。创建和管理服务器(虚拟机实例)的工具7.4 使用和管理计算服务l在创建实例之前需要确定以下基本要素源:源是用来创建实例的模板。实例类型:也就是实例规格,定义实例可使用的CPU、内存和存储容量等硬件资源。密钥对:密钥对允许用户使用SSH访问新创建的实例。安全组:通过访问规则定义防火墙策略,控制实例的网络通信。虚拟网络:在云中为实例提供通信通道,可以是提供者网络和私有网络。l生成一个SSH密钥对l添加安全组规则部署虚拟机实例的前提ssh-keygen-q-N openstack keypair creat
21、e-public-key/.ssh/id_rsa.pub mykeyopenstack security group rule create-proto icmp defaultopenstack security group rule create-proto tcp-dst-port 22 default7.4 使用和管理计算服务l实例创建命令创建虚拟机实例openstack server create (-image|-volume)-flavor -security-group -key-name -property -file -user-data -availability-zon
22、e -block-device-mapping -nic -network -port -hint -config-drive|True -min -max -wait 7.4 使用和管理计算服务l基于镜像或卷创建虚拟机的启动盘选项-image用于指定为实例创建启动盘的镜像文件。选项-volume用于指定为实例创建启动盘的卷(块设备),这个卷必须基于一个云镜像来创建。l设置元数据通过选项-property设置实例的属性,以“键=值”形式定义,可以设置多个属性,实际上是注入自定义的元数据。也提供相应的Dashboard图形界面。创建虚拟机实例设置元数据7.4 使用和管理计算服务l设置用户数据使用
23、选项-user-data设置要注入到虚拟机实例的用户数据文件,实际上是脚本文件。也提供相应的Dashboard图形界面。创建虚拟机实例设置用户数据7.4 使用和管理计算服务l设置配置驱动器使用选项-config-drive指定某卷作为配置驱动器,如果使用值“true”则表示临时驱动器。也提供相应的Dashboard图形界面。创建虚拟机实例设置配置驱动器7.4 使用和管理计算服务l注入文件使用选项-file设置启动前注入镜像的文件,即将本地的文件存储到虚拟机中。l设置块设备映射选项-block-device-mapping设置在实例上创建的块设备映射,也就是增加多个额外的块设备。创建虚拟机实例o
24、penstack server create-flavor m1.tiny-image cirros -nic net-id=public-security-group default-key-name demo-key -file/root/.vimrc=/root/.vimrc-image id_of_image cirros2=:7.4 使用和管理计算服务l设置调度器提示使用选项-hint设置调度器。也提供相应的Dashboard图形界面。创建虚拟机实例设置调度器提示7.4 使用和管理计算服务l实例创建成功后可以通过多种方式访问实例。l通过SSH访问Linux实例,通过RDP访问Wind
25、ows实例。lOpenStack也提供了两种远程访问实例桌面的方式:VNC和SPICE HTML5。l使用虚拟控制台访问实例访问虚拟机实例openstack console url show cirros7.4 使用和管理计算服务l在基于Web的Dashboard图形界面中管理虚拟机实例管理虚拟机实例7.4 使用和管理计算服务l基于命令行管理虚拟机实例管理虚拟机实例(1)实例列表openstack server list(2)查看实例详情openstack server show-diagnostics(3)实例启动openstack server start .(4)实例暂停及其恢复open
26、stack server pause .(5)实例挂起及其恢复openstack server suspend .(6)实例废弃及其恢复openstack server shelve .7.4 使用和管理计算服务l基于命令行管理虚拟机实例管理虚拟机实例(7)实例关闭openstack server stop .(8)实例重启openstack server reboot-hard|-soft-wait(9)调整实例大小openstack server resize -flavor|-confirm|-revert -wait (10)实例删除openstack server delete .(
27、11)实例修改openstack server set -name -root-password -property -state 7.4 使用和管理计算服务l通过Web界面管理实例类型管理实例类型实例类型列表7.4 使用和管理计算服务l通过Web界面管理实例类型管理实例类型设置实例类型信息 设置实例类型使用权7.4 使用和管理计算服务l通过命令行管理实例类型管理实例类型(1)显示实例类型列表openstack flavor list(2)查看实例类型详情openstack flavor show FLAVOR_ID(3)创建实例类型openstack flavor create FLAVOR
28、_NAME-id FLAVOR_ID -ram RAM_IN_MB-disk ROOT_DISK_IN_GB-vcpus NUMBER_OF_VCPUS(4)设置实例类型使用openstack flavor set命令来修改其参数设置。(5)删除实例类型openstack flavor delete FLAVOR_ID7.4 使用和管理计算服务l使用扩展参数定制实例类型展参数(extra specs)使用若干键值对定义实例类型可在哪些计算节点上运行。一般用作更高级的实例配置的调度建议。所用的键值对必须符合熟知的选项。实例类型的定制会受到所用Hypervisor的限制。配置I/O限制的示例管理实
29、例类型openstack flavor set FLAVOR-NAME -property quota:read_bytes_sec=10240000 -property quota:write_bytes_sec=102400007.4 使用和管理计算服务l使用Dashboard界面实现密码注入编辑Dashboard的local_settings文件。l基于libvirt的Hypervisor的密码注入在/etc/nova/nova.conf配置文件中启用管理员密码注入。为虚拟机实例注入管理员密码OPENSTACK_HYPERVISOR_FEATURES=.can_set_password:
30、False,libvirtinject_password=true7.4 使用和管理计算服务l密码注入和Windows镜像(所有的Hypervisor)通过Nova找回密码通过自定义元数据注入密码使用用户数据提交密码修改脚本无密码认证:Nova允许X509密钥对支持Windows的无密码认证l设置块设备映射选项-block-device-mapping设置在实例上创建的块设备映射,也就是增加多个额外的块设备。为虚拟机实例注入管理员密码nova boot命令行的用法:nova boot-meta admin_pass=.openstack server create命令行的用法:openstac
31、k server create-property admin_pass=.#ps1net user admin 密码OpenStack计算服务基础Nova部署架构Nova的元数据工作机制使用和管理计算服务手动安装和部署Nova7.4 手动安装和部署Noval准备工作在控制节点上安装和配置Nova组件(1)创建nova数据库分别创建名为nova_api、nova和nova_cell0的3个数据库。MariaDB(none)CREATE DATABASE nova_api;MariaDB(none)CREATE DATABASE nova;MariaDB(none)CREATE DATABASE
32、nova_cell0;对上述数据库授予合适的账户访问权限。MariaDB(none)GRANT ALL PRIVILEGES ON nova_api.*TO novalocalhost IDENTIFIED BY NOVA_DBPASS;MariaDB(none)GRANT ALL PRIVILEGES ON nova_api.*TO nova%IDENTIFIED BY NOVA_DBPASS;(2)创建计算服务凭证后续命令行操作需要管理员身份,首先要加载admin凭据的环境变量。.admin-openrc创建nova用户openstack user create-domain defaul
33、t-password-prompt nova将管理员(admin)角色授予nova用户和service项目。openstack role add-project service-user nova admin7.4 手动安装和部署Noval准备工作在控制节点上安装和配置Nova组件(3)创建计算服务的API端点openstack endpoint create-region RegionOne compute public http:/controller:8774/v2.1openstack endpoint create-region RegionOne compute admin htt
34、p:/controller:8774/v2.1openstack endpoint create-region RegionOne compute admin http:/controller:8774/v2.1(4)创建放置(Placement)服务凭证创建placement用户:openstack user create-domain default-password-prompt placement将管理员(admin)角色授予placement用户和service项目:openstack role add-project service-user placement admin在服务目
35、录中创建Placement API入口:openstack service create-name placement-description Placement API placement(5)创建放置服务的API服务端点openstack endpoint create-region RegionOne placement public http:/controller:8778openstack endpoint create-region RegionOne placement internal http:/controller:8778openstack endpoint creat
36、e-region RegionOne placement admin http:/controller:87787.4 手动安装和部署Noval安装和配置组件在控制节点上安装和配置Nova组件(1)安装软件包yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api(2)编辑/etc/nova/nova.conf配置文件(3)初始化nova
37、-api数据库su-s/bin/sh-c nova-manage api_db sync nova(4)注册cell0数据库su-s/bin/sh-c nova-manage cell_v2 map_cell0 nova(5)创建cell1单元su-s/bin/sh-c nova-manage cell_v2 create_cell-name=cell1-verbose nova(6)初始化nova数据库su-s/bin/sh-c nova-manage db sync nova(7)验证nova的cell0和cell1已正确注册nova-manage cell_v2 list_cells7.
38、4 手动安装和部署Noval完成安装在控制节点上安装和配置Nova组件systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.servicesystemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack
39、-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service7.4 手动安装和部署Noval安装和配置组件在计算节点上安装和配置Nova组件(1)安装软件包yum install openstack-nova-compute(2)编辑/etc/nova/nova.conf配置文件7.4 手动安装和部署Noval完成安装在计算节点上安装和配置Nova组件(1)确定计算节点是否支持虚拟即的硬件加速egrep-c(vmx|svm)/proc/cpuinfo(2)启动计算服务及其依赖
40、,并将其配置开机自动启动。systemctl enable libvirtd.service openstack-nova-compute.servicesystemctl start libvirtd.service openstack-nova-compute.service7.4 手动安装和部署Noval将计算节点添加到cell数据库在计算节点上安装和配置Nova组件(1)加载admin凭据的环境变量.admin-openrc(2)确认数据库中有哪些计算主机openstack compute service list-service nova-compute(3)注册计算主机:su-s/bin/sh-c nova-manage cell_v2 discover_hosts-verbose novaTHANKS