OpenStack 学习有哪些难点?需要哪些知识储备?
很多人都反馈学习OpenStack困难重重,本文作者也经历了从部署到运维OpenStack的一路艰辛,为此,作者将自己学习OpenStack中的难点和关注点与读者分享,介绍了OpenStack要着重学习的重点领域和知识,希望对大家有所帮助。
前言
随着云计算技术的发展,技术的不断成熟,越来越多的企业开始在公司内部部署私有云计算平台。处于成本考虑,开源的云计算管理平台OpenStack也正在被更多的技术人员所学习及部署。云计算虽然具备很多好处,比如灵活性、伸缩性和按需分配等特性,但是在部署上却需要一个对开源研究颇深的团队来进行部署和管理。OpenStack组件众多,部署较为困难,出了问题,排错较难。由于其每半年更新一次版本,较为频繁。企业不太可能每半年就更新一次云平台版本,所以会造成版本间隙过大。
图片来自包图网
虽然其发展势头强劲,但是无可避免的问题就是部署OpenStack需要较为资深的开源技术能力和团队。学习OpenStack和掌握OpenStack中的难点也就成为了IT技术人员较为关心的话题了。
概念回顾
为了让读者更好的学习OpenStack,我们简单的回顾一下它的基本概念。OpenStack是一个开源的具有高可用性及扩展性的云计算平台。支持管理大部分主流的hypervisors,如KVM,Xen Server,VMware,Oracle VM,Xen等。 同时OpenStack是一个开源云计算解决方案。可以加速高伸缩性的公共和私有云(IaaS)的部署、管理、配置。使用OpenStack作为基础,数据中心操作者可以快速方便的通过现存基础架构创建云服务。让IT管理人员使用计算资源像使用电力水利那样,按需随时获得,并对使用量进行付费,完全颠覆了传统数据中心建设和运维模式。通过上面的简单介绍,我们知道OpenStack可以建立私有云、公有云以及混合云,是一个提供IAAS层服务的基础设施云计算管理平台。OpenStack本身是由多个功能组件组成,来共同完成以上功能。由于OpenStack处于社区维护,各个组件功能也在各大企业和社区的支持下不断的完善,新的功能组件也在不断的涌现。目前OpenStack常用的组件主要有以下几类:
认证模块(Keystone)
代号为Keystone,在OpenStack框架中主要负责管理身份验证、服务规则和服务令牌功能的模块。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone 来处理。Keystone类似一个服务总线, 或者说是整个OpenStack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。
计算模块(Nova)
代号为Nova,主要负责管理计算资源、网络资源、存储资源等可扩展性的平台,是OpenStack中的计算资源控制模块。Nova自身并没有提供任何虚拟化能力,需要通过相关受支持的驱动与各种Hypervisors交互,比如KVM、Power VM、VMware等。
镜像模块(Glance)
代号为Glance,主要负责管理OpenStack镜像服务,用来注册、登陆和检索虚拟机镜像。服务提供了一个REST API,能够查询虚拟机镜像元数据和检索的实际镜像。通过镜像服务提供的虚拟机镜像可以存储在不同的位置,从简单的文件系统对象存储到类似OpenStack对象存储系统。
Dashboard模块(Horizon)
代号为Horizon,是OpenStack的Dashboard,提供了一个基于web图形的用户操作界面,大多数针对对象的操作都可以通过其来完成。通过此界面,管理员可以较快的上手OpenStack,执行常规的操作。
块存储模块(Cinder)
代号为Cinder,主要负责OpenStack中块存储的管理。为VM提供持久化的存储服务。在F版之后,从Nova-volume中分离出来,立项名为Cinder,独立提供块存储服务。
网络模块(Neutron)
代号为Neutron,主要负责OpenStack中的网络管理,也是所有组件中最为复杂的模块。它管理OpenStack中的所有虚拟网络和物理网络接入与转发行为,提供防火墙及隔离等方面的高级网络管理能力。
对象存储模块(Swift)
代号为Swift,是OpenStack中提供的一个对象存储系统,也是所有组件内名气相对较小的一个,为什么会这样呢,估计是因为采用Restful Http接口,主要为互联网提供服务的原因吧,还没有大规模的被众多的企业所接受。
学习难点
很多人都反馈学习OpenStack困难重重,部署过程中,“坑”不是一般的多,实在是繁琐。而且出了问题还需要很强的排查错误的能力,对Linux自身的技能要求颇高。由于OpenStack是开源产品,企业可以根据自身实际需求进行定制化,所以也要求技术人员具备编程基础,有助于环境的搭建和后期的运维。前面已经谈过,网络模块应该算是OpenStack中最为复杂的模块了,结构复杂,概念较多,没有一定的网络基础还真不能玩转OpenStack。
我本身从事OpenStack工作虽然不是太久,但是也经历了从部署到运维OpenStack的一路艰辛。学习的过程中,更是从一个坑跳到了另一个坑,感觉就从没有上岸过。大家都知道OpenStack就是一整套云计算的解决方案的框架,里面集合了包括存储、计算、网络、Web、数据库等多种技术,这种方式即保证了服务的灵活性,能够适应不同的应用场景,同时也加大了学习的难度。借着TWT的优秀平台,将自己学习OpenStack中的难点和关注点与各位分享,希望可以对大家有帮助,同时让自己学习更多。
1、自动化知识的储备
要想学习好OpenStack就必须具备自动化脚本或者简单开发的知识。众所周知OpenStack的部署和运维过程中,需要用到很多的开源技术支持。比如高可用方面需要用到keepalived、pacemaker、HAproxy等软件。运维中需要用到puppet、ansible或者saltstack等软件。OpenStack的部署很复杂,如果手动部署那绝对是灾难的,而且也容易出错。所以一般都会采用自动化部署脚本方式进行自动部署,减少人为的干预,降低错误率。在这方面,建议搭建可以主要学习一下python和bash shell,毕竟OpenStack很多代码是用python所写。在业余时间【一天一次】,建议多阅读一下OpenStack的源码,不懂不要紧,边学边读,这样有助于后期的知识消化和理解。
2、数据库知识的储备
OpenStack中除了Dashboard意外,其他的组件都需要数据库的支持。无论是MySQL还是MariaDB,或者其他数据库。很多情况下,用户通过界面对OpenStack进行操作,如果出现需要修改数据库的问题,就必须要具备数据库的排错能力了,至少具备熟练的操作能力。举个例子,有个时候我们在界面上发出删除主机的指令,但是由于某种情况不能被成功操作。这时候就需要在后台的Nova数据库中找到相关的记录,将其通过update语句改为已删除,避免统计错误。当然这只是一个普通的实例,以后大家在学习OpenStack的路上估计会经常与数据库打交道,不要嫌烦,要建立开源理念。
3、网络知识的储备
OpenStack中最为复杂、恼人等组件就是网络模块【Neutron】了。不夸张的说,你如果跨过了网络模块这个大坑,你就算是学会了OpenStack的60%了。很多人都在OpenStack的学习道路上,折在网络大坑的不在少数。从网络的物理设备到网络的逻辑配置,甚至架构都要熟悉。比如要知道简单的VLAN、Flat、DHCP、Bridge(Linux bridge或者ovs)、NAT以路由,甚至是SDN等技术。OpenStack中关于网络的指令很多,功能异常复杂。要学会常用的一些指令,比如neutron net-list用于查看当前租户的所有网络信息,加上—all-tenant就可以list出所有的。Neutron net-show NETID查看某个网络的详细信息。Neutron net-create创建网络,net-delete删除玩了过等等。更多的指令,建议大家去OpenStack官网看一下。
4、存储知识的储备
OpenStack经过近10年的发展已经对业界常用的存储类型进行了支持。无论是NFS、SAN还是local方式。从功能上Open Stack常用的存储有Swift对象存储,类似于AWS的S3服务,不过Swift具备更强的扩展性、冗余和持久性,当然了,也兼容S3 API。Cinder块存储,提供类似于AWS的EBS块存储服务,可以通过界面操作挂载到虚拟机上,提供持久化的数据存储。存储知识的存储有利于我们合理的规划OpenStack的存储用途。分布式存储已经占据了OpenStack的大部分市场,比如Ceph、GPFS等。熟悉哪些存储的配置和备份技能,来从侧面保障OpenStack存储方面的稳定和数据可靠。
5、虚拟化知识的储备
OpenStack支持KVM、Hyper-V、VMWare、Xen、Docker等主流虚拟化技术。可以看到,OpenStack主要是利用Libvirt进行的虚拟机操作,但是也支持直接调用原生的API进行操作。要理解虚拟化的功能是什么?Hypervisor可以对下层(Host OS)硬件资源(物理CPU、内存、磁盘、网卡、显卡等)进行封装、隔离,抽象为另一种形式的逻辑资源,再提供给上层(Guest OS)使用。所以你可以理解Hypervisor其实就是联系Host OS和Guest OS的一个中间件,当然虚拟化可以将一份资源抽象为多份,也可以将多份资源抽象为一份。
典型场景解析
场景一、安装OpenStack之前的基础环境准备
OpenStack是一个开源的架构平台,需要较多的开源软件进行辅助支撑。所以在安装OpenStack之前要提前做好以下准备工作:
1、 下载好相关的开源软件,或者搭建解决依赖关系的YUM本地源。依据个人经验,建议大家提前准备YUM源,便于顺利安装开源软件,无需人工参与。
2、 DNS上提前注册好相关管理节点的FQDN名
3、 确保网络环境畅通,通过网络隔离出管理VLAN和虚拟机VLAN
4、 提前准备群集IP
5、 系统环境准备,比如关闭防火墙及Selinux功能
场景二、自动化配置工具的准备
目前部署OpenStack都是采用自动化的方式部署,简单不易出错,比如Mirantis的Fuel工具,或者其他IT厂商自研的工具。但是后期具体的配置变更,就要需要使用方根据自身习惯自行决定了。我们采用的是Salt Stack作为批量配置工具。
1、 在一个独立虚拟机中安装Salt Stack主控节点
2、 所有的管理及计算节点安装Salt Stack客户端
3、 配置客户端Salt Stack配置文件,指向主控服务器
4、 通过Salt ‘’ –A命令接受所有客户端管理
5、 发布Salt ‘’ test.ping确定环境正常
场景三、OpenStack的联调测试
安装好OpenStack之后,需要验证其环境是否可以正常工作。一般可以通过以下步骤逐级查看。
1、 查看所有组件的日志,查看是否有错误信息
2、 登陆Dashboard,对所有组件进行浏览
3、 创建一台虚拟机,并针对虚拟机执行各种常规操作,如删除、修改配置、冷热迁移等
4、 物理将某台计算节点down掉,查看是否可以在另外的节点启动VM(如果做了高可用的话)
5、 所有计算节点之间模拟传输大文件
总结