# 部署Openstack环境
OpenStack主要由七部分组成,分别是Identify, Image, Network, Compute, Block Storage, Object Storage, Dashboard,分别表示认证模块,镜像模块,网络模块,计算模块,块存储模块,对象存储模块和管理模块。
## Identify(Keystone)
为其他几个模块提供认证服务,所有的认证操作都会通过keystone来进行。
整个keystone其实就是在数据库中建立用户(user)、角色(role)、Tenant、服务(service)、endpoint以及其相互对应关系。Tenant在之前的版本中叫做Project,Tenant是一个独立的资源容器。每个Tenant都可以定义独立的VLAN, volumes, instances, images, keys, users等。服务指的是OpenStack所提供的那几种服务(network, volume, image, identify, compute, swift)。endpoint是指各服务的内部、外部及管理接口址(REST API)。
软件包:
```
keystone OpenStack identity service - Daemons
python-keystone OpenStack identity service - Python library
python-keystoneclient Client libary for Openstack Keystone API
```
## Image(Glance)
提供镜像服务,创建虚拟机什么的都会从这里拉取镜像模板。
你可以将镜像通过Glance来上传到相应目录并在数据库里标记镜像的位置、属性及相关权限。使用nova来创建instance的时候就是从Glance的数据库中来查找镜像文件及相关属性、权限。
软件包:
```
glance OpenStack Image Registry and Delivery Service - Daemons
glance-api OpenStack Image Registry and Delivery Service - API
glance-common OpenStack Image Registry and Delivery Service - Common
glance-registry OpenStack Image Registry and Delivery Service - Registry
python-glance OpenStack Image Registry and Delivery Service - Python library
python-glanceclient Client library for Openstack glance server.
```
## Network(Quantum)
提供网络服务,即创建虚拟机的IP地址分配及网络分配都由它来支配。
软件包:
```
quantum-common common - Quantum is a virtual network service for Openstack.
quantum-dhcp-agent Quantum is a virtual network service for Openstack. (dhcp agent)
quantum-l3-agent Quantum is a virtual network service for Openstack. (l3 agent)
quantum-plugin-openvswitch Quantum is a virtual network service for Openstack. (openvswitch plugin)
quantum-plugin-openvswitch-agent Quantum is a virtual network service for Openstack. (openvswitch plugin agent)
quantum-server server - Quantum is a virtual network service for Openstack
python-quantum Quantum is a virutal network service for Openstack. (python library)
python-quantumclient client - Quantum is a virtual network service for Openstack
```
## Comupte(Nova)
提供计算服务,nova是运行在libvirt上层的的一个管理工具,用来管理操作虚拟机。
软件包:
```
nova-api OpenStack Compute - API frontend
nova-cert OpenStack Compute - certificate management
nova-common OpenStack Compute - common files
nova-compute OpenStack Compute - compute node
nova-compute-kvm OpenStack Compute - compute node (KVM)
nova-consoleauth OpenStack Compute - Console Authenticator
nova-novncproxy OpenStack Compute - NoVNC proxy
nova-scheduler OpenStack Compute - virtual machine scheduler
python-nova OpenStack Compute Python libraries
python-novaclient client library for OpenStack Compute API
```
## Block Storage(Cinder)
提供块存储服务,持久存储虚拟机上的数据,即一台虚拟机上面会挂载其他磁盘如vdb/vdc/vdd等,这个虚拟的磁盘就是Cinder在宿主机上创建的raw或qcow2文件。
软件包:
```
cinder-api Cinder storage service - api server
cinder-common Cinder starage service - common files
cinder-scheduler Cinder storage service - api server
cinder-volume Cinder storage service - api server
python-cinder Cinder python libraries
python-cinderclient python bindings to the OpenStack Volume API
```
## Object Storage(Swift)
对象存储,存储的是一些资源文件,如图片、代码等文件。
## Dashboard(horizon)
管理这些模块的平台,所在操作都可以在Dashboard中进行。
软件包:
```
openstack-dashboard django web interface to Openstack
python-django-horizon Django module providing web based interaction with OpenStack
python-openstack-auth A django authentication backend for Openstack
```
## OpenStack各组件说明
### nova-api
接收和回应终端用户的API请求,包括OpenStack Compute API, Amazon's EC2 API和一个特殊的管理API(给授权用户做一些管理操作的)。
### nova-api-metadata
接收虚拟机的metadata请求,仅用在多机模式。
### nova-compute
通过宿主机的API(KVM的libvirt,XenServer的XenAPi, VMware和VMwareAPI)用来创建和销毁虚拟机,说白了就是接收队列(AMQP)的操作请求,然后执行相应命令来完成该操作。
### nova-scheduler
从队列里接收创建虚拟机的请求,然后确定该虚拟机应该在哪台宿主机上运行。
### nova-conductor
Grizzly中新加入的一个模块,是夹在nova-compute和数据库之间的一层介质,用来避免nova-compute直接对数据库进行操作。
### nova-network
~~和nova-compute相似的一个东西,是用来接收队列里的网络请求,然后执行相应指令如添加一条iptables规则、启动一个网桥。这个东西已经从nova中分离出来,成为了OpenStack Network组件,学名Quantum。~~
### nova-dhcpbridge
~~是一个脚本,用来记录可以分配给虚拟机的IP地址,已经合并到了Quantum中。~~
### nova-consoleauth
用来认证控制台代理(Console Proxies)提供的用户token。
### nova-novncproxy
提供了一个通过VNC来访问正在运行的虚拟机的功能,它支持基于浏览器的VNC客户端。
### nova-xvpnvncproxy (nova-console)
提供通过VNC链接正在运行的虚拟机。
### nova-cert
用来管理x509证书,登录虚拟时所需要的私钥以及创建虚拟机时所使用的公钥。
### nova-cells
用来在不改变数据库和消息队列的情况下来伸缩OpenStack Compute,它的主要目标是使OpenStack支持大规模部署。如果不用cells的话,你想伸缩OpenStack Compute,你需要建数据库和消息队列集群等比较麻烦的事情。
### nova-volume
~~一个已经被Cinder取代的鸟~~
### nova-objectstore
提供了一个S3界面的镜像注册功能。
### nova / nova-manage
命令行管理工具。
### glance-api
接收镜像API的查询、抓取和存储请求。
### glance-registry
存储、执行和抓取镜像的metadata(大小,类型等)。
### keystone
认证的东东,处理API请求并提供可配置的策略、token及认证服务。
### quantum-server
接收网络的API请求并转发到适当的网络插件(openvswitch,linuxbridge等)上。
### cinder-api
接收块存储的API请求并转发到cinder-volume上去执行。
### cinder-volume
执行cinder-api转发来的请求,如向数据库写块存储的相关状态,通过MQ队列与其他进程进行交互,通过相关驱动来与块存储系统进行通信如IBM的存储系统、GlusterFS、Linux iSCSI等。
### cinder-scheduler
与nova-scheduler差不多,也是用来确定在哪个节点上创建Block Storage。
## 说明
以上是在Ubuntu 12.10环境下进行部署的。看似简单,但是其中各种细节很让人纠结,我还没搞定网络这块。
## 吐槽
OpenStack最开始的设计各种不规范,各种乱啊,之前的部分命令被重新定义了。官方的文档貌似都没人更新,里面存在的错误之处也没有得到更正。
## 搭建OpenStack Unit Test环境(nova)
```
$ git clone https://github.com/openstack/nova
$ cd nova
$ ./run_tests.sh --update
$ ./run_tests.sh nova.tests.virt.libvirt.test_libvirt
$ source .venv/bin/activate
$ pip install nose
$ nosetests nova/tests/
$ nosetests nova/tests/test_file.py
$ nosetests nova.tests.virt.libvirt.test_libvirt
$ nosetests -s -v nova/tests/virt/libvirt/test_libvirt.py:LibvirtDriverTestCase.test_finish_revert_migration_power_on
```
## 调试Test Case
在testcase.py脚本里进行调试里需要在nosetests后面加上`-s`参数。
If you are using CentOS, you need to:
```
# yum install libffi-devel postgresql-devel gcc mysql python-pep8 openssl-devel libxml2-devel libxslt-devel mysql-devel
```
## 参考资料
1.
2.
3.
4.