2013年12月5日星期四

Openstack组件介绍

经常有朋友让我介绍Openstack,我就干脆写一篇Openstack的组件介绍,也算是总结一下。马上2012年就要结束了,也是到该总结的时候。去年现在的Openstack,其实官方的Keystone和Horizon还没法很好的一起工作。
我个人的理解:下面的组件全部工作良好,那么基本的一个IAAS就算比较完整,这些功能都是目前Rackspace和linode都有的。
目前官方认同的孵化项目,都会放到 https://github.com/stackforge
大家可以通过wiki的变化,了解项目目前的情况:http://wiki.openstack.org/RecentChanges
如果大家希望详细了解项目进度,可以阅读他们每次开会的纪要,包括各种问题的讨论,非常有意思:http://eavesdrop.openstack.org/meetings/
如果希望快速了解,可以直接看这个http://eavesdrop.openstack.org/meetings/project/ 所有的项目大概进度都会在这里讨论。

Nova

这个是最核心的,Nova最开始的时候,可以说是一套虚拟化管理程序,还可以管理网络和存储。不过从Essex版本后,Nova开始做减法,和网络相关的内容,包括安全组,交给Quantum负责,存储相关的交给Cinder负责。调度有关的内容,会交给新的项目Marconi
以前还有一个nova common,这其实是各个组件都使用相同的东西,现在也专门成立一个项目:oslo,已经是核心项目。
未来Nova对各种Hyperv的支持是有差异的,KVM和XEN,基本是最好的。微软的Hyper-V算是很不错,微软投入再研发。刚才朋友还专门提到一点:就是未来计算节点,不直接查询数据库,而是通过rpc的方式,据说这是一大进步。
Nova的稳定性,其实取决于libvirt,qemu,希望未来可以能更加稳定。功能现在其实已经不是大问题。

keystone

这是提供身份认证和授权的组件。任何系统,身份认证和授权,其实都比较复杂。尤其Openstack 那么庞大的项目,每个组件都需要使用统一认证和授权。
目前keystone 要做的东西其实还是很多。没法基于角色的授权,web管理用户等。当然你如果希望实现使用动态令牌认证,多因素认证,LDAP集成,这都是未来版本需要实现的功能,这些功能都已经在计划中。
目前好像要实现keystone的高可用,还是比较困难,这个就让社区慢慢解决吧。大规模部署,这也会是瓶颈。

Glance

这是镜像管理。功能其实相对比较简单。不过Glance后端的存储的支持,其实一直到Folsom的版本,Glance对swift的支持,才算是比较完善。
目前Glance的镜像存储,支持本地存储,NFS,swift,sheepdog和Ceph,基本是够用了。
目前Glance的最大需求就是多个数据中心的镜像管理,如何复制,不过这个功能已经基本实现。还有就是租户私有的image管理,这些目前功能都已经实现。
个人感觉:Glance后续基本就是一个bug修复,稳定的阶段。

Quantum

这是网络管理的组件,也是重头戏,Openstack的未来,基本都要靠quantum。上面介绍nova的时候,说过网络相关的内容,都会交给Quantum。不过Quantum的开发进度不是太如人意。Flosom规划实现功能,到Grizzly才实现。未来nova network的代码清理,估计到H版本都不见得可以实现。
Quantum 后端可以是商业产品或者开源。开源产品支持Openvswitch,和linux bridge。网络设备厂商都在积极参与,让他们的产品支持Quantum,目前思科,锐捷已经实现支持。
比较悲观的估计:quantum要完全满足生产的需求,例如带宽限制,mutilhost等功能,很可能需要等到2014年的I版本,真的考验耐心。
如果你关注Quantum的话,就会发现目前还是在起步阶段,无论是bug还是功能,都是非常多。

Cinder

这是存储管理的组件。一直以来,很多人都很纠结AWS的EBS的实现。Openstack也终于推出了自己的存储管理组件。
Cinder存储管理主要是指虚拟机的存储管理。目前支持开源和商业化产品。开源的sheepdog,Ceph等。商业存储的支持,目前IBM是最积极的。未来如果商业存储厂商都支持Cinder,对Openstack的商业化还是非常有利的。
对于企业来说,使用分布式作为虚拟机的存储,并不能真正节省成本,维护一套分布式存储,成本还是很高的。目前虚拟机的各种高可用,备份的问题,其实都可以把问题交给商业存储厂商来解决。

Lbaas

这是实现负载均衡的项目。现在linode,Rackspace,都提供了负载均衡的服务,有了这个服务,你才有可能实现所谓的弹性扩展。这个组件是Mirantis公司和思科合作开发的。目前这个项目集成在Quantum里,不过基本算是一个独立的组件。
Lbaas后端可以是各种商业产品和开源产品。F5,Ngnix,Haproxy,LVS
为了发布的Grizzly,你应该有机会在Dashboard里设置虚拟机的负载均衡。

Horizon

严格意义来说,Horizon不会为Openstack 增加一个功能,他更多的是一个演示,demo。不过对于很多用户来说,了解Openstack基本都是从Horizon,dashboard开始。从这个角度来看,他在Openstack各个项目里,显得非常重要。
Horizon的开发者,应该是最累的。需要和各个项目打角度。每个项目的功能很多都是需要通过Dashboard来展现。
大家需要注意的是:Horizon只是使用了Openstack部分API功能,很多功能,你可以根据你的需求去实现。

Swift

这是对象存储的组件。对于大部分用户来说,swift不是必须的。你只有存储数量到一定级别,而且是非结构化数据才有这样的需求。很多人都问一个相同的问题:是否可以把虚拟机的存储放在swift上。简单回答:不行。你需要搞明白对象存储是干啥,擅长那些地方,那些是不行的。
swift是Openstack所有组件了最成熟的,可以在线升级版本,各种版本可以混合在一起,也就是说,1.75版本的swift可以和1.48的在一个群集里.这个是很难得的.

oslo

这个项目其实就是把所有组件需要用到相同的东西,集中起来,以前叫nova common,估计感觉不贴切,现在单独成立一个项目。日后大家开发新的组件,估计都需要用到oslo。

Ceilometer

这是实现监控和计量的组件。这应该算是Grizzly的孵化项目。对他的了解其实很少。在Grizzly版本里,你应该可以在Dashboard里看到这个组件。
监控和计费一直是一个难题,尤其用户希望知道cpu和内存的使用情况。看看他如何解决这个问题。到时候看看同事如何调用api来解决监控和计量的问题。解决计量,计费就简单的。

Heat

这个项目是要解决虚拟机的软件部署的问题。你的虚拟机创建好,os准备好,你还需要做很多配置才能使用,如何能实现把所有繁琐的操作简化呢?亚马逊上有一个专门的工具:AWS cloudformation。目前Openstack上,希望通过Heat来实现类似的功能。
关于这个项目,还是有很多争议。不过这个项目是Redhat发起。他们的功力是不容置疑,等Openstack成熟后,这个项目的重要性就会体现出来。
真的要实现弹性扩展,自动部署,都是需要指望这个。目前Heat已经成为孵化项目
下面的项目,基本都还是在讨论阶段,不过成为孵化项目的可能性很大。

Moniker

这是实现dns功能的组件。其实如果你用过AWS,你就知道这个功能是必不可少。新浪目前的已经加上了这个功能,每个虚拟机,都会自动有一个dns记录。
估计集成到Dashboard里,还是需要等待一段时间啊。目前该项目开发还是非常积极。

marconi

此项目用于解决openstack 消息队列的扩展问题。据说这是Rackspce推出的项目,就是为了解决他们生产中遇到消息队列的问题。
Marconi – Message Bus for OpenStack

CentOS6.4 Openstack Havana 单网卡 All in One 安装

IaaS软件的安装和学习,最头痛的是对硬件条件的要求,很多时候因为对硬件的要求,导致你无法去测试。在Openstack的Grizzly版本里,要求3块网卡,有时候很难满足这样的条件。还有就是网络,很有可能你的网络条件无法满足要求,也是无法测试。
那么这种情况到了H版本,已经大大改善,单网卡,网络,你可能只需要一个网段的几个IP地址,就可以装好和测试。这也很好体现了Openstack的网络功能的强悍。目前Neutron网络设置和以前的Nova network 差异很大,全部都是web搞定,非常爽。

基本条件

  1. 1台物理服务器,单网卡,机器可联网
  2. 网卡IP:10.1.199.8/24, 网关10.1.199.1
  3. 10.1.199.210 到10.1.199.220 这段IP,作为Floating IP给虚拟机使用


操作系统

CentOS6.4,最小化安装,只支持CentOS6.4以上的版本安装Openstack的Havana。如果你希望测试cinder存储功能,那么建议你单独一个分区,这样性能会很好多。
由于使用Puppet,需要机器设置好FQDN 名字。
# hostname -f
g134.chenshake.com

网络

cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
ONBOOT=yes
HWADDR=00:E0:81:D8:42:F6
TYPE=Ethernet
BOOTPROTO=static
IPADDR=10.1.199.8
NETMASK=255.255.255.0

确保联网正常。

LVM设置(可选)

这主要是为了给cinder-volumes单独一个分区,提高性能。
[root@node08 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             628G  979M  596G   1% /
tmpfs                 1.9G     0  1.9G   0% /dev/shm
/dev/sda1             194M   32M  153M  18% /boot
/dev/sda2             193G  188M  183G   1% /cinder-volume
[root@node08 ~]# umount /dev/sda2
[root@node08 ~]# pvcreate /dev/sda2
  Physical volume "/dev/sda2" successfully created
[root@node08 ~]# vgcreate cinder-volumes /dev/sda2
  Volume group "cinder-volumes" successfully created

修改/etc/fstab 去掉cinder-volume的开机挂载,不然会导致你无法重启
sed -i '/cinder-volume/s/^/#/' /etc/fstab

设置源

cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
yum list

Packstack

Packstack,你可以理解成Redhat用Puppet写的一套脚本
使用RDO源
yum install -y http://rdo.fedorapeople.org/openstack/openstack-havana/rdo-release-havana.rpm

安装packstack
yum install -y openstack-packstack
进行更新
yum -y update
系统会更新内核和组件。
重启机器,一定要重启。

安装Openstack

直接运行下面命令就可以
packstack  --allinone --provision-demo=n
如果你设置了一个单独的分区给Cinder使用,那么你就运行下面命令
packstack  --allinone --provision-demo=n CONFIG_CINDER_VOLUMES_CREATE=n
如果希望安装Heat
packstack  --allinone --provision-demo=n CONFIG_CINDER_VOLUMES_CREATE=n \
--os-heat-install=y --os-heat-cfn-install=y
重启机器

设置网络

我们需要把 /etc/sysconfig/network-scripts/ifcfg-eth0 和 /etc/sysconfig/network-scripts/ifcfg-br-ex 两个文件进行修改。ifcfg-br-ex是安装Openstack的过程中创建的。
源文件
 cat /etc/sysconfig/network-scripts/ifcfg-br-ex 
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=
NETMASK=

修改后
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
ONBOOT=yes
HWADDR=00:E0:81:D8:43:BE
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex

ifcfg-br-ex 是一个openvswitch 的连接外网的bridge。
# cat /etc/sysconfig/network-scripts/ifcfg-br-ex 
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=10.1.199.8
NETMASK=255.255.255.0
ONBOOT=yes

重启网络
/etc/init.d/network restart

Openstack的安装,就已经装完,剩下的是进入Dashboard进行设置。

Dashboard

管理员登陆

密码
# cat /root/keystonerc_admin 
export OS_USERNAME=admin
export OS_TENANT_NAME=admin
export OS_PASSWORD=c22a03c7fb7145fa
export OS_AUTH_URL=http://10.1.199.8:35357/v2.0/
export PS1='[\u@\h \W(keystone_admin)]\$ '

通过 http://10.1.199.8  user:admin 密码看上面,随机生成的。
下面就是用最快的步骤来实现创建一个虚拟机,并且访问外网。

镜像

上传一个ubuntu12.04镜像,
Snap4

创建网络

Snap5
创建完成后,进入网络的详细页面
Snap6
添加子网,这是重点
Snap7
子网详情,设置你使用的IP地址范围
Snap8
创建完毕

创建用户

你可以使用当前的管理员去创建虚拟机,不过为了更加深入了解,我这里创建一个项目test,用户chenshake来演示
Snap10
创建用户
Snap11
注意选择test项目和Member角色

用户登录

使用创建的账号 chenshake登录

创建网络和设置

Snap12
虚拟机使用的Fix IP,这个你可以随意设置
Snap13
子网详情,就不需要设置,默认就可以,点击创建。

创建路由器和设置

创建一个名字为“ 路由器1”
Snap15

设置路由器的网关
Snap16
选择管理员创建的外网网络
Snap17
进入路由器详细页面,添加接口
Snap18
就是把路由器和用户自己的网络连接起来
Snap19

查看网络拓扑图

Snap20

设置安全组

打开安全组的22和允许ping
Snap21
22端口
Snap22
查看全部规则
Snap25

创建秘钥

Snap26
秘钥会下载到本地

创建虚拟机

Snap27
云主机类型,不能选择tiny,会导致创建失败,因为不满足镜像的要求。
Snap28
这里不需要设置,我刚才创建的秘钥的名称是:chenshake
Snap29
在可用网络里把网络添加上,点击 “运行”

分配Floating IP

Snap30
点击+ 号,申请Floating IP
Snap31
关联
Snap32
看看结果
Snap33

访问虚拟机

ping虚拟机
Snap34
ssh虚拟机
Ubuntu虚拟机默认的用户名是ubuntu,只能采用秘钥登陆,无法采用密码登陆,设置SecureCRT(如果使用putty,秘钥需要转换,自己研究)
Snap35
Snap36
Snap37
登陆结果
Snap38

Openstack镜像和密码

估计刚开始使用Openstack用户,一定会比较困惑Openstack的镜像的初始化密码是多少? 不同的镜像初始化密码是不一样,这里做一个总结。

虚拟机登陆方式

对Openstack来说:访问虚拟机提供了两种方式,
  • ssh方式
  • Dashboard的console。
Console方式,相当于你服务器前面直接登陆。有些虚拟机镜像处于安全考虑,不允许root的账号直接远程ssh登陆。

Ubuntu镜像

下载地址
这个是非常有名的镜像,大家用来测试也比较多。这个镜像默认是无法使用密码登陆,只能使用密钥登陆。所以你在console,也是无法登陆到虚拟机。
默认的用户名是:ubuntu,你需要使用密钥才能登陆。
如果你希望console可以登陆,那么你就需要想点办法
Snap6
这个时候,创建完的虚拟机,在console,就可以用 user:ubuntu,pass:ubuntu 登陆,不需要密钥。
不过这个时候,你还是无法通过ssh访问虚拟机,因为ssh默认设置是禁用密码认证,所以你需要多做点工作。
#!/bin/sh
passwd ubuntu<<EOF
ubuntu
ubuntu
EOF
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
service ssh restart
这样你就可以使用ssh登陆到虚拟机,不需要通过console。
用root登陆
如果你希望直接使用root登陆,那么你就需要给root设置一个密码。
Snap7
这里设置的密码,就是镜像管理员的密码,也就是root的密码。
默认Redhat的RDO配置是不支持这个功能,你需要修改所有节点的nova.conf 文件
# Inject the admin password at boot time, without an agent.
# (boolean value)
#libvirt_inject_password=false
libvirt_inject_password=true
记住,是所有的节点,都是需要修改的。重启compute服务
/etc/init.d/openstack-nova-compute restart
当然你这样肯定还是无法ssh,使用root登陆,你就需要结合一下上面的一个例子,你就可以。
Snap8
就是输入下面的代码
#!/bin/sh
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
service ssh restart
这个时候,你就可以ssh,用root的身份登陆进去。

Cirros

Openstack的开发,基本都使用这个image来测试,因为他比较小,只有10M。
镜像的地址:
Cirros,是可以使用用户名和密码登陆,也可以使用密钥登陆
user:cirros
password:cubswin:)
这个密码比较特别,所以你可以使用上面的方法来设置这个镜像的root的密码,实现ssh登陆。

CentOS Gold Image

国内用CentOS比较多,不过在Openstack上的CentOS image,以前都只能自己去制作。这个需要一个大家信任的第三方来完成。最近有了一个选择
教你如何制作CentOS的image,并且提供现成的image下载
镜像下载地址:
镜像账号
  • user:root
  • pass:changeme1122
你是可以在创建虚拟机的时候,直接把这个root的密码修改。默认是运行root登陆。
不过这个image,没有集成cloud-init。导致你看到的虚拟机名字,不是你设置的计算机名。

其他image资源

附录

你需要设置安全组,打开22端口才能ssh登陆。
Snap9