本节书摘来自华章出版社《openstack实战指南》一 书中的第1章,第1.6节,作者:黄 凯 毛伟杰 顾骏杰 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
由于openstack安装过程时间较长且复杂,并且构建不同的云环境可以选择各种各样的排列组合方式,为了避免初学者在较长时间的安装过程中失去对openstack的探索热情,因此,我们先来认识一下openstack的用户界面,从感官角度来见识一下它。
openstack的用户界面由两部分组成:一是web界面,二是shell界面。horizon负责展现web仪表盘,用户可以通过浏览器直接操作、管理、运维openstack的一些功能。由于openstack项目队伍不断壮大,dashboard并不能展现所有的openstack功能,因此,最新的功能一般会先开发shell命令行,也就是将cli(command line interface)提供给linux用户操作。
通过浏览器输入仪表盘的地址,可以看到如图1-4所示的登录界面。openstack仪表盘可以安装在任意节点,我们通常都将其安装在nova api的管理节点,以方便访问。horizon和nova-client一样,需要keystone的用户名及密码认证,以及keystone的token进行授权访问。这些都是horizon内部实现的,普通用户只要有用户名及密码就能登录到仪表盘中进行日常操作。让我们先登录到openstack的仪表盘中,为了方便演示,使用admin用户。
登录到控制面板,可以发现有管理员视图(仅管理员可见)和项目视图(仅可以操作当前用户所授权的项目)。目前的仪表盘已经进行了国际化,可以使用熟悉的中文来管理“云”。管理员用户可以从整体视角来观察“云”的一举一动,可以看到整个资源池的大小状况,以及健康状况。如果资源不够使用,那么可以以人工方式进行干预。目前,因为openstack的auto scaling并不尽如人意,所以一些工作只能通过人工干预的方式进行。
openstack的仪表盘左侧是导航栏,如图1-5所示。在openstack的图标下可以看到两个维度:项目和管理员。这两个维度下面分别有各自的服务菜单。项目维度可以从概览(overview)、实例(instances)、卷(volumes)、镜像和快照(image&snapshots)、访问和安全(access&security)几个方面来管理“云”。管理员维度有概览(overview)、实例(instances)、卷(volumes)、套餐(flavors)、镜像(images)、项目(project)、用户(users)、系统信息(system info)。项目维度和管理员维度内容有交叉,但是这些是从不同角度去观察“云”所得到的结果。在“云”环境中,很多时候需要从不同的维度去观察。从多维角度观测,才能得到想要的全部信息。
在dashboard左侧导航栏中,选择“项目”→“instances”,然后单击“launch instance”,可完全通过图形界面方式来创建虚拟机,如图1-6所示。
当单击“launch instance”时,会弹出模态窗口,在此可进行创建实例的具体配置,具体包括实例的细节(details)、访问和安全(access&security)、磁盘配置(volume options),以及实例启动后的自定义初始化脚本(post-creation)。
实例细节的配置包括了实例的来源类型(镜像文件或快照文件)、镜像模板、实例名、套餐、创建实例个数。右侧还列出了更详细的信息,供管理员参考当前实例的创建对整个项目有何影响。
访问和安全包括虚拟机ssh密钥的设置及安全组的设置。磁盘配置可以让用户选择是否在卷存储上进行虚拟机的启动引导(boot)。自定义初始化脚本主要是实例在启动后,可以运行一些用户自定义的脚本。除了实例的细节设置,其他设置如果没有特殊需求,默认即可。当确认一切设置无误后,可以单击“launch”按钮进行实例创建。
创建openstack虚拟机实例前有很多先决条件,如horizon本身能正常运行并对外提供创建服务;建立在openstack三个核心组件之上等。这三个核心组件分别是keystone、glance、nova。keystone负责授权认证、租户管理、项目权限和配额以及服务目录管理。glance负责为nova提供创建实例所需要的镜像文件,这种镜像文件可以包含很多格式,大多数都是我们常见的镜像格式,如raw、qcow2。nova负责虚拟机生命周期的管理,以及宿主机资源调度。nova还决定了虚拟机实例建立在哪一台hypervisor物理机之上。由这三个核心组件协作,horizon将用户的http请求转换为restful请求,然后将restful请求分发给nova api,进行实例创建。当创建后,虚拟机实例会进入build状态,任务状态将是spawning。这期间会将镜像文件从glance中下载到nova节点,并进行一些虚拟机的配置。当一切正常后,虚拟机将会进入active状态,此时用户可以享受“云”带来的便捷,如
图1-7所示。创建所需的时间一般由创建实例的镜像文件大小、传输镜像图带宽,以及创建的hypervisor磁盘性能来决定。有时创建过程会持续5~10分钟。
horizon并不是唯一可以管理虚拟机的用户界面。之前提到openstack还有基于python的cli,虚拟机创建之后可以通过nova-client进行管理。通过命令行输入nova list,可以看到所有openstack实例的运行情况,以及实例相应的信息,如图1-8所示。后续在讲解nova组件时,将详细讲解各种命令的操作及命令之间的关联关系,以及如何实现自定义命令、命令行扩展,还有如何运用好一系列的openstack命令来进行日常的管理、运维。
当虚拟机创建成功后,双击虚拟机名,进入到这个虚拟机视图进行详细观察,如图1-9所示,可以看到标签页,包括概览(overview)、日志(log)、控制台(console)。概览中可以看到虚拟机的一系列详细信息。日志中可以看到虚拟机当前的启动引导日志,不用登录虚拟机就可以看到虚拟机的引导情况,检查是否有错误或者异常发生。通过控制台界面,可以对虚拟机进行操作。这是一个vnc控制台,我们不必像以前使用虚拟机那样,登录到hypervisor端配置vnc端口信息,然后再通过vnc client登录管理虚拟机。openstack将这些日常操作抽象出来,进行自动化,整个过程无须用户进行任何配置,当构建好openstack云后,剩下的事将交给openstack来做。
单击“more”,有更多的操作可以进行,可以对虚拟机实例进行一些操作,这些操作包括启动、停止、挂起、激活、快照、迁移、备份、诊断、恢复、重建、销毁等一系列虚拟机生命周期管理。这些操作都由nova提供,部分操作会由其他组件来参与。对于openstack这样的一个分布式系统,完成一件事,基本上都会涉及一系列的组件。这些组件协同工作,在“云”中扮演着各种角色。之后我们将具体探讨这些组件在openstack中扮演什么样的角色,哪些组件必不可少,以及如何通过各种组件的排列组合来组建合适的“云”。
本节将介绍创建虚拟机的步骤,如下:
1)horizon通过keystone获取compute组件的访问地址(url),并获取授权令牌(token),如图1-10所示。
2)携带授权令牌,发送创建虚拟机指令,如图1-11所示。
3)nova-compute组件通过glance-api下载虚拟机镜像,glance镜像中有缓存机制,通常将缓存文件放入名为_base的目录(下文将其称为base缓存),如图1-12所示。镜像分两个阶段,第一个阶段是如果base缓存中没有此次的虚拟机镜像文件,则从glance下载镜像到base缓存;第二个阶段是从base缓存复制到本地镜像目录。base缓存可关闭,默认为开启。建议不要修改此默认值,因为如果每次镜像都通过glance下载,会消耗大量的网络带宽。base缓存的存在就是为了解决虚拟机镜像文件传输消耗带宽的问题。
4)glance检索后端镜像,glance后端存储不一定要使用swift,只要能存放镜像的文件系统都可以,如图1-13所示。
5)获取网络信息,决定虚拟机网络模式及建立网络连接,如图1-14所示。
6)nova-compute发送启动虚拟机指令,如图1-15所示。
至此,虚拟机创建完成。
本节将通过图形界面方式创建磁盘实例。在dashboard左侧导航栏中,选择“项目”→“volumes”,然后单击右侧的“create volume”按钮,如图1-16所示。
创建磁盘实例的过程与创建虚拟机类似,在弹出的“create volume”界面中,只需要进行选择,填写表单,就可以获得想要的磁盘,如图1-17所示。
填写完成后,单击“create volume”按钮即可进行创建。volume创建会交由cinder进行处理,与nova api类似,cinder也有cinder api模块进行restful处理。这些过程与虚拟机实例创建类似,都需要经过keystone认证,然后交由cinder组件进行具体调度、创建工作,horizon则将这一过程展现给用户,如图1-18所示。
创建完磁盘后,可以将这块磁盘挂载到虚拟机实例上,供虚拟机实例使用。这一挂载操作并不像传统的磁盘挂载方式,虽然原理不变,但其操作模式及服务模式发生了变化,用户只需要单击界面进行设置就可以完成这一系列操作。单击磁盘管理界面中的“edit attachments”按钮就可以进行挂载操作,如图1-19所示。
挂载后,磁盘管理界面将显示挂载的详细信息。通过virt-manager图形工具查看虚拟机即可看到第二块挂载的磁盘,如图1-20所示。这块磁盘是热挂载形式,不需要虚拟机实例停止运行。
现在来了解一下创建块存储的流程,如下:
1)horizon通过keystone获取cinder组件的访问地址(url),并获取授权令牌(token),如图1-10所示。
2)携带授权令牌,发送创建块存储指令,如图1-21所示。
3)携带令牌,发送挂载块存储指令,如图1-22所示。
4)nova-compute组件发送rpc指令以通知cinder挂载块设备,如图1-23所示。