找回密码
 注册
查看: 4894|回复: 1

玩转 OpenStack(1)

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2016-12-25 22:05:44 | 显示全部楼层 |阅读模式
《转 OpenStack》是一个 OpenStack 教程,这是第 1 篇。0 O, I; k; a( l) \; k' W
这个教程有下面两个特点:
8 s0 b+ L$ H; r) Z8 }& R& U* m8 P: i
  • 系统讲解 OpenStack
    ( J2 t8 G9 t0 P. A! o7 B4 B从架构到各个组件;从整体到细节逐一讨论
  • 重实践并兼顾理论
    + O/ s5 V8 u9 h% S主要从实际操作的角度带着大家学习 OpenStack。
    " u  C& {  O9 R& e
    - h( W0 W& t3 Z$ b. Z+ w' p* Q! r- y6 [' F2 U3 P% q6 ~/ G7 q
    0 ~+ h2 t! ^; I0 x
为啥要写这个?

8 W$ a; d7 m: ^7 I: Z% v
简单回答是:因为OpenStack 学习难度大,但如果掌握了价值会很大& u( k3 G+ O5 V- u& ~  ]
先做一个自我介绍吧。
本人网名CloudMan,在 IT 这个行当已经摸爬滚打了十多年,05年之前是搞上层应用开发的,那时候 Java 比较火,所以 J2EE 相关的技术搞得比较多。后来入职一家大型IT公司,公司的产品从中间件到操作系统,从服务器到存储,虚拟化到云计算都有涉及。
本人所在的部门是专门做 IT 基础设施实施服务的,项目涉及服务器、存储、网络、虚拟化、云各个方面。而且这个部门的重要任务是为公司在IT市场最新和最热门的领域开疆扩土。比如前几年的虚拟化,这两年的云计算和大数据。
可以说部门的这个定位非常符合我的技术偏好。我对新技术长期保持着浓厚的兴趣和学习热情,所以在这个部门一待就是十几年,而且一直搞技术,虽然现在的头衔是架构师,平时还是一直坚持实际动手操作,否则会没有安全感。
好,现在回到OpenStack这个主题。
本人是在2013年开始接触 OpenStack,虽然具备比较扎实的技术功底,在经过一段时间的学习后,还是感觉 OpenStack 这个东西上手不太容易,个人认为有以下几个原因:
  • OpenStack 涉及的知识领域极广 ) y6 w* `: O) t+ r8 c
    可以说涵盖了IT基础设施的所有范围。计算、存储、网络、虚拟化、高可用、安全、灾备。。。。。。无所不包。即便是像CloudMan这种每天都在这个领域工作的人也感觉压力颇大
  • OpenStack 是一个平台,不是一个具体的实施方案" }" J* j! d2 |. ]' I
    OpenStack的各个组件都采用Driver的架构,支持各种具体的实现技术。比如 OpenStack 的存储服务Cinder只定义了上层抽象API,具体的实现交给下面的各种Driver,比如基于LVM的iSCSI Driver,EMC、IBM等商业存储产品的Driver,或者是开源的分布式存储软件,比如Ceph、GlusterFS的Driver。
    正是因为这种架构上的灵活性,使得初学者在学习OpenStack的时候不会像学习其他具体软件产品那样容易上手。
  • OpenStack 本身是一个分布式系统
    * ~, m  @9 |. G* k2 `- n& z3 o. I大多数搞 IT 的对分布式计算都不会太熟悉。直接冲进来会被 OpenStack 繁多的组件以及他们之间的交互方式搞得云里雾里。
    " T6 A2 ^. c3 l/ g
虽然 OpenStack 学习曲线比较陡峭,掌握起来难道较大,但 OpenStack 目前已经是 IaaS 云的事实标准,而且前途一片光明,对于我们搞 IT 的如果能啃下这个骨头,必定能大大提升自身的竞争力。3 d2 a( N1 I( ~+ Z

* b, j: _) N$ L2 K& T" k6 }5 p5 P8 W# y
写给谁看

* L" T; N" _  }% r3 b3 X
这套教程的目标读者包括:0 T5 }+ b# P9 t6 g" q, T+ r+ V, t
  • OpenStack初学者
    5 ]- v% @6 Z+ T4 RCloudMan 学习 OpenStack 也是经历了一个艰辛曲折的过程。其主要原因在于没有找到一个系统教授OpenStack的教程,特别是针对初学者。大部分资料都比较分散,对于初学者无法有机地串起来。也正是因为这个原因,让我萌发了编写这样一套教程的想法,能够让初学者能够少走弯路,系统地学习、掌握和实践 OpenStack。
  • OpenStack 实施工程师 7 ]5 Z$ ]( V# m; _; i
    之前说了,CloudMan在公司的职位是架构师,但骨子里我更把自己定位成一个能到一线攻城拔寨的实施工程师。所以这个教程也是针对 OpenStack 的实施人员,让他们能够通过学习真正掌握部署OpenStack 的知识、技能以及故障排查技巧。
  • 我自己 4 |1 @& Q3 K9 v8 C' z
    写这个教程同时也是对自己这几年学习和实践 OpenStack 的一个总结。% r5 ?; m$ t, s+ q+ v- ?( r! h
    我觉得:对于知识,只有把它写出来并能够让其他人理解才能真正说明自己掌握了这项知识。
    0 G4 C/ C5 X9 k* c7 a" c- ~8 Q( F

    7 o2 T; `# T4 e2 b$ L
    4 r9 w* X2 g  q4 a$ B4 m
包含哪些内容?
, l4 V. v7 t* s7 [, t2 y8 [
如下图,两大块:6 u2 w: V2 M# P
  • 预备知识
    0 G; h. e, h  S- Q+ W* L因为面向初学者,首先会有虚拟化和云计算的“预备知识”,会介绍 KVM,IaaS 等技术。
  • OpenStack核心
    2 S- e" z+ Z7 j% S这是主要内容,包含OpenStack的架构和和各个核心组件。将会通过大量的案例、操作步骤、截图、日志来帮助大家理解 OpenStack 各组件是如何工作的。' ~# c' u' J  F3 w# e! F2 l
    其目标是让各位可以根据客户的需求进行配置和调整。, j  I  ]8 {  N4 ]' W" x0 ~9 t
    % @- D" v, p" A0 Q2 s

    3 r4 R1 f/ l; V' `  b( w

    9 q* r& L, `) w% R4 P2 m7 Q
怎样的编写方式?

( }% C* s% N) D6 t; K/ ^) y) S
在当下这个共享经济时代,CloudMan觉得应该用互联网的方式来分享知识和心得。这个教程会通过CloudMan的微信公众号(cloudman6)每周1、3、5 定期发布。
- d( k  }8 A4 h8 Y7 D
用公众号我觉得有两个好处:! l& p+ z  X$ o9 @1 m+ `
  • 可以随时随地查看和浏览已推送的内容
    . M% `3 n1 F' R. E
  • 可以通过公众号跟CloudMan互动,提出问题和建议% ]5 o/ s* ~! w. |5 Z; G( B
    # H' E4 \8 v. n; {
    : a# z% Y/ \9 A. G
    # c! d+ |: S! @
为啥叫《每天5分钟玩转 OpenStack》?

- l* X7 ~5 s6 j8 l4 ~/ f1 N: m; {8 b
为了降低学习的难度并且考虑到移动端碎片化阅读的特点,每次推送的内容大家只需要花5分钟就能看完(注意这里说的是看完,有时候要完全理解可能需要更多时间哈),每次的内容只包含1-3个知识点,这也是我把教程命名为《每天5分钟玩转 OpenStack》的原因。虽然是碎片化推送,但整个教程是系统、连贯和完整的,只是化整为零了。( m3 U' P2 k3 ]
好了,今天这5分钟算是开了个头,下次我们正式开始玩转 OpenStack。+ V. K- I" `) Z! G! S# }, d# P
+ L1 Z# v8 B. `3 t% f7 i

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2017-6-3 15:24:35 | 显示全部楼层
Havana于2013年10月份发布,稳定版本为2013.2。相信很多Openstack爱好者和开发测试人员已经开始使用了。作为IaaS架构平台,Openstack面向的是集群主机虚拟化和资源的半自动化调配。但是作为测试和开发使用,尤其是在有限成本控制下,多主机测试在资金和空间占用上耗费较多。所以我们寻求在单主机下实现Openstack的运行。! s. F- m& [" n7 w! e" z) ]/ ^4 v
本文面向的读者:% G7 o% s1 ~- _0 Z; ^" b
- 具备基本的Openstack知识(逻辑架构和组成部分)
% n! D) o; H8 l3 y5 X% k: S5 X- 熟悉基本的Linux操作和配置。本文使用的是Ubuntu12.04 LTS Server版,这也是Openstack官方测试所选择的Linux发行版。
' I# I6 Z7 i1 O4 t2 b
  a  N- u) d8 n既然是单主机系统,那就对主机的配置稍有要求。我用的是Dell的PC服务器,4核,4G内存,500G硬盘,单网卡。这也应该算是最低配置了。说起网卡,Havana官方文档建议的是采用双网段(可以区分内网管理和外网服务),这也就要求我们的服务器具有两个物理端口。因为我们是测试环境,无需区分网络,所以单网卡可以满足要求,只是需要检查单网段下Havana是否工作正常。
8 |  a( P1 A# r3 A# h: H6 K5 \" P1 \* i# J' l$ n
因为是单机安装,存储和网络相对都简单化了,所以这里我们暂时不会涉及对象存储(Object Storage),块存储(Block Storage)和网络,以后我会讲如何仿真。
7 T1 o8 N( ?6 R% @  a
3 \1 [5 J7 U5 ^5 d; q安装会涉及到如下几部分。
6 k2 |) J# t6 L: j操作系统的基本配置6 E- T' p0 t7 R: Z: @! a2 S
配置认证服务(Identity Service)1 |, T/ K/ E& L' Z
配置镜像服务(Image Service)
2 M/ K5 C3 Z- I8 G0 w& ?配置云计算服务(Compute Services)! w' `# T: u) |$ T4 X3 R$ w
增加用户面板(Dashboard)
' L7 b* Y; J" \' A7 c* d$ k注:本文所有的操作命令都是在Ubuntu 12.04 LTS Server版的root用户下执行,所以请先进入root用户模式(sudo -i)以方便执行。0 \4 A, e; a2 r1 |2 y% i3 g
1. 操作系统的基本配置
4 N9 m8 [' T* `
1 s4 J  P2 Y' E% U, p1.1 网络配置# V  x; I3 p8 a, d& b+ T
* }* O0 n' a0 |2 i* j
由于我们只有单网卡,OS的网络配置在你安装系统的时候就已经完成了,所以在此无需配置。针对Openstack的内部网段,我们可以通过虚拟桥接方式实现。你可以手工配置,当然Openstack安装的时候也会自动配置,这里我们先略过不谈。$ d0 j$ I& K, S
1.2 NTP配置
7 m; D% ^8 }# j& O0 c& |4 _8 G5 I' e
因为是单机安装,无需配置NTP Server。) U! {2 d7 k' a7 M/ j
1.3 安装MySql数据库# A" d0 @9 [/ {8 S- a. G1 M, N
8 b! [  R: ^0 m4 c
Openstack服务需要数据库来存储信息。我们就拿常用的MySql来举例。需要安装客户端,数据库和Python库。
- U) P% T1 G; F; E. _3 q4 u6 |* L# apt-get install python-mysqldb mysql-server! v2 U8 [, X2 ]$ T4 O7 ^$ ^, d
安装时,会需要你设置root用户密码。Openstack要求MySql没有匿名用户权限,所以你需要删除匿名用户和无关的数据库。下面这个命令可以实现。
6 q+ U6 z3 }1 p8 q- a9 U. p/ D% j# mysql_secure_installation
  V; B) T  {1 w7 c9 P, M运行以后,会有一些选项,全选yes就ok。
1 T: a" t' m; c8 v. V1.4 准备Openstack包
  n& ~# J& o' @% s. J" f6 D6 E5 G& j9 }: b2 w4 j* n7 B
在Ubuntu下,需要安装一些针对Havana的最新的包。- z, r: ~3 L0 v7 i! U6 u
# apt-get install python-software-properties
( ]6 V: S3 ~! n3 R. i0 _# add-apt-repository cloud-archive:havana
9 {: g$ _4 F& s; B) O/ ~* g这些包安装完后,你需要升级一下系统。
1 s, s0 G- Y: I* P# g8 W# apt-get update && apt-get dist-upgrade
. E" K) m0 d9 A! ~6 e, a/ z1.5 安装消息队列服务& ~2 H3 V5 s; e2 `/ P
" K( U# G8 s; |
Openstack默认选用了RabbitMQ。也支持Qpid和ZeroMQ。
* y8 D) C& Q- Z( N" a# apt-get install rabbitmq-server
, r( U4 w5 Q3 o4 T$ O2. 配置认证服务(Identity Service)5 r+ t# n# E) w. s/ }2 L

9 z$ n, s" G- I& x1 k: ]1 R2.1 安装认证服务(Keystone)
( ~& P) J) q- o9 H9 T/ k6 N
% E/ m+ `0 ]- ?. F: ^0 h# apt-get install keystone python-keystone python-keystoneclient3 r4 d5 Y2 o" Z- j( J( |2 x3 \
我们在mysql里为认证服务创建一个数据库,名字就叫做keystone,密码也是keystone  R9 I; b: |6 `$ A9 U7 Y" _
# mysql -u root -p/ F8 ?7 m3 N. E5 {2 t
mysql> CREATE DATABASE keystone;* }  [/ H. v- O4 s! E! D/ Z
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
+ [% i, m1 r5 e( [) }mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';3 |- P, O1 ~; R* ]7 }/ k" e* c2 P
修改Keystone的配置文件/etc/keystone/keystone.conf,使其指向我们刚刚创建的数据库。修改[sql]部分如下:
9 K, O2 e. D0 G6 j8 W2 G8 b; Q[sql]: \( i6 v! k9 U' u
# The SQLAlchemy connection string used to connect to the database
) c, d- f8 k8 g1 a5 j+ `connection = mysql://keystone:keystone@localhost/keystone
, p+ _, M1 `+ `接下来创建keystone需要的表格。
) R( R; ?* s$ L' F% \& Q# keystone-manage db_sync5 n! \) y. b0 P5 Y
生成admin的token。; i/ i+ J2 o! L
# openssl rand -hex 109 l* V5 v3 r' R6 k* X
还是编辑/etc/keystone/keystone.conf,把上面生成的token替换下面的ADMIN_TOKEN
" D! Q, Y( n- D0 @! u[DEFAULT]
* ]1 ^+ W/ U" i2 K1 d+ R2 k# A "shared secret" between keystone and other openstack services
) ~; r) O+ g. }8 M: uadmin_token = ADMIN_TOKEN, A4 e& z! R) y2 U* ]3 N1 k
重启认证服务
1 {5 I: y- |& ]. V& k# service keystone restart( d1 [! J; ^" M0 r

+ u% x% Q( h) S# u' Y2.2 定义用户(Users)、租户(Tenants)和角色(Roles)$ C% B/ L. T4 q1 e3 y; G+ l- E; ~
$ a, s8 S8 R5 t5 n; f) [5 I
在使用认证服务的时候,你需要一对用户名和密码。目前我们还没有创建任何用户,但我们可以使用之前创建的管理token。需要做的就是把这个token传给keystone命令(参数为--token)。为了避免每次使用keystone命令都加一些相同的参数,我们可以把这些参数值放到环境变量里。
( d0 m+ I( W2 H$ v/ X+ x# export OS_SERVICE_TOKEN=ADMIN_TOKEN
3 R  A. u; U. P# export OS_SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0
7 ~2 m, f5 s0 j3 M* h5 v7 ~其中endpoint指明认证服务在哪运行。下面创建租户。
4 U! X0 v' n. E# keystone tenant-create --name=admin --description="Admin Tenant"
* l( F' |2 a& S5 a' L+ L4 k8 q( X# keystone tenant-create --name=service --description="Service Tenant"* H6 X/ ^0 s  i! [& c- c# h

5 F$ x: u9 ~- C1 e. R2 e) n% z5 A创建管理用户。用户密码ADMIN_PASS需要自己指定。
4 F9 H; E3 Q) B8 M4 h3 J* B# keystone user-create --name=admin --pass=ADMIN_PASS --email=admin@example.com
# o3 ^  `7 o; n' }% a0 M! K" s6 Q创建角色
: E# M. Y, \6 b# keystone role-create --name=admin- E3 n- L* D+ d' T* w4 J) j) v
为用户添加角色和租户属性。
0 }. Z) K" ~: ^+ e/ d4 N# keystone user-role-add --user=admin --tenant=admin --role=admin
  f! ]0 _# r& U; V, @7 T  D0 C& e2.3 定义服务和API接入点(endpoints)- R( d4 ~+ W0 y: C) j2 S

* G3 K. b/ h1 A- Q' G认证服务不光管理着用户属性,还登记所有Openstack服务,包括它自己本身。所以我们注册一个认证服务。
6 ~) B9 i3 l+ C# v* {' f# keystone service-create --name=keystone --type=identity --description="Keystone Identity Service". P1 O/ d7 R! _( Y! q* h
创建成功后会生成一个id,这个id要用在下面这个命令上,以便创建API接入点。
$ o; @! r: ^$ A+ t2 |* C( U# keystone endpoint-create --service-id=the_service_id_above --publicurl=http://127.0.0.1:5000/v2.0 \" ?! t( g3 v6 R2 a$ }* g
--internalurl=http://127.0.0.1:5000/v2.0 --adminurl=http://127.0.0.1:35357/v2.0
( \" d9 I& d! Q* \8 u& t同样的,当你安装其他Openstack服务时,像Glance,Nova,都要运行类似上面的命令。
) i$ V4 J1 }! y; z6 p) x2 E2.4 验证认证服务是否安装成功
" B: q) L# T9 M# G; y: J! S. X$ `+ Y1 [/ ?* u
先把环境变量取消。0 e2 x& N9 v3 R$ J
# unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
* B$ |# v, u7 h, n! M: a( Q制作一个文件,文件名自取,例如ksrc,内容如下,然后source一下它。3 W8 g% K2 a( ?2 D% Q) P
export OS_USERNAME=admin8 U; [9 }& H$ r: w0 l6 X) J9 ~
export OS_PASSWORD=ADMIN_PASS' B. j" M. N' o2 Z
export OS_TENANT_NAME=admin
, M0 Y* M4 w# _4 `( D/ q" V! wexport OS_AUTH_URL=http://127.0.0.1:35357/v2.0
1 A4 y8 B$ ^  T9 V; u4 C- c, I+ v" G" @. M/ l9 N
# source ksrc
* C+ c& ^, i- A
* q4 r$ c3 d- ]% u) t  I1 v* ?: D9 w现在你可以尝试获得一下token,如果成功,说明认证服务工作正常。! y0 |& s; a! R* U# x; `/ i  N: E7 W- ^
$ keystone token-get+ A  R% }+ \, h! r

' R* i) P8 z6 ~; _3. 配置镜像服务/ c* N8 E. n8 m$ f- G
0 C/ a) f7 P# H8 t
很多命令与配置认证服务一样,我就不做过多解释了。
( ]% [! Q/ ]- @* @  n$ o6 m4 J3.1 安装镜像服务(Glance)5 Z# J  }* ]7 Q, g! Y

2 C( A# z# k' |, z/ C# y安装glance包。
' k3 H4 [2 P) X( X/ K# apt-get install glance. H2 N" G- r8 b/ m' _* E
删除/var/lib/glance/glance.sqlite,防止错误使用sqlite数据库。- t/ B& [+ L% c
为镜像服务创建数据库,名字叫做glance,密码也是glance
/ }2 W; f1 o. [, p# mysql -u root -p3 a- q( a" r- |! s  Z
mysql> CREATE DATABASE glance;
6 J. ~0 W- V, Cmysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';* e: J' E5 L, @
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';* O' R9 ?$ b/ X* E& O' u
生成数据表。5 T8 ^6 p7 Y: }5 j
# glance-manage db_sync0 T1 ^5 O' ]( n) B! ]( |& W" ^
3 s0 W0 X0 t! ^0 B! j  ?3 J
keystone里创建glance用户,密码(GLANCE_PASS)自己指定
& Z4 d6 F, D4 P# keystone user-create --name=glance --pass=GLANCE_PASS--email=glance@example.com* F- W7 W$ ~* L! a# j* n: ~  u4 P
# keystone user-role-add --user=glance --tenant=service --role=admin
2 ?; {( F# Z" r9 ]: i+ S1 j修改glance配置文件/etc/glance/glance-api.conf和glance-registry.conf,找到如下部分并修改。1 L& ~5 ~; r: W: R+ m, X
[keystone_authtoken]
% W2 w3 m# C  ^) E" _auth_host = 127.0.0.10 z  Z% h! }5 e! K& @) U
auth_port = 35357
* d6 @$ p8 J% E! P5 J, u% o" R+ d  \auth_protocol = http
0 t; a4 I7 v+ J4 g% \admin_tenant_name = service& M2 |/ Y' N* M& u; v$ Y5 q
admin_user = glance, i- h/ k/ a7 z0 p3 O% U4 D, N# _
admin_password = GLANCE_PASS
" w9 f; w6 @: n6 X6 {' x7 l+ n. V在认证服务里注册镜像服务并创建API接入点。) W8 Y4 i* L+ k
# keystone service-create --name=glance --type=image --description="Glance Image Service"* c6 }4 @. C6 I
# keystone endpoint-create \  u( Z0 Y0 g' j1 o0 x% Y
--service-id=the_service_id_above \
* q: e5 \+ u9 |2 F# s--publicurl=http://127.0.0.1:9292 \" `6 M  ?2 m3 T" I
--internalurl=http://127.0.0.1:9292 \
  P, G- _  Y2 S--adminurl=http://127.0.0.1:9292
# j: X/ }* r# S' C, @& l. X& J重启服务。
. f7 D3 D6 s, o- l4 ^# service glance-registry restart
3 _; ]0 y$ h4 i, O$ Y# b# service glance-api restart! p$ z7 I/ b, W1 t5 @8 G* L* v

" N7 y& F1 q% v# B- e3.2 验证镜像服务是否安装成功
. _, d! q6 ^/ W1 I3 I
- r/ y' W; r5 `+ j. h1 p( _$ A2 H准备好一个镜像文件,这个镜像文件可以自己制作,也可以从网上下载。我制作了一个Ubuntu12.04 LTS Server的镜像ubuntu_1204_server.qcow2。至于怎么制作镜像,我们另文讨论。! W4 {8 S* L, d8 M6 v3 Y
创建一个镜像。
2 I  }+ A. N# v0 h& }0 X1 F+ W' n# glance image-create --name="Ubuntu 12.04 LTS Server" --disk-format=qcow2 \! X( t4 P( J% V
--container-format=bare --is-public=true < ubuntu_1204_server.qcow2
7 o2 f) C" D9 W6 B# o我的镜像如下所示。
; |  p3 D3 _6 Z8 L$ Q# glance image-list5 ^* ~! ~! {! G/ U4 H: N- [+ b# _
+--------------------------------------+-------------------------+-------------+------------------+------------+--------+# b  s4 Q; Y" [5 C( T
| ID                                   | Name                    | Disk Format | Container Format | Size       | Status |6 P9 w% {& \. ^  ?
+--------------------------------------+-------------------------+-------------+------------------+------------+--------+/ l5 F& B0 I& H6 x2 F
| dbe3ba9c-c22b-41c9-bac5-dd0e6964c1ce | Ubuntu 12.04 LTS Server | qcow2       | bare             | 1502347264 | active |
9 V3 v/ N  C5 `) s+--------------------------------------+-------------------------+-------------+------------------+------------+--------+
" ^+ `, I0 }* r  y. [4. 配置云计算服务3 |7 X7 Z/ U( V8 u) u& h4 ~

; [8 {& t9 ]5 x) M; i4.1 安装nova控制服务
! L  r8 ^8 \* ~+ B. v4 v
$ _  ]: @% z: ~( o" }* q# M先安装所需要的包
5 z' @; d* t, t* X) ?9 }! e0 Q# apt-get install nova-novncproxy novnc nova-api nova-ajax-console-proxy nova-cert nova-conductor nova-consoleauth nova-doc nova-scheduler python-novaclient
) R' E- O$ W7 Q3 |为nova创建数据库,名字叫做nova,密码也是nova
) |; B3 N+ ?! l3 n" P; \( S# mysql -u root -p3 N! `+ \3 Q) W! f- S# u
mysql> CREATE DATABASE nova;
9 U# j- ?! l8 A- g2 a  mmysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';: x+ H! B; z+ x8 {
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';
% a) \7 p5 H: }& c编辑nova配置文件/etc/nova/nova.conf,使其指向自己的数据库。
. z& }: B( O% @4 |8 Y8 |2 |[database]3 e) H/ P. H8 m& h
# The SQLAlchemy connection string used to connect to the database
3 F! \& b0 V1 ]+ y  Jsql_connection = mysql://nova:nova@localhost/nova
, p) {6 h8 C1 v. x% d0 l还有一些其他需要在配置文件nova.conf里修改或添加的属性,如下所示
1 q/ A, @% T8 z, @1 m/ e, n* R4 Rmy_ip=127.0.0.1
; I% }2 O1 X+ D9 _, G0 v+ Fvncserver_listen=0.0.0.0- C7 s" B3 T( W2 K, X
vncserver_proxyclient_address=127.0.0.1
5 K! Y$ c, l# ?  v- `  ^4 `auth_strategy=keystone& [  d2 m( ]9 j' `+ Y9 M/ e2 F
rpc_backend=nova.rpc.impl_kombu
( F" e( o- b9 E! c5 [rabbit_host=127.0.0.1
! e; a! B9 z6 m5 E0 W/ wglance_host=127.0.0.1
; i4 R* |0 y) T) c同时修改/etc/nova/api-paste.ini如下。
- C1 j- j2 X4 a! O[filter:authtoken]) S' Q/ A# u/ ^( G, G* ^
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory2 ^# |4 X; ]5 i$ |
auth_host = 127.0.0.1
# K9 ~7 l  t9 G3 ~) _4 yauth_port = 35357' d, {* J' c, j' T7 {5 x1 i4 ~( K
auth_protocol = http6 X# {+ j& f0 G- V4 O$ T# i% o+ Q! _
admin_tenant_name=service
8 M) f3 b& F$ i8 h, Kadmin_user=nova1 j& e. W6 s" n" r/ S5 ^) N3 b
admin_password=nova$ M7 G3 n! b( d" L/ j. r" L2 _1 Y
生成数据表。
) i9 S$ B( N1 J. w$ W# nova-manage db sync3 R0 L. G" E8 l4 u8 U8 Q
接下来就是比较熟悉的命令了,如果命令返回错误,可以重启一下nova服务。
- h1 E% W  Y* n- v' N# keystone user-create --name=nova --pass=NOVA_PASS --email=nova@example.com7 ~  n: d  d5 l. a0 k% U- d
# keystone user-role-add --user=nova --tenant=service --role=admin* y" p, A' u* Y
# keystone service-create --name=nova --type=compute --description="Nova Compute Service"0 W( _$ Q! |. o1 _
# keystone service-create --name=nova --type=compute --description="Nova Compute Service" --adminurl=http://127.0.0.1:8774/v2/%\(tenant_id\)s
- Q6 A& W* ]) C. w5 d$ V然后重启一下服务
; V0 L* r6 l* P* T& N4 f# service nova-api restart
5 F+ g  J8 Y! L" B4 B4 P$ A# service nova-cert restart" r6 Q2 j7 F3 [+ e* D
# service nova-consoleauth restart3 X! G: o  c5 U# o- ^, g5 Q
# service nova-scheduler restart
5 u; C' c: Y  |' Y4 u# service nova-conductor restart6 z; I. ~' [* L+ S3 l+ ]
# service nova-novncproxy restart
' A) T1 ?9 ~* J  s下面可以检查一下nova是否配置正确,可以用如下命令。
7 [/ T6 V3 _/ A8 \' B9 ~: Q# nova image-list
. C3 X2 X; J* Y3 a- ^1 F+--------------------------------------+-------------------------+--------+--------+
9 ?2 P) G( J8 Z1 D- g| ID                                   | Name                    | Status | Server |
5 r3 C" v* ]* r  |+--------------------------------------+-------------------------+--------+--------+
4 a. _/ n  Q: p- B1 d0 m| dbe3ba9c-c22b-41c9-bac5-dd0e6964c1ce | Ubuntu 12.04 LTS Server | ACTIVE |        |
& U* G+ u. `" P6 F4 o; K+--------------------------------------+-------------------------+--------+--------+, i* U  `2 P. a( k3 d
4.2 安装一个nova云计算节点
, H% a; W; l# D3 E
$ w* ^! U; i/ n$ d/ \1 i先下载所需要的包。
7 D/ E' G; C, G' c) S1 {# apt-get install nova-compute-kvm python-novaclient python-guestfs
9 \0 `8 w. q# j2 f7 ]删除默认安装的SQLite数据库
2 I6 u3 ^7 O9 w. ~5 T# rm /var/lib/nova/nova.sqlite9 K6 S) t3 e+ }; _
重启计算服务
$ y2 B( b% S4 ~/ B  T# c# service nova-compute restart* o; h; G/ n7 c
4.3 激活内部网络
$ a! L; V5 _5 U. D9 v6 @
" K7 u  _, Y8 r) n' Z6 |; D9 `这应该算是很关键的一步了。我们选用FlatDHCPManager。以后我会用一个专题讲网络。
0 l# n, J; t1 Y% S下载网络包。/ o; g2 a: Y. S7 i2 Y
# apt-get install nova-network* a& N( u2 `2 {- x* t, [2 [
4 [/ K* V: L2 p/ T/ M* `
编辑配置文件/etc/nova/nova.conf
* u* @( r5 r/ _# p) f, v, L/ S[DEFAULT]6 z9 V; P! O9 \! A9 z7 J
network_manager=nova.network.manager.FlatDHCPManager
+ D  j  C: }: Z$ i5 k* t0 vfixed_range=192.168.122.0/241 x/ p5 S# n) I) X0 z3 C" D, J0 x
flat_network_dhcp_start=192.168.122.2$ I4 Y" D$ R4 U& y8 d
flat_network_bridge=virbr0
3 `) i& R) h; R; }) T9 h$ F+ d重启网络服务。6 @3 `+ Z2 E3 B# ^1 l6 N+ X5 d
# service nova-network restart
4 _4 a+ y% y; @, b, F. x: x# M* ?3 f  x3 r' s0 ]" @
创建自己的虚拟网络。- l3 d1 R9 b+ X% H
# nova network-create vmnet --bridge-interface=virbr0
" V+ ~; k, K' v4 r7 Z4.4 启动一个镜像
7 Y1 F! H7 G9 W4 U  Z: u- |
+ \# k, X  \& i$ `" t# W$ A生成密钥+ J& ~' z: m$ K; q7 Z: a" q' g
$ ssh-keygen
3 R7 e5 ?) v2 v5 s: _2 F$ cd .ssh
: A& ]5 T+ Z! [. h; L$ nova keypair-add --pub_key id_rsa.pub mykey
4 Y+ f8 d2 \% r如果你需要自己的镜像实例能被ping通和ssh,需要放开如下权限
+ F  C% o  s8 T8 e7 i+ J' L) G# nova secgroup-add-rule defaulttcp 22 22 0.0.0.0/03 \& R9 |( F) u* y
# nova secgroup-add-rule defaulticmp -1 -1 0.0.0.0/0
. ], @9 S5 f* Z# T0 _
! [; b1 f' ~) F$ S启动实例
: v. s6 F) T& F  L$ B7 d0 K$ nova boot --flavor <flavor-id> --key_name mykey --image <image-id> --security_group default Ubuntu
+ h4 A! E# k9 A6 y; K* Q7 ]以下是我的例子。
) ~6 b% T; O3 J* S6 J2 M' _( B# nova flavor-list
( }9 w6 J& @3 V6 y+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+) z; n0 _- A! I5 F
| ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
4 |# }' a& ~( J1 C/ C8 m+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
' v$ u- j8 |; b. p9 V5 q/ B| 1  | m1.tiny   | 512       | 1    | 0         |      | 1     | 1.0         | True      |
1 l) P5 j# n0 B" _| 2  | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      |% x8 }+ ^  _% y
| 3  | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      |( ]3 i/ E+ A/ E; Q
| 4  | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      |
9 L2 A0 T1 I% b/ Z9 V; H9 f9 G| 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      |2 D, c; |0 p( D! ]6 `5 B; d
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+' e( e' S$ k" P; O9 J8 ~: `, s! c
9 S% G0 r, m5 f* q/ u5 M
# nova image-list
6 h* l9 ^. @6 y5 d. S9 T. W+--------------------------------------+-------------------------+--------+--------+5 v9 C- G" z. [3 {* v
| ID                                   | Name                    | Status | Server |) E% m8 A$ c4 @. s
+--------------------------------------+-------------------------+--------+--------+2 u4 q9 l9 E  t: n* ?# [) ^
| dbe3ba9c-c22b-41c9-bac5-dd0e6964c1ce | Ubuntu 12.04 LTS Server | ACTIVE |        |. M+ e0 @7 O5 j" t# G+ b9 L
+--------------------------------------+-------------------------+--------+--------+& C0 g# o+ d! J+ W( v0 N

: a$ ]  w% J! ^/ M1 e# nova list$ _, o" ^( c( s# a
+--------------------------------------+--------+--------+------------+-------------+---------------------+
- K# v, z7 y- g' q0 i| ID                                   | Name   | Status | Task State | Power State | Networks            |2 l& m& N% P) ^& }) }) G) N( F
+--------------------------------------+--------+--------+------------+-------------+---------------------+, b7 \% T: B- n4 T3 z
| eff82154-bd75-40a7-bc83-60ba0f5b2ac4 | ubuntu | ACTIVE | None       | Running     | vmnet=192.168.122.2 |) e& p  d8 ?! R. h
+--------------------------------------+--------+--------+------------+-------------+---------------------+
6 W# p' c+ s+ h. X" |% U( Z$ _) p/ A: o8 I4 N% n7 T: ]2 ]& M* M, ?
5. 增加用户面板1 o2 x* Z+ m5 E* U3 i
" P% @# o0 s" k8 X
这个非常简单,安装完以后就可以访问了。
" r9 L' X4 L- j, w: {* p# apt-get install memcached libapache2-mod-wsgi openstack-dashboard
! j1 r3 _& u2 M$ o* H接着访问http://<your-host-id>/horizon,是不是很简单。开始你的openstack之旅吧。
. V9 n6 p5 f5 x: x8 [4 p

  q; l7 p" K7 {0 m/ F8 m' }7 P' q
4 v/ h/ Z4 Y  `9 W$ {* \& [% y
4 |; a% z# k5 ^* c4 \) m9 {& Q' b) G! ^6 e! s" V, ?( ]

0 b* A5 Q* {: ?$ J! R
# h: c$ v9 J+ [* F
  • 7 |( v& {" L- T4 }& _
/ l9 x1 V# b7 F  C
4 E0 T  L* B* \% j; X5 E7 U1 T
+ f0 F7 N& u. P% ]& K) K4 I: F+ P" q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:04 , Processed in 0.042135 second(s), 32 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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