OpenStack 是什么
- OpenStack 是开源云计算平台(云操作系统),可控制整个数据中心的大型计算,存储和网络资源池
- 管理员能够通过 Web 界面、命令行或 API 接口控制、配置资源;用户可以通过 Web 界面使用资源。
特点:
- 自身不提供虚拟化技术
- 调用多种技术实现多资源池管理
- 对外提供统一管理接口
- 环境隔离,资源复用
- 降低隔离损耗,提升运行效率
- 提供高级虚拟化特性
云计算操作系统
- 概念:云操作系统指构架于服务器、存储、网络等基础硬件资源和单机操作系统、中间件、数据库等基础软件智商,管理海量的基础硬件、软件资源的云平台综合管理系统
- 管理和驱动海量服务器、存储等基础硬件,将数据中心的硬件资源逻辑上整合成一台服务器
- 为云应用软件提供统一的、标准的接口
- 管理海量的计算任务以及资源调配和迁移
- 特点
- 网络化:将用户计算需求作为任务通过网络发送给各个处于不同地理位置的服务器处理,通过网络返回结果。
- 安全:采用多种多样的安全保障措施保证数据安全、内存安全、数据传输安全(加密)、持久存储安全(冗余、备份)。
- 计算的可扩充性:动态申请网络硬件资源为用户服务 – 本地硬件资源无需扩展。
OpenStack 的定位:云计算系统的控制面。
虚拟化:云计算系统的执行面
简介
概念
- 既是一个开源软件,也是一个项目,还是一个社区,提供了一个部署云的操作平台或工具集。用OpenStack易于构建虚拟计算或存储服务的云,既可以为公有云、私有云,也可以为大云、小云提供可扩展、灵活的云计算。
- OpenStack是一个管理计算、存储和网络资源的数据中心云计算开放平台,通过一个仪表板,为管理员提供了所有的管理控制,同时通过Web界面为其用户提供资源。
- Rackspace公司的“云文件”平台Swift + 美国宇航局NASA“星云”平台Nova
设计理念
- 开放:任何个人、企业、组织、政府机构,只要遵循相关开源协议,都可以使用、拿到源代码。
- 灵活:带来可以定制的好处,每一个类型组件都有多个替代品,不会因为某一个组件的原因受到限制。
- 可扩展:各个组件是相互独立的项目,各个组件可以从内部解决可扩展的问题,而不影响其他组件。
参考架构
- 最开始的时候:核心部件
- Nova(Nebula),Swift,Glance
- 逐步发展:其他组件
- 认证管理服务 Keystone:用户或服务的验证或授权
- 块存储服务 Cinder
- 文件共享存储服务 Manila
- 网络服务 Neutron:提供网络即服务的功能
- 计量服务 Telemetry:计量租户资源使用率
- 编排服务 Heat:OpenStack 开发者
- 仪表盘服务 Horizon:无状态无数据的 Web 应用
- 消息队列:中心化的消息交换器
- 数据库:构建时和运行时状态信息
虚拟机创建过程
- 资源准备
- 通过 Keystone 进行用户身份认证,通过认证后,用户即可与 OpenStack API 节点通信,触发创建请求
- 通过调度器获得启动虚拟机的最佳位置:通过工作守护进程获得物理节点上的资源状态;Nova-Scheduler
- 创建流程
- 调用身份认证进行身份认证
- 生成用于后续调用的令牌
- 访问镜像服务以获取镜像列表,并获取目标基础镜像
- 处理计算服务 API 请求
- 处理计算服务队安全组和密钥调用的请求
- 调用网络服务 API 确定可用网络
- 通过计算节点调度程序选择 Hypervisor 节点
- 调用块存储服务 API 为实例分配卷
- 通过计算服务 API 调用在 Hypervisor 节点启动实例
- 调用网络服务 API 为实例分配网络资源
从架构设计到物理部署
功能类别 | 角色 |
---|---|
计算 | 存储虚拟机镜像 |
镜像 | 存储磁盘文件 |
对象存储 | 存储对象 |
块存储 | 提供卷 |
网络 | 提供网络连接 |
计量 | 提供度量、指标和报警 |
文件共享 | 提供横向扩展的文件共享系统 |
编排 | 为堆栈创建提供编排引擎 |
身份认证 | 提供认证 |
仪表盘 | 提供图形化用户界面 |
- 存储设计:有哪些数据需要存储?虚拟机快照备份的存储要求是什么?(系统运行时数据、系统持久存储、虚拟机快照、系统镜像、用户信息)需要文件共享系统吗?是否需要虚拟机之间实现存储共享?
- 网络设计
- 网络服务是 OpenStack 服务中最复杂的
- 使用隔离的物理网络处理不同类型的网络流量
- 租户数据网络:为租户创建的虚拟网络提供物理路径
- 管理和 API 网络:OpenStack 服务之间的通信,可细分
- 存储网络:虚拟机和存储节点之间的物理连接
- 虚拟网络类型
- 外部网络:全局互联并使用可路由的 IP 寻址;SNAT 虚拟机访问外网;DNAT 外网访问虚拟机
- 租户网络:虚拟机之间专用网络;私有 IP 空间;租户流量隔离
物理模型设计 – 估算硬件容量
- 例如:在Openstack环境中运行200个虚拟机
- CPU评估
- 逻辑CPU数:物理CPU 核数 超线程数;一个逻辑CPU对应一个虚拟CPU;一个虚拟CPU支持多个虚拟机【影响性能;可以使用频数计算】;一个虚拟机可以使用多个虚拟CPU,但不能多于逻辑CPU数;
- 可以超额分配,但是不能超额执行;超分:单台物理机中虚拟机个数 频数 物理频数
- 内存评估
- 单台物理机虚拟机个数*虚拟机最大动态分配内存+主机内存用量
- 网络评估
- 网卡带宽 单个虚拟机带宽 虚拟机个数;公共IP地址个数;浮动IP地址个数
- 存储评估
- 虚拟机的临时存储 + 永久存储;存储节点的对象存储、块存储和文件共享存储
- 最佳实践
- 分析需求、考虑需求增长情况、持续跟踪每一个服务单元、丢弃和替换服务单元;按需调整
- CPU评估
部署
DevOps
- 矛盾
- 对于运维来说,稳定压倒一切,新 Feature 越少越好。而对于研发来说,却希望能开发更多的功能。
- DevOps 的理念
- 让研发(Development)和运维(Operations)一体化,让团队从业务需求出发,向着同一个目标前进。
- DevOps 是一种软件研发管理的思想,方法论,追求的是一种没有隔阂的理想的研发协作的状态,可能涉及到的角色有开发、测试、产品、项目管理、运维等等。
OpenStack 和 DevOps
- 要求开发人员、网络工程师和运维人员必须相互协作,来部署、运维和维护 OpenStack 云基础架构
- OpenStack和DevOps结合
- 要求:OpenStack软件和部署云基础架构的持续增长的复杂性必须被简化
- 方式
- 基础架构中的所有内容都必须自动化
- 将OpenStack分解为多个部分
- 要点
- 简化和模块化OpenStack服务;像开发构建模块一样开发OpenStack服务
- 在不影响整个系统的情况下,促进服务的定制和改进
- 使用正确的工具来构建服务,确保服务在相同输入情况下输出相同结果
- 将服务愿景从如何做切换到要做什么
云控制器:Keystone、Nova 及其他服务
- 集群:提供高可用性
- 两台或多台服务器的能力聚合就是服务器集群,通过堆积机器即可实现这种聚合
- 向上扩展(垂直扩展):向服务器添加更多的CPU和内存
- 向下扩展(水平扩展):增加更多的标准商用服务器
- 非对称集群
- 备服务器只有在主服务器发生故障时才接管系统,处于高可用目的,包含故障切换配置
- 对称集群
- 所有节点都是活动的,共享工作负载,可视为负载均衡集群
- 两台或多台服务器的能力聚合就是服务器集群,通过堆积机器即可实现这种聚合
- OpenStack 的功能被广泛分布到多个服务中,包含了基础架构服务和 OpenStack 服务
- 基础架构服务
- 不属于 OpenStack 对外提供的公共服务,但被多个 Openstack 组件使用
- 消息队列:必须是集群式的;RabbitMQ,ZeroMQ,Qpid
- 整合数据库:OpenStack的环境数据,使用数据等;MySQL 和 MongoDB
- OpenStack 服务
- 身份、镜像、计算、网络、存储等
- 基础架构服务
Keystone
- 身份认证和服务目录(所有其他服务需向Keystone注册API端点)
- 由多个Provider组成
- 身份提供者 Identity Provider:服务用户、管理员用户、终端用户
- 资源提供者 Resource Provider:project、domain
- 认证提供者 Authorization Provider:用户和用户组和他们角色之间的关系
- 令牌提供者 Token Provider:访问openstack服务需要一个有效的令牌,通过身份提供者的认证后获得令牌
- 目录提供者 Catalog Provider:维护服务和API端点的目录
- 策略提供者 Policy Provider:策略由多条规则组成,每条规则定义了哪些用户和角色被允许访问哪些资源
- 高级特性
- 联邦keystone:使用外部身份提供者提供的身份服务访问服务提供商可用资源的机制
- Fernet令牌:解决原生令牌提供者带来的性能问题
Nova 管理组件及 API
- Nova是Openstack中提供计算资源服务的项目,是OpenStack最核心的项目
- 负责:
- 虚拟机生命周期管理
- 其他计算资源的生命周期管理
- 不负责:
- 承载虚拟机的物理机自身的管理
- 全面的系统状态监控
- 运行在云控制器上的组件
- Nova-api:云控制器中的编排引擎;通过API将消息写入数据库和消息队列向其他守护进程传递消息
- Nova-conductor:代表计算节点上nova-compute执行数据库操作,提供数据库访问隔离;将来自计算节点请求并行化
- Nova-scheduler
- 专门的调度算法;确定虚拟机创建的最佳放置位置;支持过滤器检查计算节点上资源可用性,通过加权机制过滤出计算节点列表,再确定启动虚拟机的最佳位置;支持自定义度量标准和策略考量配置
- 在生产环境下,配置单独的存储主机,其调度器运行在存储主机上
- Nova-compute则运行在计算节点上
- Nova-network则可以被Neutron替代
- API服务:类似Nova-api,也将身份、镜像、网络和存储API都放在云控制器上运行
其他服务
- 云控制器托管用于镜像管理的Glance服务
- Glance API 提供外部 REST 接口,用于查询虚拟机镜像及相关元数据
- Glance registry 将镜像元数据存储在数据库中,并利用存储后端实际存储镜像
- 例如使用 Swift 对象存储作为镜像存储后端
- 网络服务采用类似Nova的部署概念:网络API驻留在云控制器中,独立配置网络服务器节点
- 仪表盘服务:运行在Apache Web服务器后端,可以将其运行在可以访问API端点的单独节点上,降低云控制器负载
- 计量服务
- 跟踪资源使用情况,计算资源利用率
- 多种使用目的:计费、容量规划、按需求和吞吐量的虚拟基础架构自动扩展等
计算节点:Hypervisor、Magnum
// TODO
存储节点 – Swift,Cinder
// TODO
网络节点 – Neutron
// TODO
Reference
- 南京大学软件学院本科三年级课程《云计算》
- 文件存储、对象存储、块存储的区别