OpenStack主要由七部分组成,分别是Identify, Image, Network, Compute, Block Storage, Object Storage, Dashboard,分别表示认证模块,镜像模块,网络模块,计算模块,块存储模块,对象存储模块和管理模块。
为其他几个模块提供认证服务,所有的认证操作都会通过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
提供镜像服务,创建虚拟机什么的都会从这里拉取镜像模板。
你可以将镜像通过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.
提供网络服务,即创建虚拟机的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
提供计算服务,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
提供块存储服务,持久存储虚拟机上的数据,即一台虚拟机上面会挂载其他磁盘如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
对象存储,存储的是一些资源文件,如图片、代码等文件。
管理这些模块的平台,所在操作都可以在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
接收和回应终端用户的API请求,包括OpenStack Compute API, Amazon's EC2 API和一个特殊的管理API(给授权用户做一些管理操作的)。
接收虚拟机的metadata请求,仅用在多机模式。
通过宿主机的API(KVM的libvirt,XenServer的XenAPi, VMware和VMwareAPI)用来创建和销毁虚拟机,说白了就是接收队列(AMQP)的操作请求,然后执行相应命令来完成该操作。
从队列里接收创建虚拟机的请求,然后确定该虚拟机应该在哪台宿主机上运行。
Grizzly中新加入的一个模块,是夹在nova-compute和数据库之间的一层介质,用来避免nova-compute直接对数据库进行操作。
和nova-compute相似的一个东西,是用来接收队列里的网络请求,然后执行相应指令如添加一条iptables规则、启动一个网桥。这个东西已经从nova中分离出来,成为了OpenStack Network组件,学名Quantum。
是一个脚本,用来记录可以分配给虚拟机的IP地址,已经合并到了Quantum中。
用来认证控制台代理(Console Proxies)提供的用户token。
提供了一个通过VNC来访问正在运行的虚拟机的功能,它支持基于浏览器的VNC客户端。
提供通过VNC链接正在运行的虚拟机。
用来管理x509证书,登录虚拟时所需要的私钥以及创建虚拟机时所使用的公钥。
用来在不改变数据库和消息队列的情况下来伸缩OpenStack Compute,它的主要目标是使OpenStack支持大规模部署。如果不用cells的话,你想伸缩OpenStack Compute,你需要建数据库和消息队列集群等比较麻烦的事情。
一个已经被Cinder取代的鸟
提供了一个S3界面的镜像注册功能。
命令行管理工具。
接收镜像API的查询、抓取和存储请求。
存储、执行和抓取镜像的metadata(大小,类型等)。
认证的东东,处理API请求并提供可配置的策略、token及认证服务。
接收网络的API请求并转发到适当的网络插件(openvswitch,linuxbridge等)上。
接收块存储的API请求并转发到cinder-volume上去执行。
执行cinder-api转发来的请求,如向数据库写块存储的相关状态,通过MQ队列与其他进程进行交互,通过相关驱动来与块存储系统进行通信如IBM的存储系统、GlusterFS、Linux iSCSI等。
与nova-scheduler差不多,也是用来确定在哪个节点上创建Block Storage。
以上是在Ubuntu 12.10环境下进行部署的。看似简单,但是其中各种细节很让人纠结,我还没搞定网络这块。
OpenStack最开始的设计各种不规范,各种乱啊,之前的部分命令被重新定义了。官方的文档貌似都没人更新,里面存在的错误之处也没有得到更正。
$ 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
在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.http://docs.openstack.org/folsom/basic-install/content/
2.http://docs.openstack.org/trunk/openstack-compute/admin/content/
3.http://wiki.openstack.org/LibvirtXMLCPUModel
4.http://wiki.openstack.org/NovaConfigOptions