OpenStack介绍
转自:http://www.chenshake.com/openstack%e4%bb%8b%e7%bb%8d/
最近朋友给别人介绍我是做OpenStack,对方提了一句,如何用一句话告诉我OpenStack是什么。
我想OpenStack就是AWS公有云的开源实现。功能可以满足企业私有使用。
接下来我就要给朋友深入介绍一下OpenStack的技术相关内容,对方是Python开发者,我就努力写一篇OpenStack的介绍文章,让技术人员可以快速了解OpenStack。
Contents
起源
在2010年的时候,AWS当时在国外已经是风生水起。当时云计算的老二,Rackspace,觉得无法和AWS继续拼下去。那么就决定联合多家一起搞一个OpenStack,和AWS PK一下。
Nova是美国宇航局内部的IaaS项目,就是一个用python写的IaaS管理平台,不过维护的成本很高,所以美国宇航局和Rackspace达成共识,就把nova项目交出来,大家一起搞OpenStack项目。
Rackspace拿出自己的对象存储产品进行开源,就是swift。项目在2010年7月份成立。
对于swift来说,确实是从Rackspace生产环境拿下了的代码,支撑过10个PB的对象存储代码。不过在OpenStack的后续发展中,swift,并不是必须的,因为很多企业,也根本用不上。那么后续我就基本不会提到swift这个组件。
开发原则
- 所有的项目,都是必须用python开发
- 采用apache 2.0 的license
- 项目间是松耦合,这个是必须的
- 各个组件只提供管理功能,(swift是一个例外)。例如nova,他是管理hyperv,glance管理镜像,存储是什么,是可以选择。
- 自动化测试,强大的ci,代码需要review,原则上需要一个项目两位core同意才能merge
- 全局的requirements,各个项目都必须遵守,这就避免软件依赖的冲突。
- 发布周期,就是1年2个版本,定期发布。
- 全部功能API
OpenStack是全球最大的python的项目,也应该是最大的公开的CI,CD项目。
对于OpenStack项目来说,每个项目结构是差不多
- api服务,对外提供api服务
- server,完成相关的工作,可能会拆分多个服务
- 每个项目都有client端
OpenStack项目介绍
OpenStack目前官方管理项目其实不少,未来管理OpenStack项目,官方也自己开发了一些工具,成立了一些项目。不过对用户能用到,真正目前能用的项目,其实是不多的。我就介绍几能用的项目
Nova
最早的nova,其实是一个具备基本功能的IaaS平台,能管理计算,存储和网络。不过这个并不符合OpenStack当初的设计理念。所以就对nova项目进行拆分。
到了现在nova项目,就管理hyper-v,其实在真实场景下,基本都是kvm的天下,剩下的别的hyper-v,基本都是市场行为。
Nova,更多的是intel,红帽的天下,很多硬件,kvm的特性,都加入到nova上。
nova对应AWS的EC2,很多术语都是来自AWS,
目前OpenStack的nova开发,其实已经进入稳定的阶段,已经很难有更大的突破,更多的是在虚拟机迁移等上面做点工作。
Keytone
这是提供身份验证的项目,那么他本身对外只是提供api接口,通过底下调用各个组件来实现身份验证,例如mysql,ldap,AD来实现身份验证。
作为keystone,还有一个很重要的功能,所有openstack服务的endpoint,就是告诉用户,你访问的服务的地址。这个有点类似现在的微服务,不过就是在微服务里,服务是自动注册。对于OpenStack来说,各个服务,需要手工注册到keystone上,并且创建服务的账号。
对于nova来说,就是需要在keystone注册一下,告诉用户,nova的服务的地址是什么。这样就可以使用相关服务。
keystone是OpenStack所有服务的入口。
Glance
镜像管理,创建虚拟机的镜像,都是通过这个项目来管理。功能其实还是比较单一。未来加快虚拟机的创建,大家想到的就是把glance的存储和虚拟机的存储合并在一起,这样创建虚拟机的时候,直接做一个link,这样就创建出来一个虚拟机。所谓的秒级创建,就是差不多这个意思。
Cinder
这是OpenStack的存储管理,目的就是管理卷。存储可以是Ceph,也是可以商业存储。
以前aws的玩法是:创建虚拟机,系统盘是固定大小,你可以选择通过EBS,也就是OpenStack的cinder,创建一块硬盘,挂载到虚拟机里。
由于系统盘是存放机器本地盘里,会导致不少问题,例如无法迁移,机器挂掉,数据就丢失,用户比较爱在系统盘里存放数据等。
那么大家就想到,把系统盘,也放到存储上,这就所谓 boot from volume。这样就可以搞定虚拟机的迁移。
目前主流就是用Ceph作为存储。这样虚拟机可以实现迁移。
Neutron
这是OpenStack管理网络的项目。对于网络厂商来说,这个项目是比较要命的,和存储厂商的态度是完全不一样的。neutron实现的功能,就是让用户可以自己创建网络,router,这就是所谓SDN。
其实aws在2010年以前就实现这个功能,OpenStack,其实是一致到2015年,这个功能才算是能用。目前来说,已经算是可用。在100个节点的环境下,还是能顶住的。
网络上,大家玩的最多的就是负载均衡,那么对neutron来说,这个他是不管的,交给另外一个项目来实现。
Horizon
这就是OpenStack的Dashboard,UI。目前是用python开发的,前端的用户体验很差,后来改成用js开发,目前也在调整中。
Horizon上的功能,仅仅是部分的OpenStack功能,不少功能,没有在UI上实现。需要命令行下通过client进行操作。
以前openstack每个项目都有一个client端,后来进行了合并,就一个客户端,openstack-client。你就可以在上面利用命令行去管理各个项目。
消息队列和数据库
对于OpenStack来说,项目间的通讯,我的理解就是通过api,消息队列来进行的。OpenStack目前大家使用的基本就是mysql和rabbitmq。
对OpenStack来说,压力最大的是消息队列。所有的虚拟机,创建,删除,都是要经过消息队列的。
OpenStack的规模,其实目前最主要的局限就是消息队列的承载能力。
部署架构
其实目前OpenStack的部署架构基本都是一样的。基本上就是通过3个控制节点,把服务都装在上面实现HA,这点上,其实和K8s,也是非常相像。
目前主流的HA实现方式,就是haproxy+keeplive来实现。
部署工具
对于openstack来说,所谓产品,其实基本就是一套部署工具。2017年的时候,其实目前的部署工具,就剩下那么几个。
- kolla ,把openstack组件容器化后,通过ansible来进去编排和配置管理
- 红帽产品,通过kolla的docker镜像,采用puppet来实现编排和配置管理
openstack的复杂性,升级,其实单纯靠OpenStack自身,或者操作系统厂商,代价是很高的。最后发现必须利用容器,才能彻底解决问题。
kolla就是目前最好的OpenStack部署工具。