# 部署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.