版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OpenStackAPI与客户端OpenStackAPIOpenStack是由Rackspace和NASA共同开发的云计算平台,帮助服务商和企业内部实现类似于Amazon
ec2和S3的云基础架构服务。它的社区拥有超过130家企业及1350位开发者,这些机构与个人将OpenStack作为基础设施即服务资源的通用前端。首要任务是简化云的部署过程并为其带来良好的可扩展性。OpenStack的各个服务之间通过统一的REST风格的API调用,实现系统的松耦合。它内部组件的工作过程是一个有序的整体。诸如计算资源分配、控制调度、网络通信等都通过AMQP实现。OpenStack的上层用户是程序员、一般用户和Horizon界面等模块。这三者都是采用OpenStack各个组件提供的API接口进行交互,而它们之间则是通过AMQP进行互相调用,它们共同利用底层的虚拟资源为上层用户和程序提供云计算服务。思政课堂阿福正在准备一家公司的面试,他从网上找到了一些关于这家的面试题。其中一道题难住了阿福,题目要求利用Python来调用OpenStack
API,同时要了解其工作流程,还要其操作一些基本的客户端命令行操作。OpenStack中的各个项目都是通过FRESTful
API对外进行服务的,用户需要每个项目提供的API来使用其对应的服务和功能。OpenStack作为一个基础架构即服务(IaaS)的云平台,提供的使用方式也有好几种,其中包括Web界面、命令行客户端和API,然而API又是实现前两种方式的基础。所以我们要先进行OpenStack
API的学习,然后再去学习OpenStack
命令行客户端以及Dashboard界面的使用。项目描述OpenStack
API有什么作用?调用OpenStackAPI有哪些流程?为什么要掌握OpenStack命令行的操作?问题引导1、RESTful
API的概念。RESTful
API是由后台也就是SERVER来提供前端调用。前端调用API向后台发起HTTP请求,然后后台响应请求将处理结果反馈给前端。通俗的讲的话就是说RESTful
API是最典型的基于HTTP的协议。其中OpenStack当中的各个项目都提供了RESTful架构的API作为对外提供的接口,而RESTful架构的核心是资源和资源的操作。OpenStack定义了许多的资源,并整理出来了一些针对这些资源的各种操作函数。其实现原理是当服务进程接收到了客户端发出来的HTTP请求时,所谓的“路由”模块就会将请求的URL转化成为相对应的资源,然后再路由到合适的操作函数上。接下来执行一个openstack
user
list
命令为例来说明这个流程。客户端使用HTTP发送请求,调用openstack
server
list
命令,如图3-1所示。知识学习图3-1命令行显示虚拟机实例知识学习Rails(路由模块)收到HTTP请求后,将这个请求分别派到对应的controll(控制器),并且绑定一个action(操作)。每个控制器都对应一个RESTful
资源,代表了对该资源的操作集合,其中包含了很多action。因为rrails指定了要执行index函数的action,所以controller就会调用index函数。在OpenStack的项目中采用通用的RESTful
API,不同的版本的API都应该使用相对应版本号加以区分。在URL上加API版本号,例如glance的API会有/v2.0和/v3.0的前缀,所以我们能区分它们是不同版本的API。现在以一个通用的用户管理API为例,列出它主要的形式,如下面所示:GET/v3/users:获取所有用户的列表POST/v3/users:创建一个用户。
GET/v3/users/<UUID>:获取一个用户的详细信息。PUT/v3/users/<UUID>:修改一个用户的详细信息。DELETE/v3/users/<UUID>:删除一个用户。WSGI
是Web服务器网关接口,Web
Server
Gateway
Interface。他是一种协议、一种规定,遵守WSGI协议可以混合搭配各种服务器和框架,让他们相互兼容。知识学习2、WSGI服务器(WSGIServer)•它唯一的任务就是接受来自客户端的HTTP请求,封装一系列的环境变量。WSGI应用程序(WSGI
Application)•Web
Server
接受请求之后,会通过WSGI
协议规定的方式把数据传递给WebApplication
,在Web
Application
中处理完之后,设置对应的状态和header
,之后返回body
部分。Web
Server
拿到返回数据之后,再进行HTTP
协议的封装,最终返回完整的HTTP
Response
数据。OpenStack能够做为一个流行的开源云计算平台,最大的特点就是其提供的API基础设施,这让我们可以用软件的的方式来动态管理IAAS资源,OpenStack各组件之间主要是通过相互调用API来实现通信的。通过OpenStack身份认证之后,可以使用OpenStack
API在OpenStack云中创建虚拟机实例,为实例分配各种合理的资源。知识学习3、调用OpenStackAPI有几种方式。。方式作用CURL命令
这是一个Linux命令行工具,用于发送HTTP请求并接受响应。OpenStack命令行客户端OpenStack的主要项目都有自己的一个命令行工具,但是随着项目的逐渐增加,使用起来并不方便,所以就有了一个新的组件pyton-openstackclient,用于提供统一的命令行工具opnstack。REST客户端这种方式是通过OpenStack的Horizon项目提供的。只要提供一种交互界面,他会通过API来与各个OpenStack服务进行交互,然后在图形化界面展示各个服务的状态。OpenStack的Python
SDK使用官方提供的PythonSDK自己编写脚本,在OpenStack上创建和管理资源知识学习4、Dashboard的概念。服务名称:Dashboard
项目名称:HorizonDashboard是一个Web接口,使得云平台管理员以及用户可以管理不同的OpenStack资源和服务。提供了一个Web界面,支持大部分命令行客户端下的命令。horizon提供了一个模块化的,依托于图形化界面的门户。用户可以通过浏览Web界面来访问、控制他们的计算、存储、网络资源。Horizon以图形的方式来管理所有的project,包括Nova虚拟机的创建、Cinder存储、Glance镜像。任务一:OpenStackAPI的基本使用1.获取OpenStack认证令牌编写环境变量文件项目实施[root@controller~]#catadmin-openrcexportOS_PROJECT_DOMAIN_NAME=DefaultexportOS_USER_DOMAIN_NAME=DefaultexportOS_PROJECT_NAME=adminexportOS_USERNAME=adminexportOS_PASSWORD=ADMIN_PASSexportOS_AUTH_URL=http://controller:5000/v3exportOS_IDENTITY_API_VERSION=3exportOS_IMAGE_API_VERSION=2验证环境变量,并通过命令行获取token。项目实施这边获取到
的id就是我们token的值。通常我们要使用OpenStack
API的时候都是通过编写Python
脚本来获取它的,所以接下来的学习我们就需要用到Python环境,需要使用pycharm编辑脚本。在Python编辑器上新建一个文件夹,方便存放我们的代码。提示:调用OpenStack
API的时候需要用到requests模块,所以需要提前去下载好来。下载requests模块打开pycharm的终端利用pip下载requests模块。项目实施pipinstallrequests下载如果有点慢的话,推荐使用国内的源下载pipinstallrequests-i/pypi/simple/就是在后面加上参数–i,加上国内源的地址项目实施importjsonimportrequests
#获取tokendefpost_token():url='http://控制节点IP地址:端口号/v3/auth/tokens'body={"auth":{"identity":{"methods":["password"],"password":{"user":{"id":"用户ID","password":"用户密码"}}},"scope":{"project":{"id":"项目ID"}}}}respones=requests.post(url=url,data=json.dumps(body)).headers['X-Subject-Token']print(respones.text)
post_token()利用编辑器编写上面的代码,
注意规范代码格式。在调用OpenStack
API的时候,需要用到请求资源的URL、用户以及角色,我们可以通过可视化Web界面和OpenStack命令行客户端去找到这些资源。在这里为了方便我们就利用命令行的方式获取这些资源;获取URLURL
看你是需要调用哪个组件的,这里获取的是token,是为了验证身份的,所我们需要调用Keystone组件来完成。项目实施这是因为在开机或者重启之后环境变量失效了,出现这样的报错,我们只需要source一下环境变量文件。注意:在使用OpenStack命令行的时候可能会出现以下报错![root@controller~]#openstackcatalogshowkeystoneMissingvalueauth-urlrequiredforauthpluginpassword[root@controller~]#sourceadmin-openrc我们获取到url后就往pyhton代码上套用,其中controller就是控制节点IP,你只需要换成你自己控制节点的IP地址即可。获取用户ID
这里用的是用户“admin”项目实施[root@controller~]#openstackusershowadmin+---------------------+----------------------------------+|Field|Value|+---------------------+----------------------------------+|domain_id|default||enabled|True||id|4d2d5e2ef2ec4d228e208874b3ce862e||name|admin||options|{}||password_expires_at|None|+---------------------+----------------------------------+这样我们就看到了用户的ID了,然后一样的套用在python代码上。获取项目ID这里用到的是项目“admin”项目实施[root@controller~]#openstackprojectshowadmin+-------------+-----------------------------------------------+|Field|Value|+-------------+-----------------------------------------------+|description|Bootstrapprojectforinitializingthecloud.||domain_id|default||enabled|True||id|f503feac93744ca4ac348d0e103911e3||is_domain|False||name|admin||options|{}||parent_id|default||tags|[]|+-------------+-----------------------------------------------+这样我们就看到了项目ID,也是一样的往python代码上面套用获取用户密码用户密码就是环境变量上的OS_PASSWORD最后你就会得到一套完整的获取token值的代码。项目实施运行代码就会返回token的值,与之前利用命令行获取到的token值比较,发现是一样的。项目实施gAAAAABh0ma2b9q1AKuoslwu83EloHtBZIMk9-_-kVfgDdMG0fIfYrXaARTFIzXT0AeEEPEivY1iJi4UqExyNa4qfV9Qeugx-2UBwd3UFz7e8yvos5XMVflVrR240Va0Y78p0-euzJnHdKV_U1OMXbwFA58oOCmktqAc1DNnU38JpbPZ12Mzvgg利用token的值,调用API创建一个项目。首先为了代码的美观,我们就要为token做一个返回值,,把print(respones.text)和post_token()给注释掉,添加returnrespones;就像这样:
#print(respones.text)returnrespones
#post_token()创建项目项目实施在获取token的代码基础上,在后面添加以下代码#创建项目defproject():url="http://IP地址:端口/v3/projects"headers={"x-auth-token":post_token()#利用token的值}body={"project":{"description":"描述","domain_id":"域ID","name":"项目名称","options":{}}}a=requests.post(url=url,data=json.dumps(body),headers=headers)print(a)project()项目实施获取域ID
域ID的获取方式
需要调整删除或者完善[root@controller~]#openstackdomainlist+----------------------------------+---------+---------+--------------------+|ID|Name|Enabled|Description|+----------------------------------+---------+---------+--------------------+|619ed4660577446d900e5d1ef868c8f2|example|True|AnExampleDomain||default|Default|True|Thedefaultdomain|+----------------------------------+---------+---------+--------------------+项目实施获取到域ID后一样的往python代码上面套用,我们这里域ID
是“default”,名称和描述根据需求来定。运行python代码,查看结果[root@controller~]#openstackprojectlist+----------------------------------+----------+|ID|Name|+----------------------------------+----------+|9982d3e56878438d895644c76b4c9ac1|service||c8f11fca06bc48ddb6267cef884a8019|项目名称||f503feac93744ca4ac348d0e103911e3|admin||ffcd94cc525b4d8c952fc81f717f39fc|abc|+----------------------------------+----------+项目实施利用token的值,删除一个项目。注意:
这里我们需要把刚才创建项目的代码给注释掉,不然会二次创建引发报错。defproject():url="http://IP地址:端口号/v3/projects/项目ID"headers={"x-auth-token":post_token()}a=requests.delete(url=url,headers=headers)print(a)project()查看结果[root@controller~]#openstackprojectlist+----------------------------------+---------+|ID|Name|+----------------------------------+---------+|9982d3e56878438d895644c76b4c9ac1|service||f503feac93744ca4ac348d0e103911e3|admin||ffcd94cc525b4d8c952fc81f717f39fc|abc|+----------------------------------+---------+项目实施通过openstackcataloglist命令我们可以列出所有组件的URL,这样我们就可以利用URL调用API来对资源进行增删改查了;[root@controller~]#openstackcataloglist+-----------+-----------+-----------------------------------------+|Name|Type|Endpoints|+-----------+-----------+-----------------------------------------+|keystone|identity|RegionOne||||internal:http://controller:5000/v3/||||RegionOne||||public:http://controller:5000/v3/||||RegionOne||||admin:http://controller:5000/v3/||||||nova|compute|RegionOne||||admin:http://controller:8774/v2.1||||RegionOne||||public:http://controller:8774/v2.1||||RegionOne||||internal:http://controller:8774/v2.1|||||…………………………注意:在执行客户端命令之前,你必须使用source命令执行”openrc”文件来设置环境变量。项目实施任务二:openstack命令行客户端[root@controller~]#openstackimagelist+--------------------------------------+--------+--------+|ID|Name|Status|+--------------------------------------+--------+--------+|bf328742-59dd-48b3-a832-d3d4a25415df|cirros|active|+--------------------------------------+--------+--------+通过OpenStack
命令创建云主机类型[root@controller~]#openstackflavorcreate--id0--vcpus1--ram1024--disk10m1.nano+----------------------------+---------+|Field|Value|+----------------------------+---------+|OS-FLV-DISABLED:disabled|False||OS-FLV-EXT-DATA:ephemeral|0||disk|10||id|0||name|m1.nano||os-flavor-access:is_public|True||properties|||ram|1024||rxtx_factor|1.0|项目实施通过OpenStack命令列出可用的云主机类型[root@controller~]#openstackflavorlist+----+---------+------+------+-----------+-------+-----------+|ID|Name|RAM|Disk|Ephemeral|VCPUs|IsPublic|+----+---------+------+------+-----------+-------+-----------+|0|m1.nano|1024|10|0|1|True|+----+---------+------+------+-----------+-------+-----------+通过OpenStack命令列出可用网络;[root@controller~]#openstacknetworklist+--------------------------------------+------+--------------------------------------+|ID|Name|Subnets|+--------------------------------------+------+--------------------------------------+|aed73ded-c802-4851-94a2-682b84717fa8|test|47fcc705-2392-4d33-860a-fcc7a48a00bc|+--------------------------------------+------+--------------------------------------+项目实施接下来我们使用OpenStack命令来创建云主机,运行openstack
server
create命令创建云主机;[root@controller~]#openstackservercreate--flavorm1.nano--imagecirros--nicnet-id=aed73ded-c802-4851-94a2-682b84717fa8provider-instance+-------------------------------------+-----------------------------------------------+|Field|Value|+-------------------------------------+-----------------------------------------------+|OS-DCF:diskConfig|MANUAL||OS-EXT-AZ:availability_zone|||OS-EXT-SRV-ATTR:host|None||OS-EXT-SRV-ATTR:hypervisor_hostname|None||OS-EXT-SRV-ATTR:instance_name|||OS-EXT-STS:power_state|NOSTATE||OS-EXT-STS:task_state|scheduling||OS-EXT-STS:vm_state|building||OS-SRV-USG:launched_at|None||OS-SRV-USG:terminated_at|None|项目实施通过OpenStack命令获取server列表[root@controller~]#openstackserverlist+--------------------------------------+-------------------+--------+----------------------+--------+---------+|ID|Name|Status|Networks|Image|Flavor|+--------------------------------------+-------------------+--------+----------------------+--------+---------+|ec6d05a8-1a15-4f2b-9720-3ab9624dceb0|provider-instance|ACTIVE|test=03|cirros|m1.nano|+--------------------------------------+-------------------+--------+----------------------+--------+---------+我们为您可以看到云主机创建成功#在controller节点上配置仪表盘以使用OpenStack服务OPENSTACK_HOST="controller"#允许所有主机访问仪表板ALLOWED_HOSTS=['*',]#配置memcached会话存储服务CACHES={ 'default':{ 'BACKEND':'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION':'controller:11211',项目实施任务三:手动安部署Horizon1.部署Horizon组件首先我们需要在控制节点安装Horizon组件[root@controller~]#yum-yinstallopenstack-dashboard其次就是修改配置文件修改/etc/openstack-dashboard/local_settings项目实施}}SESSION_ENGINE='django.contrib.sessions.backends.cache'#启用第3版认证APIOPENSTACK_KEYSTONE_URL="http://%s:5000/v3"%OPENSTACK_HOST#启用对域的支持OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT=True#配置API版本OPENSTACK_API_VERSIONS={ "identity":3, "image":2, "volume":3, }#Web界面配置WEBROOT="/dashboard"#通过仪表盘创建用户时的默认域配置为defaultOPENSTACK_KEYSTONE_DEFAULT_DOMAIN="Default"#通过仪表盘创建的用户默认角色配置为userOPENSTACK_KEYSTONE_DEFAULT_ROLE="user"#如果您选择网络参数1,禁3层网络服务:OPENSTACK_NEUTRON_NETWORK={ ...'enable_router':False,'enable_quotas':False,'enable_distributed_router':False,'enable_ha_router':False,'enable_lb':False,'enable_firewall':False,'enable_vpn':False,'enable_fip_topology_check':False, }项目实施#在controller节点上配置仪表盘以使用OpenStack服务OpenStack_HOST="controller"#允许所有主机访问仪表板ALLOWED_HOSTS=['*',]#配置memcached会话存储服务CACHES={ 'default':{ 'BACKEND':'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION':'controller:11211', }}SESSION_ENGINE='django.contrib.sessions.backends.cache'#启用第3版认证APIOpenStack_KEYSTONE_URL="http://%s:5000/v3"%OpenStack_HOST#启用对域的支持OpenStack_KEYSTONE_MULTIDOMAIN_SUPPORT=True#配置API版本OpenStack_API_VERSIONS={ "identity":3, "image":2, "volume":3, }项目实施#Web界面配置WEBROOT="/dashboard"#通过仪表盘创建用户时的默认域配置为defaultOpenStack_KEYSTONE_DEFAULT_DOMAIN="Default"#通过仪表盘创建的用户默认角色配置为userOpenStack_KEYSTONE_DEFAULT_ROLE="user"#如果您选择网络参数1,禁3层网络服务:OpenStack_NEUTRON_NETWORK={ ...'enable_router':False,'enable_quotas':False,'enable_distributed_router':False,'enable_ha_router':False,'enable_lb':False,'enable_firewall':False,'enable_vpn':False,'enable_fip_topology_check':False, }项目实施如果/etc/httpd/conf.d/OpenStack-dashboard.conf
文件中没有包含以下定义,将该定义语句添加到该文件中。(sed
命令行直接输入就可以)[root@controller~]#sed-i"4iWSGIApplicationGroup%{GLOBAL}"/etc/httpd/conf.d/openstack-dashboard.conf修改完后重启httpd服务[root@controller~]#systemctlrestarthttpd.service[root@controller~]#systemctlrestartmemcached.service项目实施检查httpd服务是否成功启动,如图3-2所示。图3-2httpd服务状态检查memcached服务是否成功启动,如图3-3所示。图3-3memcached服务状态项目实施可以看到两个服务·的状态(active)都是running就说明服务都正常启动了。在浏览器上访问http://控制节点IP地址/dashboard,会出现如图3-4所示的登录界面:图3-4OpenStack的登陆界面项目实施扩展HorizonHorizon通过前端Web界面将隐藏于后台的OpenStack服务和组件的内容以可视化的方式呈现给用户,它还包含了一个apach服务器程序,然后通过这个Web服务器向用户提供Web界面。Horizon的面板布局一共分为三个层次,仪表板、面板组、面板,如图3-5所示。图3-5
Horizon的面板布局项目实施说明一下:顶层是仪表板(Dashboard),其目前有以下三项。
•项目(project)——普通用户登录之后的项目管理
•管理员(admin)———管理员专用的仪表板
•身份管理(identity)———管理员能够管理整个系统的身份认证任务,然而普通用户只能管理自己的租户信息。自定义OpenStack
Horizon
我们可以基于对Django框架进行自定义配置,Horizon是负责OpenStack管理的统一Web界面,它的源代码与其他的OpenStack项目有点差别,是分布在两个位置的。一个位置是在/usr/lib/python2.7/site-packages/horizon,在这里存放的主要是一些最基本的模板;还有一个位置是在/usr/share/openstack-dashboard,在这里存放的是与wen界面有直接关系、更加具体的模板,这个目录也是我们用户可以直接修改以及定制的地方。[root@comtrolleropenstack-dashboard]#lsmanage.pymanage.pycmanage.pyoopenstack_dashboardstatic项目实施我们从文件夹的结构可以看的出来,openstack-dashboard这个目录是Djiango的一个项目。而openstack_dashboard
又是一个APP,openstack_dashboard里面列出了所有的文件和目录。[root@controlleropenstack_dashboard]#lsapidefaults.pyohooks.pyopolicy.pytemplatetagsurls.pyowsgi.pyccontext_processors.pydjango_pyscss_fix__init__.pypolicy.pyctestusagewsgi.pyocontext_processors.pycenabled__init__.pycpolicy.pyothemesutilscontext_processors.pyoexceptions.py__init__.pyosettings.pytheme_settings.pyviews.pycontribexceptions
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店、旅业治安管理制度、突发实况应急、卫生管理、旅客须知
- 2025 八年级生物学下册运动训练对运动员免疫系统的长期影响课件
- 广州医科大学《德国文学选读》2024 - 2025 学年第一学期期末试卷
- 2017年5月 信息安全工程师 下午题答案及解析 - 详解版(6题)
- 广西财经学院《管理会计》2024 - 2025 学年第一学期期末试卷
- 大类资产配置月报第55期:2026年2月美联储鹰派主席提名“修复”独立性与美元
- 2025 八年级生物学下册生物进化中的平行进化现象课件
- 银行行业丈量地方性银行:浙江163家区域性银行全梳理
- 2025 八年级生物上册观察叶肉细胞叶绿体流动现象课件
- 2025年辅警招聘考试真题及答案
- 2026年包头铁道职业技术学院单招职业适应性考试题库及参考答案详解(新)
- 河北保定市安新县2025-2026学年第一学期期末质量监测九年级数学试题(试卷+解析)
- 2026年春季人教版(PEP)三年级下册英语教学计划附教学进度表
- 婴幼儿学习与发展 课程标准
- 特种设备质量安全风险日管控周排查月调度管理制度
- CMA质量手册(2025版)-符合27025、评审准则
- 饲料厂复工安全培训课件
- 2026年山东药品食品职业学院单招综合素质笔试备考试题带答案解析
- 2025年夜间音乐节五年行业报告
- 骨科锻炼医疗健康知识小讲堂
- 2024年云南省中考道德与法治试卷(含答案与解析)
评论
0/150
提交评论