《深度实践OpenStack:基于Python的OpenStack组件开发》

举报
华章计算机 发表于 2019/05/30 23:23:46 2019/05/30
【摘要】 本书摘自《深度实践OpenStack》,作者是喻涛,田亮,张家龙,赵利军,李飞。

云计算与虚拟化技术丛书


深度实践OpenStack:

基于Python的OpenStack组件开发


喻 涛 田 亮 张家龙 赵利军 李 飞 著

深度实践OpenStack 立.jpg


Foreword 序

2014年年底,我在从事OpenStack工作两年多之后第一次在北京环球贸易中心接触到了李华和他们的海云团队,之后我们团队与海云也有过多次技术交流,我个人也聆听过李华对OpenStack现实困境和未来发展的各种看法。我被李华和他们创业团队的远见,以及在云计算事业里的决断气魄而折服,也为他们在OpenStack领域的低调实干精神感到钦佩。

后来,由于英特尔公司对海云捷迅公司的投资关系,我们英特尔研发团队与海云创业团队形成了稳定的合作模式,建立了稳固的合作关系,在工作中发展了深厚的友谊。我们主要在上游社区负责英特尔平台相关的功能开发,而海云除了开发OpenStack功能之外,更多是要在客户那边负责OpenStack部署和实施。也正是因为这样,我们也从海云那边得到了第一手客户需求信息和部署实施经验。

2015年年中,李华毫不吝啬地送给我一本内部交流资料用于学习。该内部交流资料是培训企业运维人员,如何一步一步在企业内部用OpenStack部署工具,从零开始搭建云计算系统的,内容基本覆盖了所有OpenStack关键项目的基础用法,非常接地气。对于我这样一名以OpenStack代码开发出身的开发人员来说,受益良多。而且我们研发团队围绕着固定几个关键项目进行开发,很难接触到OpenStack全局,也很少有机会接触到为支撑一个企业内部私有云所需的所有OpenStack组件的工作原理,这本内部交流资料使我拓宽了视野,增长了见识。

这次欣闻海云即将出版这本书,并将用于企业培训,我特别期待它能早日面世。从李华那里拿到电子版后,我快速浏览了一遍,它除了会讲述OpenStack那些子项目的用法之外,还有众多的背景介绍,比如KVM、Open vSwitch和Ceph等,甚至还有海云部署案例分析。这本书的内容比我当年拿到的内部交流资料的内容还要丰富和完整,在感谢海云对OpenStack社区慷慨分享的同时,我相信读者一定能从书中学到更全面、更深入的OpenStack知识,并运用到自己的生产部署和实践开发中。


王庆 博士  

OpenStack基金会个人独立董事  

英特尔开源技术中心网络和存储部门开发经理  






Preface 前  言

为什么写这本书

从2010年7月至今,OpenStack已经发布了15个版本,并成为云计算基础架构(IaaS)的事实标准。目前OpenStack也被国内企业接受,包括中国移动通信集团公司、中国电信集团公司、中国银联股份有限公司、中国国电集团公司等都在直接或间接使用OpenStack。

随着云的普及,越来越多的业务部署并运行在OpenStack云中,原生的OpenStack的界面及功能已经远远不能满足需求,有规模的企业寻求定制自己的OpenStack,其中包括界面的定制、计算和网络等功能的增强等。而与OpenStack相关的创业公司经过几年的发展,都已经有了自己成熟的产品,这些公司如今不再为温饱而四处奔波,也已经从“卖人”转向出售自有产品。随着OpenStack创业公司规模不断扩大,原有人员远远不能满足需求,熟悉OpenStack开发的人员更是难寻,除了在“云圈子”寻找人才外,很大一部分是从Java、C++等专业人才中进行招聘,这些新人进入公司后,经过一段时间的培训,才能逐渐进入OpenStack开发的角色。

缺少OpenStack开发人员的原因主要有以下几方面。

1)开发人员首先要熟悉Linux操作系统,然后要熟悉OpenStack的相关概念,同时需要具有OpenStack相关安装部署经验。

2)开发人员要有良好的英文基础,能够看懂官方的英文文档。

3)OpenStack的开发语言为Python,很多高校没有开设相关课程,需要开发人员自己学习。

4)开源软件需要用到很多开源工具,包括Git、Curl、Jenkins等,这些工具都需要开发人员掌握。

这些条件和要求整合到一起,难度就陡然增加了,一名普通计算机专业的本科毕业生要从事OpenStack开发相关工作,至少要在OpenStack的开发企业中培训学习3个月左右;而一个云计算的开发企业,每次招收的毕业生、培养的新人是有限的,加在一起不超过千人,这些人员远远不能满足市场的需求。由此看来,OpenStack开发人员还是非常紧缺的,其待遇也是很不错的。

本书的主要内容和特色

本书是根据北京海云捷迅科技有限公司内部培训教程重新整理编辑而成,内容包括Python语言基础及开发优化的原则和OpenStack组件及开发方面的知识,是一本系统、全面、讲解深入的开发类书籍,值得所有Python和OpenStack从业人员学习参考。本书特色如下:

1)有针对性地讲解了与OpenStack相关的Python专业知识。

2)全方位涵盖了OpenStack的技术知识,包括DevStack、开发基础、API调用、源码及结构分析、功能扩展等。

3)堪称零基础入门。本书包含详尽的操作步骤,还有详细图示操作指引及错误分析,带领读者步入OpenStack开发的殿堂。

4)第一次公开OpenStack开发企业内部资料——工程师的成长资料及资深工程师的日常工作记录,极具参考价值。

本书的知识体系

全书共分八个部分:

第一部分(第1、2章):首先以若干名企业内部OpenStack开发人员的成长历程为例,讲解OpenStack开发人员应具备的知识体系;然后讲解了基本开发环境的搭建。

第二部分(第3、4章):不同于市面上的Python教材,本书以企业内部教程为主线,从企业应用角度讲解Python基础知识、优化原则和OpenStack中Python相关的模块知识。

第三部分(第5~7章):讲述了消息队列、DevStack开发环境及开发的相关知识,其中包含一些基本概念和技巧,是OpenStack开发人员必须掌握的入门知识。

第四部分(第8、9章):本部分首先用很多实例讲解了Horizon的开发框架Django,然后讲了Horizon界面结构,分析了Horizon的源代码,最后用示例完成Horizon的开发测试过程。

第五部分(第10章):本部分首先详述了Nova启动实例的流程,接着分析了Nova的源码,最后用示例讲述了微模块的开发过程。

第六部分(第11章):本部分首先讲述了OpenStack的部署拓扑和实例的数据流向分析,接着对Neutron的启动流程进行了跟踪分析,最后扩展了Neutron的extensions模块并测试其功能。

第七部分(第12章):本部分主要讲述了OpenStack测试的相关内容,包含开发人员个人的单元测试和团队的模块集成测试技术,为代码整合打好基础。

第八部分(附录A~D):首先附录A讲述了国内企业对OpenStack社区的贡献;附录B、C分别对OpenStack的Newton和 Ocata版本新特性进行了说明;附录D列举出Git代码管理命令供读者参考,希望可以为读者指明学习的方向。

本书面向的读者

本书适用于想从事OpenStack开发及深入学习OpenStack的相关人员。本书也可以作为OpenStack的培训教材。

如何阅读本书

OpenStack强调实践,希望读者能够把书中的示例代码都手动输入一遍,在输入运行代码的过程中可能会出现输入错误、语法错误等,读者可以自己尝试独立解决相关问题,逐渐增加自己的编程经验。

一定要去阅读和分析官方的源码,然后自己尝试去修改源码,只有这样才能锻炼自己的开发能力,逐步成为优秀的OpenStack开发人员。

致谢

本书参考了部分官方文档以及北京海云捷迅科技有限公司的内部资料,得到了该公司周征晟、张加龙、叶东灿、郭姗、伍军、徐奡等开发人员的大力支持;还要感谢北京海云捷迅科技有限公司的张征宇和李华,在他们的大力支持下本书才得以完成。

感谢云技术社区创始人肖力老师,是肖老师推荐了华章分社杨福川副主编,还要感谢出版社其他工作人员,有了他们的共同努力,本书才得以正式出版。

由于编撰时间有限,加上OpenStack博大精深,版本更迭较快,文中有失效或分析不对的地方还请读者批评指正。






目  录?Contents

前 言

第1章 OpenStack企业工程师的成长

及工作介绍  1

1.1 Horizon界面工程师的工作内容  1

1.2 Neutron网络工程师的工作内容  2

1.3 Nova资深工程师的工作内容  3

1.4 本章小结  5

第2章 开发环境的搭建  6

2.1 Windows开发环境的搭建  6

2.1.1 Git的安装  6

2.1.2 JDK的安装与配置  12

2.1.3 Python的安装与配置  15

2.1.4 PyCharm的安装与配置  19

2.2 Linux开发环境的搭建  24

2.2.1 Vim编辑器  24

2.2.2 PyCharm编辑器  25

2.3 Eclipse开发环境的搭建  26

2.3.1 安装Eclipse的PyDev插件  26

2.3.2 安装Eclipse的EGit插件  26

2.4 Launchpad账号  26

2.4.1 Launchpad账号注册  26

2.4.2 上传SSH keys  27

2.4.3 补充相关账号与信息  30

2.5 Git的使用  32

2.5.1 设置Git全局配置  32

2.5.2 安装git-review 工具并验证  33

2.5.3 提交代码步骤  33

2.5.4 Git管理流程图  35

2.6 本章小结  35

第3章 Python语言基础  36

3.1 Python概述  36

3.2 Python基础  37

3.2.1 编码  37

3.2.2 缩进与分隔  37

3.2.3 命名规范  38

3.2.4 注释  39

3.2.5 执行  39

3.2.6 代码的调试  40

3.2.7 帮助的使用  41

3.3 Python数据类型  42

3.3.1 变量  42

3.3.2 数字与表达式  44

3.3.3 字符串和列表  45

3.3.4 元组  49

3.3.5 字典  50

3.3.6 其他类型  50

3.4 流程控制  51

3.4.1 if语句  51

3.4.2 while循环  52

3.4.3 for循环  53

3.4.4 continue和break  53

3.4.5 异常处理  53

3.4.6 else的特殊用法  54

3.5 函数  55

3.5.1 函数基础  55

3.5.2 函数参数  55

3.5.3 函数体和返回值  57

3.5.4 再论类型和循环  58

3.5.5 生成器  60

3.5.6 可调用的变量  62

3.5.7 变量作用域  63

3.6 本章小结  64

第4章 Python模块  65

4.1  SQLAlchemy  65

4.1.1 安装 SQLAlchemy  65

4.1.2 使用 SQLAlchemy对数据库操作  65

4.1.3 使用 ORM  67

4.1.4 完整示例  69

4.2 logging模块  70

4.2.1 logging的使用  70

4.2.2 若干重要的概念  71

4.2.3 logging工作流程  73

4.2.4 日志配置  74

4.3 Eventlet  77

4.3.1 greenlet  77

4.3.2 GreenThread  78

4.4 WSGI  81

4.4.1 RESTful API介绍  81

4.4.2 WSGI简介  82

4.4.3 简单的WSGI  83

4.4.4 运行WSGI服务  84

4.4.5 Middleware  86

4.5 PasteDeploy  87

4.5.1 PasteDeploy安装  87

4.5.2 Paste配置文件  87

4.5.3 改进WSGI  89

4.6 WebOb  90

4.6.1 Python装饰器说明  90

4.6.2 简单示例  91

4.6.3 添加自己的中间件  91

4.6.4 其他特性  92

4.7 routes模块  92

4.7.1 routes模块概述  92

4.7.2 使用示例  93

4.8 综合实例  94

4.9 本章小结  98

第5章 RabbitMQ  99

5.1 RabbitMQ简介  99

5.2 RabbitMQ流程  101

5.2.1 单向发送消息  101

5.2.2 队列  103

5.2.3 交换  106

5.2.4 路由  109

5.2.5 主题  111

5.2.6 RPC调用  114

5.3 RabbitMQ 持久化  119

5.4 本章小结  120

第6章 DevStack  121

6.1 DevStack介绍  121

6.2 操作系统的安装与配置  121

6.2.1 VMware虚拟机的配置  121

6.2.2 系统配置  123

6.3 环境准备与配置  126

6.3.1 DevStack准备  126

6.3.2 配置local.conf文件  127

6.4 安装DevStack  128

6.5 环境验证  128

6.5.1 登录验证  128

6.5.2 创建网络  130

6.5.3 创建实例  132

6.5.4 验证实例网络  134

6.5.5 OpenStack版本  136

6.6 错误分析  136

6.6.1 日志目录  136

6.6.2 使用Git下载代码出错  137

6.6.3 网络配置错误  137

6.6.4 重新部署  137

6.7 本章小结  138

第7章 开发小试  139

7.1 screen简介  139

7.1.1 screen的进入  139

7.1.2 screen的使用  140

7.1.3 screen的退出  142

7.2 API调试  142

7.2.1 API  142

7.2.2 RESTClient工具  145

7.2.3 Curl实验  151

7.2.4 错误分析  155

7.3 OpenStack界面主题的修改  157

7.3.1 替换logo  157

7.3.2 修改样式  159

7.4 本章小结  164

第8章 Django框架  165

8.1 安装Django  165

8.2 Django的架构  169

8.3 创建项目  170

8.3.1 Django管理工具  171

8.3.2 测试站点  172

8.3.3 增加一个APP  174

8.4 使用数据库  176

8.4.1 连接数据库  176

8.4.2 创立模型  177

8.4.3 显示记录  179

8.5 模板  180

8.5.1 使用模板  180

8.5.2 流程分析  182

8.5.3 使用循环  182

8.5.4 模板继承  184

8.6 表单  185

8.6.1 提交表单(GET方法)  185

8.6.2 提交表单(POST方法)  186

8.7 存储数据  187

8.8 表单对象  188

8.9 admin管理  190

8.9.1 默认管理  190

8.9.2 复杂的模型  191

8.9.3 自定义页面  192

8.9.4 Inline显示  193

8.9.5 列表页的显示  194

8.10 错误分析  196

8.11 本章小结  198

第9章 Dashboard的开发  199

9.1 Dashboard概述  199

9.2 源码解析  200

9.2.1 UI整体结构  200

9.2.2 初识Dashboard  201

9.2.3 项目结构  203

9.3 自定义Dashboard和Panel  207

9.3.1 手工启动Dashboard工程  207

9.3.2 创建Dashboard  207

9.3.3 创建mypanel  208

9.3.4 编写代码  209

9.3.5 验证代码  215

9.4 复杂的action table  217

9.4.1 定义view  217

9.4.2 增加URL  219

9.4.3 定义action  220

9.4.4 测试  220

9.5 Horizon开发相关内容  222

9.5.1 汉化  222

9.5.2 workflows  222

9.5.3 JavaScript  224

9.6 错误分析  225

9.7 本章小结  227

第10章 Nova组件  228

10.1 组件介绍  228

10.1.1 OpenStack的版本  228

10.1.2 组件的组成  228

10.1.3 组件之间的关系  229

10.1.4 API的使用  230

10.2 虚拟创建过程详解  230

10.3 Nova源码分析  233

10.3.1 目录结构  233

10.3.2 重要目录详解  236

10.4 Nova调用关系分析  240

10.4.1 创建虚拟机过程源码追溯  240

10.4.2 创建虚拟机过程调用流程函数分析  241

10.4.3 Nova和AMQP的关系  243

10.5 开始实践  246

10.6 API V2.1说明  248

10.6.1 compatibility  249

10.6.2 Validation  249

10.6.3 Microversion  249

10.7 编码  251

10.7.1 示例编码  251

10.7.2 官方代码参考  252

10.7.3 Nova代码实现示例  258

10.8 调试并修复nova-compute的所有协程卡住的问题  262

10.9 本章小结  269

第11章 Neutron组件  270

11.1 Neutron基础  270

11.1.1 服务及组件介绍  270

11.1.2 Neutron架构  271

11.1.3 Neutron抽象出的概念  272

11.1.4 Linux网络基础  272

11.2 实例网络详解  273

11.2.1 硬件配置及网络拓扑  273

11.2.2 各个节点服务关系及说明  274

11.2.3 场景举例  277

11.3 Neutron的源码分析  282

11.3.1 目录结构  283

11.3.2 重要目录详解  285

11.3.3  Neutron启动分析  288

11.4 Neutron组件扩展  293

11.4.1 编写代码  293

11.4.2 重启服务  295

11.4.3 测试  296

11.5 本章小结  297

第12章 测试技术  298

12.1 OpenStack测试基础  298

12.2 单元测试  299

12.3 集成测试  301

12.4 本章小结  303

附录A Mitaka国内代码贡献  304

附录B Newton新特性  307

附录C Ocata版本新特性  309

附录D Git代码管理命令  314


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。