1、云计算和虚拟化的区别
虚拟化是一种具体的技术,而云计算是一种通过技术组合实现的服务模式,可以这样比喻:
虚拟化 是制造砖块、钢筋、水泥的技术。它把一堆原始的物理材料(服务器、存储、网络)标准化、模块化。
云计算 是用这些标准化模块,快速构建和交付一栋功能齐全、可按需租用的公寓楼或酒店的完整体系。这栋大楼提供自来水(对象存储)、电力(计算)、燃气(数据库)等各种按需服务。
2、云计算是一个操作系统
云计算扮演了“数据中心资源的管理者、抽象者和服务提供者”的核心角色。 它将庞大、复杂、异构的数据中心硬件,变成一个简单、灵活、可按需取用的“超级电脑”,让用户像使用个人电脑一样,通过简单的界面或指令来使用超大规模的计算力。
3、云计算的定义
计算资源:Bare Metal:物理服务器 Virtual Machines:虚拟机 Containers:容器
存储资源:Object Storage:对象存储 File Storage:文件存储 Block Storage:块存储
OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface.
翻译:openstack是一个云操作系统,控制着一个大规模(数据中心级别)的资源池,资源池包含计算、存储和网络。给管理员提供一个仪表盘去控制资源池里所有资源,最终用户可以通过web页面下发(获得)这些资源。
OpenStack官网:https://www.openstack.org/software/
4、OpenStack的定位
OpenStack只是云计算系统的控制面
Cloud Console控制面板:Cloud Services云服务提供的是一些API,用户需要通过Console界面去控制这些服务
Cloud Services云服务:OpenStack也会提供一些服务,直接使用起来比较复杂,因此会封装一些更方便使用的服务,如华为云的ECS、BMS等
Cloud BSS运营系统:可以用来计费等
Resource Pool资源池:用到的虚拟化技术如KVM、qemu、Xen、华为的FusionCompute
5、OpenStack的设计理念
开放(Open):开源;尽最大可能重用已有开源项目
灵活(Flexible):不使用任何不可替代的私有/商业组件;大量使用插件化方式进行架构设计与实现
可扩展(Scalable):由多个相互独立的项目组成;每个项目包含多个独立服务组件;无中心架构;无状态架构
6、OpenStack的项目分层
圆框:第三方软件,数据库默认使用MySQL;消息队列默认使用RabbitMQ
方框:OpenStack本身的组件
IaaS+服务:为什么叫IaaS+级别的服务,因为IaaS上的这些服务已经类似于PaaS阶段的服务了,因此增加“+”
- Ceilometer:计量服务,输出话单信息,可用于计费
- Heat:编排服务,可一自定义一个装机的组网等配置,以后每次装机都使用这个自定义的配置进行装机
7、OpenStack各主要项目间相互关系
在Dashboard[Horizon]上申请一台云主机流程:Network[Neutron]提供网络,Block Storage[Cinder]提供卷,image[Glance]提供操作系统镜像(image不存储镜像,只存镜像目录,镜像实际存储在Object Storage[Swift]),然后交由Compute[Nova]创建虚拟机。在这个过程中Identity[Keystone]为各个独立的服务提供认证、鉴权服务
8、OpenStack的物理部署示例
9、Nova原理
9.1、什么是Nova
OpenStack中提供计算资源服务的项目
Nova负责:
虚拟机生命周期管理
其他计算资源生命周期管理
Nova不负责:
承载虚拟机的物理主机自身的管理
全面的系统状态监控
Nova是OpenStack事实上最核心的项目
9.2、Nova逻辑架构
API接收简单请求(如开关机)直接去Compute(计算节点)处理请求
API接收复杂请求(如创建云主机)由于需要查询配额、分配资源,需要调度器介入,因此先到Conductor(指令器)下达创建指令,再到Scheduler(调度器)选择空闲的Compute(计算节点),最后Conductor(指令器)发送指令给Compute(计算节点)处理请求
9.3、Nova物理部署示例
nova-api、nova-scheduler(调度器)、nova-conductor(指令器)组件部署在控制节点|OpenStack控制面
nova-compute部署在计算节点|OpenStack数据面
组件间交互使用消息队列通信,持久化信息存储使用MySQL
9.4、Nova中的核心概念和操作
1、层级
地区:地理概念,如东北区、华北区、华东区、华南区等,推荐用户就近获取资源
可用区:一个可用区内使用同一套电力、网络等系统,即处于同一故障域,推荐用户在不同可用区做主备,提高可靠性,即使一个区域断电,也不影响备机继续提供服务
主机组:对用户不可见,将相同规格的主机归入一个主机组,如高cpu的主机、高内存的主机,根据用户业务需要高并发还是高内存调度对应的主机组进行服务
主机:对用户不可见,主机组内部有多台主机
2、名词
名称 | 简介 | 说明 |
Server/Instance | 虚拟机 | Nova管理提供的云服务资源。Nova中最重要的数据对象。 |
Server metadata | 虚拟机元数据 | 通常用于为虚拟机附加必要描述信息,如虚拟机创建时间、创建人。key/value。 |
Flavor | 虚拟机规格模板 | 用于定义一种虚拟机类型,如一种具有2个VCPU、4GB内、40GB本地存储空间的虚拟机。Flavor由系统管理员创建,供普通用户在创建虚拟机时使用。 |
Quota | 资源配额 | 用于指定租户最多能够使用的逻辑资源上限。 |
Hypervisor / node | 节点 | 对于KVM、Xen等虚拟化技术,一个node即对应于一个物理主机。对于vCenter , 一个node对应于一个cluster。 |
Host | 主机 | 对于KVM、Xen等虚拟化技术,一个host即对应于一个物理主机,同时对应于一个node。对于vCenter,一个host对应于—套vCenter部著。 |
Host Aggregate | 主机聚合 | —个HA内包含若干host。一个HA内的物理主机通常具有相同的CPU型号等物理资源特性。 |
Server Group | 虚拟机亲和性/反亲和组 | 同一个亲和性组的虚拟机,在创建时会被调度到相同的物理主机上。同一个反亲和性组的虚拟机,在创建时会被调度到不同的物理主机上,如主备系统。 |
3、Nova的典型操作
分组 | 说明 |
虚拟机生命周期管理 | 虚拟机创建、删除、启动、关机、重启、重建、规格更改、暂停、解除暂停、挂起、继续、迁移、在线迁移、锁定、解锁、疏散,拯救,解拯救,搁置,删除搁置,恢复搁置,备份,虚拟机导出镜像、列表、详细信息、信息查询更改,密码修改 |
卷和快照管理操作 | 本质上是对Cinder API的封装。卷创建、删除、列表、详细信息查询。快照创建、删除、列表、详细信息查询 |
虚拟机卷操作 | 虚拟机挂卷、虚拟机卸卷、虚拟机挂卷列表、虚拟机挂卷详细信息查询 |
虚拟网络操作 | 本质上是对Neutron API的封装。虚拟网络创建、删除、列表、详细信息查询 |
虚拟机虚拟网卡操作 | 虚拟机挂载网卡、虚拟机卸载网卡、虚拟机网卡列表。 |
虚拟机镜像的操作 | 本质上是对Glance API的封装,支持镜像的创建、删除、列表、详细信息查询。 |
虚拟机HA | 自研虚拟机的可靠性操作。可手动触发(FS5.1)。 |
其他资源其他操作 | Flavor,主机组,keypairs , quota等 |
10、Cinder原理
10.1、Cinder是什么
为云平台提供统一接口,按需分配的,持久化的块存储(512字节)服务。
核心功能是对卷的管理,允许对卷、卷的类型、卷的快照、卷备份进行操作。
为后端不同的存储设备提供了统一的接口,不同的块设备服务厂商在Cinder 中实现其驱动支持以与OpenStack进行整合。
#除了块存储还有文件存储、对象存储等类型,Cinder用的是块存储
10.2、Nova的逻辑架构
Cinder-API接收创建卷请求,分给Cinder-Scheduler(调度器)去合适的Cinder-Volume(存储节点)获取卷,于Nova不同的是Cinder没有指令器组件
10.3、Cinder的典型组网(以SAN存储为例)
Cinder-Volume(存储节点)通过SSH/REST协议给后端存储Controller interface(控制面)下发创建卷的指令,将数据面的块存储(LUN)映射给Nova主机去使用,会用到ISCSI/FC协议
10.4、Cinder物理部署示例
内部:Cinder-API、Cinder-Scheduler(调度器)、Cinder-Volume(存储节点)均部署在OpenStack的控制面,互相之间通过消息队列进行交互
外部:Cinder-API通过REST接口走HAproxy(负载均衡)对外提供服务
后端:SAN等就是后端存储
10.5、Cinder的典型操作
功能分类 | 功能 | 描述 | 功能分类 | 功能 | 描述 | 功能分类 | 功能 | 描述 |
|---|---|---|---|---|---|---|---|---|
卷操作 | create | 创建 | 快照操作 | snapshot-create | 创建 | type 操作 | type-create | 创建 |
卷操作 | delete | 删除 | 快照操作 | snapshot-delete | 删除 | type 操作 | type-delete | 删除 |
卷操作 | show | 查询 | 快照操作 | snapshot-list | 列出所有快照 | type 操作 | type-key | 设置 type kV |
卷操作 | rename | 重命名 | 快照操作 | snapshot-rename | 重命名 | type 操作 | type list | 列出所有 type |
卷操作 | upload-to-image | 上传卷到镜像 | 快照操作 | snapshot-reset-state | 重置状态 | type 操作 | extra-specs-list | 显示 type 及其 spec |
卷操作 | extend | 扩容 | 快照操作 | snapshot-show | 查询某个快照 | type 操作 | qos-associate | 设置 QOS 与 type 关联 |
卷操作 | force-delete | 强制删除 | 快照操作 | snapshot-metadata | 设置快照元数据 | type 操作 | qos-create | 创建 qos |
卷操作 | list | 列出所有卷 | 快照操作 | snapshot-metadata-show | 显示快照元数据 | type 操作 | qos-delete | 删除 qos |
卷操作 | migrate | 卷迁移 | 快照操作 | snapshot-metadata-update-all | 更新快照元数据 | type 操作 | qos-disassociate | 解关联 qos 和 type |
卷操作 | reset-state | 强制重置卷状态 | tran 操作 | transfer-accept | 接受卷 transfer | type 操作 | qos-disassociate-all | 解关联 qos 的所有关联 |
卷操作 | rate-limits | 限速 | tran 操作 | transfer-create | 创建卷 transfer | type 操作 | qos-get-association | 查询 qos 的所有关联 |
卷操作 | readonly-mode update | 只读模式设置 | tran 操作 | transfer-delete | 删除卷 transfer | type 操作 | qos-key | 设置 Qos KV |
卷操作 | retype | 更新卷 Type 类型 | tran 操作 | transfer-list | 列出所有卷 transfer | type 操作 | qos-list | 列出所有 qos |
卷操作 | set-bootable | 设置启动卷 | tran 操作 | transfer-show | 查询某个卷 transfer | type 操作 | qos-show | 查询某个 qos |
卷操作 | manage | 导入卷 | 加密操作 | encryption-type-create | 为 type 增加加密 | 配额操作 | quota-defaults | 查询租户缺省配额 |
卷操作 | unmanage | 导出卷 | 加密操作 | encryption-type-delete | 删除加密 | 配额操作 | quota-show | 查询租户当前配额 |
卷操作 | metadata | 设置卷元数据 | 加密操作 | encryption-type list | 列出所有加密 | 配额操作 | quota-update | 更新租户配额 |
卷操作 | metadata-show | 显示卷元数据 | 加密操作 | encryption-type-show | 查询某个加密 | 配额操作 | quota-usage | 显示租户配额使用情况 |
卷操作 | metadata-update-all | 更新卷元数据 | 一致性组 | cgsnapshot-create | 创建一致性组快照 | 配额操作 | absolute-limits | 显示所有租户绝对限额和使用情况 |
备份操作 | backup-create | 创建 | 一致性组 | cgsnapshot-delete | 删除一致性组快照 | Cinder 整体 | availability-zone-list | 列出所有 az |
备份操作 | backup-delete | 删除 | 一致性组 | cgsnapshot-list | 列出所有一致性组快照 | Cinder 整体 | endpoints | 列出 Cinder 所有接口 |
备份操作 | backup-list | 列出所有备份 | 一致性组 | cgsnapshot-show | 查询一致性组详细快照 | Cinder 整体 | list-extensions | 所有扩展 api |
备份操作 | backup-restore | 恢复备份 | 一致性组 | consisgroup-create | 创建一致性组 | Cinder 整体 | credentials | 所有用户信息 |
备份操作 | backup-show | 查询 | 一致性组 | consisgroup-delete | 删除一致性组 | service 操作 | service-disable | 去激活 |
备份操作 | backup-export | 导出卷 | 一致性组 | consisgroup-list | 列出所有一致性组 | service 操作 | service-enable | 激活 |
备份操作 | backup-export | 导入卷 | 一致性组 | consisgroup-show | 查询一致性组详细 | service 操作 | service-list | 所有 service |
复制 | replication-promote | 对备卷升主 | ||||||
复制 | replication-reenable | 重新启动复制 |
11、Neutron原理
11.1、Neutron是什么
Neutron是在OpenStack中是提供网络连接服务的
11.2、Neutron的逻辑架构
#Neutron-Server -> Core Plugin -> 各种Advanced Service Plugin:L3 Service Plugin、lB Service Plugin、Firewall、VPN
#各种Agent:L2 ( ovs-agent )、L3 Agent、DHCP Agent、MetaData Agent
L2 Agent:二层网络服务,提供基础服务,部署在所有计算节点
L3 Agent:三层网络服务,提供IP、交换、路由服务,根据业务情况部署在网络节点或者计算节点。例如华为云部署在计算节点
DHCP Agent:DHCP服务
Adv Services:高级网络服务,如负载均衡
neutron组件之间通过消息队列通信
11.3、Neutron网络虚拟化实现原理
在二层网络中(即就是虚拟机之间互相通信的网络)Vlan100和Vlan200是两个不同的网络,因此在三层网络这里,使用Vlan100和使用Vlan200的虚拟机即使IP在同一网段也是不能通信的,做到了虚拟机间网络隔离。
绿色的VM是Vlan 100网络的虚拟机,黄色的VM是Vlan 200网络的虚拟机。在服务者视图中可以看到两个绿色的VM并不在一个物理主机上,Neutron通过一系列的网络转换功能将两个绿色的VM网络打通。
11.4、Neutron物理部署示例
Neutron openvswitch-agent部署在每一个计算节点上,为虚拟机提供网络连接功能
Neutron Server在实际应用中一般会部署到控制节点(Neutron ML2 Plugin也是Neutron Server的一部分),网络节点只保留Neutron metadata-agent、Neutron L3/dhcp-agent
Neutron Server下发网络配置的时候会通过管理平面网络和Neutron openvswitch-agent进行通信,然后下发相应配置。当Nova Compute创建的虚拟机执行业务通信的时候会在数据平面网络进行
11.5、Neutron的典型操作
Object | Operation | Method | URI |
|---|---|---|---|
Network | List | GET | /v2.0/networks |
Network | Create | POST | /v2.0/networks |
Network | Show | GET | /v2.0/networks/{network_id} |
Network | Update | PUT | /v2.0/networks/{network_id} |
Network | Delete | DELETE | /v2.0/networks/{network_id} |
Subnet | List | GET | /v2.0/subnets |
Subnet | Create | POST | /v2.0/subnets |
Subnet | Show | GET | /v2.0/subnets/{subnet_id} |
Subnet | Update | PUT | /v2.0/subnets/{subnet_id} |
Subnet | Delete | DELETE | /v2.0/subnets/{subnet_id} |
Port | List | GET | /v2.0/ports |
Port | Create | POST | /v2.0/ports |
Port | Show | GET | /v2.0/ports/{port_id} |
Port | Update | PUT | /v2.0/ports/{port_id} |
Port | Delete | DELETE | /v2.0/ports/{port_id} |
Security-group | List | GET | /v2.0/security-groups |
Security-group | Create | POST | /v2.0/security-groups |
Security-group | Show | GET | /v2.0/security-groups/{security-groups_id} |
Security-group | Update | PUT | /v2.0/security-groups/{security-groups_id} |
Security-group | Delete | DELETE | /v2.0/security-groups/{security-groups_id} |