Openstack 是什么?
OpenStack 是开源云计算平台(云操作系统),可控制整个数据中心的大型计算,存储和网络资源池。
管理员能够通过 Web 界面、命令行或 API 接口控制、配置资源;用户可以通过 Web 界面使用资源。
- 自身不提供虚拟化技术
- 调用多种技术实现多资源池管理
- 对外提供统一管理接口
- 环境隔离,资源复用
- 降低隔离损耗,提升运行效率
- 提供高级虚拟化特性
Openstack——云计算操作系统
概念:云操作系统指构架于服务器、存储、网络等基础硬件资源和单机操作系统、中间件、数据库等基础软件之上,管理海量的基础硬件、软件资源的云平台综合管理系统。
- 管理和驱动海量服务器、存储等基础硬件,将数据中心的硬件资源逻辑上整合成一台服务器
- 为云应用软件提供统一的、标准的接口
- 管理海量的计算任务以及资源调配和迁移
特点:
- 网络化:将用户计算需求作为任务通过网络发送给各个处于不同地理位置的服务器处理,通过网络返回结果
- 安全:采用多种多样的安全保障措施保证数据安全。内存安全、数据传输安全(加密)、持久存储安全(冗余、备份)
- 计算的可扩充性:动态申请网络硬件资源为用户服务——本地硬件资源无需扩展
除了云操作系统 OpenStack,构建云计算还需要很多其他东西:底层驱动+上层应用程序
简介
概述
既是一个开源软件,也是一个项目,还是一个社区,提供了一个部署云的操作平台或工具集。用 OpenStack 易于构建虚拟计算或存储服务的云,既可以为公有云、私有云,也可以为大云、小云提供 可扩展、灵活的云计算。
OpenStack 是一个管理计算、存储和网络资源的数据中心云计算开放平台,通过一个仪表板,为管理 员提供了所有的管理控制,同时通过 Web 界面为其用户提供资源。
Rackspace 公司的“云文件”平台 Swift+美国宇航局 NASA“星云”平台 Nova
- 计算资源管理:OpenStack 可以规划并管理大量虚拟机,从而允许企业或服务提供商按需提供计算资源
- 存储资源管理:OpenStack 可以为云服务或云应用提供所需的对象及块存储资源
- 网络资源管理:IP 地址的数量、路由配置、安全规则将爆炸式增长;传统的网络管理技术无法真正高扩展、高自动化地管理下一代网络
设计理念
- 开放:任何个人、企业、组织、政府机构,只要遵循相关开源协议,都可以使用、拿到源代码
- 灵活:带来可以定制的好处,每一个类型组建都有多个替代品,不会因为某一个组件的原因受到限制
- 可扩展:各个组件是相互独立的项目,各个组件可以从内部解决可扩展的问题,而不影响其他组件
参考架构:虚拟机创建过程
最开始的时候:核心部件: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 的服务
核心服务之间的依赖关系
运行 Openstack 服务的节点:
- 云控制器:控制所有服务的节点
- 网络节点:运行网络服务的节点
- 计算节点:运行虚拟机的节点(也可以运行网络服务)
存储设计:有哪些数据需要存储?虚拟机快照备份的存储要求是什么?需要文件共享系统吗?是否需要虚拟机之间实现存储共享?系统运行时数据、系统持久存储、虚拟机快照、系统镜像、用户信息。
网络设计:
- 网络服务是 Openstack 服务中最复杂的
- 使用隔离的物理网络处理不同类型的网络流量
- 租户数据网络:为租户创建的虚拟网络提供物理路径
- 管理和 API 网络:Openstack 服务之间的通信,可细分
- 存储网络:虚拟机和存储节点之间的物理连接
- 虚拟网络类型
- 外部网络:全局互联并使用可路由的 IP 寻址;SNAT 虚拟机访问外网;DNAT 外网访问虚拟机
- 租户网络:虚拟机之间专用网络;私有 IP 空间;租户流量隔离
物理部署
五种节点:部署各个系统的不同组件
三种网络:不同的使用目的;OpenStack 内部网络、外部网络、虚机网络
物理部署模型-估算硬件容量
例如:在 Openstack 环境中运行 200 个虚拟机
- CPU 评估
- 逻辑 CPU 数:物理 CPU _ 核数 _ 超线程数;一个逻辑 CPU 对应一个虚拟 CPU;一个虚拟 CPU 支持多个虚拟机【影响性能;可以使用频数计算】;一个虚拟机可以使用多个虚拟 CPU,但不能多于逻辑 CPU 数;
- 可以超额分配,但是不能超额执行;超分:单台物理机中虚拟机个数 * 频数>物理频数
- 内存评估:单台物理机虚拟机个数 * 虚拟机最大动态分配内存 + 主机内存用量
- 网络评估:网卡带宽>单个虚拟机带宽*虚拟机个数;公共 IP 地址个数;浮动 IP 地址个数
- 存储评估:虚拟机的临时存储+永久存储;存储节点的对象存储、块存储和文件共享存储
最佳实践:分析需求、考虑需求增长情况、持续跟踪每一个服务单元、丢弃和替换服务单元;按需调整
部署
DevOps
矛盾:对于运维来说,稳定压倒一切,新 Feature 越少越好。而对于研发来说,却希望能开发更多的功能。
DevOps 的理念:让研发(Development)和运维(Operations)一体化,让团队从业务需求出发,向着同一个目标前进。
DevOps 是一种软件研发管理的思想,方法论,追求的是一种没有隔阂的理想的研发协作的状态,可能涉及到的角色有开发、测试、产品、项目管理、运维等等。
DevOps(Development 和 Operations 的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
OpenStack 和 DevOps
要求开发人员、网络工程师和运维人员必须相互协作,来部署、运维和维护 OpenStack 云基础架构。
OpenStack 和 DevOps 结合:
要求:OpenStack 软件和部署云基础架构的持续增长的复杂性必须被简化
方式:基础架构中的所有内容都必须自动化;将 OpenStack 分解为多个部分
要点:
- 简化和模块化 OpenStack 服务;像开发构建模块一样开发 OpenStack 服务
- 在不影响整个系统的情况下,促进服务的定制和改进
- 使用正确的工具来构建服务,确保服务在相同输入情况下输出相同结果
- 将服务愿景从如何做切换到要做什么
Ansible
基础架构自动化引擎:安装 Ansible 自身部署系统和管理的目标系统
- 模块:封装系统资源或操作的组件,对资源及其属性进行建模;通过执行模块改变目标系统状态;执行后清除
- 变量:代表更新中的动态部分,可用于修改模块行为;可以用户自定义,作为模块一部分
- 清单:由 Ansible 管理的主机列表;支持将主机分类到多个组中;同一个主机可以出现在多个分段中
- 角色:表示在一组主机上配置服务时必须执行的任务集合;封装了在主机上部署服务所需的任务、变量、处理程序和其他相关功能;在 Web 服务器集群中为主机分配角色:Web 服务器,数据库服务器,负载平衡器等
Playbook:Ansible 的主要配置文件;描述了完整的系统部署计划,由一系列任务组成;用 YAML 编写:Yet Another Markup Language
OpenStack Ansible
自动化部署 OpenStack
聚焦于提供多个角色和 playbook,用于部署可扩展的、可理解投入生产的 OpenStack 环境
云控制器
集群:提供高可用性
- 两台或多台服务器的能力聚合就是服务器集群,通过堆积机器即可实现这种聚合
- 向上扩展(垂直扩展):向服务器添加更多的 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
计算节点运行 nova-compute 服务,负责启动和终止虚拟机,通过消息总线监听虚拟机相关请求。
Hypervisor 是计算节点的核心,又称 VMM。Openstack 中虚拟机管理程序能够支持各种 VMM 以及 Docker。
虚拟化技术
Docker 容器
Nova Docker:类似虚拟机实例启动和管理容器生命周期,然而一个应用或服务往往需要容器组构建。
Magnum:
- 使用容器编排引擎(COE)管理连接着的容器组
- COE 节点部署为 Nova 实例
- Heat 用于编排 COE 虚拟基础架构
计算节点 Magnum
Bay 是一组运行 COE 软件的节点,表示一个容器集群。
Pod 是 COE 最基本的部署调度单元,逻辑上对应一个服务实例,运行一组容器,必须有一个作为网络路由。
Nova 相关概念
Nova 中对主机有一个层级划分——高于一台物理主机:
- Region:地理区域
- Availability Zone:对某个地理区域的用户而言的可用区域
- Host Aggregate 类型将物理主机放到一起:按照组成区域
- Host:具体的物理主机
Nova 单元
- 按照计算节点为最小单位的管理视角——Nova 单元
- 所有计算节点都需要与消息总线和数据库服务器通信,随着计算节点增多,使得消息队列和数据库过载,因此产生 Nova 计算单元
由多个计算节点组成一个单元。
- API 单元:作为树根,使用基于消息队列的 RPC 调用和计算节点交互
- 计算单元:每个单元有自己的消息队列和数据库
存储节点
存储节点:Swift
- 数据与其副本作为二进制大对象存储在对象存储服务器上
- 对象存储没有文件存储的层次结构,对象存储在扁平的命名空间——一种特殊的文件系统
- 使用 REST 或 SOAP 等 API 访问对象存储,而不是文件协议
- 不适用于高性能要求以及经常更改的机构化数据,例如数据库
服务器分类:
- 账户服务器:租户、身份认证
- 代理服务器:运行 API
- 容器服务器:“桶”,一人多桶,一桶多对象
- 对象服务器:一个对象只能在一个桶中
存储节点:Cinder
- 为云平台提供统一接口,按需分配的,持久化的块存储服务
- 核心功能是对卷的管理,允许对卷、卷的类型、卷的快照、卷备份进行操作
- 为后端不同的存储设备提供了统一的接口,不同的块设备服务厂商在 Cinder 中实现其驱动支持以与 OpenStack 进行整合
块存储作为虚拟机硬盘使用时,必须先分区、创建文件系统,再挂载到虚拟机文件 系统层次结构中。
网络节点
网络节点-Neutron
使得运营商能够构建和管理具有所有必要元素的完整网络拓扑:网络、子网、路由器、负载均衡器、防火墙和端口。
API 服务器:运行在云控制器上
- 基于插件的架构
- API 服务将请求转发到特定插件,插件通过代理和设备交互或者控制资源
- 提供了基于开源技术的插件和代理参考实现
- 网络节点提供资源实现网络服务:路由、防火墙、负载均衡器和 VPN
核心插件:创建和管理网络、端口和子网
服务插件:实现高阶网络服务,路由、防火墙等
代理:部署在计算和网络节点上,通过消息总线上的 RPC 和服务器交互
- L2 代理:运行在计算和网络基点上,将虚拟机和网络设备连接到二层网络上
- DHCP 代理、L3 代理和 VPN 代理
虚拟网络 VLAN 实现
核心插件处理虚拟网络和端口的创建
虚拟网络的创建方式:
- VLAN 方式:编排连接计算节点和网络节点的物理交换机路径
- 隧道网络:将二层数据包封装在 IP 数据包中;IP 网络是已经封装的网络流量传输者
计算节点上的 L2 代理: