OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。
OpenStack 是一个开源的云计算管理平台项目
,旨在提供基础设施即服务(IaaS)解决方案。它由一系列的云计算工具和服务组成,包括计算、存储、网络和身份验证等,支持公有云、私有云、混合云和边缘计算等场景。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。它由一系列的云计算工具和服务组成,包括计算、存储、网络和身份验证等,支持公有云、私有云、混合云和边缘计算等场景。
OpenStack采用了模块化的架构,每个模块都提供了API接口,用户可以通过这些API接口来使用OpenStack的各种功能。其中,最核心的模块是Nova,它提供了虚拟机实例的创建、启动、停止和删除等功能。除此之外,OpenStack还提供了Swift(对象存储)、Cinder(块存储)、Neutron(网络)、Keystone(身份认证)、Glance(镜像)、Horizon(Web控制台)等多个模块,可以满足不同用户的需求。
OpenStack的自由度很高,用户可以自定义配置各个组件,以适应自己的业务需求。同时,OpenStack也支持多租户和多用户,可以为不同用户提供不同的资源隔离和访问权限,保证了安全性。
OpenStack和KVM虽然都属于云计算技术领域的范畴,但两者有着不同的概念。简单来说,OpenStack是云管理平台,它有许多功能组件;而KVM是一种内建于Linux中的开源虚拟化技术。下面一起来了解下OpenStack和KVM的关系。
云计算原理比较简单,就是把计算资源集中起来,放在网络上,但其实现方式就非常复杂了。这个计算机资源,实际上分为好几种层次:
这三种层次,就是大家经常听到的IaaS、PaaS、SaaS。
目前主流的云计算服务提供商,如亚马逊云科技(AWS)、阿里云、腾讯云、华为云等,提供有以上三个层次的云资源,以满足用户多样化需要。
云计算服务的多样化和多层次性,使得其实现方式比较复杂,所以就有了各种软件和平台(如KVM、Xen、Virtual Box、VMware、OpenStack等),负责对计算资源进行快速调用和集中管理。
OpenStack和KVM的关系
OpenStack是云管理平台,其本身并不提供虚拟化功能,真正的虚拟化能力是由底层的Hypervisor(如KVM、Qemu、Xen等)提供。而OpenStack则可以管理KVM虚拟化环境。
KVM可帮助您将Linux转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。它是目前比较热门的虚拟化方案,例如许多国外VPS主机都是基于KVM虚拟化的。
KVM这样的Hypervisor软件,实际上是提供了一种虚拟化能力,模拟CPU的运行,更为底层。但是它的用户交互并不良好,不方便使用。于是,为了更好地管理虚拟机,就需要OpenStack这样的云管理平台。
Hypervisor
又称虚拟机监视器(英语:virtual machine monitor,缩写为 VMM),是用来建立与执行虚拟机器的软件、固件或硬件。被Hypervisor用来执行一个或多个虚拟机器的电脑称为主体机器(host machine),这些虚拟机器则称为客体机器(guest machine)。hypervisor提供虚拟的作业平台来执行客体操作系统(guest operating systems),负责管理其他客体操作系统的执行阶段;这些客体操作系统,共同分享虚拟化后的硬件资源。
与k8s区别
OpenStack主要关注基础设施层面,而Kubernetes主要关注应用程序层面
OpenStack项目以Python语言编写,整合Tornado 网页服务器、Nebula运算平台,使用Twisted软件框架,并遵循Open Virtualization Format、AMQP、SQLAlchemy等标准,支持的虚拟化技术包括:KVM、Xen、Vmware、LXC等,并支持VirtualBox、QEMU等虚拟机管理软件。
然而OpenStack中所涉及的内容远非单纯的python的代码,想要真正理解并熟练部署维护OpenStack云计算平台,必须有大量的外围知识。OpenStack社区十分强大,自成立以来,各门各派武林高手竞相亮招,不断的贡献各种各样的组件,模块。
OpenStack的5个重要构成部分:
基本架构
Keystone、Dashboard二者与其它OpenStack部分的交互
Nova是OpenStack计算的弹性控制器。OpenStack云实例生命期所需的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、授权及测度。虽然Nova本身并不提供任何虚拟能力,但是它将使用libvirt API与虚拟机的宿主机进行交互。Nova通过Web服务API来对外提供处理接口,而且这些接口与Amazon的Web服务接口是兼容的。
功能及特点
OpenStack计算部件 - Nova弹性云包含以下主要部分:
API服务器提供了云设施与外界交互的接口,它是外界用户对云实施管理的唯一通道。通过使用web服务来调用各种EC2的API,接着API服务器便通过消息队列把请求送达至云内目标设施进行处理。作为对EC2-api的替代,用户也可以使用OpenStack的原生API,我们把它叫做“OpenStack API”。
EC2(elasticity Cloud 2)即弹性云服务器,也称作云服务器、云主机。是一种具备随时扩容能力的新一代云上虚拟机服务。
OpenStack内部在遵循AMQP(高级消息队列协议)的基础上采用消息队列进行通信。Nova对请求应答进行异步调用,当请求接收后便则立即触发一个回调。由于使用了异步通信,不会有用户的动作被长置于等待状态。例如,启动一个实例或上传一份镜像的过程较为耗时,API调用就将等待返回结果而不影响其它操作,在此异步通信起到了很大作用,使整个系统变得更加高效。
运算工作站的主要任务是管理实例的整个生命周期。他们通过消息队列接收请求并执行,从而对实例进行各种操作。在典型实际生产环境下,会架设许多运算工作站,根据调度算法,一个实例可以在可用的任意一台运算工作站上部署。
网络控制器处理主机的网络配置,例如IP地址分配,配置项目VLAN,设定安全群组以及为计算节点配置网络。
卷工作站管理基于LVM的实例卷,它能够为一个实例创建、删除、附加卷,也可以从一个实例中分离卷。卷管理为何如此重要?因为它提供了一种保持实例持续存储的手段,比如当结束一个实例后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是,如果从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即使实例被关闭,数据仍然保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。
因此,为了日后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。
调度器负责把nova-API调用送达给目标。调度器以名为“nova-schedule”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。有很多因素都可以影响调度结果,比如负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。
目前nova调度器使用了几种基本的调度算法:
OpenStack镜像服务器是一套虚拟机镜像发现、注册、检索系统,我们可以将镜像存储到以下任意一种存储中:
S3是Simple Storage Service的缩写,即简单存储服务。亚马逊的名词缩写也都遵循这个习惯,例如Elastic Compute Cloud缩写为EC2等等。S3
功能及特点
Glance构件
Swift为OpenStack提供一种分布式、持续虚拟对象存储,它类似于Amazon Web Service的S3简单存储服务。Swift具有跨节点百级对象的存储能力。Swift内建冗余和失效备援管理,也能够处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常高效。
功能及特点
Swift组件
用户都是通过Swift-API与代理服务器进行交互,代理服务器正是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。
此外,代理服务器也同时处理实体失效而转移时,故障切换的实体重复路由请求。
对象服务器是一种二进制存储,它负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具有扩展文件属性的元数据(xattr)。
注意:xattr格式被Linux中的ext3/4,XFS,Btrfs,JFS和ReiserFS所支持,但是并没有有效测试证明在XFS,JFS,ReiserFS,Reiser4和ZFS下也同样能运行良好。不过,XFS被认为是当前最好的选择。
容器服务器将列出一个容器中的所有对象,默认对象列表将存储为SQLite文件(译者注:也可以修改为MySQL,安装中就是以MySQL为例)。容器服务器也会统计容器中包含的对象数量及容器的存储空间耗费。
账户服务器与容器服务器类似,将列出容器中的对象。
Ring容器记录着Swift中物理存储对象的位置信息,它是真实物理存储位置的实体名的虚拟映射,类似于查找及定位不同集群的实体真实物理位置的索引服务。这里所谓的实体指账户、容器、对象,它们都拥有属于自己的不同的Rings。
Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖自身REST(基于Identity API)系统进行工作,主要对(但不限于)Swift、Glance、Nova等进行认证与授权。事实上,授权通过对动作消息来源者请求的合法性进行鉴定。如下图所示:
Keystone采用两种授权方式,一种基于用户名/密码,另一种基于令牌(Token)。除此之外,Keystone提供以下三种服务:
keystone三种认证方式:UUID、PKI、Fernet
认证服务组件
服务入口:和Nova、Swift和Glance一样,每个OpenStack服务都拥有一个指定的端口和专属的URL,我们称其为入口(endpoints)
区位:在某个数据中心,一个区位具体指定了一处物理位置。在典型的云架构中,如果不是所有的服务都访问分布式数据中心或服务器的话,则也称其为区位。
用户:Keystone授权使用者
译者注:代表一个个体,OpenStack以用户的形式来授权服务给它们。用户拥有证书(credentials),且可能分配给一个或多个租户。经过验证后,会为每个单独的租户提供一个特定的令牌。
服务:总体而言,任何通过Keystone进行连接或管理的组件都被称为服务。举个例子,我们可以称Glance为Keystone的服务。
角色:为了维护安全限定,就云内特定用户可执行的操作而言,该用户关联的角色是非常重要的。
译者注:一个角色是应用于某个租户的使用权限集合,以允许某个指定用户访问或使用特定操作。角色是使用权限的逻辑分组,它使得通用的权限可以简单地分组并绑定到与某个指定租户相关的用户。
租间:租间指的是具有全部服务入口并配有特定成员角色的一个项目。
译者注:一个租间映射到一个Nova的“project-id”,在对象存储中,一个租间可以有多个容器。根据不同的安装方式,一个租间可以代表一个客户、帐号、组织或项目。
Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例
功能及特点
Neutron是 OpenStack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网络虚拟化下的资源管理。Neutron 的设计目标是实现网络即服务(Networking as a Service)
,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。
SDN一般指软件定义网络。 软件定义网络(Software Defined Network,SDN)是由美国斯坦福大学Clean-Slate课题研究组提出的一种新型网络创新架构,是网络虚拟化的一种实现方式。其核心技术OpenFlow通过将网络设备的控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络变得更加智能,为核心网络及应用的创新提供了良好的平台。
功能及特点
二层交换
Neutron支持多种虚拟交换机,一般使用Linux Bridge和Open vSwitch创建传统的VLAN网络,以及基于隧道技术的Overlay网络,如Vx在这里插入代码片LAN和GRE(Linux Bridge 目前只支持 VxLAN)。
三层路由
Neutron从Juno版开始正式加入的DVR(Distributed Virtual Router)服务,它将原本集中在网络节点的部分服务分散到了计算节点上。可以通过namespace中使用ip route或者iptables实现路由或NAT,也可以通过openflow给OpenvSwitch下发流表来实现。
负载均衡
LBaaS 支持多种负载均衡产品和方案,不同的实现以 Plugin 的形式集成到 Neutron,通过HAProxy来实现。
防火墙
Neutron有两种方式来保障instance和网络的安全性,分别是安全组以及防火墙功能,均可以通过iptables来实现,前者是限制进出instance的网络包,后者是进出虚拟路由器的网络包。
参考 Neutron介绍
操作系统得到存储空间一般有两种方式:
- 块存储:挂接裸硬盘,分区,格式化,创建文件系统;或者直接使用裸硬盘存储数据。裸硬盘通常被称为volume(卷)
- 文件系统存储:通过nfs等方式挂载远程的文件系统
Cinder是OpenStack平台中负责提供块存储服务的组件,它的任务就是管理volume从创建到删除的整个生命周期。
Cinder的前身是nova中的nova-volume组件,后来被从nova中剥离出来成为一个独立的OpenStack组件。
cinder组件
cinder-api对外提供REST API、响应请求、调用cinder-volume,是整个cinder组件的门户。具体来说cinder-api的任务就是:
当用户向cinder-api发出请求创建一个volume时,有以下两种场景:
cinder-volume运行在存储节点上,负责管理具体存储设备的存储空间。每个存储节点都会运行cinder-volume服务,多个存储节点便组成了一个存储资源池。
volume provider有开源的也有商业的,如LVM、Huawei、IBM、Dell等商业块存储解决方案。
但是cinder在这里遇见了和neutron同样的问题:市面上有这么多volume provider,是将cinder-volume设计成与volume provider一一对应的形式吗?但这样就要设计很多代码相似度很高的cinder-volume。
在这个问题上,cinder也运用了和neutron同样的思路:
通过驱动架构,cinder-volume为volume provider定义了统一的接口,对于volume provider来说,只要实现这些接口就可以以驱动的形式像插件一样插入OpenStack系统中。
cinder-backup用于将volume备份到其他存储系统上,目前支持的备份存储系统有swift、ceph、IBM Tivoli storage manager(TSM)、glusterFS等,默认是swift。
cinder是块存储,用来给虚拟机挂扩展硬盘,就是将cinder创建出来的卷,挂到虚拟机里。cinder是OpenStack到F版,将之前在Nova中的部分持久性块存储功能(Nova-Volume)分离了出来,独立为新的组件Cinder
块存储具有安全可靠、高并发大吞吐量、低时延、规格丰富、简单易用的特点,适用于文件系统、数据库或者其他需要原始块设备的系统软件或应用。
swift是一个系统,可以上传和下载,里面一般存储的是不经常修改的内容,比如用于存储 VM 镜像、备份和归档以及较小的文件,例如照片和电子邮件消息。更倾向于系统的管理
与传统的文件服务器不同,Swift 是横跨多个系统进行分布的。它会自动存储每个对象的冗余副本,从而最大程度地提高可用性和可扩展性。对象版本控制提供了防止数据意外丢失或覆盖的额外保护
个人认为:cinder更像是本地磁盘,而swift更像是网盘
如何选择使用Swift 还是 Cinder?
答案取决于您的应用程序。如果需要运行商用应用程序,那么很少需要进行这种选择。这些应用程序不可能被编码来使用 Swift API,但您可以轻松挂载一个 Cinder 磁盘,它表现得就像是直接将存储附加到大多数应用程序。
单点故障
Swift 架构是分布式的,可防止所有单点故障和进行水平扩展。
cinder存在单点故障还未解决