Neutron复盘及学习笔记

前言

  1. 对于openstack neutron,曾花费很多的时间去看它的源码,结果啥都没有看出来。
  2. openstack代码风格是,为了实现plugin的可插拔,运用了很多设计模式,设计思想也非常哲学。这样的好处是,开发者可以专注于自己需要开发的功能而不必关心底层细节,但对于新手,完全是一头雾水。
  3. 我个人的经验是,一定要多问,从代码结构到实现方式,一旦有人告诉你它的分层结构,豁然开朗。
  4. 当然你可以上网去搜,但据我所知,网上关于openstack的文档太过浅显,深入源码的分析又看不懂,仅仅说个架构也不见得有多大的帮助。
  5. 本文主要还是作为笔者对最近neutron开发工作一个简单的总结分析吧,结合我对neutron理解。后续随着本人学习的深入,逐步会出neutron系列的文章。

neutron的开发流程

neutron无须理会实现细节,只要专注于自己开发的功能就好。开发一个plugin,无非就是定义API,设计model,开发db层以及具体实现。

  1. neutron仅有一个主要服务进程neutron-server,对外提供API,通过它写db,调用plugin进行处理,最终通过消息队列实现RPC发送给agent端处理。
  2. 无须理解api机制是如何实现的,api分为两类:core api及extension api:core 实现network、subnet以及port的二层功能,extensions主要实现router、lb、qos等三层功能及各类增强实现。各大厂商可以通过实现extensions plugin增加自己的功能。
  3. neutron_lib/api/definitions 定义了各类extensions api,neutron/extensions下可以实现extensions api的二次扩展或定义自己的extensions api。
  4. neutron/db/models中实现新功能的db设计
  5. neutron/db实现db层的增删改查接口,例如l3_db.py,一般可以在这里实现函数,引用ext api中定义的抽象类,重载定义的方法,并调用db.models实现去完成增删改查,同时发送rpc消息让agent端处理
  6. 此时要让neutron-server在启动时能够加载我们定义的plugin,一般在neutron/services下实现,例如neutron/services/l3_router/l3_router_plugin.py
    neutron调用流程

neutron db升级

  1. neutron有个db升级工具neutron-db-manage,可以生成db升级文件,但无法降级。降级操作需要手动操作数据库。
# 生成数据库升级文件
neutron-db-manage --subproject neutron revision -m test
  1. 以R版为例,neutron/db/migration/alembic_migrations/version/rocky下会生成相应的文件,命名格式为test_xxxx.py,xxxx是版本编号。
  2. neutron/db/migration/alembic_migrations/ 路径下存在两个文件,EXPAND_HEADCONTRACT_HEAD,neutron项目的两个版本分支,这两个文件分别记录了当前最新的版本编号。
  3. 两个分支都是独立的,neutron数据库表alembic_version中记录着当前的版本分支,每次升级都会更改。
  4. 如果需要执行降级操作,则要将alembic_version中的版本编号还原,否则版本时间线会出现差异,导致后续版本操作出现不可知的影响。
# 数据库升级文件中存在如下记录
# revision代表当前升级文件的版本编号
revision = '867d39095bf4'
# down_revision记录了上一个版本升级版本
down_revision = '61663558142c'

# 执行neutron-db-manage,如果指定neutron子项目,则会生成expand和contract两个分支的文件
# 如果没有指定子项目,则会生成包括neutron、fwaas、lbaasv2等全部项目的双分支的升级文件
# 实际上只需要单独编写一个分支执行升级就好,多余的文件实属冗余
neutron-db-manage upgrade --expand # 升级expand分支
neutron-db-manage upgrade --contract # 升级contract分支
  1. 通过这种方式,neutron维护了一套版本滚动升级的方式,版本时间线衔接向前,无论是升级还是回滚都有迹可循。

后续想起来再补充吧

学习要求: 熟悉基本的linux命令 具备基本的网络知识 掌握一门编程语言 课程特点: 深刻理解:OpenStack的设计原理,体系构架和关键技术,构建一个OpenStack环境所需的核心组件以及核心组件间的联系; 全面掌握:如何通过不同的部署工具比如packstack,部署OpenStack环境;如何通过单独部署OpenStack核心组件逐渐搭建出OpenStack环境; 定制研发:在学习openstack源码级深度解析培训后,你能了解openstack源码的体系结构,并能根据需要进行定制开发,满足您在实际生产环境中OpenStack的各种疑问和不满足的功能。 ------------------------课程内容------------------------ 课时1、课前学习环境准备 课时2、课程介绍 课时3、OpenStack概论 课时4、实例:OpenStack自动安装(Fuel) 课时5、作业:OpenStack Fuel 课时6、OpenStack安装部署答问 课时7、Keystone 详解 课时8、实例:OpenStack 手动安装 - 环境准 课时9、实例:Keystone 手动安装 课时10、实例:Keystone CLI 使用 课时11、实例:Keystone API使用 课时12、Glance详解 课时13、实例:Glance手动安装以及CLI、API 课时14、实例:Glance镜像制作 课时15、实例:Glance镜像修改 课时16、作业:Keystone手动练习 课时17、Keystone答问 课时18、作业:Glance手动练习 课时19、Nova架构及原理详解 课时20、实例:Nova手动安装 课时21、实例:Instance启动过程回顾 课时22、网络基础知识盘点 课时23、Neutron原理详解 课时24、实例:Neutron手动安装 课时25、实例:网络命名空间 课时26、实例:物理机连接openvswitch的虚 课时27、实例:租户私有网络创建 课时28、Neutron SDN 实现详解 课时29、实例:Neutron SDN 手动实现 课时30、作业:Nova、Neuron手动安装练习 课时31、作业:Neutron 相关实例练习 课时32、Neutron 答问 课时33、Cinder 原理详解 课时34、Cinder iSCSI实现原理详解 课时35、实例:Cinder 手动安装 课时36、Swift 架构与原理详解 课时37、实例:Swift 手动安装 课时38、Dashboard 介绍与演示 课时39、实例:Dashboard 手动安装 课时40、实例:Dashboard 浮动IP访问实例 课时41、实例:Dashboard 块存储的使用 课时42、实例:Dashboard 对象存储的使用 课时43、实例:OpenStack 命令行接口使用 课时44、OpenStack HA与性能调优 课时45、OpenStack Devstack 自动安 课时46、配置 OpenStack Eclipse 开发环境 课时47、配置 OpenStack Eclipse 开发环境 课时48、OpenStack 自动化测试 - 单元测试 课时49、OpenStack 自动化测试 - 集成测试 课时50、Nova 源码结构 课时51、Nova 调用流程源码解析 课时52、Nova 分层架构与业务模型剖析 课时53、Nova 自定义 API 扩展编码实现 课时54、Django 介绍与快速开始 课时55、Django view 和 urls 的用法 课时56、Django Templates 模板的用法(一) 课时57、Django Templates 模板的用法(二) 课时58、Django Form 表单的用法 课时59、Horizon 结构源码剖析(1) 课时60、Horizon 自定义 Panel 编码实现 课时61、Horizon 自定义 DataView 编码实 课时62、企业部署案例:企业私有云规划与案 课时63、OpenStack 和其他开源云平台比较
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值