《Linux就该这么学》自学笔记_ch22_使用openstackb部署云计算服务环境
了解云计算
对于销售内容涉及方方面面,业务范围遍布全球的互联网巨头企业,自然少不了庞大的基础设施的支撑。传统的硬件设施一旦投入就要一大笔钱,并且在业务的淡季也要一直的空闲,这样无疑产生了资源和资金的巨大浪费。
最初的云计算是由Google与Amazon分别提出的,核心理念之一就是通过云计算服务降低用户对资源拥有的成本。
NIST(美国国家标准与技术研究院)对于云计算的定义:云计算是一种按使用量付费的服务模式,这是一种能够提供可用的、便捷的、按需求的网络访问模式,计算共享池能够快速的为用户提供网络、服务器、存储、应用软件及其他服务,并且只需要花费很少的管理时间。
NIST针对于云计算的服务模式提出了3个服务层次:
- Iaas:提供给用户的是云计算基础设施,包括CPU、内存、存储、网络等其他的资源服务,用户不需要控制存储与网络等基础设施。
- Paas:提供给用户的是云计算中的开发和分发应用的解决方案,用户能够部署应用程序,也可以控制相关的托管环境,比如云服务器及操作系统,但用户不需要接触到云计算中的基础设施。
- Saas:提供给用户的是云计算基础设施上的应用程序,用户只需要在客户端界面访问即可使用到所需资源,而接触不到云计算的基础设施。
图中灰色的为要用户自己管理的内容,可见级别越高,云计算服务所提供的服务越多,用户需要操心的事项越少。
Openstack项目
Openstack最初是由NASA和Rackspace共同发起的云端计算服务项目,该项目以Apache许可证授权的方式成为了一款开源产品,目的是将多个组件整合后从而实现一个开源的云计算平台,目前Openstack项目正在被超过一百家厂商共同研发,并已经支持了几乎所有的常见云计算环境,拥有了良好的可扩展性,而且部署搭建Openstack服务也变得十分简单,目前国内对于云计算的需求也逐渐增加,很多中国企业也加入到了Openstack项目研发当中,Openstack项目也正在随着全球内得到了众多厂商的参与支持而快速成熟。
通过Openstack云计算项目,能够将诸如计算能力、存储、网络和软件等资源抽象成服务,以便让用户可以通过互联网远程来享用,付费的形式也变得因需而定,调整方便,拥有极强的虚拟可扩展性,是公共和私有云的建设与管理软件中的优秀开源项目。
Openstack作为一个云平台的管理项目,其功能组件覆盖了网络、虚拟化、操作系统、服务器等多个方面,每个功能组件交由不同的项目委员会来研发和管理,目前核心的项目包括有:
功能 | 项目名称 | 描述 |
计算服务 | Nova | 负责虚拟机的创建、开关机、挂起、迁移、调整CPU、内存等规则。 |
对象存储 | Swift | 用于在大规模可扩展系统中通过内置的冗余及高容差机制实现对象存储的系统。 |
镜像服务 | Glance | 用于创建、上传、删除、编辑镜像信息的虚拟机镜像查找及索引系统。 |
身份服务 | Keystone | 为其他的功能服务提供身份验证、服务规则及服务令牌的功能。 |
网络管理 | Neutron | 用于为其他服务提供云计算的网络虚拟化技术,可自定义各种网络规则,支持主流的网络厂商技术。 |
块存储 | Cinder | 为虚拟机实例提供稳定的数据块存储的创建、删除、挂载、卸载、管理等服务。 |
图形界面 | Horizon | 为用户提供简单易用的Web管理界面,降低用户对功能服务的操作难度。 |
测量服务 | Ceilometer | 收集项目内所有的事件,用于监控、计费或为其他服务提供数据支撑。 |
部署编排 | Heat | 实现通过模板方式进行自动化的资源环境部署服务。 |
数据库服务 | Trove | 为用户提供可扩展的关系或非关系性数据库服务。 |
Openstack项目的版本按照ABCDEFG……的顺序发布,每6个月更新一次。Openstack版本发布历史:
版本名称 | 发布时间 |
Liberty | 2015年10月15日 |
Kilo | 2015年4月30日 |
Juno | 2014年10月16日 |
Icehouse | 2014年4月17日 |
Havana | 2013年10月17日 |
Grizzly | 2014年4月4日 |
Folsom | 2012年9月27日 |
Essex | 2012年4月5日 |
Diablo | 2011年9月22日 |
Cactus | 2011年4月15日 |
Bexar | 2011年2月3日 |
Austin | 2010年10月21日 |
服务模块组件详解
Openstack是一个云计算的平台,也像是部署云操作系统的工具集,可以通过调取不同的组件来构建虚拟计算及云计算服务,比较重要的包括有计算(compute)、对象存储(Objectstorage)、认证(Identity)、仪表板(Dashboard)、块存储(Block Storage)、网络(Network)和镜像服务(image service),Openstack服务组件协同工作拓扑:
Nova提供计算服务:Nova可以称作是Openstack云计算平台中最核心的服务组件了,它作为计算的弹性控制器来管理虚拟化、网络及存储等资源,为Openstack的云主机实例提供可靠的支撑,其功能由不同的API来提供。
- Nova-api(API服务器):API服务器用于提供云计算设施与外界交互的接口,也是用户对云计算设施进行管理的唯一通道,用户通过网页来调用各种API接口,再由API服务器通过消息队列把请求传递至目标设置进行处理。
- Rabbit MQ Server(消息队列):Openstack在遵循AMQP高级消息队列协议的基础之上采用了消息队列进行通信,异步通信的方式更是能够减少了用户的等待时间,让整个平台都变得更有效率。
- Nova-compute(运算工作站):运算工作站通过消息队列接收用户的请求并执行,从而负责对主机实例的整个生命周期中的各种操作进行处理,一般会架设多台计算工作站,根据调度算法来按照实例在任意一个计算工作站上部署。
- Nova-network(网络控制器):用于处理主机的网络配置,例如分配IP地址,配置项目VLAN,设定安全群组及为计算节点配置网络。
- Nova-Volume(卷工作站):基于LVM的实例卷能够为一个主机实例创建、删除、附加卷或从主机中分离卷。
- Nova-scheduler(调度器):调度器以名为"nova-schedule"的守护进程方式进行运行,根据对比CPU架构及负载、内存占用率、子节点的远近等因素,使用调度算法从可用的资源池中选择运算服务器。
Glance提供镜像服务:Openstack镜像服务是一套用于主机实例来发现、注册、索引的系统,功能相比较也很简单,具有基于组件的架构、高可用、容错性、开发标准等优良特性,虚拟机的镜像可以被放置到多种存储上。
Swift提供存储服务:Swift模块是一种分布式、持续虚拟对象存储,具有跨节点百级对象的存储能力,并且支持内建冗余和失效备援的功能,同时还能够处理数据归档和媒体流,对于超大数据和多对象数量非常高效。
- Swfit代理服务器:用于通过Swift-API与代理服务器进行交互,代理服务器能够检查实例位置并路由相关的请求,当实例失效或被转移后则自动故障切换,减少重复路由请求。
- Swift对象服务器:用于处理本地存储中对象数据的存储、索引和删除操作。
- Swift容器服务器:用于统计容器内包含的对象数量及容量存储空间使用率,默认对象列表将存储为SQLite或者MYSQL文件。
- Swift帐户服务器:与容器服务器类似,列出容器中的对象。
- Ring索引环:用户记录着Swift中物理存储对象位置的信息,作为真实物理存储位置的虚拟映射,能够查找及定位不同集群的实体真实物理位置的索引服务,上述的代理、对象、容器、帐户都拥有自己的Ring索引环。
Horizon提供管理服务:Horizon是一个用于管理、控制Openstack云计算平台服务器的Web控制面板,用户能够在网页中管理主机实例、镜像、创建密钥对、管理实例卷、操作Swift容器等操作。
Quantum提供网络服务:重要的网络管理组件。
Cinder提供存储管理服务:用于管理主机实例中的存储资源。
Heat提供软件部署服务:用于在主机实例创建后简化配置操作。
安装Openstack软件
实验用的是Openstack的Juno版本。
安装Openstack软件前需要做的配置:
1.虚拟机硬件需求:内存8G,开启虚拟化功能,多添加一块20G的硬盘。
2.更改主机名以及主机名(/etc/hostname)与IP地址的映射文件(/etc/hosts):主机名openstack.kamin.com,IP地址172.24.8.101,DNS172.24.8.101,网关172.24.8.1。
vim /etc/hostname openstack.kamin.com vim /etc/hosts ... 172.24.8.101 openstack.kamin.com openstack ...
3.下载EPEL仓库源和Openstack-juno软件安装包,上传到虚拟机。下载地址:https://www.linuxprobe.com/tools/。
- Openstack Juno——云计算平台软件:Openstack云计算软件能够将诸如计算能力、存储、网络和软件等资源抽象成服务,以便让用户可以通过互联网远程来享用,付费的形式也变得因需而定,拥有极强的虚拟可扩展性。
- EPEL——系统的软件源仓库:EPEL是企业版额外的资源包,提供了默认不提供的软件安装包
- Cirros——精简的操作系统:Cirros是一款极为精简的操作系统,一般用于灌装到Openstack服务平台中。
4.解压上一步上传的压缩包,并写成repo文件。
tar xjvf epel.tar.bz2 #解压EPEL包 vim /etc/yum.repos.d/epel.repo #写入EPEL的yum仓库信息 [epel] name=epel baseurl=file:///media/EPEL enabled=1 gpgcheck=0 tar xjvf openstack-juno.tar.bz2 #解压openstack包 vim /etc/yum.repos.d/openstack.repo #写入openstack的yum仓库信息 [openstack] name=openstack baseurl=file:///media/openstack-juno enabled=1 gpgcheck=0
5.将新添加的硬盘做成逻辑卷,暂时只需创建卷组,逻辑卷待有需要再进一步创建。
pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb
以上步骤即做好安装openstack的前期工作。为方便日后回忆知识点,本人将在此阶段设置快照。
部署openstack
#1.安装Openstack的应答文件 yum install -y openstack-packstack #2.安装Openstack服务程序 packstack --allinone --provision-demo=n --nagios-install=n #3.创建云平台的网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-br-ex DEVICE=br-ex IPADDR=192.168.10.10 NETMASK=255.255.255.0 BOOTPROTO=static DNS1=192.168.10.1 GATEWAY=192.168.10.1 BROADCAST=192.168.10.254 NM_CONTROLLED=no DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no ONBOOT=yes DEVICETYPE=ovs TYPE="OVSIntPort" OVS_BRIDGE=br-ex #4.修改网卡信息 vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 DEVICE=eno16777728 ONBOOT=yes TYPE=OVSPort DEVICETYPE=ovs OVS_BRIDGE=br-ex NM_CONTROLLED=no IPV6INIT=no #5.将网卡设备添加到OVS网络中 ovs-vsctl add-port br-ex eno16777728 ovs-vsctl show #6.重启系统让网络设备同步 reboot #7.执行身份验证脚本 source keystonerc_admin openstack-status #8.查看登录云平台管理页面的账号密码 cat keystonerc_admin
打开浏览器访问172.24.8.101/dashboard,输入第8步查出的账号密码,即可登入Openstack管理中心。
使用Openstack服务
配置虚拟网络
要想让云平台中的虚拟实例机能够互相通信,并且让外部的用户访问到里面的数据,必需配置好云平台中的网络环境。
1.Openstack创建网络:管理员 -> 网络,创建网络,相应的参数值:
- 名称:wlan
- 项目:admin
- 供应商网络类型:VXLAN
- 段ID:1
- 管理员状态:UP
- 外部网络:勾选
填好参数后点击“创建网络”即生成一个网络。
2.创建子网信息。点击网络名称“wlan”,弹出wlan这个网络的详情,点击右下方“创建子网”。相应的参数值:
- 子网名称:wlan_172.24.8.0
- 网络地址:172.24.8.111
- IP版本:IPv4
- 网关IP:172.24.8.1
- 激活DHCP:勾选
- 分配地址池:172.24.8.110,172.24.8.220
- DNS域名解析服务:172.24.8.1
填好参数后点击“已创建”即成功创建子网。
3.创建私有网络:项目 -> 网络 -> 网络,创建网络,相应参数值:
- 网络名称:private_vlan
- 管理员状态:UP
- 创建子网:勾选
- 子网名称:private_vlan_10.10.10.0
- 网络地址:10.10.10.0/24
- IP版本:IPv4
- 网关IP:10.10.10.1
- 激活DHCP:勾选
- 分配地址池:10.10.10.110,10.10.10.220
- DNS域名解析服务:10.10.10.1
点击“已创建”即成功创建私有网络及其子网。
4.添加路由信息。项目 -> 路由,新建路由,路由名称:router_wlan_private,点击“新建路由”即成功创建一个路由。点击新创建路由右边的“设置网关”,外部网络:wlan。点击“设置网关”即成功设置网关。
5.在网络拓扑中添加接口。项目 -> 网络 -> 网络拓扑,鼠标找到正方形的接口,点击“增加接口”。相应参数值:
- 子网:private_vlan: 10.10.10.0/24(private_vlan_10.10.10.0)
- IP地址:10.10.10.1
填好参数后点击“增加接口”即可成功增加接口
创建云主机类型
1.创建云主机类型。管理员》云主机类型》创建运作主机类型,相应参数值:
- 名称:LP_standard
- ID:auto
- 虚拟内核:1
- 内存(MB):1024
- 根磁盘(GB):0
- 临时磁盘(GB):0
- Swap磁盘(MB):0
填好参数后点击“创建云主机类型”完成创建。
2.创建上传镜像。上传一个cirros镜像(下载地址:http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img)。管理员》系统》镜像》创建镜像,相应参数值:
- 名称:随意
- 镜像源:镜像文件
- 镜像文件:选择下载好的镜像,上传上去。
- 镜像格式:QCOW2 - QEMU 模拟器
- 共有:勾选
- 受保护的:勾选
点击“创建镜像”完成镜像创建。
创建主机实例
1.创建主机实例。项目》Compute》实例》启动云主机。云主机详细参数:
可用域:nova
云主机名称:cirros-0.4.0
云主机类型:LP_standard
云主机数量:1
云主机启动源:从镜像启动
镜像名称:Cirros(12.6MB)
已选择的网络:选择先前创建好的私有网络
点击“运行”,等待主机实例孵化完成。可以通过网络拓扑看到实例主机(当前仅在内网中)。
2.为实例主机绑定浮动IP地址。项目》实例》动作》绑定浮动IP,点击“IP地址”框右边的“+”按钮,选择资源池为“wlan”,此时会从资源池中按递增顺序分配IP地址(从172.24.8.111开始),点击“分配IP”,点击“关联”,完成实例主机与IP地址绑定。
此时查看实例信息,会发现IP地址一栏出现私网地址和公网地址。不过此时实例主机既ping不通,也不能ssh,因为还没有设置安全组规则(说白了就是防火墙)。
3.设置安全组规则。
- 项目》Compute》访问&安全》创建安全组,名称:private_wlan,描述:privateTOwlan。
- 在刚创建的安全组“private_wlan”的动作一栏》管理规则,添加规则:ALL ICMP,ALL TCP,ALL UDP。
4.编辑实例的安全策略组。将新建的安全组策略应用到主机实例上。项目》Compute》实例》动作》编辑安全组。
现在,外部就能ping同实例主机以及ssh了。
添加云硬盘
云计算平台的特性就是要能够灵活的,弹性的调整主机实例使用的资源,可以来为主机实例多挂载一块云硬盘(基于虚拟机的做成逻辑卷的额外硬盘)。
1.创建云硬盘设备。项目》Compute》云硬盘》创建云硬盘,相应参数:
- 云硬盘名称:disk10
- 大小(GB):10
- 可用域:nova
2.编辑挂载设备到云主机实例,项目》Compute》云硬盘》动作》编辑挂载,连接到云主机,选中先前创建的云主机实例。
控制云主机实例
查看云平台信息:项目》Compute》概况,
通过ssh登入云主机实例,cirros系统规定要用cirros登录,cirros-0.4.0版本的默认密码为gocubsgo,若要执行某些管理员才能执行的命令,使用sudo命令。
ssh cirros@172.24.8.111 $ ip a #查看网卡信息 $ df -h #查看挂载信息 $ mkdir disk $ sudo mkfs.ext4 /dev/vdb #格式化先前添加的云硬盘(10G)为ext4格式 $ sudo mount /dev/vdb disk/ #挂载 $ df -h