第一章

认识OpenStack (主要为理论)

1.云计算的起源

​ 早在2006年3月,亚马逊公司首先提出弹性计算云服务。2006年8月9日,谷歌公司首席执行官埃里克·施密特(Eric Schmidt)在搜索引擎大会(SES San Jose 2006)上首次提出“云计算”(Cloud Computing)的概念。从那时候起,云计算开始受到关注,这算是云计算最正统的诞生记。

​ 云计算作为一种计算技术和服务理念,有着极其深厚的技术背景,谷歌作为搜索公司,首创这一概念,有着很大的必然性。随着众多的互联网厂商的兴起,各家互联网公司在对云计算的投入和研发不断加深,陆续形成了完整的云计算技术架构、硬件网络、服务器方面逐步向数据中心、全球网络连接、软件系统等方面发展,完善了操作系统、文件系统、并行计算架构、并行计算数据库和开发工具等云计算系统关键部件。

​ 云计算经历了集中时代向网络时代转变,最终向分布式时代转换,在分布式基础之上形成了云时代

如图:

2 . 云计算基本概念

1、 云计算定义

​ 计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储和应用软件等),这些资源能够被快速提供,只需投入很少的管理工作或与服务供应商进行很少的交互。

2、云计算的五特征
按需自助服务:消费者可以单方面部署资源。
通过互联网获取:资源可以通过互联网获取,并可以通过标准方式访问
资源池化:供应商的资源被池化,以便以多用户租用模式被不同客户使用。
快速伸缩:资源可以弹性地部署和释放,有时是自动化的,以便能够迅速地按需扩大和缩小规模。
可计量:云计算系统通过使用一些与服务种类(存储、计算、带宽、激活的用户账号)对应的抽象信息提供计量能力,有时是自动化的,以便能够迅速地按需扩大和缩小规模。
3、云计算的服务模型SPI

云计算服务模型SPI由三个组成

IaaS:基础设施即服务
PaaS:平台即服务
SaaS:软件即服务

详解:

IaaS:消费者使用"基础计算资源”。资源服务包括处理能力、存储空间、网络组件或中间件服务
PaaS:消费者使用主机操作应用程序。消费者掌控运作应用程序的环境(也拥有主机部分掌控权),但并不掌控操作系统、硬件或网络基础架构。平台通常是应用程序基础架构。
SaaS:消费者使用应用程序,但并不掌控操作系统、硬件或网络基础架构。它是一种服务观念的基础,软件服务供应商以租赁的概念提供客户服务,而非购买,比较常见的模式是提供一组账号密码。

简单理解:

iaas:相当于毛坯房、装修可以自己随意发挥
paas:相当于你提方案他给你做
saas:精装房 直接拎包入住  一切运营商给你准备好直接使用
4、云计算的四大部署类型。(只需记住有几个云服务类型记住其主要作用)
     私有云:云计算基础设施由一个单一的组织部署和独占使用,可由该组织、第三方或两者的组合来拥有和管理  社区云:云计算基础设施由一些具有共有关注点的组织形成的社区中的用户部署和使用,可由一个或多个社区中的组织、第三方或两者的组合来拥有和管理、运营。公有云:云计算基础设施被部署给广泛的公众开放地使用。混合云:云计算基础设施是由两种或两种以上的云(私有、社区或公共)组成,每种云仍然保持独立,但用标准的或专有的技术将它们组合起来,具有数据和应用程序的可移植性。

3.云计算平台分类(拓展)

(1)云计算平台分类

​ 从云计算平台的技术应用看,云计算平台可以划分为3类:以数据存储为主的存储型云平台,以数据处理为主的计算型云平台以及计算和数据存储处理兼顾的综合云计算平台。

​ 按构建云计算平台过程是否收费来划分,云计算平台可以划分为2类:开源云计算平台和商业化云计算平台。

(http://baike.baidu.com/view/4403591.htm)等)。

OpenStack定义:

​ OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施,即服务(IaaS)的解决方案,每个服务提供API以进行集成

国内的云计算平台有:

阿里云、盛大云、新浪云、华为云、百度云、等

国外的云计算平台有:

微软、Google、IBM、Oracle和Amazon等

虚拟化定义:

​ 虚拟化是一个广义的术语,是指计算元件在虚拟而不是真实的环境中运行,是一个为了简化管理,优化资源的解决方案。

虚拟化前后对比:

虚拟化前:一台主机对应一个操作系统。后台多个应用程序会对特定的资源进行争抢,存在相互冲突的风险

虚拟化后:一台主机对应可以虚拟出多个操作系统。独立的操作系统和应用拥有独立的CPU、内存和I/O资源,相互隔离

理解:

虚拟化可以使利用率最大化

虚拟化的分类:

虚拟化分类:桌面虚拟化、应用虚拟化、服务器虚拟化、网络虚拟化和存储虚拟化

桌面虚拟化:将原本在本地电脑安装的桌面系统统一在后端数据中心进行部署和管理
应用虚拟化:将原本安装在本地电脑操作系统上的应用程序统一运行于后台终端服务器上。
服务器虚拟:将服务器物理资源如CPU、内存、磁盘和I/O等抽象成逻辑资源,形成动态管理的“资源池”,并创建合适的虚拟服务器,实现服务器资源整合,提升资源利用率,最终更好地适应IT业务的变化。

OpenStack的核心项目:

Horizon:监控台服务
Neutron:网络服务
Cinder:卷存储服务
Nova:计算即服务
Cellometer:监控服务
Glance:镜像存储
Heat:编配服务
Swift:对象存储
Keystone:认证服务

OpenStack各个组件之间耦合是非常松的

第二章

openstack环境的搭建##

配置环境

关闭firewall和seklinux
关闭防火墙Firewalld,如下:

systemctl stop firewalld         #关闭Firewalld防火墙服务
systemctl disable firewalld         #关闭Firewalld防火墙开机自启服务
关闭selinux配置文件
配置Selinux,修改配置文件/etc/selinux/config修改完配置文件,需要重启后生效,可以使用setenforce 0命令临时生效
#This file controls the state of SELinux on the system.
#SELINUX=permissive
#   enforcing - SELinux security policy is enforced.
#   permissive - SELinux prints warnings instead of enforcing.
#   disabled - No SELinux policy is loaded.
SELINUX=disabled   #由enforcing改为disabled
#SELINUXTYPE= can take one of three two values:#   targeted - Targeted processes are protected,#   minimum - Modification of targeted policy. Only selected processes are protected.#   mls - Multi Level Security protection.#SELINUXTYPE=targeted

安装虚拟机
虚拟机主机名:
控制节点(controller)
实例节点(compute)

配置主机名
配置控制节点主机名为controller: hostnamectl set-hostname controller
配置实例节点主机名为compute: hostnamectl set-hostname compute
查看是否配置成功:hostnamectl
改名命令执行后可以使用
“su” 来直接生效

配置网卡 (路径:/etc/sysconfig/network-scripts/)

第一块网卡  (仅主机模式)          TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=0839de04-4639-4d61-82b8-a160f59ee158
DEVICE=eno16777736
ONBOOT=yes
IPADDR=192.168.244.10    #IP根据自己的为准
NETMASK=255.255.255.0
#GATEWAY=192.168.244.2   #在配置仅主机的网卡时网关和域名解析可以不用
#DNS1=114.114.114.114第二块网卡 (nat模式)
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno33554984    #以自己的名字为准
#UUID=0839de04-4639-4d61-82b8-a160f59ee158
DEVICE=eno33554984
ONBOOT=yes
IPADDR=192.168.128.20
NETMASK=255.255.255.0
GATEWAY=192.168.128.2
DNS1=114.114.114.114

配置域名解析

配置文件在/etc/hosts
在文件的里面添加      #注:是第一块网卡的IP
控制节点的IP地址  controller
实例节点的IP地址  compute

如图:

配置本地yum

添加一块CD/DVD使用XianDian-IaaS-v2.4.iso

在mnt下创建两个子目录centos和iaas
mkdir -p centos iaas
分别将sr0挂在到iaas
mount /dev/sr0 /mnt/iaas
sr1挂载到centos
mount /dev/sr1 /mnt/centos

#1.在根目录下创建一个openstack目录
mkdir /openstack
#2.然后在openstack下创建两个子目录centos、iaas
mkdir -p centos iaas
#3.之后将mnt下centos里面的Packages、repodata拷贝的openstack下的centos
cp -r Packages /openstack/centos
cp -r repodata /openstack/centos
#再将iaas里的iaas-repo拷贝到openstack的iaas里
cp -r iaas-repo /openstack/iaas
#1.进入yum源仓/etc/yum.repos.d
cd /etc/yum.repos.d
#2.将其中的文件全部删除也可以创建一个临时目录将文件全部移动到里面
rm -rf * 或 mkdir lingshi  mv Centos-* lingshi
#3.创建一个以.repo为后缀的文件
vi ftp.repo
#进入编辑
[centos]
name=centos
baseurl=file:///opensatck/centos/
gpgcheck=0
enabled=1[iaas]
name=iaas
baseurl=file:///opensatck/iaas/iaas-repo
gpgcheck=0
enabled=1

使用yum clean all 清除yum缓存
yum makecache 创建缓存

控制和实例节点

1.添加一块硬盘分两个区

安装 iaas-xiandian 安装包。

yum install iaas-xiandian -y

编辑文件/etc/xiandian/openrc.sh(配置环境变量)

HOST_IP=192.168.244.10   #第一块网卡ip
HOST_NAME=controller
HOST_IP_NODE=192.168.244.11   #实例节点第一块网卡ip
HOST_NAME_NODE=compute
RABBIT_USER=openstack
RABBIT_PASS=000000
DB_PASS=000000
DOMAIN_NAME=demo(自定义)
ADMIN_PASS=000000
DEMO_PASS=000000
KEYSTONE_DBPASS=000000
GLANCE_DBPASS=000000
GLANCE_PASS=000000
NOVA_DBPASS=000000
NOVA_PASS=000000
NEUTRON_DBPASS=000000
NEUTRON_PASS=000000
METADATA_SECRET=000000
INTERFACE_NAME=eno33554960(第二块网卡)
CINDER_DBPASS=000000
CINDER_PASS=000000
TROVE_DBPASS=000000
TROVE_PASS=000000
BLOCK_DISK=sdb1(空白分区名)
SWIFT_PASS=000000
OBJECT_DISK=sdb2(空白分区名)
STORAGE_LOCAL_NET_IP=192.168.244.11  #实例ip
HEAT_DBPASS=000000
HEAT_PASS=000000
CEILOMETER_DBPASS=000000
CEILOMETER_PASS=000000
AODH_DBPASS=000000
AODH_PASS=000000

控制节点和实例节点

1.执行脚本iaas-pre-host.sh进行安装

iaas-pre-host.sh

2.重启设备
完成配置后,同时重启两个节点服务器。

reboot

3.部署脚本安装平台
①在控制节点执行脚本 iaas-install-mysql.sh 进行数据库及消息列表服务安装。

iaas-install-mysql.sh

②在控制节点执行脚本 iaas-install-keystone.sh 进行 keystone 认证服务安装。

iaas-install-keystone.sh

③在控制节点执行脚本 iaas-install-glance.sh 进行 glance 镜像服务安装。

iaas-install-glance.sh

④在控制节点执行脚本 iaas-install-nova-controller.sh 进行 nova 计算服务安装。

iaas-install-nova-controller.sh

在实例节点执行脚本 iaas-install-nova-compute.sh 进行 nova 计算服务安装。

iaas-install-nova-compute.sh

⑤在控制节点执行脚本 iaas-install-neutron-controller.sh 进行 neutron 网络服务安装。

iaas-install-neutron-controller.sh

在实例节点执行脚本 iaas-install-neutron -compute.sh 进行 neutron 网络服务安装。

iaas-install-neutron-compute.sh

⑧在控制节点执行脚本 iaas-install-neutron-controller-gre.sh 进行 vlan 网络安装配置。

iaas-install-neutron-controller-gre.sh
#因为脚本里面有一个服务错了手动执行命令
systemctl eanble neutron-lbaas-agent
#也可以find查找脚本自己修改

在实例节点执行脚本 iaas-install-neutron-compute-gre.sh 进行 vlan 网络安装配

 iaas-install-neutron-compute-gre.sh

⑨在控制节点执行脚本 iaas-install-dashboard.sh 进行 dashboard 服务安装。

iaas-install-dshabord.sh

⑩在控制节点执行脚本 iaas-install-cinder-controller.sh 进行 cinder 块存储服务安装。

iaas-install-cinder-controller.sh

在实例节点执行脚本 iaas-install-cinder-compute.sh 进行 cinder 块存储服务安装。

iaas-install-cinder-compute.sh

⑪在控制节点执行脚本 iaas-install-swift-controller.sh 进行 swift 对象存储服务安装。

iaas-install-swift-controller.sh

在实例节点执行脚本 iaas-install-swift-compute.sh 进行 swift 对象存储服务安装。

 iaas-install-swift-compute.sh

⑫在控制节点执行脚本 iaas-install-heat.sh 进行 heat 编配服务安装。

iaas-install-heat.sh

⑬在控制节点执行脚本 iaas-install-ceilometer-controller.sh 进行 ceilometer 监控服务安
装。

iaas-install-ceilometer-controller.sh

在实例节点执行脚本 iaas-install-ceilometer-compute.sh 进行 ceilometer 监控服务安
装。

iaas-install-ceilometer-compute.sh

⑭在控制节点执行脚本 iaas-install-alarm.sh 进行 alarm 告警服务安装。

iaas-install-alarm.sh

2.验证安装基础工作完成
上述操作完成后,打开网页 http://192.168.244.10/dashboard 进行验证服务dashboard 登录界面,以及管理员账号和密码登录后,看到图 2-8 dashboard 管理界面,表示
安装基础工作正确完成。

第三章

认证服务

在 OpenStack 框架中,Keystone(OpenStack Identity Service)的功能是负责验证身份、
校验服务规则和发布服务令牌的,它实现了 OpenStack 的 Identity API。Keystone 可分解为
两个功能,即权限管理和服务目录。权限管理主要用于用户的管理授权。服务目录,类似
一个服务总线,或者说是整个 OpenStack 框架的注册表。认证模块提供 API 服务、token 令
牌机制、服务目录、规则和认证发布等功能

3.1.相关概念(理论)

1.  认证(Authentication)。
认证是确认允许一个用户访问的进程。
2.  证书(Credentials)。
用于确认用户身份的数据。
例如,用户名、密码或者 API key,或认证服务提供的认证令牌。
3. 令牌(Token)。
通常指的是一串比特值或者字符串,用来作为访问资源的记号。
Token(令牌统一用词)
4.  项目(project)。
project 即项目,早期版本又称为 project,它是各个服务中的一些可以访问的资源集合。
5. 用户(User)。
使用服务的用户,可以是人、服务或系统使用 OpenStack 相关服务的一个组织。
6. 角色(Role)。
Role 即角色,Role 代表一组用户可以访问的资源权限,例如 Nova 中的虚拟机、Glance
中的镜像。Users 可以被添加到任意一个全局的 role 或项目内的 role 中。

2.认证服务流程

用户请求云主机的流程涉及认证 Keystone 服务、计算 Nova 服务、镜像 Glance 服务,
在服务流程中,令牌(Token)作为流程认证传递,具体服务申请认证机制流程,
拓展:
安装 Keystone 服务之后,产生的主配置文件存放在/etc/keystone 目录中,名为keystone.conf,在配置文件中需要配置初始的 Token 值和数据库的连接地址。
Keystone 服务安装完毕,可以通过请求身份令牌来验证服务,具体命令如下。

$ openstack --os-project-name admin --os-domain-name demo --os-username
admin --os-password 000000 --os-auth-url http://controller:35357/v3 token
issue
//以 admin 用户访问 http://controller:35357/v3 地址获取 token 值

3.2管理认证用户

OpenStack 的用户(user)包括云平台使用者、服务以及系统。用户通过认证登录系统并
调用资源。为方便管理,用户被分配到一个或多个项目(project),项目是用户的集合。为
给用户分配不同的权限,Keystone 设置了角色(Role),角色是代表用户可以访问的资源等
权限。用户可以被添加到任意一个全局的或项目内的角色中。在全局的角色中,用户的角
色权限作用于所有的用户,即可以对所有的用户执行角色规定的权限;项目内的角色,用户仅能在当前项目内执行角色规定的权限,下面介绍几种常见操作。

3.2.1 创建用户。
创建一个名称为“alice”账户,密码为“mypassword123”,邮箱为“alice@example.com”。命令如下。

执行命令之前需要执行一个脚本:
source /etc/keystone/admin-openrc.sh
命令:
openstack user create --password mypassword123 --email alice@example.com --domain  demo alice

执行结果

+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 72f29fa139ee451fa7d2587c3633cb0e |
| email     | alice@example.com                |
| enabled   | True                             |
| id        | 42b61cfc805c41a1b80c8811efa07e15 |
| name      | alice                            |
+-----------+----------------------------------+

命令格式:

openstack user create [--domain <domain>]  #指定域名
[--password <password>]  #指定密码
[--email <email-address>]   #指定邮箱
[--enable | --disable]   #是否开机自启动
<name>   #名称
#注:中括号是选填项(如果要加中括号中的参数,其中的尖括号也是必填项)、尖括号是必填项

(2)创建项目
一个项目就是一个项目、团队或组织,当请求 OpenStack 服务时,你必须定义一个项
目。
创建一个名为“acme”项目

openstack project create --domain demo acme

执行结果

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | 72f29fa139ee451fa7d2587c3633cb0e |
| enabled     | True                             |
| id          | 1290e646c91245b69a5d9b443986a424 |
| is_domain   | False                            |
| name        | acme                             |
| parent_id   | 72f29fa139ee451fa7d2587c3633cb0e |
+-------------+----------------------------------+

格式:

openstack project create [--domain <domain>] #指定域
[--description <description>]  #描述
[--enable | --disable] #是否开机自启动
<project-name>  #项目名

(3)创建角色
角色限定了用户的操作权限。例如,创建一个角色“compute-user”

openstack role create compute-user

执行结果

+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 4df00894d74045c5b3587d87be0b422a |
| name      | compute-user                     |
+-----------+----------------------------------+

格式

openstack role create <name>

(4)绑定用户和项目权限。
添加的用户需要分配一定的权限,这就需要把用户关联绑定到对应的项目和角色。例
如,给用户“alice”分配“acme”项目下的“compute-user”角色,命令如下。

$ openstack role add --user alice --project acme compute-user

格式

openstack role add --user <user> --project <project> <role>

实例

公司有 100 名员工,其中 50 名为项目研发部(研发环境),45 名为业务部(办公环境),
5 人 IT 工程部(运维环境)。
根据企业人员部门分配,现构建 3 个项目,100 个用户,管理人员拥有管理员权限,其余人员拥有普通用户权限
研发部门 RD_Dept rduser001 - rduser050 普通用户
业务部门 BS_Dept bsuser001 - bsuser045 普通用户
IT 部门 IT_Dept ituser001 - ituser005 普通用户和管理员用户

注:图形化就是点点点,没啥意思就不截图了
1、通过 命令行为业务部创建一个名为 BS_Dept 的项目。

openstack project create "BS_Dept" --domain demo --description 业务部门 #创建业务部门 BS_Dept

结果:

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | 业务部门                         |
| domain_id   | 72f29fa139ee451fa7d2587c3633cb0e |
| enabled     | True                             |
| id          | 6766a7800aac459ebafe19c6eb1b0772 |
| is_domain   | False                            |
| name        | BS_Dept                          |
| parent_id   | 72f29fa139ee451fa7d2587c3633cb0e |
+-------------+----------------------------------+

通 过 脚 本 为 工 程 部 创 建 一个 名 为 IT_Dept 的 项 目

 Keystone-manage-project.sh
./Keystone-manage-project.sh
或
/bin/bash Keystone-manage-project.sh

执行结果

Please Input new Project name : eg (openstack)
IT_Dept
Please Input Project description : eg (openstack description)
IT 工程部门
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | 72f29fa139ee451fa7d2587c3633cb0e |
| enabled     | True                             |
| id          | 2a228c19f893489b950db856679d4d3c |
| is_domain   | False                            |
| name        | IT_Dept                          |
| parent_id   | 72f29fa139ee451fa7d2587c3633cb0e |
+-------------+----------------------------------+
Keystone All Project List
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 1290e646c91245b69a5d9b443986a424 | acme    |
| 14313dd59cc14fd2ac3b477af4b1a0c6 | admin   |
| 2a228c19f893489b950db856679d4d3c | IT_Dept |
| 37151b6e9d3c451da8b7c11a241a0d25 | service |
| 55cd6e90315c43bc99e91dbe7a97fbb0 | RD_Dept |
| 6766a7800aac459ebafe19c6eb1b0772 | BS_Dept |
| 7ddfa8ea9f5946f68f4721d0e2c12e9c | demo    |
+----------------------------------+---------+

通过 Shell 命令行为项目研发部创建用户 rduser001,密码为 cloudpasswd。

openstack user create rduser001 --password cloudpasswd --domain demo--email rduser001@example.com

结果:

+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 72f29fa139ee451fa7d2587c3633cb0e |
| email     | rduser001@example.com            |
| enabled   | True                             |
| id        | 7ec265c391f247aa9274c4c060daa9cf |
| name      | rduser001                        |
+-----------+----------------------------------+

提前创建角色_member_
脚本执行:

Keystone-manage-user.sh

执行结果:
研发部

Please Input New User Name : eg (username)
rduser
Please Input User Password: eg (000000)
cloudpasswd
Please Input User Email Address,If don't need  press enter: eg (openstack.com)
example.com
Please Input User   Beginning And End  Number: eg (001-002)
002-050
Please enter the User belong Roles Name, Press enter for '_member_' role by default: eg (admin)
_member_
Please Input User belong Project Name: eg (projectname)
RD_Dept
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 72f29fa139ee451fa7d2587c3633cb0e |
| email     | rduser002@example.com            |
| enabled   | True                             |
| id        | 7c33a0ee28364e09b2feff1cb5fb3b03 |
| name      | rduser002                        |
+-----------+----------------------------------+

业务部门

Please Input New User Name : eg (username)
bsuser
Please Input User Password: eg (000000)
cloudpasswd
Please Input User Email Address,If don't need  press enter: eg (openstack.com)
example.com
Please Input User   Beginning And End  Number: eg (001-002)
001-045
Please enter the User belong Roles Name, Press enter for '_member_' role by default: eg (admin)
_member_
Please Input User belong Project Name: eg (projectname)
BS_Dept
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 72f29fa139ee451fa7d2587c3633cb0e |
| email     | bsuser001@example.com            |
| enabled   | True                             |
| id        | 5d345d51b67f4f2fbbcedc4af55954dd |
| name      | bsuser001                        |
+-----------+----------------------------------+

IT部门

Please Input New User Name : eg (username)
ituser
Please Input User Password: eg (000000)
cloudpasswd
Please Input User Email Address,If don't need  press enter: eg (openstack.com)
example.com
Please Input User   Beginning And End  Number: eg (001-002)
001-005
Please enter the User belong Roles Name, Press enter for '_member_' role by default: eg (admin)
_member_
Please Input User belong Project Name: eg (projectname)
IT_Dept
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 72f29fa139ee451fa7d2587c3633cb0e |
| email     | ituser001@example.com            |
| enabled   | True                             |
| id        | 019fe4ba53bc46138da4ee26c04ac5d4 |
| name      | ituser001                        |
+-----------+----------------------------------+

② 通过 Shell 命令行将项目研发部用户 rduser001 绑定普通用户权限。
命令:

openstack role add --user rduser002 --project RD_Dept _member_
openstack role list --user rduser002 --project RD_Dept

脚本执行:

Keystone-manage-add-role.sh

结果:

Please Enter The User Name
ituser
Please Input User  Beginning And End  Number: eg (001-002)
001-005
Please Enter the Project Name
IT_Dept
Please Enter the  Role Name
admin
Keystone user ituser001 Project IT_Dept role list
+---------------+---------------+-------+---------------+--------+-----------+
| Role          | User          | Group | Project       | Domain | Inherited |
+---------------+---------------+-------+---------------+--------+-----------+
| 2af6d281f3bb4 | 019fe4ba53bc4 |       | 2a228c19f8934 |        | False     |
| 979b48be0ee0d | 6138da4ee26c0 |       | 89b950db85667 |        |           |
| a157c3        | 4ac5d4        |       | 9d4d3c        |        |           |
| 9fe2ff9ee4384 | 019fe4ba53bc4 |       | 2a228c19f8934 |        | False     |
| b1894a90878d3 | 6138da4ee26c0 |       | 89b950db85667 |        |           |
| e92bab        | 4ac5d4        |       | 9d4d3c        |        |           |
+---------------+---------------+-------+---------------+--------+-----------+

第三章结束

第四章 基础控制服务

消息队列服务(理论部分)

1.消息队列

AMQP是一种标准化的消息中间件协议,全称为高级消息队列协议
(advanced message queuing protocol)。
可以让不同语言、不同系统的应用互相通信,
并提供一个简单统一的模型和编程接口。
#当需要和其他系统通信时,只要承认AMQP协议即可

2.Rabbitmq消息服务

RabbitMQ是一个基于AMQP协议的高级消息中间件,
它主要的技术特点是可用性,安全性,集群,多协议支持,
可视化的客户端,活跃的社区。

1.了解消息队列AMQP
消息队列AMQP服务架构
AMQP中有3个重要的角色,

  Publisher:消息的发出者。Exchange:消息的传递者。Consumer:消息的接收者。
用户可以模拟写信作为其工作的方式来说明。为了传递给收件人,首先需要用信封把信的内容装起来,然后在信封上写好收件人的信息,再把信放到邮筒里;后面邮局会拿到信然后根据信封上的收件人信息来看最终把信给谁。写信的人就是那个Publisher,邮局就是Exchange,收件人就是Consumer。
不同的Consumer会创建不同的Queue(消息队列),然后将对应的Exchange绑定到Queue上。在消息的传递过程中,Publisher不会直接的把Message放到Queue中,也不管Message如何分发。Publisher只管准备好消息,然后交给Exchange,而Exchange做的事情也很简单,一手从Publisher拿到消息,然后就把消息放入Queue中。
对于Exchange,是放到某一个Queue中,还是放到多个Queue?实际上,在Publisher发出消息的时候会附加一个条件,Exchange会根据这个条件来决定发送的方法,这个条件就是routingkey。


2.了解Rabbitmq消息服务


Rabbitmq有如下几种命令行工具。

1.rabbitmqctl:用来管理RabbitMQ中间件的命令行工具.它通过连接中间件节点来执                行所有操作。
2.rabbitmq-plugins:rabbitmq-plugins 是管理RabbitMQ broker插件的命令行。
3.OpenStack的消息服务
OpenStack采用AMQP作为它的消息传递技术。AMQP的控制端(Broker),不管是RabbitMQ或者Qpid,它的作用是允许任何两个相同组件以松散耦合的方式进行交流。
(1)客户端和服务端之间的解耦
(2)客户机和服务之间不需要同时使用消息调用,只需要其中一端发送消息调用指令。
(3)随机平衡的远程调用会随机将运行的指令发送到一个节点。

下面以计算服务Nova为例,讲解OpenStack组件使用消息服务的原理和机制。Nova中的每个组件都会连接消息服务器,一个组件可能是一个消息发送者(如API、Scheduler),也可能是一个消息接收者(如compute、volume、network)。
发送消息有2种方式:同步调用rpc.call和异步调用rpc.cast。Nova实现了RPC(包括请求+响应的rpc.call和只有请求的rpc.cast),Nova通过AMQP提供一个代理类,这个类提供了函数调用的消息数据编码和数据解码,每个Nova服务(如计算)在初始化时创建两个队列,一个接受消息路由的关键节点类型产生对应的节点编号”(例如compute.hostname),另一个接受消息路由键返回的节点类型编号生成通用的“节点类型”(例如计算)。前者是专门用来当Nova-API需要重定向命令像terminate(终止)一个实例的在特定的节点,在这种情况下,只有主机的计算节点的虚拟机监控程才能杀死序正在运行的虚拟机实例。API作为消费者当RPC调用请求/响应,否则只是充当发布。

4.Nova RPC映射
当一个实例在OpenStack云部署和共享,每个组件在Nova连接到messagebroker,根据其个性,如计算节点或网络节点,可以使用队列作为调用者(如API或调度器)或一个运行组件(如计算或网络)。调用器和组件不实际存在于Nova对象模型,但是在这个例子中使用它们作为一个抽象对象。一个调用程序是一个组件,使用rpc发送消息队列系统,接收消息的队列系统,并相应地回复rpc调用操作。

(1)Topic Publisher:该对象在进行rpc.call或rpc.cast调用时创建,每个对象都会连接同一个topic类型的交换器,消息发送完毕后对象被回收。
(2)Direct Publisher:该对象在进行rpc.call调用时创建,用于向消息发送者返回响应。该对象会根据接收到的消息属性连接一个direct类型的交换器。
(3)Direct Consumer:该对象在进行rpc.call调用时创建,用于接收响应消息。每一个对象都会通过一个队列连接一个direct类型的交换器(队列和交换器以UUID命名)。
(4)Topic Consumer:该对象在内部服务初始化时创建,在服务过程中一直存在。用于从队列中接收消息,调用消息属性中指定的函数。该对象通过一个共享队列或一个私有队列连接一个topic类型的交换器。每一个内部服务都有两个topic consumer,一个用于rpc.cast调用(此时连接的是binding-key为“topic”的共享队列)。另一个用于rpc.call调用(此时连接的是binding-key为“topic.host”的私有队列)
(5)Topic Exchange:topic类型交换器,每一个消息代理节点只有一个topic类型的交换器。
(6)Direct Exchange:direct类型的交换器,存在于rpc.call调用过程中,对于每一个rpc.call的调用,都会产生该对象的一个实例。
(7)Queue Element:消息队列。可以共享也可以私有。routing-key为“topic”的队列会在相同类型的服务中共享(如多个compute节点共享一个routing-key为“topic”的队列)。

Glance 镜像服务

Glance概述

Glance是一个提供发现、注册和下载镜像的服务。Glance是虚拟机镜像的集中存储的地方。通过 Glance 的 RESTful API,可以查询镜像元数据、下载镜像。虚拟机的镜像可以很方便的存储在各种地方,从简单的文件系统到对象存储系统。提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板。

为什么要有Glance

基于openstack是构建基本的Iaas平台对外提供虚机,而虚机在创建的时候必须为其选择操作系统,glance服务器就是为该选择提供不同的系统镜像。

内部架构
在 Newton 之前的版本中,Glance 支持两种 RESTful API V1和V2,两者区别为:

v1:

镜像创建
镜像删除
镜像下载
镜像列表
镜像详细信息
镜像更新
镜像租户成员的创建
镜像租户成员的删除
镜像租户成员的列表


v2:

支持v1的所有的功能
镜像 location 的添加、删除和修改等操作。
metadata namespace 操作。
镜像 tag 操作。

V2版本的实现就是将 glance-registry 集成到了 glance-api 内部,
这么做的好处是减少了一个中间的处理环节。
glance-api
接收镜像API的调用,诸如镜像发现、恢复、存储。glance-registry
存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型Database
可以选择自己喜欢的数据库存储镜像元数据,大多数使用 MySQL 或则 SQLite.Storage repository for image files
指的是存储镜像文件的仓库或者称为backend,可以是:本地文件系统(或者任何挂载到glance-api控制节点的文件系统)
对象存储Object Storage(swift)
块存储RADOS(ceph)
VMware数据存储
HTTP
Metadata definition service
为厂商、管理员、openstack其他服务提供一个公用的API,并且用户可以自定义自己的元数据(有意义的)。这个元数据功能非常强大,可以被用在不同类型的资源:image
volumes
flavors 套餐

镜像文件格式

虚拟机镜像需要指定磁盘格式和容器格式。虚拟设备供应商将不同的格式布局的信息存在一个虚拟机磁盘映像,虚拟机的磁盘镜像的格式基本有如下几种。

(1)raw:非结构化磁盘镜像格式。
(2)qcow2:QEMU模拟器支持的可动态扩展、写时复制的磁盘格式,是kvm虚拟机默认使用的磁盘文件格式。
(3)AMI/AKI/ARI:Amazon EC2最初支持的镜像格式。
(4)UEC tarball:ubuntu enterprise cloud tarball 是一个gzip压缩后的tar文件,包含有AMI、AKI和ARI 三种类型的文件。
(5)VHD :microsoft virtual hard disk format(微软虚拟磁盘文件)的简称。
(6)VDI:VirtualBox使用VDI(virtual disk image)的镜像格式,OpenStack没有提供直接的支持,需要进行格式转换。
(7)VMDK:VMWare virtual machine disk format是虚拟机VMware创建的虚拟机格式。
(8)OVF:open virtualization format,开放虚拟化格式,OVF文件是一种开源的文件规范,可用于虚拟机文件的打包。
容器格式是可以理解成虚拟机镜像添加元数据后重新打包的格式,目前有以下几种容器格式。
(1)Bare:指定没有容器和元数据封装在镜像中,如果Glance和OpenStack的其他服务没有使用容器格式的字符串,为了安全,建议设置bare。
(2)ovf: ovf的容器模式This is the OVF container format。
(3)aki:存储在Glance中的是Amazon的内核镜像。
(4)ari:存储在Glance中的是Amazon的ramdisk镜像。
(5)ami:存储在Glance中的是Amazon的machine镜像。
(6)ova:存储在Glance中的是OVA的tar归档文件。

镜像状态

由于镜像文件都比较大,镜像从创建到成功上传到Glance文件系统中,是通过异步任务的方式一步步完成的,

状态包括Queued(排队)、
Saving(保存中)、
Acive(有效)、
deactivated(无效)、
Killed(错误)、
Deleted(被删除)
Pending_delete(等待删除)
(1)Queued排队:镜像ID已经创建和注册,但是镜像数据还没有上传。
(2)Saving保存中:镜像数据在上传中。
(3)Active有效:镜像成功创建,状态有效可用。
(4)Deactivated不活的:镜像成功创建,镜像对非管理员用户不可用。
(5)Killed错误:上传镜像数据出错,目前不可读取。
(6)Deleted被删除:镜像不可用,将被自动删除。
(7)Pending_delete等待删除:镜像不可用,等待将被自动删除。

1.镜像服务基本操作
CirrOS是一个极小的云操作系统,下面的基础操作使用这个小系统来演示。

#查询Glance服务状态命令如下
glance-control all status
#查询结果如下所示。
glance-api (pid 2633) is running…
glance-registry (pid 2654) is running…
glance_scrubber is stoped
#查询glance-control版本命令如下。
glance-control --version
#该命令查询结果如下。
12.0.0
#下面的命令作用是启动相关服务,并设置为开机启动。
systemctl start openstack-glance-api
systemctl start openstack-glance-registry
systemctl enable openstack-glance-api
systemctl enable openstack-glance-registry

(1)下载CirrOS镜像文件

# mkdir /tmp/images
# cd /tmp/images/
# wget http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img
执行结果如下所示。
--2016-10-1201:14:05--  http://download.cirros-cloud.net/0.3.2/cirros-0. 3.2-x86_64-disk.img
Resolving download.cirros-cloud.net... 64.90.42.85, 2607:f298:6:a036:: bd6:a72a
Connecting to download.cirros-cloud.net|64.90.42.85|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13167616 (13M) [text/plain]
Saving to: “cirros-0.3.2-x86_64-disk.img”
100%[========================================>] 13,167,616   104K/s   in 5m 42s
2016-10-12 01:19:47 (37.6 KB/s) - “cirros-0.3.2-x86_64-disk.img” saved [13167616/13167616]

下载完成后,查看文件信息,命令如下。

file cirros-0.3.2-x86_64-disk.img

#该命令执行结果如下所示。

cirros-0.3.2-x86_64-disk.img: QEMU QCOW Image (v2), 41126400 bytes

#使用命令行创建镜像

glance image-create --name "cirros-0.3.2-x86_64" --disk-format qcow2 --container-format bare --progress < cirros-0.3.2-x86_64-disk.img

#执行结果如下所示。

[=============================>] 100%

查看镜像信息
下面通过命令方式,查看镜像的基本信息。
使用命令:glance image-list
先查看镜像列表,

glance image-list
查询结果如下所示。
[root@controller images]# glance image-list
+--------------------------------------+---------------------+
| ID                                   | Name                |
+--------------------------------------+---------------------+
| 233a065d-793a-47fb-9a16-ea1f0bcb264c | cirros              |
| d1401a6c-95d8-49d3-a619-0ec62fecaaf6 | cirros-0.3.4-x86_64 |
+--------------------------------------+---------------------+

然后通过glance image-show命令查看镜像的详细信息,其中参数可以是镜像id或者镜像名称,如下所示。

glance image-show d1401a6c-95d8-49d3-a619-0ec62fecaaf6

查询结果如下所示。

[root@controller images]# glance image-show d1401a6c-95d8-49d3-a619-0ec62fecaaf6
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | ee1eca47dc88f4879d8a229cc70a07c6     |
| container_format | bare                                 |
| created_at       | 2021-05-21T21:42:26Z                 |
| description      |                                      |
| disk_format      | qcow2                                |
| id               | d1401a6c-95d8-49d3-a619-0ec62fecaaf6 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros-0.3.4-x86_64                  |
| owner            | 5107599ef0744776bf1e498b2ee9d439     |
| protected        | False                                |
| size             | 13287936                             |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2021-05-21T21:42:26Z                 |
| virtual_size     | None                                 |
| visibility       | public                               |
+------------------+--------------------------------------+

更改镜像
可以使用glance image-update更新镜像信息,可以使用glance image-delete删除镜像信息。
如果需要改变镜像启动硬盘最低要求值(min-disk)时,min-disk默认单位为GG。
使用glance image-update更新镜像信息操作如下。

glance image-update --min-disk=1 d1401a6c-95d8-49d3-a619-0ec62fecaaf6

查询结果如下所示。

[root@controller images]# glance image-update --min-disk=1 d1401a6c-95d8-49d3-a619-0ec62fecaaf6
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | ee1eca47dc88f4879d8a229cc70a07c6     |
| container_format | bare                                 |
| created_at       | 2021-05-21T21:42:26Z                 |
| description      |                                      |
| disk_format      | qcow2                                |
| id               | d1401a6c-95d8-49d3-a619-0ec62fecaaf6 |
| min_disk         | 1                                    |
| min_ram          | 0                                    |
| name             | cirros-0.3.4-x86_64                  |
| owner            | 5107599ef0744776bf1e498b2ee9d439     |
| protected        | False                                |
| size             | 13287936                             |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2021-05-21T21:46:05Z                 |
| virtual_size     | None                                 |
| visibility       | public                               |
+------------------+--------------------------------------+

通过命令删除镜像cirros-0.3.2-x86_64操作如下,执行结果如下所示。

glance image-delete 233a065d-793a-47fb-9a16-ea1f0bcb264c
glance image-list
+--------------------------------------+---------------------+
| ID                                   | Name                |
+--------------------------------------+---------------------+
| d1401a6c-95d8-49d3-a619-0ec62fecaaf6 | cirros-0.3.4-x86_64 |
+--------------------------------------+---------------------+

Nova的概述 (理论)

nova是负责提供计算资源的模块,也是OpenStack的核心模块,主要功能是负责虚拟机实例的生命周期管理、网络管理、存储卷管理、用户管理以及其他的相关云平台管理功能。

DB:用于数据存储的sql数据库。
API:用于接收HTTP请求、转换命令、通过消息队列或HTTP与其他组件通信的nova组件。
Scheduler:用于决定哪台计算节点承载计算实例的nova调度器。
Network:管理IP转发、网桥或虚拟局域网的nova网络组件。
Compute:管理虚拟机管理器与虚拟机之间通信的nova计算组件。
Conductor:处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或者处理对象转换。

部署架构特点:

无中心结构
各组件无本地持久化状态
可水平扩展
通常将nova-api、nova-scheduler、nova-conductor组件合并部署在控制节点上
通过部署多个控制节点实现HA和负载均衡
通过增加控制节点和计算节点实现简单方便的系统扩容
API是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接受和响应来自最终用户计算api的请求。作为openstack对外服务的最主要接口,nova-api提供了一个集中的可以查询所有api的端点。

所有对nova的请求都首先由nova-api处理。API提供REST 标准调用服务,便于与第三方系统集成。

最终用户不会直接该送RESTful API请求而是通过openstack命令行、dashbord和其他需要跟nova的组件使用这些API。

NOva-api对接受到的HTTP API请求做以下处理: (1)检查客户端传入的参数是否合法有效 (2)调用nova其他服务来处理客户端HTTP请求 (3)格式化nova其他子服务返回结果并返回给客户端

nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层。
Scheduler
Scheduler可译为调度器,由nova-scheduler服务实现,主要解决的是如何选择在哪个计算节点上启动实例的问题。

它可以应用多种规则,如果考虑内存使用率、cpu负载率、cpu架构(Intel/amd)等多种因素,根据一定的算法,确定虚拟机实例能够运行在哪一台计算节点。Nova-scherduler服务会从队列中接受虚拟机实例的请求,通过读取数据库的内容,从可用资源池中选择最合适的计算节点来创建新的虚拟机实例

1、过滤(filter):过滤出可以创建虚拟机的主机

计算权值(weight):根据权重大小进行分配,默认根据资源可用空间进行权重排序。

Rabbitmq

OpenStack 节点之间通过消息队列使用AMQP(Advanced Message Queue Protocol)完成通信。Nova 通过异步调用请求响应,使用回调函数在收到响应时触发。因为使用了异步通信,不会有用户长时间卡在等待状态。这是有效的,因为许多API调用预期的行为都非常耗时,例如加载一个实例,或者上传一个镜像。

Nova-conductor

nova-conductor是nova-compute与数据库的中间件,nova-compute对数据库的CRUD操作都借由nova-conductor完成,nova-conductor通过rpc对外提供API服务。nova-conductor默认采用多进程运行,在不配置[conductor]worker的情况下,进程数会与服务器的逻辑CPU数一致。

虚拟机启动流程

1. 界面或命令行通过RESTful API向keystone获取认证信息。#2. keystone通过用户请求认证信息,正确后生成token返回给对应的认证请求。#3. 界面或命令行通过RESTful API向nova-api发送一个创建虚拟机的请求(携带token)。#4. nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户。#5. keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。#6. 通过认证后nova-api检查创建虚拟机参数是否有效合法后和数据库通讯。#7. 当所有的参数有效后初始化新建虚拟机的数据库记录。#8. nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。#9. nova-scheduler进程侦听消息队列,获取nova-api的请求。#10. nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。#11. 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。# 12. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。#13. nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。#14. nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。#15. nova-conductor从消息队队列中拿到nova-compute请求消息。#16. nova-conductor根据消息查询虚拟机对应的信息。#17. nova-conductor从数据库中获得虚拟机对应信息。#18. nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。#19. nova-compute从对应的消息队列中获取虚拟机信息消息。#20. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。#21. glance-api向keystone认证token是否有效,并返回验证结果。#22. token验证通过,nova-compute获得虚拟机镜像信息(URL)。#23. nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。#24. neutron-server向keystone认证token是否有效,并返回验证结果。#25. token验证通过,nova-compute获得虚拟机网络信息。#26. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。#27. cinder-api向keystone认证token是否有效,并返回验证结果。#28. token验证通过,nova-compute获得虚拟机持久化存储信息。#29. nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。

API前端服务

nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 Nova 能够提供的功能。当客户需要执行虚机相关的操作,能且只能向 nova-api 发送 REST 请求。

设计 API 前端服务的好处在于

对外提供统一接口,隐藏实现细节
API 提供 REST 标准调用服务,便于与第三方系统集成
可以通过运行多个 API 服务实例轻松实现 API 的高可用,比如运行多个 nova-api 进程

Scheduler 调度服务

对于某项操作,如果有多个实体都能够完成任务,那么通常会有一个 scheduler 负责从这些实体中挑选出一个最合适的来执行操作。Nova 有多个计算节点, 当需要创建虚机时,nova-scheduler 会根据计算节点当时的资源使用情况选择一个最合适的计算节点来运行虚机。除了 Nova,块服务组件 Cinder 也有 scheduler 子服务。

Worker 工作服务

调度服务只管分配任务,真正执行任务的是 Worker 工作服务。

在 Nova 中,这个 Worker 就是 nova-compute 了。 将 Scheduler 和 Worker 从职能上进行划分使得 OpenStack 非常容易扩展:

当计算资源不够了无法创建虚机时,可以增加计算节点(增加 Worker)当客户的请求量太大调度不过来时,可以增加 Scheduler

Driver 框架

OpenStack 作为开放的云操作系统,支持业界各种优秀的技术。这种开放的架构使得 OpenStack 能够在技术上保持先进性,具有很强的竞争力,同时又不会造成厂商锁定(Lock-in)。OpenStack 的这种开放性一个重要的方面就是采用基于 Driver 的框架。

以 Nova 为例,OpenStack 的计算节点支持多种 Hypervisor。 包括 KVM, Hyper-V, VMWare, Xen, Docker, LXC 等。

nova-compute 为这些 Hypervisor 定义了统一的接口,hypervisor 只需要实现这些接口,就可以 driver 的形式即插即用到 OpenStack 中。

Glance、Cinder 和 Neutron 都有 driver 框架的应用

Messaging 服务

nova-* 子服务之间的调用严重依赖 Messaging。Messaging 是 nova-* 子服务交互的中枢。带来以下好处:解耦各子服务。子服务不需要知道其他服务在哪里运行,只需要发送消息给 Messaging 就能完成调用。提高性能。异步调用使得调用者无需等待结果返回。这样可以继续执行更多的工作,提高系统总的吞吐量。提高伸缩性。子服务可以根据需要进行扩展,启动更多的实例处理更多的请求,在提高可用性的同时也提高了整个系统的伸缩性。而且这种变化不会影响到其他子服务,也就是说变化对别人是透明的。

Database

OpenStack 各组件都需要维护自己的状态信息。比如 Nova 中有虚机的规格、状态,这些信息都是在数据库中维护的。每个 OpenStack 组件都有自己的数据库。

总结 Nova 组件设计思想的特点:

分布式:由多个逻辑和物理上均可分离的组件组成,实现灵活部署
无中心:可以通过增加组件部署实例来实现水平扩展
无状态:所有组件无本地持久化状态数据
异步执行:大部分执行流通过消息机制实现异步执行
插件化、可配置:大量使用插件机制、配置参数实现灵活的扩展与变更
RESTful API:支持 RESTful 方式访问的 API,方便客户端访问,方便集成到其他应用系统

Openstack(课堂随笔)相关推荐

  1. Linux课堂随笔---第四天

    用户账户简介 在Linux系统中有三大类用户,分别是root用户,系统用户和普通用户. 在Linux系统中,root用户UID为0,root用户的权限是最高的,普通用户无法执行的操作,root用户都能 ...

  2. linux基础—课堂随笔010_系统启动和内核管理

    系统启动和内核管理 Linux: kernel+rootfs kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs:程序和glibc 库:函数集合, functio ...

  3. linux基础—课堂随笔_03 SHELL脚本编程基础

    shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then 条件为真的分支代码  fi(结尾) 双分支 if(开头)判断条件:then 条件为 ...

  4. 滴水逆向——指针07课堂随笔

    1.多级指针 创建指针后一定要赋值,否则就会出现野指针. 选中的项目是p1[0]生成的,cdcall函数调用方法,先传最右边参数. 由图中可知push进3个参数,外平栈为0Ch. ebp-8中存的是p ...

  5. 课堂随笔1 - MOOC网站日志分析

    大数据Clouder:MOOC网站日志分析 日志,log,事件记录 网站日志:系统日志,程序日志 网站的系统访问日志,有通用格式 网站日志分析: (1)价值/重要性:运行,安全,运营,用户信息 (2) ...

  6. 课堂随笔1 - MOOC网站日志分析 1

    大数据Clouder:MOOC网站日志分析 日志,log,事件记录 网站日志:系统日志,程序日志 网站的系统访问日志,有通用格式 网站日志分析: (1)价值/重要性:运行,安全,运营,用户信息 (2) ...

  7. SQL课堂随笔第三章

    1.数据字典:存放数据库里的基本信息,主要是oracle自己维护 基表: user_*** :当前登录账号所创关键的表 all_ :当前数据库中有访问权限的表 dba_*** :dba维护的表 sel ...

  8. python命名规则数字开头的成语_day01 Python基础

    课堂随笔: python基础 一 什么是编程语言? 二 计算机组成部分 CPU 内存 外存 输入设备 输出设备 三 安装与使用 1.安装py thon解释器 2.安装pycharm编辑器 3.创建py ...

  9. 字符转详细与初步了解for循环

    一.整型 1.数字大小与位的关系 .bit_length #查询数字的位数的方法​ 布尔值(bool)与数字之间的转换 True  False n =bool (6) 输出True​ #数字和布尔值可 ...

最新文章

  1. PHP查看PECL模块包含的函数
  2. 用计算机写文章教学课件,计算机教学课件
  3. Python初学的几个迷惑点
  4. mysql的内存数据库,MySQL内存数据库的新选择-MariaDB4J
  5. mysql修改密码的注意点
  6. 电大计算机组成原理ppt,四川电大计算机组成原理(0023)第二次形考作业(课程号:5110023).docx...
  7. 轻量级开源小程序SDK发车啦
  8. C++语法:求vector中的最大值及其位置
  9. java api使用ElastichSearch指南
  10. LeetCode 2064. 分配给商店的最多商品的最小值(二分查找)
  11. 【汇编优化】之X86汇编优化
  12. 通过xsl显示和输出XML数据
  13. 第一周 7.10-7.16
  14. 隐藏iframe实现无刷新的效果
  15. 分布式存储系统学习笔记(一)—什么是分布式系统(2)—数据分布
  16. c语言char数字转int补位,如何补位??
  17. 相声登上直播平台 传统艺术能借风口浴火重生吗?
  18. 范德蒙行列式计算以应用
  19. matlab时域数据转频域,怎么使用IFFT(matlab)将频域转换为时域
  20. 计算机系统操作权限,电脑修改系统时间提示没有操作权限的解决办法

热门文章

  1. 【日记本砸】21.05.18-31 人不可以被说服,只能被天启
  2. Selenium的组成及特点
  3. 1.html 基本标签
  4. R语言-单个总体均值的t检验
  5. 用户获取pppd拨号状态_Mac OS 9:拨号上网并设置Internet连接
  6. 修改home目录下的中文目录为英文
  7. 也谈山东聊城18岁少年编写9000多款软件--要蛋定啊
  8. 雷锋网专访应用汇CEO罗川
  9. 浅谈学习掌握linux系统的优势
  10. (FTP文件夹打开错误,Windows无法访问此文件夹....)解决方法