找回密码
 注册
查看: 1176|回复: 0

Openstack Dashboard 二次开发

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-2-22 10:36:19 | 显示全部楼层 |阅读模式
' A4 P5 T: L' ~$ }( j2 ~, }( x# p. B. W  V# N
Openstack的Dashboard项目Horizon,其实做的很不错。其实如果你熟悉他的代码,对他进行一下简单修改,可以实现很多你需要的功能。很多时候,并不需要做太大的改动。8 N( y% I6 }* O6 G# c
很多人都是根据Openstack的dashboard来判断有什么功能,其实Dashboard只是Openstack的部分功能,很多你需求的功能,可能很简单就可以实现,基本没啥代码量。当你读Openstack的代码,你带着下面这些需求去看,估计效果更好。如果你实现了下面这些功能,至少说明你已经开始熟悉Openstack。需要记住一点就是下面的功能,全部都是通过调用API实现。
' F1 g# U- P5 H( R$ M8 H, n8 F, c& G下面的这些功能,你就可以拿来练手。我大概估算一下工作量,如果一个python程序员,从熟悉Openstack开始,加上大家交流,我估计3个月,应该就可以基本搞定下面的功能。这基本都是基于Openstack的Horizon来修改。以下的内容,我公司的开发人员,基本都已经玩了一遍。1 d7 O$ F: J5 O
大概是3,4百行的代码修改量。
; f. e2 n1 I# |9 T4 ^1:虚拟机自动获得Floating IP5 q" Q2 c; G. Q* J
当你创建虚拟机的时候,默认是获得一个fix ip,公网的IP,需要手工获得。如何能实现自动获得IP呢?其实nova默认就有这个功能,你只需要在nova.conf 文件加上一个参数就可以实现。现在Grizzly,也在努力实现这个功能。这个功能在HPcloud上已经实现。我同事已经验证了这个功能。这个其实不需要增加一行代码。
) D+ Q9 v: {: b3 z2:默认安全组的改进  ?+ d% g* T+ P! M& m
这个其实是让很多新手比较困惑的地方。默认的安全组是没任何规则,不允许访问。是否可以默认加上ssh和允许ping的规则呢? HPcloud,默认的每个新的用户,都是打开22端口和允许ping。实现这个其实也不难,找对相应的文件的位置,修改就可以,通过调用API来实现。
8 n) \4 U4 w- n3:安全组添加UI改进
: H. P/ U. V1 [, y2 h! M现在安全组添加完一条规则,马上就关闭页面,如果添加多条规则,很不方便。这个其实是考验你的web水平。现在Grizzly已经决定改进这个地方。这个实现起来,应该是很简单的。3 A  M, Y0 r) c; z) ]/ ^$ R5 a& s
https://blueprints.launchpad.net/horizon/+spec/security-group-rules
1 m: c% q+ z/ S, e2 Q) B( [" _4:把虚拟机创建在指定的物理服务器  v- J# _* _7 x4 s% q% N7 \2 F0 {
如果你是管理员,你是可以通过命令行,指定虚拟机在那台物理服务器上创建。如果你希望在Dashboard里实现那么你需要做不少工作。首先你需要把所有的服务器列出来,你才能去选择。需要实现通过API的方式,把你zone里的服务器列出来,产生一个列表,让用户选择。当你把服务器列出来后,后面就简单了,你只需要把参数传过去就可以。1 V  ?- e6 F8 U1 {% t9 o/ B5 Z& f
当你机器数量比较少的时候,这样玩是没问题的。而且用户也习惯这种方式。
; j7 q8 ]& Q' D: _5 v9 u5:虚拟机关机: l9 ]3 d7 `. e5 k! ^
默认虚拟机是不能关机的,这其实也是运营模式决定的。不过其实nova 的api是提供虚拟机关机的功能。你只需要调用API接口就可以实现。  H* A5 C2 f' Z6 m8 V4 v: ?% N
6:变更虚拟机配置 Resize! @1 q; }$ n: m3 t5 d6 N6 q, U2 ^
这也是经常提到的问题。为了统一的管理,其实一般都是几个固定的配置,你可以根据你的要求,对配置进行变更。是否支持运行状态下变更配置,这其实基本是由Hyper-V决定。vmware是可以支持cpu,硬盘,网卡,内存的在线添加。对于KVM来说,就只能支持磁盘和网卡。/ u" }8 `, M7 J7 G0 g
变更配置,在Openstack里是Resize, 他是要调整虚拟机的硬盘,内存和cpu。对于nova来说,Resize还是比较复杂的,出于运维,管理和成本的考虑,Resize,会对虚拟机进行一个迁移,这样你还需要处理网络的问题。
0 W8 U# e  m9 F) U7 G8 w目前nova是提供了这个功能,不过要很好实现,目前还是很麻烦。最简单的方式就是本地resize,这样你至少就不需要考虑网络。这个我同事基本已经实现了,本地实现resize。
& G$ q: |, S' f- n3 N关于Resize,sina修复了两个bug,这个可以看看,https://www.openstack.org/blog/2012/10/how-sina-contributes-to-openstack/4 Q" o9 R* V4 P0 M9 N3 W2 }
7:热迁移6 J2 r& R) I0 Z' o. X
其实以前大家都认为热迁移的实现,都是需要有共享存储,其实现在各个虚拟化引擎,都已经实现不需要共享存储,也可以实现热迁移。据专家说:KVM下实现热迁移,比Xen好很多。
- h3 K1 ]" v8 hNova目前是支持热迁移了,无论是有共享存储还是本地存储。如果是本地存储,为了减少网络的传输压力,如果你的image是qcow2的格式,你可以利用这个特性。至少在演示的时候很酷,本地存储,一下子就迁移过去。
' R$ r7 c3 V; S1 ^" @. R  Y5 }3 W目前这种迁移,其实都是手工去触发。你需要把虚拟机迁移到那台机器上。其实这种操作,也就适合小规模的环境或者是在维护的时候。
# O4 }" v7 v& |, x1 Z# w在vmware的世界里,热迁移叫VMotion,不过据朋友介绍,当你的虚拟机内存达到16G的时候,你其实就很难迁移,可能是几个小时都无法迁移过去。这其实更多的是一个玩具。& s# x; ?( \. ~
8:冷迁移: ]9 p  L* ?% [+ H
这个其实也简单。本地存储,共享存储,都是可以实现。nova都提供相应的API,你只需要在Web实现就可以。不过这种迁移,如何实现对现有的系统影响更少。这是一个问题,尤其是硬盘的IO上。
# e( M. H; a* {, w' d4 q" y, |1 `对于迁移,无论是冷迁移,热迁移,Resize,其实网络和volume都是麻烦的事情,尤其在quantum的网络里。目前这个应该是要花费大量的时间。
9 O5 E3 w$ a8 D" h1 c9 W9:虚拟机设置root密码# f' ^2 {4 x( l  s5 d, b
默认nova是采用密钥登陆。这肯定是一个方向。不过用户的习惯,有时候很难改变。他可能更加希望可以创建虚拟机的时候设置密码。
! Q# m4 q# f$ n+ \% v1 R其实nova默认也是提供这个功能。你可以设置虚拟机的root的密码。也可以随机生成密码。你需要做的是如何告诉用户,随机密码是什么。9 n/ D% q. L: n8 k) G
linux的ssh登陆,密码和密钥,你只能二选一,所以你做image的时候,需要进行设置。
2 c% f; y9 K3 v3 L) S! x5 \10:集成监控Nagios9 L$ E5 H. U+ y4 V) G
Openstack缺乏监控,如何加上监控,集成在Dashboard里?这个应该比想象中简单。因为Horizon默认就考虑到这个。你看一下代码就可以实现。你的模板需要默认启用snmp,这样你的虚拟机都可以监控。考验的就是你对Nagios熟悉。这种方式,在企业内部使用,应该是非常方便的。: O8 l! ~% q+ U6 V
Intel的一个Openstack修改版本,已经实现了这个功能。效果其实很不错。$ k  h/ e8 h0 E( o" M
11:多Region实现. D- z* F; R8 L
当你的环境下有几个环境,或者有Xen和KVM,如何用一个Dashbaord来管理。现在新浪的搞的Stacklab就是类似的方式实现的。
3 ]. _( Q. F% O5 O$ |其实这个也很简单,不需要配置任何东西,只需要配置一下就可以。如果如果你希望多个环境使用统一的用户验证,估计需要调整一下。这个是不需要修改代码。, z' x3 V* j! x4 J! V% N
12:用户修改密码
- t1 \  H! j' P$ a' l5 E目前用户是没法修改自己的密码,只有管理员可以修改自己的密码。这个功能其实是一定要加上的。实现起来应该不难。目前管理员是可以重设用户的密码,就说明已经有接口,看一下如何实现就可以。需要你了解一下keystone的接口。
% T, D, X- \2 y. V! t! u13:批量创建虚拟机时候的计算机名字4 a( _  ?# G3 m' x6 D* [! D
如果你使用qcow2 镜像格式,批量创建虚拟机是一件比较爽的事情。唯一的问题就是创建出来的虚拟机的命令都是一样。希望可以实现在你指定的计算机名字后面加上数字来区别。邮件列表里有老外提问,不过没有解决。Hpcloud不允许客户自己定义计算机名,是随机生成。
' k. ]  D" ~; \这个同事已经实现。不过只是linux的虚拟机。windows的虚拟机,如果解决呢?现在看来还是有可能实现的。慢慢研究。' m; ?7 }8 s# T+ B: |" ?( i- k
13:snapshot备份改进9 _! m0 v( k, y9 e
目前Dashboard里是提供的snapshot的功能。如果你采用qcow2的格式,那么他实际的过程是把base部分和增量部分合并,保存到glance里。这里面是无法实现增量的备份。
1 f; o$ r6 v- }. w: e5 I2 N/ v' H一直以来,用户都需要通过快照的方式实现备份,由于虚拟机比较大,所以必须实现增量。- K/ l1 \9 G% C
新浪目前已经在实现如何增量备份虚拟机。正在把代码加入Grizzly中 ,这个贡献可真不小啊。https://blueprints.launchpad.net/cinder/+spec/local-storage-volume  M) _- @, V8 F- i* o$ e
非常值得期待。
9 C: P( C8 k5 s1 ]14: 修改调度5 o8 I$ I" ?$ V, r( t1 T
如果才能最大化利用资源,充分利用机器的所有的cpu和内存。我们需要修改它的调度。( q" c4 s5 S: W! r) v  e
假设我有两组机器,1组是新机器,1组是旧机器。我希望实现配置1的虚拟机,都是在新组机器创建,配置2的虚拟机都是在旧的那组机器创建。我如何修改调度去实现这个需求。
& m. T1 s% B1 g7 X8 F8 q" k) W目前这个需求实现还是比较困难。正在想办法。5 @9 \3 I- z' d, Y/ W! ]3 q% m
经过学习,好像未来的Grizzly版本,已经解决了这个问题:http://www.cloudcomp.ch/2013/02/how-do-you-organise-your-openstack-deployment/; G* @6 D  `* n
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:02 , Processed in 0.015705 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表