OpenStack入门 之 各组件解析
写在前面
学习目标:
- 掌握 OpenStack 的各组件的架构和功能
本次笔记的内容有:
- Nova 组件解析
- Swift 组件解析
- Cinder 组件解析
- Neutron 组件解析
- Horizon 组件解析
- Glance 组件解析
- Keystone 组件解析
是常用的 7 个组件:
- 负责虚拟机创建、管理和销毁、提供计算资源服务的 Nova;
- 提供对象存储服务的分布式存储 Swift;
- 提供块存储服务的 Cinder;
- 提供虚拟机镜像管理和存储服务的 Glance;
- 软件定义网络项目 Neutron;
- 提供身份认证和授权的 Keystone;
- 提供基于 Web 的一个 GUI 的 Horizon;
OpenStack 每半年进行一次集成发布,版本号从 A 开始,按字母表顺序逐步提升,每个集成发布版本都包括若干个项目,A 版本是 Nova 和 Swift。
1. Nova组件解析
通过 Nova 可以实现:
- 访问虚拟机
- 创建和启动虚拟机
Nova 是怎么运作的?除了图形界面和命令行之外,我们还需要怎样去配置和使用 Nova?
1-1. Nova 的架构
Nova-console 和 Nova-consoleauth 这两个组件,主要是为了让用户能够通过 VNC 客户端或 SPICE 客户端来访问虚拟机的界面。推荐使用 SPICE 客户端,因为SPICE 客户端提供了很多高级的特性,比方说,对 USB 设备的支持,SPICE 还支持多屏显示等等功能,这些特性在桌面虚拟化环境中非常有用处,在桌面云环境中也非常有用,但使用 SPICE 就需要对 nova.conf 文件做一些修改,比如:
// nova.conf的修改:
[spice]
enabled = True
[default]
vnc_enabled = False
1-2. 虚拟机的调度机制
- 第一个方面:placement(放置)。
把虚拟机放在哪个物理机上启动 - 第二个方面:migration(迁移)。
从哪个物理机迁移到哪个物理机上
Nova 有一个组件叫作调度器,Scheduler 直译过来就是调度器,它实际上只完成了 placement 的工作,migration 实际上是由其它组件来协同完成的。
在 OpenStack 的上下文里,特指这个运行的 nova-compute 服务的机器才叫做宿主机。
1-3. Nova 对虚拟机的调度机制
通过修改 nova.conf 文件修改调度器的配置,nova 默认的这个调度器成为 filter scheduler,这种调度器分两步来决定虚拟机的位置。第一步先经过一些 filters,filters 的每一种都代表着一种限制条件,通过这些 filters 选出来一些可用的 host,作为第二步的输入;第二步是称重,实际上是对宿主机进行排序。
下面举个例子进行说明,这里有一个非常常用的 filter 叫作 Ramfilter,Ram:设置超配比例。
[ Nova 对虚拟机的调度机制:]
(1)把所有的 filters 都用上:
scheduler_available_filters = nova.scheduler.filters.all_filters
(2)选择其中的一部分:
scheduler_default_filter = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter,ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter
(3)用 Python 实现自己的 filter,老师用 RamFilter 做的例子如图所示:
对虚拟机进行排序(称重 weighting)
两种选择:
- 希望负载尽可能均衡
- 希望负载尽可能集中,用尽可能少的 host 来承载我们的虚拟机,我们使用的 host 就会比较少,那么运维的成本包括用电、制冷的费用都会比较低
2. Swift组件解析
[ Swift 的特点:]
- Swift 历史比较长
- Swift 比较独立(和其他组件的耦合度比较低;不依赖于第三方的软件或设备,甚至不依赖于 Keystone 做用户的认证和授权;)
- Swift 是做对象存储的(这里的对象存储就是指,采用 RESTful 接口,支持直接从互联网访问存储系统进行数据的读写。对象存储往往采用扁平的数据组织形式,在文件数量很多的情况下不至于出现明显的性能衰减,也就是我们说对象存储的概念哦
OpenStack 其它的很多项目实现具体功能的时候往往需要依赖于第三方的软件或设备,比如说 Nova 启动虚拟机、管理虚拟机就必须通过一个第三方的 Hypervisor,还有 Cinder 提供块存储服务必须通过第三方的存储设备。Swift 就不同了,Swift 可以从上面的 RESTful 接口把堆栈一直管到底,以至于管到最后把数据到底放在哪个服务器的哪个硬盘上都可以做到,整个是完整的存储系统,现在有专门基于 Swift 实现的存储系统例如 swiftstack
[ Swift 数据的组织形式:]
扁平的组织形式,Swift 的数据组织形式分为三级,只有这三级
- Account
- Container
- Object
与可以分 N 多层能够不断有