chinesezzqiang
作者chinesezzqiang课题专家组·2018-09-14 11:45
信息技术经理·M

OpenStack学习难点解析

字数 4963阅读 2699评论 3赞 10

前言

随着云计算技术的发展,技术的不断成熟,越来越多的企业开始在公司内部部署私有云计算平台。处于成本考虑,开源的云计算管理平台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中的难点和关注点与各位分享,希望可以对大家有帮助,同时让自己学习更多。

自动化知识的储备

要想学习好OpenStack就必须具备自动化脚本或者简单开发的知识。众所周知OpenStack的部署和运维过程中,需要用到很多的开源技术支持。比如高可用方面需要用到keepalived、pacemaker、HAproxy等软件。运维中需要用到puppet、ansible或者saltstack等软件。OpenStack的部署很复杂,如果手动部署那绝对是灾难的,而且也容易出错。所以一般都会采用自动化部署脚本方式进行自动部署,减少人为的干预,降低错误率。在这方面,建议搭建可以主要学习一下python和bash shell,毕竟OpenStack很多代码是用python所写。在业余时间【一天一次】,建议多阅读一下OpenStack的源码,不懂不要紧,边学边读,这样有助于后期的知识消化和理解。

数据库知识的储备

OpenStack中除了Dashboard意外,其他的组件都需要数据库的支持。无论是MySQL还是MariaDB,或者其他数据库。很多情况下,用户通过界面对OpenStack进行操作,如果出现需要修改数据库的问题,就必须要具备数据库的排错能力了,至少具备熟练的操作能力。举个例子,有个时候我们在界面上发出删除主机的指令,但是由于某种情况不能被成功操作。这时候就需要在后台的Nova数据库中找到相关的记录,将其通过update语句改为已删除,避免统计错误。当然这只是一个普通的实例,以后大家在学习OpenStack的路上估计会经常与数据库打交道,不要嫌烦,要建立开源理念。

网络知识的储备

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官网看一下。

存储知识的储备

OpenStack经过近10年的发展已经对业界常用的存储类型进行了支持。无论是NFS、SAN还是local方式。从功能上Open Stack常用的存储有Swift对象存储,类似于AWS的S3服务,不过Swift具备更强的扩展性、冗余和持久性,当然了,也兼容S3 API。Cinder块存储,提供类似于AWS的EBS块存储服务,可以通过界面操作挂载到虚拟机上,提供持久化的数据存储。存储知识的存储有利于我们合理的规划OpenStack的存储用途。分布式存储已经占据了OpenStack的大部分市场,比如Ceph、GPFS等。熟悉哪些存储的配置和备份技能,来从侧面保障OpenStack存储方面的稳定和数据可靠。

虚拟化知识的储备

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、 所有计算节点之间模拟传输大文件

总结

以上是对OpenStack学习中的关注点的说明,指出了OpenStack要着重学习的重点领域和知识。通过以上的介绍,读者可以认识到OpenStack的由来和功能,部署需要做哪些准备,最常见的疑难问题发生在哪个部分。当然我自己也在学习OpenStack的路上,也是按照这个思路来学习。遇到问题也会经常在TwT寻找大咖的支持和解答。大家可以多浏览TwT和OpenStack官方网站,学习新的知识点,解决更多的难点。再次希望这篇文章可以对大家在学习OpenStack的道路上有所帮助。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

10

添加新评论3 条评论

xjtu2019xjtu2019研发工程师苏研
2019-03-04 21:13
学习了
大天使之剑大天使之剑售前技术支持杭州才云科技
2018-09-21 11:48
非常不错!具有指导意义!
wuwenpinwuwenpin软件开发工程师南京
2018-09-14 19:22
非常不错的资料,谢谢分享!
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广