🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质: CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥🎈支持我:可点赞👍、可收藏⭐️、可留言📝
📜启动流程实例
启动流程使用对OpenStack服务的REST API调用的组合,并使用message broker RPC调用服务组件之间的协调。
📑启动流程实例
- 通过使用仪表板或命令行客户端,用户的帐户凭据将作为REST API调用发送到标识服务端点。身份验证成功后,身份服务生成一个身份验证令牌并返回给用户。认证令牌包含在对其他服务的后续REST调用中,以允许这些服务代表该用户执行操作。
- 实例启动请求和认证令牌作为REST API调用发送到计算服务端点。nova_api将请求传递给身份服务,身份服务验证身份令牌并在更新的令牌头中返回允许的角色和权限。
- nova_api为新实例创建一个持久的数据库条目,包括原始请求中的启动参数。其他进程可以从这个条目获取数据,并将当前状态更新到这个持久条目。
- nova_api发布一个rpc.call命名消息队列,请求nova_scheduler指定一个可接受的计算节点来托管新实例。
- nova_scheduler订阅新的实例请求,从实例数据库条目读取过滤和权重参数,从数据库读取集群计算节点数据,并使用选定的计算主机ID更新实例记录。nova_scheduler提交一个rpc.call消息队列,请求nova_compute启动实例。
- nova_compute订阅新的实例请求,然后发布一个rpc.call调用 nova_conductor为实例启动做准备。
- nova_conductor订阅新的实例请求,读取数据库条目以获得计算主机ID和实例风格,以及所请求的RAM、vCPU和磁盘配置,然后将新的实例状态发布到消息队列。
- nova compute订阅新实例请求以检索实例信息。使用实例请求中的镜像ID, nova_compute向镜像服务发送一个REST API调用,以获取被请求的镜像的URL。glance_api服务将请求转发给身份服务,身份服务再次验证认证令牌,并在更新的令牌头中返回允许的角色和权限。
- 使用镜像ID, glance_api从镜像服务数据库检索镜像元数据,并将镜像URL返回给nova_compute。nova_compute使用URL从镜像存储中加载镜像。
- nova_compute向网络服务发送一个REST API调用,请求为新实例分配和配置网络资源。neutron_server将请求转发给身份服务,身份服务再次验证认证令牌,并在更新的令牌头中返回允许的角色和权限。
- 作为一个云管理系统插件,neutron_server将逻辑网络资源定义读写到ovn-nb数据库。neutron_server检查现有网络,并为所需的端口、连接和网络参数创建新的资源。
- ovn-northd守护进程从ovn-nb读取并将逻辑网络配置转换为ovn-sb数据库中的逻辑数据路径流。附加的物理网络和端口绑定由选定的计算主机上的ovn-controller填充。
- ovn-controller从ovn-sb读取配置,并更新计算主机在物理网络和绑定表中的状态。ovn-controller作为OpenFlow控制器连接到ovs-vswitchd,以动态配置对网络流量的控制通过OVS 网桥上的OpenFlow规则。neutron_server将从计算主机libvirt驱动程序获得的L2配置和请求的DHCP地址返回到消息队列。nova_compute将此实例网络状态写入实例数据库条目。
- nova_compute向块存储服务发送一个REST API调用,请求新实例磁盘的卷数据。cinder_api将请求转发给身份服务,身份服务将再次验证认证令牌,并在更新的令牌头中返回允许的角色和权限。
- cinder_api发布一个rpc.call命名消息队列,并请求该消息队列cinder_scheduler创建请求大小的卷,或者定位已经存在的卷的卷元数据。
- cinder_scheduler订阅新的实例请求,创建或定位卷,然后将请求的元数据返回给nova_scheduler。
- nova_compute为计算节点驱动程序生成数据,并使用libvirt执行请求,以在计算主机上创建VM。VM出现在仪表板和列出服务器的命令中。nova_compute将卷信息传递给libvirt。
- cinder_volume订阅新的实例请求,并检索集群映射Libvirt,然后在新实例上挂载卷。
通过身份服务,用户可以通过对nova_api的REST API调用查询实例状态,然后从计算服务数据库检索当前状态。
📜调度
调度程序接收来自conductor的请求。该请求包含发送到安置服务的资源需求。安置服务运行一个查询,该查询返回能够满足资源需求的所有可用计算节点。放置服务为每个匹配资源需求的计算节点创建摘要。摘要被发送到调度程序。
调度器通过筛选器运行需求来优化搜索。对计算节点进行排序,并选择列表顶部的计算节点。然后,调度器将请求发送给安置服务以索取资源。如果同时资源已经被另一个请求声明,则声明可以返回一个不成功的结果。在本例中,调度器选择排序列表中的下一个计算节点。如果索赔成功,调度程序将与conductor联系。conductor尝试在所选主机上构建实例。如果由于某种原因导致构建失败,则conductor将确保实例没有声明资源。
📜安置(放置)服务(Placement services)
安置服务是在红帽OpenShift平台10版OpenStack中引入的。在此版本之前,安置服务任务是由计算服务执行的。数据模型用于查找资源,例如,计算节点、存储池或IP分配池。每个提供者的资源由安置服务跟踪。计算节点上的资源是RAM和CPU。存储节点上的资源是磁盘。消耗的资源作为类进行跟踪。
📑通用资源池
在云环境中有各种各样的资源。计算节点提供的资源包括RAM、CPU、PCI设备和临时磁盘。其他资源,例如共享存储,由外部资源池提供。以前,计算服务认为所有资源都是由计算节点提供的。这将导致资源跟踪问题,即使用量和容量值计算不准确。
实现了一个新的RESTful API来解决共享存储资源问题。APl允许安置服务查询和管理资源提供者、库存和分配的记录。资源提供者向资源的所有使用者提供使用信息。这些通用资源池解决了容量和使用信息不正确的问题。API允许管理服务用户创建资源提供程序。对所有资源提供程序的容量和使用信息进行更新,从而通过将它们关联到一个或多个资源提供程序聚合来指示哪些计算节点可以使用特定的资源。
例如,管理员可以创建包含特定机架中所有Ceph存储节点的资源提供程序聚合。然后创建一个资源池来表示Ceph存储。resource-provider命令发出两个REST API请求:第一个请求创建资源提供程序,第二个请求关联资源提供程序聚合。然后使用共享磁盘空间总量更新资源池容量。
📑定性资源或特征
资源提供程序在引导请求时管理定量方面。它有一个库存和分配对象的集合来管理这些定量请求。当实例使用来自资源提供者的资源时,库存将从分配中减去。但是,资源提供者还需要管理非消耗性资源或定性资源。
例如,用户可能会为一个实例请求80 GB的磁盘空间。这个资源是定量的。然而,用户也可以请求一个SSD磁盘。这个资源是定性的。
放置API中的一个新的REST资源管理定性信息。有标准特质和习惯特质。标准特征可以跨不同的云环境使用。标准特征是不能修改的。
管理用户使用自定义特征来定义非标准的定性信息。该信息由资源提供者使用。通过管理资源提供者的特征,安置服务可以帮助调度器做出更好的安置决策。利用性状APl对定性资源进行存储和查询。
例如,管理员可以向现有的资源提供者聚合添加特征,将其标记为SSD存储。然后,计算节点资源提供程序读取这个标准特征。当用户创建一个新实例并指定它必须使用SSD驱动器时,调度器将该信息发送给放置服务。安置服务使用聚合将相关信息返回给调度程序。
在OpenStack的早期版本中,资源提供者聚合元数据将用于管理这种定性数据。然而,这种做法很难管理,而且不可伸缩。进一步,聚合元数据仅适用于计算节点资源。
最终,特征(traits)的使用将会减少资源提供者聚合元数据的使用,但是聚合将会保留下来,因为它们控制的不仅仅是计算节点元数据。
📜课本练习
[student@workstation ~]$ lab computeresources-launch setup
Setting up environment for the exercise:
. Verifying project: finance.................................. SUCCESS
. Creating user env file: developer1-finance-rc............... SUCCESS
. Creating user env file: architect1-finance-rc............... SUCCESS
. Creating keypair: example-keypair........................... SUCCESS
. Creating flavor: default.................................... SUCCESS
. Creating flavor: launch..................................... SUCCESS
. Creating image: rhel7....................................... SUCCESS
. Creating internal network: finance-network1................. SUCCESS
. Creating subnet: finance-subnet1............................ SUCCESS
. Creating external network: provider-datacentre.............. SUCCESS
. Creating router: finance-router1............................ SUCCESS
. Creating security group: finance-web........................ SUCCESS
. Creating port rule: ssh..................................... SUCCESS
. Creating protocol rule: icmp................................ SUCCESS
📑1. 从workstation登录到controller0节点并更改为根用户。确认compute服务以进行调试,然后重新启动容器并确认它们的状态。
[root@controller0 ~]# crudini --get /var/lib/config-data/puppet-generated/nova/etc/nova/nova.conf DEFAULT debug
False
[root@controller0 ~]# crudini --set /var/lib/config-data/puppet-generated/nova/etc/nova/nova.conf DEFAULT debug True
[root@controller0 ~]# crudini --get /var/lib/config-data/puppet-generated/nova/etc/nova/nova.conf DEFAULT debug
True
[root@controller0 ~]# docker restart nova_scheduler
nova_scheduler
[root@controller0 ~]# docker ps --format="{{.Names}}\t{{.Status}}" | grep nova
nova_metadata Up 3 days
nova_api Up 3 days (healthy)
nova_scheduler Up About a minute (healthy)
nova_vnc_proxy Up 3 days (healthy)
nova_consoleauth Up 3 days (healthy)
nova_api_cron Up 3 days
nova_conductor Up 3 days (healthy)
nova_placement Up 3 days
📑2. 打开另外三个终端窗口。
# 从workstation登录到compute0、controller0节点。使用sudo -i命令在每台机器上获得根权限。在每个节点上切换到/var/loq/containers/nova目录。这些额外的终端窗口将用于检查计算服务日志文件。
[root@controller0 ~]# cd /var/log/containers/nova/
[root@controller0 nova]#
[root@compute0 ~]# cd /var/log/containers/nova/
[root@compute0 nova]#
📑3. 在workstation上,作为architect1用户,创建一个名为financeserver1的新实例。
[student@workstation ~(architect1-finance)]$ openstack server create --flavor default --image rhel7 --nic net-id=finance-network1 --security-group finance-web --availability-zone nova:compute0.overcloud.example.com --wait finance-server1
+-------------------------------------+-------------------------------------------------+
| Field | Value
+-------------------------------------+-------------------------------------------------+
| OS-DCF:diskConfig | MANUAL
| OS-EXT-AZ:availability_zone | nova
| OS-EXT-SRV-ATTR:host | compute0.overcloud.example.com
| OS-EXT-SRV-ATTR:hypervisor_hostname | compute0.overcloud.example.com
| OS-EXT-SRV-ATTR:instance_name | instance-00000012
………
| id | 380a07ab-555b-4300-9e49-8478589824b1
| image | rhel7 (6b0128a9-4481-4ceb-b34e-ffe92e0dcfdd)
📑4. 在compute0上,检查nova-compute.log的日志文件。
使用grep命令列出与finance-server1的ID相关的条目。
[root@compute0 nova]# grep 380a07ab-555b-4300-9e49-8478589824b1 nova-compute.log
📑注意,在所有log条目中,在生命周期事件开始之前,所有条目都包含相同的ID,它出现在finance-server1的ID之前。这个ID将在接下来的步骤中用于检查nova-scheduler.log的日志文件
2020-10-29 01:32:31.180 1 INFO nova.compute.claims [req-0c2e7ba7-c886-4b72-b30b-07b0d6bfe73d 69fb452af3dc1c1b54fb342df19d898fe3928e50cc930ebb8f112b1a59e91726 3c003f65d8d64914a053f178fbbf953c - 8dd2d316acc74f54b890bae519ea75b9 default] [instance: 380a07ab-555b-4300-9e49-8478589824b1] Total vcpu: 4 VCPU, used: 0.00 VCPU
📑5. 在一个controller0终端上,使用grep命令和finance-server1的ID列出nova放置日志文件中的条目。
为每个实例创建了三个条目。注意,这里有两个GET条目和一个PUT条目。
[root@controller0 nova]# grep 380a07ab-555b-4300-9e49-8478589824b1 nova-placement-api.log
[root@controller0 nova]# grep 380a07ab-555b-4300-9e49-8478589824b1 nova-placement-api.log
2020-10-29 01:32:30.770 12 INFO nova.api.openstack.placement.requestlog [req-4c5020e0-e4f2-475b-9f48-a7f1c0ce82ba a48dc9ff61c54efb8104440971e1ffdd d8f51de41e7e4f4b8c71ed7dfc226c97 - default default] 172.24.1.1 "GET /placement/allocations/380a07ab-555b-4300-9e49-8478589824b1" status: 200 len: 19 microversion: 1.0
2020-10-29 01:32:30.824 12 INFO nova.api.openstack.placement.requestlog [req-5a1332af-ce47-4aec-aab6-fe0019102898 a48dc9ff61c54efb8104440971e1ffdd d8f51de41e7e4f4b8c71ed7dfc226c97 - default default] 172.24.1.1 "PUT /placement/allocations/380a07ab-555b-4300-9e49-8478589824b1" status: 204 len: 0 microversion: 1.17
2020-10-29 01:32:32.419 12 INFO nova.api.openstack.placement.requestlog [req-b1d88ef2-12b0-4519-ba98-f10b4bf8e68c a48dc9ff61c54efb8104440971e1ffdd d8f51de41e7e4f4b8c71ed7dfc226c97 - default default] 172.24.1.1 "GET /placement/allocations/380a07ab-555b-4300-9e49-8478589824b1" status: 200 len: 136 microversion: 1.0
📑6. 在一个controller0终端上,使用从nova-compute复制的ID使用grep命令。
日志文件,列出nova-scheduler日志文件中的条目。
[root@controller0 nova]# grep 8dd2d316acc74f54b890bae519ea75b9 nova-scheduler.log
按课本需求自行观察
📑7. 在相同的controller0节点上,使用相同的grep命令搜索finance-server1的ID。
[root@controller0 nova]# grep 380a07ab-555b-4300-9e49-8478589824b1 nova-scheduler.log
2020-10-29 01:32:29.238 1 DEBUG nova.scheduler.manager [req-0c2e7ba7-c886-4b72-b30b-07b0d6bfe73d 69fb452af3dc1c1b54fb342df19d898fe3928e50cc930ebb8f112b1a59e91726 3c003f65d8d64914a053f178fbbf953c - 8dd2d316acc74f54b890bae519ea75b9 default] Starting to schedule for instances: [u'380a07ab-555b-4300-9e49-8478589824b1'] select_destinations /usr/lib/python2.7/site-packages/nova/scheduler/manager.py:110
2020-10-29 01:32:30.063 1 DEBUG nova.scheduler.utils [req-0c2e7ba7-c886-4b72-b30b-07b0d6bfe73d 69fb452af3dc1c1b54fb342df19d898fe3928e50cc930ebb8f112b1a59e91726 3c003f65d8d64914a053f178fbbf953c - 8dd2d316acc74f54b890bae519ea75b9 default] Attempting to claim resources in the placement API for instance 380a07ab-555b-4300-9e49-8478589824b1 claim_resources /usr/lib/python2.7/site-packages/nova/scheduler/utils.py:786
按课本需求自行观察
📑8. 使用openstack服务器创建命令创建一个名为finance-server2的实例。
使用rhel7镜像、发布flavor、finance-web安全组和finance-network1网络。指定compute0为可用性区域。
[student@workstation ~(architect1-finance)]$ openstack server create --flavor launch --image rhel7 --nic net-id=finance-network1 --security-group finance-web --availability-zone nova:compute0.overcloud.example.com --wait finance-server2
Flavor's memory is too small for requested image. (HTTP 400) (Request-ID: req-a35bbeba-3990-41f6-a6f5-c9fe5cd460e7)
📑9. 在controllero节点上,检查nova-api.log的日志文件。使用实例创建失败后收到的错误消息中的请求ID。
[root@controller0 nova]# grep req-a35bbeba-3990-41f6-a6f5-c9fe5cd460e7 nova-api.log
2020-10-29 06:23:32.666 14 INFO nova.api.openstack.wsgi [req-a35bbeba-3990-41f6-a6f5-c9fe5cd460e7 69fb452af3dc1c1b54fb342df19d898fe3928e50cc930ebb8f112b1a59e91726 3c003f65d8d64914a053f178fbbf953c - 8dd2d316acc74f54b890bae519ea75b9 default] HTTP exception thrown: Flavor's memory is too small for requested image.
按课本需求自行观察
📑清除实验
[student@workstation ~]$ lab computeresources-launch cleanup
💡总结
RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。
以上就是【金鱼哥】对 第七章 管理计算资源--实例启动过程 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。
💾 红帽认证专栏系列:
RHCSA专栏: 戏说 RHCSA 认证
RHCE专栏: 戏说 RHCE 认证
此文章收录在RHCA专栏: RHCA 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!