OpenStack搭建M版本 (VM安装)

理论基础

1.云计算的起源

早在2006年3月,亚马逊公司首先提出弹性计算云服务。

2006年8月9日,谷歌公司首席执行官埃里克·施密特(Eric Schmidt)在搜索引擎大会上首次提出“云计算”(Cloud Computing)的概念。

云计算作为一种计算技术和服务理念,有着极其深厚的技术背景,谷歌作为搜索公司,首创这一概念,有着很大的必然性。在这里插入图片描述

2. 云计算的定义

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

3. 云计算的五大特征

① 按需自助服务:消费者可以单方面部署资源。
② 通过互联网获取:资源可以通过互联网获取,并可以通过标准方式访问。
③ 供应商的资源被池化,以便以多用户租用模式被不同客户使用
④ 快速伸缩:资源可以弹性地部署和释放,有时是自动化的,以便能够迅速地按需扩大和缩小规模。
⑤ 可计量:云计算系统通过使用一些与服务种类

4. 云计算的服务模型 SPI

1.Iaas  基础设施即服务
2.Paas 平台即服务
3.Saas  软件即服务

详细

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

自己理解

Iaas:就相当于买房子,你买了房子,房子就是你的,你可以随便装修
Paas:就相当于租房子,只组一间(只掌握的软件服务器)
Saas:就相当于买房子,不会装修找人来帮你装修(一条龙)

在这里插入图片描述

5. 云计算的四大部署类型

① 私有云:云计算基础设施由一个单一的组织部署和独占使用,可由该组织、第三方或两者的组合来拥有和管理。
② 社区云:云计算基础设施由一些具有共有关注点的组织形成的社区中的用户部署和使用,可由一个或多个社区中的组织、第三方或两者的组合来拥有和管理、运营。
④ 混合云:云计算基础设施是由两种或两种以上的云(私有、社区或公共)组成,每种云仍然保持独立,但用标准的或专有的技术将它们组合起来,具有数据和应用程序的可移植性。

6. 虚拟化的概念

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

在这里插入图片描述
虚拟化前

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

虚拟化后

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

7. 虚拟化分类

① 桌面虚拟化
② 应用虚拟化
③ 服务器虚拟

8. OpenStack架构

在这里插入图片描述

1.Horizon:监控台服务
2.Neutron:网络服务
3.Cinder:卷存储服务
4.Nova:计算即服务
5.Cellometer:监控服务
6.Glance:镜像存储
7.Heat:编配服务
8.Swift:对象存储
9.Keystone:认证服务

组件详细

1.Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等
2.Neutron网络目的是为OpenStack云更灵活地划分物理网络,在多租户环境下提供给每个租户独立的网络环境。
3.Heat是OpenStack的负责编排计划的主要项目。它可以基于模板来实现云环境中资源的初始化、依赖关系处理、部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。
4.Swift为OpenStack提供一种分布式、持续虚拟对象存储,它类似于Amazon Web Service的S3简单存储服务。
5.Nova是OpenStack计算的弹性控制器。OpenStack云实例生命期所需的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、授权及测度。
6.Ceilometer是OpenStack中的一个子项目,它像一个漏斗一样,能把OpenStack内部发生的几乎所有的事件都收集起来,然后为计费和监控以及其他服务提供数据支撑。

镜像服务Glance主要提供两个服务。

1.Glance-API:主要负责接收响应镜像管理命令的Restful请求,分析消息请求信息并分发其所带的命令(如新增、删除、更新等)。默认绑定端口是9292。
2.Glance-Registry:主要负责接收响应镜像元数据命令的Restful请求。分析消息请求信息并分发其所带的命令(如获取元数据、更新元数据等)。默认绑定的端口是9191。

openstack详细

OpenStack各个组件之间耦合是非常松的。其中,Keystone是各个组件之间的通信核心,它依赖自身REST(基于Identity API)对所有的OpenStack组件提供认证和访问策略服务,每个组件都需要向Keystone进行注册,主要目的是对云平台各个组件进行认证与授权,对云平台用户进行管理,注册完成后才能获取相对应的组件通信的地址,其中包括通信的端口和IP地址,然后实现组件之间和内部子服务之间的通信。

项目一 : 环境设计和系统准备

在这里插入图片描述

1.2 各节点的安装系统要求

1.2.1 (1)主机要求。

主机为双网卡服务器或者PC机,内存为4GB以上,处理器2核以上。

1.2.2 (2)系统要求

操作系统为 CentOS-7-x86_64-DVD-1511.iso。 
OpenStack软件包  XianDian-IaaS-v2.2.iso

1.3 与Linux相关的操作知识

(1)Linux系统安装。
OpenStack云计算平台的搭建过程中需要重点掌握的一些基础操作知识如下。
① Linux的版本:Linux的版本可分为内核版本发行版本。
内核版本

#内核版本是Linux任何版本的核心,内核版本号由3个数字组成:X.Y.Z。
X:主版本号,通常在一段时间内比较稳定。
Y:次版本号,偶数代表正式版本,可公开发行,奇数代表测试版本,不太稳定。
Z:表示修改**号,表示第几次修改。如2.6.20。

发行版本

 发行版本是将Linux内核与应用软件打包发行的版本,主流的Linux发行版本有Red Hat Enterprise Linux 6.0、CentOS 7.0、Ubuntu、Debian GNU/Linux、openSUSE和红旗Linux等。

二:搭建openstack环境

2.1.1 需要创建二台虚拟机 使用最小化安装
在这里插入图片描述

2.1.2 镜像:centos7 xiandian2.2
2.1.3 配置:一块硬盘30G 两个网卡,第一个仅主机模式,第二个nat模式
30G硬盘分区
在这里插入图片描述
系统配置文件

   配置文件  	    所在子目录	                     功能
   hosts	        /etc   	                #主机名与IP地址的映射关系
   network	       /etc/sysconfig/	         #主机名称
  ifcfg-eth0	   /etc/sysconfig/network-scripts/	 #网卡0的IP地址
  config	      /etc/selinux/	selinux的配置        #selinux的配置
  iptales	      /etc/sysconfig/	         #配置防火墙规则
  firewall	     /etc/firewalld/	          #配置防火墙

2.2 (1)配置主机名

第一台虚拟机配置控制节点主机名为controller
第二台虚拟机配置实例节点主机名为compute。

1.2.1 在控制节点使用hostnamectl命令修改主机名,内容如下。

hostnamectl set-hostname controller
#验证:
hostname

1.2.2 在实例节点使用hostnamectl命令修改主机名,内容如下。

hostnamectl set-hostname compute
 #验证
 hostname

2.3 (2)规划IP

在这里插入图片描述

#注意:
第一个网卡仅主机模式
用于虚拟机内部通讯(所以不用上外网)要注意虚拟机设置中的仅主机网段
第二个网卡为NAT模式
用于外部访问和网页的IP,要能上外网,这里博主错了!

2.4 (1 )配置控制节点IP

配置文件位置: /etc/sysconfig/network-cripts

#进入配置文件
cd /etc/sysconfig/network-cripts
# ip a

会出现两张网卡
在这里插入图片描述
如果没有出现

cp  ifcfg-eno16777736  ifcfg-eno3355498   #复制一份
NAME=eno3355498 
DEVICE=eno3355498
# 再修改配置文件内设备名

2.4.1.1 配置第一块网卡 eno16777736为仅主机模式

进入网卡配置文件

vi ifcfg-eno16777736

修改内容如下:

BOOTPROTO=none     #none改为static(静态)
ONBOOT=no              #no改为yes
# 末尾添加:
IPADDR=192.168.200.10
NETMASK=255.255.255.0
#最好把UUID删除

2.4.1.2 配置第二块网卡 eno33554984为NAT模式
进入网卡配置文件

vi ifcfg-eno33554984

修改内容如下:

BOOTPROTO=none    #改为static(静态)
ONBOOT=no           #改为yes

 #末尾添加:
IPADDR=192.168.128.10
NETMASK=255.255.255.0
GATEWAY=192.168.128.2
DNS=114.114.114.114

配置完成后需要重启网卡:

systemctl restart network

在这里插入图片描述

2.4.1 (2)配置实例节点IP

配置文件位置: /etc/sysconfig/network-cripts

#进入配置文件
cd /etc/sysconfig/network-cripts
#  ip a

会出现两张网卡
在这里插入图片描述
如果没有出现

cp  ifcfg-eno16777736  ifcfg-eno3355498   #复制一份
NAME=eno3355498 
DEVICE=eno3355498
# 再修改配置文件内设备名

2.4.2 配置第一块网卡 eno16777736为仅主机模式

进入网卡配置文件

vi ifcfg-eno16777736

修改内容如下:

BOOTPROTO=none     #none改为static(静态)
ONBOOT=no             #no改为yes
# 末尾添加:
IPADDR=192.168.200.20
NETMASK=255.255.255.0
#最好把UUID删除

2.4.3 配置第二块网卡 eno33554984为NAT模式
进入网卡配置文件

vi ifcfg-eno33554984

修改内容如下:

BOOTPROTO=none    #改为static(静态)
ONBOOT=no           #改为yes

 #末尾添加:
IPADDR=192.168.128.20
NETMASK=255.255.255.0
GATEWAY=192.168.128.2
DNS=114.114.114.114

配置完成后需要重启网卡:

systemctl restart network

2.5 (3)配置域名解析

2.5.1 在控制节点修改配置文件/etc/hosts,内容如下。
配置文件位置**/etc/hosts**
进入配置文件:

vi /etc/hosts

末尾添加:

192.168.128.10    controller
192.168.128.20     compute

实例节点配置的控制节点配置一样

2.6 (4) 配置防火墙

2.6.1 控制节点(controller)配置

关闭防火墙服务:

systemctl stop firewalld

关闭防火墙开机自启:

systemctl disable firewalld

查看防火墙状态:

systemctl status firewalld

2.6.1 实例节点(computer)防火墙配置与控制节点一致

2.7.1 关闭SELINUX(永久修改)
配置文件位置:

/etc/selinux/config

进入配置文件:

vi /etc/selinux/config
SELINUX=enforcing    #改为disable

#     enforcing    开启
#     permissive   开启单提醒
#     disabled     关闭

查看selinux状态:

getenforce

2.7.2 ## 关闭SELINUX(临时修改)

setenforce 0  # 或者1

查看selinux状态

getenforce

本博主本次实验用永久关闭

Linuxf 防火墙(firewalld)就相当于大门
selinux就相当于大门内的小门

3.3 实例节点(computer)的selinux配置与上一致

2.8 (5)配置yum源

4.1 控制节点配置(controller)

配置文件位置:

/etc/yum.repo.d

(1):第一种方法:

先上传iOS镜像文件 一个xiandian2.2,一个CentOS 7
上传到/root下

进入配置文件:

cd /etc/yum.repo.d

删除或备份配置文件内原有配置

rm -rf *

创建新的配置文件:

 vi yum.repo

# 配置以下内容:
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1

[openstack]
name=OpenStack
baseurl=file:///opt/iaas/iaas-repo
gpgcheck=0
enabled=1

创建挂载点文件:

mkdir -p  /opt/centos  /opt/iaas/iaas-repo

挂载iOS镜像文件:

echo "/root/CentOS-7-x86_64-DVD-1511.iso /opt/centos/ auto defaults 0 0
/root/XianDian-IaaS-v2.2.iso /opt/iaas/ auto defaults 0 0
" >> /etc/fstab

清除缓存:

yum clean all

建立新的缓存:

yum makecache

(2):第二种方式:

挂载镜像和xiandain-iaas 添加DVD光盘

挂载命令:mount  /镜像-硬盘路径   /挂载点

先在虚拟机里添加xiandain-iaas的iso文件

centos7 1511  4G
xiandian   2.7G

在这里插入图片描述
然后重启或者热扫描

#echo "- - -" > /sys/class/scsi_host/host0/scan
#echo "- - -" > /sys/class/scsi_host/host1/scan

# reboot

在这里插入图片描述
重启完成后输入**(lsblk命令**)会有两个sr设备文件

4.2 创建镜像挂载点

然后在/mnt下建立两个目录
分别是:

mkdir -p /mnt/centos7  /mnt/iaas

然后把sr0挂载到/mnt/iaas下,把sr1挂载到/mnt/centos下
临时挂载

mount  /dev/sr0  /mnt/centos7
mount  /dev/sr1  /mnt/iaas

永久挂载

   echo "/dev/sr0  /mnt/centos7 auto defaults 0 0
/dev/sr1 /mnt/iaas/ auto defaults 0 0
" >> /etc/fstab

4.3 配置yum指向点

在 / 目录创建OpenStack目录

mkdir /OpenStack
# cd /OpenStack

再创建子目录

mkdir -p  /OpenStack/centos  /OpenStack/iaas

(1)进入/mnt/iaas下把iaas-repo拷贝到 /OpenStack/iaas下
前提是当前目录在/mnt/iaas下

命令:
cp  -r  /mnt/iaas/iaas-repo   /OpenStack/iaas   

(2)进入/mnt/centos下把Packages和repodata两个文件拷贝到/OpenStack/centos下
前提是当前目录在/mnt/centos下

命令:
cp  -r  /mnt/centos7/Packages  /OpenStack/centos
cp  -r  /mnt/centos7/repodata   /OpenStack/centos

把下面的配置文件信息复制粘贴就行了(注:一定要记住配置文件是怎么写的)

[centos]
name=CentOS
baseurl=file:///OpenStack/centos
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[openstack]
name=openstack
baseurl=file:///OpenStack/iaas/iaas-repo
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

重建缓存

yum clean all
yum makecache

注:两台都要弄,配置文件要相同

5.2 实例节点(computer)的yum配置与上一致

5(6)磁盘分区

5.1 实例节点(computer)配置

在VM实例节点上添加一块40G的硬盘
在这里插入图片描述
后面的下一步即可

5.1.1 对硬盘进行分区
使用fdisk命令查看磁盘
在这里插入图片描述
使用fdisk /dev/sdb 进行分区

[root@controller ~]# fdisk /devv/sdb
fdisk: cannot open /devv/sdb: No such file or directory
[root@controller ~]# fdisk /dev/sdb 
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xfb298622.

Command (m for help): p

Disk /dev/sdb: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xfb298622

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): ^C
[root@controller ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xc888bf14.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-83886079, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): +20G
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): N
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): P
Partition number (2-4, default 2): 
First sector (41945088-83886079, default 41945088): 
Using default value 41945088
Last sector, +sectors or +size{K,M,G} (41945088-83886079, default 
83886079): 
#因为前面加了20G还剩最后20G所以这里就默认了↑
Using default value 83886079
Partition 2 of type Linux and of size 20 GiB is set

Command (m for help): W
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@controller ~]# 

格式化刚刚创建的两个分区

 # /dev/sdb1
 [root@controller ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@controller ~]# 
 # /dev/sdb2
 [root@controller ~]# mkfs.xfs /dev/sdb2
meta-data=/dev/sdb2              isize=256    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@controller ~]# 

5.2 实例节点的配置于上面一致

6 (7)安装iaas-xiandian安装包。

6.1 控制节点(controller)配置

下载软件包

yum install iaas-xiandian -y 

修改配置文件:
/etc/xiandian/openrc.sh (配置环境变量)

##--------------------system Config--------------------##
##--------------------系统配置--------------------##

##控制器服务器管理器IP。示例:x.x.x.x
HOST_IP=192.168.200.10  #控制节点访问以及内部访问的ip

##控制器服务器主机名。示例:control
HOST_NAME=control		#控制节点主机名

##计算节点管理器IP。示例:x.x.x.x
HOST_IP_NODE=192.168.200.20  #实例节点访问以及内部访问的ip

##计算节点主机名。示例:compute
HOST_NAME_NODE=computer		#实例节点主机名

##--------------------Rabbit Config ------------------##

##rabbit的用户。示例:openstack
RABBIT_USER=openstack

##rabbit用户的密码。示例:000000
RABBIT_PASS=000000

##--------------------MySQL Config---------------------##
##--------------------MySQL配置---------------------##
##MySQL根用户的密码.示例:000000
DB_PASS=000000

##--------------------Keystone Config------------------##
##--------------------密钥配置------------------##
##密钥库管理员用户的密码。示例:000000
DOMAIN_NAME=demo		#自定义(域)
ADMIN_PASS=000000		#用户密码
DEMO_PASS=000000

##Mysql密钥库用户的密码。示例:000000
KEYSTONE_DBPASS=000000

##--------------------Glance Config--------------------##
##--------------------浏览配置--------------------##
##Mysql glance用户的密码。 示例:000000
GLANCE_DBPASS=000000

##Keystore glance用户的密码。 示例:000000
GLANCE_PASS=000000

##--------------------Nova Config----------------------##
##Mysql nova 用户的密码 示例:000000
NOVA_DBPASS=000000

##Keystore nova 用户的密码。 示例:000000
NOVA_PASS=000000

##--------------------Neturon Config-------------------##
##--------------------Neturon配置-------------------##

##Mysql中子用户的密码。示例:000000
NEUTRON_DBPASS=000000

##密钥库中子用户的密码。示例:000000
NEUTRON_PASS=000000

##metadata secret for neutron. 示例:000000
METADATA_SECRET=000000

##外部网络接口。示例:eth1
INTERFACE_NAME=eno33554984	#OpenStack平台创建虚拟机联网的(可以连接外网的 NAT)

##Vlan网络的Vlan范围中的第一个Vlan ID。 示例:101
#minvlan=

##Vlan网络的Vlan范围中的最后一个Vlan ID。示例:200
#maxvlan=

##--------------------Cinder Config--------------------##
##Mysql cinder用户的密码。示例:000000
CINDER_DBPASS=000000

##Keystore cinder用户的密码。示例:000000
CINDER_PASS=000000

##Cinder Block Disk. example:md126p3
BLOCK_DISK=sdb1		#空白分区

##--------------------Trove Config--------------------##
##Mysql Trove 用户的密码。 示例:000000
TROVE_DBPASS=000000

##密钥存储库用户的密码。示例:000000
TROVE_PASS=000000

##--------------------Swift Config---------------------##
##--------------------Swift配置---------------------##

##密钥库swift用户的密码。 exmaple:000000
SWIFT_PASS=000000

##Swift的节点对象磁盘。示例:md126p4.
OBJECT_DISK=sdb2		#空白分区

##Swift存储网络的节点IP。示例.x.x.x.x
STORAGE_LOCAL_NET_IP=192.168.200.10		#控制节点的仅主机网卡IP地址

##--------------------Heat Config----------------------##
##Mysql热用户的密码。示例:000000
HEAT_DBPASS=000000

##Keystore heat用户的密码。示例:000000
HEAT_PASS=000000

##--------------------Ceilometer Config----------------##
##Password for Mysql ceilometer user. exmaple:000000
CEILOMETER_DBPASS=000000

##Keystore ceilometer用户的密码。示例:000000
CEILOMETER_PASS=000000

##--------------------AODH Config----------------##
##--------------------AODH配置----------------##

##Mysql AODH用户的密码。示例:000000
AODH_DBPASS=000000

##密钥库AODH用户的密码。示例:000000
AODH_PASS=000000

注意:

写ip的是你访问以及内部访问的,后边写网卡名的,是用于openstack平台创建虚拟机联网的
写网卡名那个得是可以连接外网的

7 (8)部署脚本安装平台

7.1 控制节点和实例节点

初始化配置脚本,一定要执行如果执行脚本报错从这一步重启操作
进入/usr/local/bin执行脚本iaas-pre-host.sh

iaas-pre-host.sh

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

reboot

部署脚本安装平台
①在控制节点执行脚本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-vlan.sh进行vlan网络安装配置。

iaas-install-neutron-controller-vlan.sh  #vlan改为gre

我们使用

iaas-install-neutron-controller-gre.sh

注意:(控制节点实例节点都要改)先修改再执行gre文件

这个文件有一个地方错误,最后一行需要更改

  # vim /usr/local/bin/iaas-install-neutron-controller-gre.sh
  # 改systemctl enabled neutron-lbaas-agent
     # 改为:systemctl enable neutron-lbaas-agent

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

iaas-install-neutron-compute-vlan.sh    #vlan改为gre

我们使用:

iaas-install-neutron-compute-gre.sh

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

iaas-install-dashboard.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

8 (9)web管理登录

验证安装基础工作完成:

打开网页 http://192.168.200.10/dashboard进行验证服务
域:demo (在先电配置文件内配置)
账号:admin  
密码:000000 (在xiandain配置文件内配置)

在这里插入图片描述
在这里插入图片描述

项目二 :认证服务(keystone)

2.1 相关概念

(1)认证(Authentication)。
认证是确认允许一个用户访问的进程。为了确认请求,OpenStack Identity会为访问用户提供证书,起初这些证书是用户名和密码,或用户名和API key。当OpenStack Identity认证体系接受了用户的请求之后,它会发布一个认证令牌(Token),用户在随后的请求中使用这个令牌去访问资源中其他的应用。
(2)证书(Credentials)
用于确认用户身份的数据。例如,用户名、密码或者API key,或认证服务提供的认证令牌。
(3)令牌(Token)。
通常指的是一串比特值或者字符串,用来作为访问资源的记号。Token(令牌统一用词)中含有可访问资源的范围和有效时间,一个令牌是一个任意比特的文本,用于与其他OpenStack服务来共享信息,Keystone以此来提供一个central location,以验证访问OpenStack服务的用户。令牌的有效期是有限的,可以随时被撤回。
4)项目(project)。
project即项目,早期版本又称为project,它是各个服务中的一些可以访问的资源集合。例如,通过nova创建虚拟机时要指定到某个项目中,在cinder创建卷也要指定到某个项目中,用户访问项目的资源前,必须与该项目关联,并且指定该用户在该项目下的角色。
平台构建完毕会产生admin、service和demo三个项目。在这些项目中,admin项目代表管理组,拥有平台的最高权限,可以更新、删除和修改系统的任何数据。service代表平台内所有服务的总集合,平台安装的所有服务默认会被加入到此项目中,为后期的统一管理提供帮助,此项目可以修改当前项目下所有服务的配置信息,提交项目的内容以及修改。demo则是一个演示测试项目,没有什么实际的用处。
(5)用户(User)。
使用服务的用户,可以是人、服务或系统使用OpenStack相关服务的一个组织。例如,一个项目映射到一个Nova的“project-id”,在对象存储中,一个项目可以有多个容器。根据不同的安装方式,一个项目可以代表一个客户、账号、组织或项目。用户通过Keystone Identity认证登录系统并调用资源。用户可以被分配到特定项目并执行项目相关操作。需要特别指出的是,OpenStack通过注册相关服务用户来管理服务,例如Nova服务注册nova用户来管理相应的服务。对于管理员来说,需要通过Keystone来注册管理用户。
(6)角色(Role)。
Role即角色,Role代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的role或项目内的role中。在全局的role中,用户的role权限作用于所有的项目,即可以对所有的项目执行role规定的权限。在项目内的role中,用户仅能在当前项目内执行role规定的权限。

自己理解
牛马(用户)带着身份证(证书)要去酒店开一间房,他到酒店前台拿着身份证登记完,(认证)前台给他一个房卡(令牌),给他开房间门的权限(角色)
在这里插入图片描述

2.2 配置keystone应用环境

创建流程有三种方式:

1:web浏览器图形化操作创建
2:命令行创建
3:脚本创建

2.3 报错解决方案:

source /etc/keystone/admin-openrc.sh

2.3 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值

2.4 管理认证用户

OpenStack的用户(user)包括云平台使用者、服务以及系统。用户通过认证登录系统并调用资源。为方便管理,用户被分配到一个或多个项目(project),项目是用户的集合。为给用户分配不同的权限,Keystone设置了角色(Role),角色是代表用户可以访问的资源等权限。用户可以被添加到任意一个全局的或项目内的角色中。

注意:[   ] 内可写可不写
     <   > 内必须写

2.4.1 (1)创建用户
格式:

$ openstack user create [--domain <domain>] //指定域名
[--password <password>]                 #密码
[--email <email-address>]               #邮箱
[--enable | --disable]                   #是否激活,默认激活
  <name>                                  # 名字

创建一个名称为“alice”账户,密码为“04503”,邮箱为“alice@qq.com”。命令如下。、

openstack user create --password 040503 --email alice@qq.com --domain demo alice

在这里插入图片描述

openstack平台端创建:
在这里插入图片描述
2.4.1.1 修改用户名
格式:

openstack user set --name 更改名 原名    
#openstack user  create --domain demo zyf   创建用户作为实验

将用户zyf修改为nb

openstack user set --name nb zyf

查看用户nb详细信息

openstack user show nb

在这里插入图片描述
2.4.1.2 删除用户
格式:

openstack user delete 用户名

删除nb用户

openstack  user  delete  nb

在这里插入图片描述
用户其他参数:
在这里插入图片描述
openstack user xxxx

user create 用户名      #创建用户
user delete 用户名      #删除用户
user list              #列出用户
user password set      #更改用户密码设置
user show  用户名             #查看用户详细信息 

2.4.2 (2)创建项目。
一个项目就是一个项目、团队或组织,当请求OpenStack服务时,你必须定义一个项目。例如,查询计算服务正在运行的云主机实例列表。
格式:

$ openstack project create [--domain <domain>]    # 项目创建
[--description <description>]                     #描述
[--enable | --disable]                           #是否启用,默认启用
<project-name>                                   #项目名称

创建一个名为“acme”项目。

openstack project create --domain demo acme

在这里插入图片描述
2.4.2.1 修改项目名:
格式:

openstack project set --name 更改项目名 原项名 

修改

#openstack project create --domain demo wangba  创建项目作为实验
openstack set --name wb wangba

查看项目详细格式:

openstack project show 项目名

查看项目wb详细信息

openstack project show wb

项目其他参数:
在这里插入图片描述
openstack projet xxxx

  project create  项目名          #项目创建
  project delete   项目名          # 项目删除
  project list                   #项目清单
  project set  XXX                   #更改xxx
  project show  项目名                #查看项目详细信息

2.4.3 (3)创建角色。

角色限定了用户的操作权限。
格式:

$ openstack role create <name>
#其中参<name>代表角色名称。

例如,创建一个角色“compute-user”。

openstack role create compute-user

在这里插入图片描述
角色其他参数:
在这里插入图片描述

  role add   角色名      #角色添加
  role assignment list  #角色分配列表
  role create   角色名   #创建角色
  role delete   角色名   #删除角色
  role list            #角色列表
  role remove  角色名   #删除角色
  role set XXX         #修改角色XXX
  role show  角色名     #查看角色详细信息

2.4.4 (4)绑定用户和项目权限。
从上面操作可以看出,绑定用户权限需要用户名称、角色名称和项目名称等信息。具体命令格式如下。
格式:

$ openstack role add --user <user> --project <project> <role>
#其中,参数 <user>代表需要绑定的用户名称,参数<role>代表用户绑定的角色名称,参数<project>代表用户绑定的项目名称

从上面操作可以看出,绑定用户权限需要用户名称、角色名称和项目名称等信息。具体命令格式如下。

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

在这里插入图片描述
2.4.5 (5)图形化界面操作。
以管理员身份登录到dashboard,进入“身份管理/项目”,可以看到项目(项目)列表
在这里插入图片描述单击中的【管理成员】按钮,进入“acme”项目中。在这个界面中,可以查看刚加入的用户“alice”,把该用户分配给用户对应的角色“compute-user”,如图3-3所示。完成该操作后,用户“alice”就可用“alice”用户名和对应密码“040503”登录云平台了。

三:创建项目、用户并绑定用户权限

在这里插入图片描述

3.1 创建项目
创建项目研发部(research and development department)名为RD_Dept的项目、业务部(business department)名为BS_Dept的项目、IT工程部(engineering department)名为IT_Dept的项目。
① 通过dashboard界面为研发部创建一个名为RD_Dept的项目。

  1:进入dashboard找到身份管理选项。
  2:选择“创建项目”,在弹出窗口中输入名称和项目描述信息。在默认情况下,项目是自动激活的,如图3-4所示。
  3:在配额选项卡中,进行项目资源分配。
  4: 创建成功后,在项目列表中,会显示出该项目条目,并获得一个自动分配的ID,

在这里插入图片描述

在这里插入图片描述
② 通过Shell界面为业务部创建一个名为BS_Dept的项目。

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

在这里插入图片描述
查看项目详细信息:

openstack project show BS_Dept

在这里插入图片描述
③ 通过脚本为工程部创建一个名为IT_Dept的项目(具体脚本参见附录四 Keystone-manage-project.sh)。

执行Keystone-manage-project.sh脚本来创建IT_Dept的项目,在执行脚本前,需要确保该脚本具有执行权限。如果没有执行权限,需要通过“chmod”给文件添加执行权限。
通过“./”或者“/bin/bash”执行脚本文件,输入部门名称和部门描述来创建IT_Dept项目。
具体执行命令如下。(前提要上传脚本)

 ./Keystone-manage-project.sh
#!/bin/bash
if [  -f "/etc/keystone/admin-openrc.sh" ];then
       source /etc/keystone/admin-openrc.sh
else
       env_path=`find / -name admin-openrc.sh`
       source $env_path
fi
   echo -e "\033[31mPlease Input new Project name : eg (openstack)\033[0m "
       read New_Project_Name
       if [ ! -n "$New_Project_Name" ];then
           echo -e "\033[31mProject Name Is Empty,Exit\033[0m "
           exit 1
       fi
   echo -e "\033[31mPlease Input Project description : eg (openstack description)\033[0m "
       read New_Project_des
       if [ ! -n "$New_Project_des" ];then
            echo -e "\033[31mProject  Description  Is Empty,Exit\033[0m "
            exit 1
       fi
       T_Start=`echo $New_Project_Range |awk -F- '{ print $1}'| awk '{print $0+0}'`
       N_Start=`printf "%03d\n" $T_Start`
       T_End=`echo $New_Project_Range |awk -F- '{ print $2}' | awk '{print $0+0}'`
       N_End=`printf "%03d\n" $T_End`
       T_End1=$[$T_End+1]
              openstack project create --domain $OS_PROJECT_DOMAIN_NAME --description "Service Project" $New_Project_Name
              echo -e "\033[31mKeystone All Project List\033[0m "
              openstack project list

在这里插入图片描述

[root@controller sh]# ./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   | 59121ceb598247dd85a487e8a7d299aa |
| enabled     | True                             |
| id          | 5d7dca5f0f9a458fa0c178fa6e1fe5cb |
| is_domain   | False                            |
| name        | IT_Dept                          |
| parent_id   | 59121ceb598247dd85a487e8a7d299aa |
+-------------+----------------------------------+
Keystone All Project List 
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 31566b2154474f7d9d666b24fdac8ba8 | demo    |
| 5d7dca5f0f9a458fa0c178fa6e1fe5cb | IT_Dept |
| 68a6c393dc5541518d33acc7911d8cbe | BS_Dept |
| 8749b3ab17ca45f38c3dd00be795307b | RD_Dept |
| 895a5cdd398b442582c63b4069d2ca05 | admin   |
| b59f0afbe5134f47b252028bc690b0a6 | acme    |
| c6bbd5c7812e44268831583be917e632 | service |
+----------------------------------+---------+
[root@controller sh]# 

在这里插入图片描述

3.2 创建用户账号
为项目研发部创建50个用户,分别名为rduser001~rduser050,密码为cloudpasswd;为业务部创建45个用户,分别名为bsuser001~bsuser045,密码为cloudpasswd;为IT工程部创建5个用户,分别名为ituser001~ituser005,密码为cloudpasswd。可使用GUI和CLI界面,辅助使用Shell。
① 通过dashboard界面为研发部创建用户rduser001,密码为cloudpasswd。

 1:进入dashboard找到身份管理选项。
 2:选中“用户”。
 3:选择“创建用户”。
 4:在创建用户界面,输入用户名、邮箱、初始密码、主项目和角色

在这里插入图片描述
**② 通过Shell命令行为IT工程部创建用户ituser003—it005,密码为cloudpasswd。**要绑定项目

//要绑定项目  #openstack role add --user  rduser002 --project RD_Dept  _member_    在教材稍后有

创建一个用户名为ituser003 密码为cloudpasswd 邮箱为 ituser003@qq.com

openstack user create ituser003 --password cloudpasswd --domain demo --email ituser003@qq.com

将用户ituser003 绑定到IT_Dept中并给予admin权限

openstack role add --user ituser003 --project IT_Dept admin

在这里插入图片描述
③ 通过执行Shell脚本(Keystone-manage-user.sh)为项目研发部(RD-Dept)创建用户rduser001~rduser050,密码为cloudpasswd。
在命令行内输入# ./Keystone-manage-user.sh,执行该脚本。命令行内按提示输入用户名称、用户密码、电子邮件域名地址、用户角色(这里只能赋予一个角色)和用户所属部门。
执行命令后结果如下所示。

./Keystone-manage-user.sh
#创建一个_member_ 角色

在这里插入图片描述

[root@controller sh]# ./Keystone-manage-user.sh
Please Input New User Name : eg (username) 
rduser
Please Input User Password: eg (000000) 
001-050
Please Input User Email Address,If don't need  press enter: eg (openstack.com) 
qq.com
Please Input User   Beginning And End  Number: eg (001-002) 
^C
[root@controller sh]# ./Keystone-manage-user.sh
Please Input New User Name : eg (username) 
^C
[root@controller sh]# 
[root@controller sh]# ./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) 
qq.com
Please Input User   Beginning And End  Number: eg (001-002) 
001-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 | 59121ceb598247dd85a487e8a7d299aa |
| email     | rduser001@qq.com                 |
| enabled   | True                             |
| id        | 68daff75c8c44405980d4626a46ce16b |
| name      | rduser001                        |
+-----------+----------------------------------+
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 59121ceb598247dd85a487e8a7d299aa |
| email     | rduser002@qq.com                 |
| enabled   | True                             |
| id        | b13b8fb95c974efab3bcea1053f4c832 |
| name      | rduser002                        |
+-----------+----------------------------------+

④ 通过执行Shell脚本Keystone-manage-user.sh为项目研发部(BS-Dept)创建用户bsuser001~bsuser045,密码为cloudpasswd。**

./Keystone-manage-user.sh

在这里插入图片描述

[root@controller sh]# ./Keystone-manage-user.sh
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) 
qq.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) 
                        #空为普通用户
Please Input User belong Project Name: eg (projectname) 
BS_Dept
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 59121ceb598247dd85a487e8a7d299aa |
| email     | bsuser001@qq.com                 |
| enabled   | True                             |
| id        | a2822ab60e34424d9df71e85ab4680f0 |
| name      | bsuser001                        |
+-----------+----------------------------------+
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 59121ceb598247dd85a487e8a7d299aa |
| email     | bsuser002@qq.com                 |
| enabled   | True                             |
| id        | 138576fdf684427fbe85a7a4559995ea |
| name      | bsuser002                        |
+-----------+----------------------------------+

⑤ 通过执行Shell脚本为IT工程部创建用户ituser001~ituser005,密码为cloudpasswd。执行过程和结果如下所示。

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) 
qq.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) 
admin 
Please Input User belong project Name: eg (projectname) 
IT_Dept

3.1绑定用户权限

将项目研发部、业务部的用户绑定普通用户权限;将IT工程部的用户绑定管理员和普通用户权限。
① 通过dashboard界面将项目研发部用户rduser001绑定普通用户权限。

  1:进入dashboard找到身份管理选项。
  2:选中“项目”。
  3:找到相应的项目,在动作栏目中选择“管理成员”,进入到编辑项目对话框中。

在这里插入图片描述
② 通过Shell命令行将项目研发部用户ituser002绑定普通用户权限。

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

部分执行结果如下所示:

+----------------------------------+----------+---------+-----------+
| ID                               |   Name   |  Project|   User    |
+----------------------------------+----------+---------+-----------+
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ | RD_Dept | rduser002 |
+----------------------------------+----------+---------+-----------+

③ 通过执行Keystone-manage-add-role.sh脚本将项目RD项目研发部rduser001~ituser050绑定普通用户和管理员用户权限,部分执行结果如下所示。(具体脚本参见附Keystone-manage-add-role.sh)

./Keystone-manage-add-role.sh

在这里插入图片描述

[root@controller sh]# ./Keystone-manage-add-role.sh
Please Enter The User Name 
rduser
Please Input User  Beginning And End  Number: eg (001-002) 
001-050
Please Enter the Project Name 
RD_Dept
Please Enter the  Role Name 
user
Keystone user rduser001 Project RD_Dept role list 
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
| Role                             | User                             | Group | Project                          | Domain | Inherited |
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
| 9fe2ff9ee4384b1894a90878d3e92bab | 68daff75c8c44405980d4626a46ce16b |       | 8749b3ab17ca45f38c3dd00be795307b |        | False     |
| da5370d061b944dd90c6d24c61c1f867 | 68daff75c8c44405980d4626a46ce16b |       | 8749b3ab17ca45f38c3dd00be795307b |        | False     |
+----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+

在OpenStack用户管理中,用户、角色和项目等身份的权限和等级设定非常重要,对应的身份只拥有对应的适合身份的权限,对系统的安全和稳定非常有帮助。

四 :小结

可以通过 openstack平台创建 项目,用户 ,绑定项目 给予项目权限
可以通过 shell 命令行创建 项目,用户 ,绑定项目 给予项目权限
可以通过脚本创建 项目,用户 ,绑定项目 给予项目权限

研发部门	RD_Dept	rduser001 - rduser050	普通用户
业务部门	BS_Dept	bsuser001 - bsuser045	普通用户
IT部门	IT_Dept	ituser001 - ituser005	普通用户和管理员用户

下面使用脚本执行每次执行三次 分别是 :RD_Dept BS_Dept IT_Dept

4.1 通过脚本创建项目

 # 通过脚本创建项目:
./Keystone-manage-project.sh    #创建项目
# 详细
Please Input new project name : eg (openstack) 
IT_Dept
Please Input project description : eg (openstack description) 
IT工程部门

4.2 通过脚本创建用户

# 通过脚本创建用户
./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) 
001-050
Please enter the User belong Roles Name, Press enter for '_member_' role by default: eg (admin) 
admin  # 普通用户可以为空 可以是_member_ 但是要创建这个角色
Please Input User belong project Name: eg (projectname) 
RD_Dept

4.3 通过脚本绑定用户权限

 # 通过脚本绑定用户权限
./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

五:基础控制服务

5.1理论部分:

5.1.1 了解消息队列 AMQP
在这里插入图片描述

AMQP 中有 3 个重要的角色:

1:Publisher:消息的发出者
2:Exchange:消息的传递者
3:Consumer:消息的接收者

用户可以模拟写信作为其工作的方式来说
明。为了传递给收件人,首先需要用信封把信
的内容装起来,然后在信封上写好收件人的信
息,再把信放到邮筒里;后面邮局会拿到信然
后根据信封上的收件人信息来看最终把信给
谁。写信的人就是那个 Publisher,邮局就是
Exchange,收件人就是 Consumer。

不同的 Consumer 会创建不同的 Queue(消息队列),然后将对应的 Exchange 绑定到
Queue 上。在消息的传递过程中,Publisher 不会直接的把 Message 放到 Queue 中,也不管
Message 如何分发。Publisher 只管准备好消息,然后交给 Exchange,而 Exchange 做的事情
也很简单,一手从 Publisher 拿到消息,然后就把消息放入 Queue 中。

对于 Exchange,是放到某一个 Queue 中,还是放到多个 Queue?实际上,在 Publisher
发出消息的时候会附加一个条件,Exchange 会根据这个条件来决定发送的方法,这个条件
就是 routingkey。

在这里插入图片描述

Publisher  #相当于发件人
Exchange #相当于邮局快递员(收)
Queue #想当于邮局 (发)
Consume #相当于收件人

举例:
就像生产者和消费者关系
订阅和发布的关系

5.1.2 了解 Rabbitmq 消息服务
在这里插入图片描述通过上面这张应用相结合的结构图既能够清晰的看清楚整体的 send Message 到
首先 Rabbitmq 有如下几种命令行工具。
① rabbitmqctl:用来管理 RabbitMQ 中间件的命令行工具.它通过连接中间件节点来执
行所有操作。
② rabbitmq-plugins:rabbitmq-plugins 是管理 RabbitMQ broker 插件的命令行。

Rabbitmq 是一个基于AMQP协议的高级消息中间件

5.1.3学习镜像服务
1.概述

Glance 镜像服务实现发现、注册、获取虚拟机镜像和镜像元数据,镜像数据支持存储
多种的存储系统,可以是简单文件系统、对象存储系统等。

2.Glance 服务架构

Glance 镜像服务是典型的 C/S 架构,Glance 架构包括 glance-CLIent、Glance 和 Glance
Store。Glance 主要包括 REST API、数据库抽象层(DAL)、域控制器(glance domain
controller)和注册层(registry layer),Glance 使用集中数据库(Glance DB)在 Glance 各
组件间直接共享数据。

在这里插入图片描述(1)客户端(CLient):外部用于同 Glance 服务的交互和操作。
(2)glance-api:Glance 对外的 REST 接口。

(3)数据库抽闲层(DAL):Glance 和数据库直接交互的编程接口。
(4)Glance 域控制器:中间件实现 Glance 的认证、通知、策略和数据链接等主要功能。
(5)注册层:可选层,用于管理域控制和数据库 DAL 层之间的安全通信。
(6)Glance DB:存储镜像的元数据,根据需要可以选择不同类型的数据库,目前采用Mysql。
(7)Glance Store:Glance 对接不同数据存储的抽象层。
(8)后端存储:实际接入的存储系统。可以接入简单文件系统、Swift、Ceph 和 S3 云存储等。当前框架选择存储在本地,目录在控制节点:/var/lib/glance/images/。

Glance 服务自带两个配置文件,在使用 Glance 镜像服务时需要配置 glance-api.conf 和
glance-registry.conf 两个服务模块。在添加镜像到 Glance 时,需要指定虚拟镜像的磁盘格式
(disk format)和容器格式(container format)。

镜像服务运行两个后台服务进程 Demon,如下:

(1)glance-api:对外接受并发布镜像、获取和存储的请求调用。
(2)glance-registry:存储、处理和获取镜像元数据,内部服务只有 Glance 内部使用,
(3)glance-all:是对前两个进程的通用封装,操作方式和结果一直。

5.1.4 镜像文件格式

虚拟机镜像需要指定磁盘格式和容器格式。虚拟设备供应商将不同的格式布局的信息
存在一个虚拟机磁盘映像,虚拟机的磁盘镜像的格式基本有如下几种:
(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 归档文件。

5.1.4 镜像状态

由于镜像文件都比较大,镜像从创建到成功上传到 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 等待删除:镜像不可用,等待将被自动删除

5.2 镜像服务基本操作

CirrOS是一个极小的云操作系统,下面的基础操作使用这个小系统来演示。

5.2.1 查询Glance服务状态命令如下

 glance-control all status

如果出现

在这里插入图片描述

执行 启动glance

 glance-control all start

在这里插入图片描述
查询结果如下

在这里插入图片描述

5.2.2 查询glance-control版本命令如下。

glance-control --version

该命令查询结果如下。

在这里插入图片描述
5.2.3 下面的命令作用是启动相关服务,并设置为开机启动。

systemctl start openstack-glance-api
systemctl start openstack-glance-registry
systemctl enable openstack-glance-api
systemctl enable openstack-glance-registry

六:在openstack平台创建镜像

在Dashboard中以admin账户登录,查看镜像。下面,通过上传本地镜像文件和从网站下载镜像文件的方式进行创建、查询、删除和修改镜像

6.1 web端创建镜像

在这里插入图片描述
在这里插入图片描述

6.1.1使用wget下载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

6.1.2 使用命令行创建镜像

先执行

source /etc/keystone/admin-openrc.sh 

将镜像cirros-0.3.2-x86_64-disk.img上传到 /tmp/images中
需要进入/tmp/images目录下执行下面命令

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

执行结果如下所示。
在这里插入图片描述
web端查看
在这里插入图片描述

6.2 查看全部镜像信息

glance image-list

执行结果如下
在这里插入图片描述

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

glance image-show f116959a-13e4-4ec4-ae46-0d1e10a44a96

在这里插入图片描述

6.2.2 更改镜像

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

glance image-update --min-disk=1 f116959a-13e4-4ec4-ae46-0d1e10a44a96

在这里插入图片描述

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

glance image-delete  f116959a-13e4-4ec4-ae46-0d1e10a44a96

查看全部镜像

 glance image-list

在这里插入图片描述

七:计算服务

1.概述

计算服务(Nova)表示云平台的工作负载的核心。如果有些云服务的工作中不包括计算,那么它们充其量只代表静态存储,所有动态活动都会涉及一些计算元素。OpenStackCompute这个名称指的是一个特定的项目,该项目也被称为Nova,OpenStack的其他组件依托Nova,与Nova协同工作,组成了整个OpenStack云平台。

Nova,是OpenStack计算的弹性控制器。Nova可以说是整个云平台最重要的组件,其功能包括运行虚拟机实例,管理网络以及通过用户和项目来控制对云的访问。OpenStack最基础的开源项目名字称为Nova,它提供的软件可以控制基础设施即服务(IaaS)云计算平台,与AmazonEC2和Rackspace云服务器有一定程度的相似。OpenStackCompute没有包含任何的虚拟化软件,相反,它定义和运行在主机操作系统上的虚拟化机制交互的驱动程序,并通过基于Web的程序应用接口(API)来提供功能的使用。

2.架构介绍

Nova服务包含了7个子组件,分别为:NovaAPI、NovaCert、NovaCompute、NovaConductor和NovaScheduler、NovaConsoleauth以及NovaVncproxy.

在这里插入图片描述
(1)NovaAPI
NovaAPI这是一个HTTP服务,用于接收和处理客户端发送的HTTP请求;API是整个Nova组件的入口。它接受用户请求,将指令发送至消息队列(Queue),并由Nova服务的子服务执行相应的操作。

(2)NovaCert
用于管理证书认证,提供兼容性保障,保证所有的应用程序都能在云上运行。

(3)NovaCompute
NovaCompute是Nova核心子组件,通过与NovaClient进行交互,实现了虚拟机管理的功能。负责在计算节点上对虚拟机实例进行一系列操作,包括迁移、安全组策略和快照管理等功能。

(4)NovaConductor
NovaConductor是OpenStack中的一个RPC服务,主要提供对数据库的查询和权限分配操作。

(5)NovaScheduler
完成Nova的核心调度,包括虚拟机硬件资源调度、节点调度等。同时,NovaScheduler决定了虚拟机创建的具体位置。

(6)NovaConsoleauth
实现对Nova控制台(VNC)的认证操作。

(7)NovaVncproxy
Nova的控制台组件,实现客户端与虚拟机实例的通信,在虚拟桌面领域运用较广泛。
可以通过一个Nova实例的启动过程来了解一下内部的数据和请求的运行情况。首先用户会通过Web界面或者CLI界面发送一个启动实例的请求,首先需要通过认证服务的Keystone的请求,进行身份的验证,通过之后将拿到的token向nova-api发送请求,在通过Glance镜像服务检查镜像image和类型flavor时候存在。通过上述验证后将启动实例的请求发送给计算服务的schedule调度节点,调度节点随机将此请求发送给一个compute节点,让其启动实例,计算节点接受请求之后会到Glance存在的计算节点开始下载镜像并启动实例,计算节点启动虚拟机的时候会通过Neutron的DHCP获取一个对应的IP等网络资源,再次在OVS网桥获取相应的端口,绑定虚拟机的虚拟网卡接口。至此实例的启动已经完成。

Nova集合了多个服务进程,每个进程扮演着不同的角色。用户通过RESTAPI接口访问,Nova的内部服务通过RPC消息服务通信。API服务产生数据读写的REST请求,然后产生REST应答。内部服务通信通过oslo.messaging库的RPC消息实现消息的通信。大部分共用一个中心数据库。也可以把中心数据放到对象层,实现不同OpenStack发布版本的兼容性,

在这里插入图片描述

3.调度机制(scheduler)

Scheduler模块在OpenStack中的作用就是决策虚拟机创建在哪个主机上,目前(截至Essex版本),调度仅支持计算节点。

(1)主机过滤

FilterScheduler首先得到未经过滤的主机列表,然后根据过滤属性,选择主机创建指定数目的虚拟机。
目前,OpenStack默认支持几种过滤策略,开发者也可以根据需要实现自己的过滤策略。在nova.scheduler.filters包中的过滤器有以下几种。

① AllHostsFilter:不做任何过滤,直接返回所有可用的主机列表。

② AvailabilityZoneFilter:返回创建虚拟机参数指定的集群内的主机。

③ ComputeFilter:根据创建虚拟机规格属性选择主机。

④ CoreFilter:根据CPU数过滤主机。

⑤ IsolatedHostsFilter:根据“image_isolated”和“host_isolated”标志选择主机。

⑥ JsonFilter:根据简单的JSON字符串指定的规则选择主机。

⑦ RamFilter:根据指定的RAM值选择资源足够的主机。

⑧ SimpleCIDRAffinityFilter:选择在同一IP段内的主机。

⑨ DifferentHostFilter:选择与一组虚拟机不同位置的主机。

⑩ SameHostFilter:选择与一组虚拟机相同位置的主机

在这里插入图片描述

2)权值计算
经过主机过滤后,需要对主机进行权值的计算。根据策略选择相应的某一台主机(对于每一个要创建的虚拟机而言)。尝试在一台不适合的主机上创建虚拟机的代价比在一台合适主机上创建的代价要高,例如,在一台高性能主机上创建一台功能简单的普通虚拟机的代价是高的。OpenStack对权值的计算需要一个或多个(Weight值代价函数)的组合,然后对每一个经过过滤的主机调用代价函数进行计算,将得到的值与Weight值相乘,得到最终的权值。OpenStack将在权值最小的主机上创建一台虚拟机

(3)配置文件讲解
Nova的安装与Glance组件的部署流程类似,Nova的子服务更多,把nova-compute单独部署在计算节点,Nova的其他服务部署在控制节点。
为了实现计算节点的Nova-compute服务与控制节点上Nova其他的子服务通信,需要在配置文件中配置Rabbit消息队列服务。(已配置)

vi /etc/nova/nova.conf

配置如下所示内容。、

[DEFAULT]
rpc_backend = rabbit

Nova服务的数据存储在MySQL数据库中,需要在数据库中创建Nova数据库并给予一定的权限,在Nova的配置文件中配置数据库连接,指向MySQL中的Nova数据库。
配置如下所示内容。

[api_database]
connection = mysql+pymysql://nova:000000@controller/nova_api

#mysql -uroot -p

执行如下所示的命令,赋予数据库权限。(已授予 可直接查看 show grants for nova)

mysql> CREATE DATABASE nova;
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIEDBY 'NOVA_DBPASS';
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIEDBY 'NOVA_DBPASS';
同步数据库:
# su -s /bin/sh -c "nova-manage db sync" nova

跟Glance组件一样,需要在Keystone创建nova用户,执行的命令和结果如下所示。
可通过 openstack user list 查看是否有nova用户
可通过openstack role list --user nova --project service查看nova的权限或者通过dashboard查看

#openstack user create --domain demo --password=NOVA_PASS --email=NOVA_EMAIL nova
+------------+-----------------------------------+
| Field       | Value                                   |
+------------+-----------------------------------+
| domain_id
| email
| enabled
| id
| name	| 93b9ddbc5e7d45bfa181bbd17cf08869
| NOVA_EMAIL
| True
| f3c7cd5a9dbb4893ba7db1e3f6695071
| nova	|
|
|
|
|
+------------+-----------------------------------+

赋予nova用户admin权限,并把nova用户规划到service租户下,同时在Keystone中注册Nova服务,服务类型为compute。执行的命令和结果如下所示。

# openstack role add --user=nova --project=service admin
# openstack service create --name=nova compute --description="OpenStack Compute" 

+-------------+-----------------------------------+
| Field        | Value                                   |
+-------------+-----------------------------------+
| description
| enabled
| id
| name
| type	| OpenStack Compute
| True
| 3b4d35a228654bd48a39b9cf0d00f646
| nova
| compute	|
|
|
|
|
+-------------+----------------------------------+

在Keystone中创建Nova计算服务的端点。执行的命令和结果如下所示。
可通过 openstack endpoint list查看

openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s

为了实现Nova服务调用其他服务,需要在Nova的配置文件中配置其通过Keystone的认证。在/etc/nova/nova.conf中插入配置信息

#openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis  osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend  rabbit
openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy   keystone
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 20.0.0.10
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf DEFAULT metadata_listen 0.0.0.0 
openstack-config --set /etc/nova/nova.conf DEFAULT metadata_listen_port 8775
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host controller
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid openstack
openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit  rabbit_password  000000
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:35357
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username  nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password 000000
openstack-config --set /etc/nova/nova.conf vnc vncserver_listen 20.0.0.10
openstack-config --set /etc/nova/nova.conf vnc vncserver_proxyclient_address 20.0.0.10
openstack-config --set /etc/nova/nova.conf glance api_servers http://controller:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp 

为了实现对平台虚拟机的访问,OpenStack提供了VNC的接入方式,需要在Nova的配置文件中配置vnc接入。(老版本)

[DEFAULT]
#rpc_backend = qpid
#qpid_hostname = controller
my_ip = 172.24.2.10
vncserver_listen = 172.24.2.10
vncserver_proxyclient_address = 172.24.2.10

(4)Nova的主要操作命令

Nova作为OpenStack的核心组件,拥有强大的功能、权限,可以对整个平台的资源(镜像、网络和存储等)进行管理,下面来看一下Nova的主要操作命令。

① Nova对镜像进行管理。
nova image-create
功能:通过快照创建镜像。
格式:

nova image-create [--show] [--poll] <server><name>

固定参数说明

<server>:做快照的实例的名字或者ID。
<name>:快照名字。

可选参数说明。

[--show] :打印出镜像信息。
[--poll]:显示进度。
  nova image-show 

功能:获取镜像的详细信息。(格式)

格式:nova image-show <image>

参数说明(格式)

<image>:所要查询的镜像的名字或者ID
nova image-list

执行结果如下所示
在这里插入图片描述
具体执行结果如下所示。

在这里插入图片描述

② Nova管理安全组规则

安全组,翻译成英文是security group。安全组是一些规则的集合,用来对虚拟机的访问流量加以限制,这反映到底层,就是使用iptables,给虚拟机所在的宿主机添加iptables规则。可以定义n个安全组,每个安全组可以有n个规则,可以给每个实例绑定n个安全组,Nova中总是有一个default安全组,这个是不能被删除的。创建实例的时候,如果不指定安全组,会默认使用这个default安全组。现在Nova中安全组应该会移到Neutron中,并且会增加对虚拟机外出流量的控制。现在Nova中的安全组只是对进入虚拟机的流量加以控制,对虚拟机外出流量没有加以限制。
常用的安全组命令如下。

nova secgroup-create

功能:创建安全组。
格式:

usage: nova secgroup-create <name><description>

参数说明 (格式)

<name>:安全组名字
<description>:安全组描述
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值