云计算 - OpenStack

虚拟化与云计算 专栏收录该内容
4 篇文章 1 订阅

一、云计算概述

1.1 为何需要云计算这种“新事物”

基础是虚拟化、前身是分布式计算

云计算的定义

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

实现目标

云的愿景: 使用计算资源使用网络资源向使用自来水一样按需自由有偿

1.2 云计算的分类

4 种 部署模型 和 3 种 服务模式。

云计算的四种部署模型如下:

  • 私有云。云端资源只给一个单位组织内的用户使用, 这是私有云的核心特征。而云端的所有权、日程管理和操作的主体到底属于谁并没有严格的规定,可能是本单位,也可能是第三方机构,还可能是二者的联合。云端可能位于本单位内部,也可能托管在其他地方。

  • 社区云。云端资源专门给固定的几个单位内的用户使用,而这些单位对云端具有相同的诉求(如安全要求、云端使命、规章制度、合规性要求等)。云端的所有权、日常管理的操作的主体可能是本社区内的一个或多个单位,也可能是社区外的第三方机构,还可能是二者的联合。云端可能部署在本地,也可能部署与他处。

  • 公共云。云端资源开发给社会公众使用。云端的所有权、日常管理和操作的主体可以是一个商业组织、学术机构、政府部门或者它们其中的几个联合。云端可能部署在本地,也可能部署于其他地方,比如中山市民公共云的云端可能就建在中山,也可能建在深圳。

  • 混合云。混合云由两个或两个以上不同类型的云(私有云、社区云、公共云)组成,它们各自独立,但用标准的或专有的技术将它们组合起点,而这些技术能实现云之间的数据和应用程序的平滑流转。由多个相同类型的云组合在一起,混合云属于多云的一种。私有云和公共云构成的混合云是目前最流行的——当私有云资源短暂性需求过大(称为云爆发,Cloud Bursting)时,自动租赁公共云资源来平抑私有云资源的需求峰值。例如,网店在节假日期间点击量巨大,这时就会临时使用公共云资源的应急。

云计算的3种服务模式如下:

  • 软件即服务(Software as a Service,SaaS)。云服务提供商把IT系通中的应用软件层作为服务租出去,消费者不用自己安装应用软件,直接使用即可,这进一步降低了云服务消费者的技术门槛。微软365

  • 平台即服务(Platform as a Service,Paas)。云服务提供商把IT系统中的平台软件层作为服务租出去,消费者自己开发或者安装程序,并运行程序。新浪云

  • 基础设施及服务(Infrastructure as a Service,Iaas)。云服务提供商把IT系统的基础设施层作为服务租出去,由消费者自己安装操作系统、中间件、数据库和应用程序。阿里云、腾讯云、AWS
    在这里插入图片描述

1.3 Openstack

Openstack介绍

  • OpenStack 是一个美国国家航天局和RackSpace 合作研发的,以Apache 许可证授权,并且是一个自由软件
  • OpensStack 是一个云平台管理的项目,它不是一个软件。这个项目由几个主要的组件组合起来完成一些工作,可以使用openstack来管理我们一个数据中心大量资源池。它里面包含了很多子项目
  • OpenStack 通过一个通过web 界面提供资源管理,通过一个仪表盘管理整个数据中心的计算存储资源等

二、OpenStack 框架说明

2.1 组件说明

由于不同版本的组件也各不相同,新版本中会出现越来越多的组件。主要针对 Juno这个版本说明它的组件。
在这里插入图片描述
核心组件及对应的功能服务

服务项目名称描述
Compute (计算服务)Nova负责实例生命周期的管理,计算资源的单位。对Hypervisor进行屏蔽,支持多种虚拟化技术(红帽默认为KVM),支持横向扩展
Image Service (镜像服务)Glance提供虚拟机镜像模板的注册与管理,将做好的操作系统拷贝为镜像模板,在创建虚拟机时直接使用,可支持多格式的镜像
Object Storage (对象存储)Swift为OpenStack提供基于云的弹性存储,支持集群无单点故障
Block Storage (块存储)Cinder负责为运行实例提供持久的块存储设备,可进行方便的扩展,按需付费,支持多种后端存储,即为云主机提供附加云盘
Networking (网络服务)Neutron负责虚拟网络的管理,为实例创建网络的拓扑结构。是面向租户的网络管理,可以自己定义自己的网络,各个租户之间互不影响
Dashboard (仪表板)Horizon提供一个Web管理界面,与OpenStack底层服务进行交互
ldentity Service (认证服务)Keystone类似于LDAP服务,对用户、租户和角色、服务进行认证与授权,且支持多认证机制
Orchestration (编排)Heat自动化部署应用,自动化管理应用的整个生命周期,主要用于Paas(平台即服务)
Telemetry (监控)Ceilometer用于度量、监控和控制数据资源的集中来源,为OpenStack用户提供记账途径
Database Service (数据库服务)Trove为用户在Openstack的环境提供可扩展和可靠的关系型和非关系型数据库引擎服务,主要用于帮助用户在复杂管理时进行资源的隔离,方便进行自动化管理操作
Data Processing (数据处理)SaharaSahara项目旨在使用用户能够在Openstack平台上便于创建和管理Hadoop以及其他计算框架集群,实现类似AWS的EMR(Amazon Elastic MapReduce service)服务

2.2 安装结构说明

  • 操作系统:CentOS7
  • OpenStack版本:juno
  • 关闭防火墙和SELinux
  • Controller Node:1 processor,2GB memory,and 5GB storage
  • Network Node:1 processor,512MB memory,and 5GB storage
  • Compute Node:1 processor,2GB memory,and 10GB storage

由拓扑可知,我们需四个虚拟机。由于我的PC资源有限,将多个组件的安装在controller虚拟机上。controller和block只需要一张网卡,连接管理网络上,compute多了一张网卡连接到实例网络。而neutron配置三张网卡,需要一张网卡连接到外网中。

在这里插入图片描述
IP地址规划

ControllerM(管理网络):192.168.222.5
NetworkM(管理网络):192.168.222.6
I(实例网络):172.16.0.6
E(外部网络):100.100.100.10
ComputeM(管理网络):192.168.222.10
I(实例网络):172.16.0.10
BlockM(管理网络):192.168.222.20

资源配置情况

controller2核、1.5G内存、1网卡、100G磁盘
computeMAX U 、6G内存、2网卡、100G磁盘
neutron2核、1.5G内存、3网卡、20G磁盘
block2核、1G内存、1网卡、20G磁盘,100G磁盘

2.3 基础环境构建

所需软件
链接:https://pan.baidu.com/s/1DrVFq6ObBqz-AN-sggUlFw
提取码:79rr
复制这段内容后打开百度网盘手机App,操作更方便哦

2.3.1 虚拟机设置

镜像使用CentOS-7.0-1406-x86_64-Everything.iso,百度网盘已提供

修改网络,添加三块仅主机模式网卡,ip配置如下

在这里插入图片描述

按照资源配置情况搭建创建四个虚拟机

controller

在这里插入图片描述

compute
compute 需要添加两块网卡

在这里插入图片描述

block

在这里插入图片描述

neutron

需要三块网卡

在这里插入图片描述

2.3.2 系统环境搭建

1. 使用serv-u软件配置局域网yum源

2. 配置ip地址

这里以neutron节点配置为例,后续三台根据ip地址规划配置即可

#第一块网卡,M
[root@localhost ~]$ vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
HWADDR=00:0C:29:39:D1:AD
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.222.6
NETMASK=255.255.255.0
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=90796e1d-5ede-490f-b491-1872775ca2fe
ONBOOT=yes



#第二块网卡,I
[root@localhost ~]$ vi /etc/sysconfig/network-scripts/ifcfg-eno33554960
HWADDR=00:0C:29:39:D1:B7
TYPE=Ethernet
BOOTPROTO=static
IPADDR=172.16.0.6
NETMASK=255.255.255.0
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=eno33554960
UUID=749903af-5252-438f-b57b-e465f747805e
ONBOOT=yes


#第三块网卡,E
[root@localhost ~]$ vi /etc/sysconfig/network-scripts/ifcfg-eno50332184
HWADDR=00:0C:29:39:D1:B7
TYPE=Ethernet
BOOTPROTO=static
IPADDR=100.100.100.10
NETMASK=255.255.255.0
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=eno33554960
UUID=749903af-5252-438f-b57b-e465f747805e
ONBOOT=yes


[root@localhost ~]$ systemctl restart network

3. 关闭NetworkManager、防火墙和selinux并设置主机名。

[root@localhost ~]$ systemctl stop NetworkManager && systemctl disable NetworkManager
 
[root@localhost ~]$ systemctl stop firewalld && systemctl disable firewalld
 
 
[root@localhost ~]$ sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
 
#注意,这里每台主机不一致
[root@localhost ~]$ hostnamectl set-hostname network.nice.com

[root@localhost ~]$ vi /etc/hosts
192.168.222.10 compute.nice.com 
192.168.222.6 network.nice.com 
192.168.222.5 controller.nice.com
192.168.222.20 block.nice.com
 

4. 配置OpenStack的局域网yum源

[root@localhost ~]$ cd /etc/yum.repos.d/
[root@localhost ~]$ mkdir back && mv * back/

[root@localhost ~]$ vi ftp.repo
[base]
name=base
baseurl=ftp://a:a@192.168.222.1/7/os/x86_64/ #这里的地址为serv-u软件显示的
enabled=1
gpgcheck=0

[updates]
name=updates
baseurl=ftp://a:a@192.168.222.1/7/updates/x86_64/
enabled=1
gpgcheck=0

[extras]
name=extras
baseurl=ftp://a:a@192.168.222.1/7/extras/x86_64/
enabled=1
gpgcheck=0

[epel]
name=epel
baseurl=ftp://a:a@192.168.222.1/7/epel
enabled=1
gpgcheck=0

[rdo]
name=rdo
baseurl=ftp://a:a@192.168.222.1/7/rdo
enabled=1
gpgcheck=0


[root@localhost ~]$ yum clean all && yum makecache

5. 安装 OpenStack 预备包

 
#1、安装 yum-plugin-priorities 包,防止高优先级软件被低优先级软件覆盖 
[root@localhost ~]$ yum -y install yum-plugin-priorities 
  
 
#注意:2、安装 epel 扩展 YUM 源 ,局域网yum源无需操作此步骤
[root@localhost ~]$ yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm 
   
 
#注意:3、安装 OpenStack YUM 源 ,局域网yum源无需操作此步骤
[root@localhost ~]$ yum -y install http://rdo.fedorapeople.org/openstack-juno/rdo-release-juno.rpm 
  
 
#4、更新操作系统 
[root@localhost ~]$ yum upgrade -y 
  
 
#注意:5、安装 OpenStack-selinux 自动管理 Selinux ,关闭selinux无需此操作
[root@localhost ~]$ yum -y install openstack-selinux

保存快照,其余三台主机同样操作

其他三台主机ip地址和主机名不通,其他环境和之前配置保持一致

Controller  	M(管理网络):192.168.222.5
hostnamectl set-hostname controller.nice.com

Compute         M(管理网络):192.168.222.10<br>I(实例网络):172.16.0.10
hostnamectl set-hostname compute.nice.com 

Block           M(管理网络):192.168.222.20
hostnamectl set-hostname block.nice.com

6. 配置时间同步服务器
controller作为ntp server,其它作为ntp客户端

controller节点配置:

[root@localhost ~]$ yum -y install  ntp

[root@localhost ~]$ vim /etc/ntp.conf
restrict 192.168.222.0 mask 255.255.255.0 nomodify notrap
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10

[root@localhost ~]$ systemctl start ntpd && systemctl enable ntpd

其它三个节点配置:

[root@localhost ~]$ yum install ntpdate -y
[root@localhost ~]$ ntpdate -u controller.nice.com
 
#编写计划任务,每一分钟同步时间
[root@localhost ~]$ crontab -e
*/1 * * * * /sbin/ntpdate -u controller.nice.com &> /dev/null
 
[root@localhost ~]$ systemctl restart crond &&  systemctl enable crond

注意:以下操作只是在controller节点进行

在controller节点安装数据库。

[root@localhost ~]$ yum install -y mariadb mariadb-server MySQL-python vim


#配置数据库文件,只需要在[mysqld]下面添加即可
[root@localhost ~]$ vim /etc/my.cnf
 
[mysqld]
bind-address = 192.168.222.5
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
 
 
#启动数据库并做初始化
[root@localhost ~]$ systemctl start mariadb && systemctl enable mariadb


[root@localhost ~]$ mysql_secure_installation
#密码我输入的是root,然后一路y

安装Message server服务,协调操作和状态信息服务。利用RabbitMQ这个开源的消息代理软件

[root@localhost ~]$ yum -y install rabbitmq-server 
[root@localhost ~]$ systemctl start rabbitmq-server
[root@localhost ~]$ systemctl enable rabbitmq-server
 
#可以修改rabbitmq的用户名和密码,默认都是guest可以通过下列命令修改
[root@localhost ~]$ rabbitmqctl change_password guest new_passwd

三、Keyston – 认证服务

3.1 组件说明

(1)什么是keystone?

Keystone是OpehStack Identity Service的项目名称,是一个负责身份管理与授权的组件

主要功能: 实现用户的身份认证,基于角色的权限管理,及openstack其他组件的访问地址和安全策略管理

(2)为什么需要keystone?

Keystone项目的主要目的 是给整个openstack的各个组件(nova, cinder, glance… )提供一个统一的验证方式

Keystone 的功能

  • 用户管理
    • Account 账户
    • Authentication 身份认证
    • Authorization 授权
  • 服务目录管理

认证服务中的关键字

  • User (用户) 一个人、 系统或服务在OpenStack中的数字表示。已经登录的用户分配令牌环以访问资源。用户可以直接分配给特定的租户,就像隶属于每个组。
  • Credentials (凭证) 用于确认用户 身份的数据。例如:用户名和密码,用户名和API key,或由认证服务提供的身份验证令牌
  • Authentication (验证) 确认用户 身份的过程。
  • Token (令牌) 一个用于访问OpenStack API和资源的字母数字字符串。一个临牌可以随时撤销,并且持续一段时间有效
  • Tenant (租户) 一个组织或孤立资源的容器。租户和可以组织或隔离认证对象。根据服务运营的要求,一个租户可以映射到客户、账户、组织或项目。
  • Service (服务) OpenStack服务, 例如计算服务(nova) ,对象存储服务(swift) ,或镜像服务(glance)。它提供了一个或多个端点,供用户访问资源和执行操作。
  • Endpoint(端点) 一个用于访问某个服务的可以通过网络进行访问的地址,通常是一个URL地址。
  • Role (角色) 定制化的包含特定用户权限和特权的权限集合
  • Keystone Client ( keystone命令行工具) Keystone的命令行工具。 通过该工具可以创建用户,角色,服务和端点等。

名词解释

用户:张三
凭证:身份证
验证:验证身份证
令牌:房卡
租户:宾馆
服务:住宿、餐饮
端点:路径
角色:VIP等级

3.2 组件之间的沟通方式

(1) 用户认证过程

在这里插入图片描述

  1. 用户输入用户名和密码发送给keystone,keystone会认证,看看有没有权限,如果有的话会返回一个token-1
  2. 用户想知道当前能为他提供的服务,看看有哪些租户,去访问对应的服务,如果不知道,拿着token-1去访问keystone,keystone会认证token-1有效期等,都没问题,返回当前的租户列表
  3. 用户知道访问什么端点了,比如要访问nova计算服务,用户再次发送用户名和密码到keystone,keystone会返回tocken-2和端点,用户拿着token-2去访问对应的端点,端点会拿着token-2去keystone认证,认证成功后,会反馈nova,然后返回给用户

(2)组件之间的交互过程
在这里插入图片描述

  1. 用户发送凭据到keystone,keystone回返回一个token给用户,用户拿着令牌环+对应的请求 去请求一个虚拟机到nova组件上,nova会拿着令牌环到keystone去认证,认证没问题
  2. token和请求的镜像会被转到glance组件,glance会拿着令牌环到keystone去认证有没有权限,如果有的话,glance会返回一个镜像到nova
  3. nova拿着用户的token+对应的请求到达quantum服务上,quantum服务会拿着令牌环到keystone去认证,认证之后,会返回镜像给用户

(3)用户-角色-服务交互图

在这里插入图片描述

  1. 一个用户允许有多个租户
  2. 一个用户可以绑定多个角色
  3. 一个角色可以关联不同的服务

3.3 keystone的安装配置

在前面基础环境搭建的基础上,在controller节点上安装和配置认证服务

3.3.1 配置先决条件

#1、创建认证服务数据库
#a.登录mysql数据库
[root@localhost ~]$ mysql -uroot -proot
 
#b.创建keystone数据库
MariaDB [(none)]> CREATE DATABASE keystone;
 
#c.创建keystone数据库用户,使其可以对keystone数据库有完全控制权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
 
#2、生成一个随机值作为管理令牌在初始配置
[root@localhost ~]$ openssl rand -hex 10:
d07011d79c7e42b38d53

3.3.2 安装并配置认证服务组件

#1、安装软件包
[root@localhost ~]$ yum -y install openstack-keystone python-keystoneclient
 
#2、编辑/etc/keystone/keyston.conf文件并作下列修改:
#a.修改[DEFAULT]小节,定义初始管理令牌。
[root@localhost ~]$ vim /etc/keystone/keystone.conf
[DEFAULT]
...
admin_token=d07011d79c7e42b38d53#刚才生成的随机值
 
#b.修改[database]小节,配置数据库访问
[database]
...
connection=mysql://keystone:KEYSTONE_DBPASS@controller.nice.com/keystone
 
#c.修改[token]小节,配置UUID提供者和SQL驱动
[token]
...
provider=keystone.token.providers.uuid.Provider
driver=keystone.token.persistence.backends.sql.Token
 
#d.(可选)开启详细日志,协助故障排除
[DEFAULT]
...
verbose=True
 
#3、常见通用证书的密钥,并限制相关文件的访问权限
[root@localhost ~]$ keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
[root@localhost ~]$ chown -R keystone:keystone /var/log/keystone
[root@localhost ~]$ chown -R keystone:keystone /etc/keystone/ssl
[root@localhost ~]$ chmod -R o-rwx /etc/keystone/ssl
 
#4、初始化keystone数据库
[root@localhost ~]$ su -s /bin/sh -c "keystone-manage db_sync" keystone
 
#5、启动identity服务并设置开机启动
[root@localhost ~]$ systemctl start openstack-keystone.service
[root@localhost ~]$ systemctl enable openstack-keystone.service

3.3.3 安装后进行配置

(1)默认情况下,服务器会无限存储到期的令牌,在资源有限的情况下会严重影响服务器性能。建议用计划任务,每小时删除过期的令牌

[root@localhost ~]$ (crontab -l -u keystone 2>&1 | grep -q token_flush) || echo '@hourly /usr/bin/keystone-manage token_flush>/var/log/keystone/keystone-tokenflush.log 2>&1'>> /var/spool/cron/keystone

(2)创建tenants(租户),(users)用户和(roles)角色

#配置先决条件
#1、配置管理员令牌
[root@localhost ~]$ export OS_SERVICE_TOKEN=d07011d79c7e42b38d53#刚才生成的字符串
 
#2、配置端点
[root@localhost ~]$ export OS_SERVICE_ENDPOINT=http://controller.nice.com:35357/v2.0
 
#3、创建租户用户和角色
#a.创建admin租户
[root@localhost ~]$ keystone tenant-create --name admin --description "Admin Tenant"

#b.创建admin用户
[root@localhost ~]$ keystone user-create --name admin --pass ADMIN_PASS --email 12345@163.com

#c.创建admin角色
[root@localhost ~]$ keystone role-create --name admin

#d.添加加admin租户和用户到admin角色
[root@localhost ~]$ keystone user-role-add --tenant admin --user admin --role admin

#e.创建用于dashboard访问的“_member_”角色
[root@localhost ~]$ keystone role-create --name _member_

#f.添加admin租户和用户到_member_角色
[root@localhost ~]$ keystone user-role-add --tenant admin --user admin --role _member_
 



#4、 创建一个用于演示的demo租户和用户
#创建demo租户
[root@localhost ~]$ keystone tenant-create --name demo --description "Demo Tenant"
#创建的demo用户
[root@localhost ~]$ keystone user-create --name demo --pass DEMO_PASS --email demo@163.com
#添加demo租户和用户到_member_角色
[root@localhost ~]$ keystone user-role-add --tenant demo --user demo --role _member_
 


#5、 OpenStack服务业需要一个租户,用户和角色和其他服务进行交互。因此我们创建一个service的租户。任何一个OpenStack服务都要和它关联
[root@localhost ~]$ keystone tenant-create --name service --description "Service Tenant"

(3)创建服务实体和API端点

#1、在OpenStack环境中,identity服务管理一个服务目录,并使用这个目录在OpenStack环境中定位其他服务。
#为identity服务创建一个服务实体
[root@localhost ~]$ keystone service-create --name keystone --type identity --description "OpenStackIdentity"
 
#2、OpenStack环境中,identity服务管理目录以及与服务相关API断点。服务使用这个目录来沟通其他服务。
#OpenStack为每个服务提供了三个API端点:admin(管理),internal(内部),public(公共)为identity服务#创建API端点
[root@localhost ~]$ keystone endpoint-create --service-id $(keystone service-list | awk '/ identity / {print $2}') --publicurl http://controller.nice.com:5000/v2.0 --internalurl http://controller.nice.com:5000/v2.0 --adminurl http://controller.nice.com:35357/v2.0 --region regionOne

3.3.4 确认操作

#1、删除OS_SERVICE_TOKEN 和OS_SERVICE_ENDPOINT 临时变量
[root@localhost ~]$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
 
#2、使用admin租户和用户请求认证令牌
[root@localhost ~]$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS --os-auth-url http://controller.nice.com:35357/v2.0 token-get
 
#3、以admin租户和用户的身份查看租户列表
[root@localhost ~]$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS --os-auth-url http://controller.nice.com:35357/v2.0 tenant-list
 
#4、以admin租户和用户的身份查看用户列表
[root@localhost ~]$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS --os-auth-url http://controller.nice.com:35357/v2.0 user-list
 
#5、以admin租户和用户的身份查看角色列表
[root@localhost ~]$ keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS --os-auth-url http://controller.nice.com:35357/v2.0 role-list
 
#6、以demo租户和用户的身份请求认证令牌(这个是允许的)
[root@localhost ~]$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS --os-auth-url http://controller.nice.com:35357/v2.0 token-get
 
#7、以demo租户和用户的身份查看用户列表(这个不允许)
[root@localhost ~]$ keystone --os-tenant-name demo --os-username demo --os-password DEMO_PASS --os-auth-url http://controller.nice.com:35357/v2.0 user-list

3.3.5 创建OpenStack客户端环境脚本

为了方便使用上面的环境变量和命令选项,我们为admin和demo租户和用户创建环境脚本。(后面会用到)

  1. 编辑admin-openrc.sh
[root@localhost ~]$ vim admin-openrc.sh
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller.nice.com:35357/v2.0
  1. 编辑demo-openrc.sh
[root@localhost ~]$ vim demo-openrc.sh
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller.nice.com:5000/v2.0

加载客户端环境脚本

[root@localhost ~]$ source admin-openrc.sh

四、Glance – 镜像服务

4.1 Glance-镜像服务介绍

(1)服务功能

  • OpenStack镜像服务( glance )使用户能够发现、注册并检索虚拟机镜像( . img文件)
  • 它提供了一个REST API接口,使用户可以查询虚拟机镜像元数据和检索-个实际的镜像文件
  • 不论是简单的文件系统还是OpenStack 对象存储,你都可以通过镜像服务在不同的位置存储虚拟机镜像
  • 默认情况下,上传的虚拟机镜像存储路径为/var/lib/glance/images/

(2)组件说明

  • glance-api: 一个用来接收镜像发现、检索和存储的API接口
  • glance-registry: 用来存储、处理和检索镜像的元数据。元数据包含对象的大小和类型。glance-registry是一个OpenStack镜像服务使用的内部服务,不要透露给用户。
  • Database: 用于存储镜像的元数据的大小、类型,支持大多数数据库,一般选择MySQL或SQLite
  • Storage repository for image files: 镜像文件的存储仓库。支持包括普通文件系统在内的各种存储类型。包括对象存储、块设备、HTTP、Amazon S3,但有些存储只支持只读访问

(3)基本概念

Image Identifiers:就是Image URL,格式:/images/ 全局唯一

  • Image Status(镜像状态):

    • Queued: 镜像ID已被保留,镜像还没有上传
    • Saving: 镜像正在被上传
    • Active: 镜像可以使用了
    • Killed: 镜像损坏或者不可用
    • Deleted: 镜像被删除
  • Disk Format(磁盘格式):

    • Raw: This is unstructured disk image format
    • Vhd: VMWare、 XEN、Microsoft、 VirtualBox
    • Vndk: common format
    • Vdi: VirtualBox、 QEMU emulator
    • ISO: optical disc
    • Qcow2: QEMU emulator
    • Aki: Amazon Kernel Image
    • Ari: Amazon ramdisk image
    • Ami: Amazon machine image
  • Container Format(容器格式)

    • Bare
    • Ovf
    • Aki
    • Ami
    • Ari

(4)组件工作流

在这里插入图片描述

4.2 glance 服务安装配置

依旧是在controller节点上安装配置glance服务。

(1)配置先决条件

#1、创建数据库
#a.以数据库管理员root的身份登录数据库
[root@localhost ~]$  mysql -uroot -proot
 
#b.创建glance数据库
MariaDB [(none)]> CREATE DATABASE glance;
 
#c.创建数据库用户glance,并授予其对glance数据库的管理权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
 
#d.退出数据库连接
MariaDB [(none)]> exit
 
#2、启用admin环境脚本
[root@localhost ~]$ source admin-openrc.sh
 
#3、创建认证服务凭证,完成下列步骤:
#a.创建glance用户
[root@localhost ~]$ keystone user-create --name glance --pass GLANCE_PASS
 
#b.将glance用户链接到service租户和admin角色
[root@localhost ~]$ keystone user-role-add --user glance --tenant service --role admin
 
#c.创建glance服务
[root@localhost ~]$ keystone service-create --name glance --type image --description "OpenStackImage Service"
 
#4、为OpenStack镜像服务创建认证服务端点
[root@localhost ~]$ keystone endpoint-create --service-id $(keystone service-list | awk '/ image / {print $2}') --publicurl http://controller.nice.com:9292 --internalurl http://controller.nice.com:9292 --adminurl http://controller.nice.com:9292 --region regionOne

(2)安装并配置镜像服务组件

#1、安装软件包
[root@localhost ~]$ yum -y install openstack-glance python-glanceclient
 
#2、编辑/etc/glance/glance-api.conf文件,并完成下列操作
#a.修改[database]小节,配置数据库连接:
[root@localhost ~]$ vim /etc/glance/glance-api.conf

[database]
...
connection=mysql://glance:GLANCE_DBPASS@controller.nice.com/glance
 
#b.修改[keystone_authtoken]和[paste_deploy]小节,配置认证服务访问:
[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=glance
admin_password=GLANCE_PASS
 
[paste_deploy]
...
flavor=keystone
 
#c.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True
 
 
#3、编辑/etc/glance/glance-registry.con文件,并完成下列配置:
[root@localhost ~]$ vim /etc/glance/glance-registry.conf
#a.在[database]小节中配置数据库连接:
[database]
...
connection=mysql://glance:GLANCE_DBPASS@controller.nice.com/glance
 
#b.在[keystone_authtoken]和[paste_deploy]小节中配置认证服务访问
[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=glance
admin_password=GLANCE_PASS
 
[paste_deploy]
...
flavor=keystone
 
#c.在[glance_store]小节中配置本地文件系统存储和镜像文件的存放路径
[glance_store]
...
default_store=file
filesystem_store_datadir=/var/lib/glance/images/
 
#d.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True

 
#4、初始化镜像服务的数据库
[root@localhost ~]$ su -s /bin/sh -c "glance-manage db_sync" glance

(3)启动镜像服务并设置开机自动启动:

[root@localhost ~]$ systemctl enable openstack-glance-api.service openstack-glance-registry.service
[root@localhost ~]$ systemctl start openstack-glance-api.service openstack-glance-registry.service

(4)上传镜像
镜像文件百度网盘已提供,cirros-0.3.3-x86_64-disk.img

#下载lrzsz工具直接在xshell上传文件

[root@localhost ~]$ yum -y install lrzsz 

glance image-create相关选项含义:

--name <NAME>                          镜像名称。
--file <FILE>                          要上传文件及路径。
--disk-format <DISK_FORMAT>            镜像的磁盘格式。可以支持:ami, ari, aki, vhd, vmdk, raw, qcow2, vdi,iso格式。
--container-format <CONTAINER_FORMAT>  镜像容器格式。可以支持:ami, ari, aki, bare, ovf格式。
--is-public {True,False}               镜像是否可以被公共访问。
--progress                             显示上传进度。
#上传镜像
[root@localhost ~]$ glance image-create --name "cirros-0.3.3-x86_64" --file cirros-0.3.3-x86_64-disk.img --disk-format qcow2 --container-format bare --is-public True --progress

[root@localhost ~]$ glance image-list
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| ID                                   | Name                | Disk Format | Container Format | Size     | Status |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| 122c7ca3-b14d-4091-9cb0-60acf06a11cd | cirros-0.3.3-x86_64 | qcow2       | bare             | 13200896 | active |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+


#删除临时目录
[root@localhost ~]$ rm -f /tmp/images

五、Nova – 计算服务

5.1 Nova是什么?

  • Openstack是由Rackspace 和NASA 共同开发的云计算平台
  • 类似于Amazon EC2和S3的云基础架构服务
  • Nova在Openstack 中提供云计算(虚拟化管理)服务
  • 超过140家企业及18470 为开发者参与开发

5.1.1 组件说明

(1)组件说明-API

  • nova-api service 接收并响应终端用户计算API调用。该服务支持OpenStack 计算API,Amazon EC2和特殊的管理特权API
  • nova-api-metadata service 接受从实例元数据发来的请求。该服务通常与nova-network 服务在安装多主机模式下运行

(2)组件说明-Core

  • nova-compute service 一个守护进程,通过虚拟化层API接口创建和终止虚拟机实例。例如: XenAPI for XenServer/XCP,libvirt for KVM or QEMU,VMwareAPI for Vmware
  • nova-scheduler service 从队列中获取虚拟机实例请求,并确认由哪台计算服务运行该虚拟机
  • nova-conductor module 协调nova-compute 服务和database 之间的交互数据。避免nova-compute服务直接访问云数据库。不要将该模块部署在nova-compute 运行的节点上

(3)组件说明-Networking

  • nova- network worker daemon 类似于nova- compute服务,接受来自队列的网络任务和操控网络。比如这只网卡桥接或改变iptables规则
  • nova-consoleauth daemon在控制台代理提供用户授权令牌
  • nova- novneproxy daemon 提供了一个通过VNC连接来访问运行的虚拟机实例的代理。支持基于浏览器的novnc客户端
  • nova-spicehtml5proxy daemon 提供了-一个通过spice 连接来访问运行的虚拟机实例的代理。支持基于浏览器的HTML5客户端
  • nova-xvpnvncproxy daemon 提供了一个通过VNC连接来访问运行的虚拟机实例的代理。支持OpenStack-specific Java 客户端
  • nova-cert daemon x509证书

(4)组件说明-other

  • nova-objectstore daemon 一个Amazon S3的接口,用于将Amazon S3的镜像注册到OpenStackeuca2ools client 用于兼容于Amazon E2接口的命令行工具
  • nova client nova命令行工具
  • The queue 在进程之间传递消息的中心。通常使用RabbitMQ
  • SQLdatabase保存云基础设置建立和运行时的状态信息

5.1.2 组件沟通方式

(1)组件的位置顺序
在这里插入图片描述

(2)Nova内部沟通

在这里插入图片描述

(3)Nova同其他组件沟通

在这里插入图片描述
(4)虚拟机启动流程

在这里插入图片描述

5.2 Nova安装配置

请在前面实验的基础上继续做以下操作

5.2.1 controller节点配置

(1)配置先决条件

#1、创建数据库,完成下列步骤:
#a.使用数据库管理员root登录数据库
[root@localhost ~]$ mysql -uroot -proot
 
#b.创建nova数据库
MariaDB [(none)]> CREATE DATABASE nova;
 
#c.创建数据库用户nova,并授予nova用户对nova数据库的完全控制权限。
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
 
#2、执行admin环境脚本
[root@localhost ~]$ source admin-openrc.sh
 
#3、在认证服务中创建计算服务的认证信息。完成下列步骤:
#a.创建nova用户
[root@localhost ~]$ keystone user-create --name nova --pass NOVA_PASS
 
#b.链接nova用户到service租户和admin角色
[root@localhost ~]$ keystone user-role-add --user nova --tenant service --role admin
 
#c.创建nova服务
[root@localhost ~]$ keystone service-create --name nova --type compute --description "OpenStackCompute"
 
#4、创建计算服务端点
[root@localhost ~]$ keystone endpoint-create --service-id $(keystone service-list | awk '/ compute / {print $2}') --publicurl http://controller.nice.com:8774/v2/%\(tenant_id\)s --internalurl http://controller.nice.com:8774/v2/%\(tenant_id\)s --adminurl http://controller.nice.com:8774/v2/%\(tenant_id\)s --region regionOne

(2)安装和配置计算控制组件

#1、安装软件包
[root@localhost ~]$ yum install openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler python-novaclient -y
 
#2、编辑/etc/nova/nova.conf文件,完成如下操作:
[root@localhost ~]$ vim /etc/nova/nova.conf
#a.编辑[database]小节,配置数据库访问:没找到直接创建
[database]
...
connection=mysql://nova:NOVA_DBPASS@controller.nice.com/nova
 
#b.编辑[DEFAULT]小节,配置RabbitMQ消息队列访问:
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest
 
#c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务
[DEFAULT]
...
auth_strategy=keystone

[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=nova
admin_password=NOVA_PASS
 
#d.编辑[DEFAULT]小节,配置my_ip选项为controller节点的管理接口ip:
[DEFAULT]
...
my_ip=192.168.222.5
 
#e.编辑[DEFAULT]小节,配置VNCdialing服务的使用controller节点的管理接口ip:
[DEFAULT]
...
vncserver_listen=192.168.222.5
vncserver_proxyclient_address=192.168.222.5
 
#f.编辑[glance]小节,配置镜像服务器的位置:
[glance]
...
host=controller.nice.com
#g.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True
 
#3、初始化计算数据库
[root@localhost ~]$ su -s /bin/sh -c "nova-manage db sync" nova

(3)启动计算服务并配置开机自动启动

[root@localhost ~]$ systemctl enable openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
 
[root@localhost ~]$ systemctl start openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service



[root@controller ~]$ nova service-list
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
| Id | Binary           | Host                | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
| 1  | nova-consoleauth | controller.nice.com | internal | enabled | up    | 2021-04-19T16:10:49.000000 | -               |
| 2  | nova-scheduler   | controller.nice.com | internal | enabled | up    | 2021-04-19T16:10:49.000000 | -               |
| 3  | nova-cert        | controller.nice.com | internal | enabled | up    | 2021-04-19T16:10:49.000000 | -               |
| 4  | nova-conductor   | controller.nice.com | internal | enabled | up    | 2021-04-19T16:10:49.000000 | -               |
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------

5.2.2 compute节点配置

(1)安装并配置计算虚拟化组件

#1、安装软件包
[root@localhost ~]$ yum -y install openstack-nova-compute sysfsutils
 
#2、编辑/etc/nova/nova.conf文件,完成下列步骤:
[root@localhost ~]$ vim /etc/nova/nova.conf
#a.编辑[DEFAULT]小节,配置RabbitMQ消息队列访问:
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest
 
#b.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务访问:
[DEFAULT]
...
auth_strategy=keystone

[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=nova
admin_password=NOVA_PASS

#c.编辑[DEFAULT]小节,配置my_ip配置项:
[DEFAULT]
...
my_ip=192.168.222.10
 
#d.编辑[DEFAULT]小节,开启并配置远程控制台访问
[DEFAULT]
...
vnc_enabled=True
vncserver_listen=0.0.0.0
vncserver_proxyclient_address=192.168.222.10
novncproxy_base_url=http://controller.nice.com:6080/vnc_auto.html
 
#e.编辑[glance]小节,配置镜像服务器位置
[glance]
...
host=controller.nice.com
 
#f.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True

(2)确认你的计算节点是否支持硬件虚拟化

[root@localhost ~]$ egrep -c '(vmx|svm)' /proc/cpuinfo
#如果返回值>=1,则说明你的计算节点硬件支持虚拟化,无需额外配置。
#如果返回值=0,则活命你的计算节点硬件不支持虚拟化,你必须配置libvirt由使用KVM改为QEMU。

要想在虚拟机再实现虚拟化,需要手动编辑虚拟机设置(需关机进行)

在这里插入图片描述

(3)在/etc/nova/nova.conf文件中编辑[libvirt]小节

[root@localhost ~]$ vim /etc/nova/nova.conf
[libvirt]
...
virt_type=qemu

(4)启动计算服务及依赖服务,并设置他们开机自动启动。

[root@localhost ~]$ systemctl enable libvirtd.service openstack-nova-compute.service
[root@localhost ~]$ systemctl start libvirtd.service openstack-nova-compute.service

六、Neutron – 网络服务

6.1 neutron网络介绍

(1)neutron基本概念

  • 网络连接服务
  • 面向租户API接口,用于创建虚拟网络、路由器、负载均衡、关联网络接口至指定网络和路由
  • 通过API接口管理虚拟或物理交换机
  • 提供Plugin架构来支持不同的技术平台
  • Neutron Private Network——提供固定私网地址
  • Neutron Public Network——提供浮动IP 地址

(2)neutron关键概念

  • Network
    • 一个L2网络单元
    • 租户可通过Neutron API创建自己的网络
  • Subnet
    • 一段IPV4/IPV6 地址段
    • 为Instance提供私网或公网地址
  • Router
    • 三层路由器
    • 为租户的Instance 提供路由功能
  • Port
    • 虛拟交换机上的端口
    • 管理Instance 的网卡

(3)组件架构
在这里插入图片描述

(4)neutron plugin

  • Open vSwitch
  • Linux Bridge
  • Ciso NX1000
  • Nicira NVP
  • Ryu
  • NEC OpenFlow
  • Floodnight

(5)neutron+Nova架构

在这里插入图片描述

(6)neutron组件
在这里插入图片描述

组件沟通方式

在这里插入图片描述
(7)neutron常见的构建类型

  • Single FLAT Network
  • Multi FLAT Ne twork
  • Mixed FLAT and Private Network
  • Provider Router with Private Network
  • Per-tenant Routers with Private Network

6.2 neutron配置

6.2.1 配置controller节点

(1)创建数据库

#a.使用root用户连接mysql数据库
[root@localhost ~]$ mysql -u root -proot
 
#b.创建neutron数据库
MariaDB [(none)]> CREATE DATABASE neutron;
 
#c.创建数据库用户neutron,并授予neutron用户对neutron数据库完全控制权限
MariaDB [(none)]>  GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';

MariaDB [(none)]>  GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
#d.退出数据库连接
MariaDB [(none)]> exit

(2)执行admin环境变量脚本并在认证服务中创建网络服务的认证信息

[root@localhost ~]$ source admin-openrc.sh

#a.创建neutron用户
[root@localhost ~]$ keystone user-create --name neutron --pass NEUTRON_PASS

#b.连接neutron用户到serivce租户和admin角色
[root@localhost ~]$ keystone user-role-add --user neutron --tenant service --role admin
 
#c.创建neutron服务
[root@localhost ~]$ keystone service-create --name neutron --type network --description "OpenStackNetworking"
 
#d.创建neutron服务端点
[root@localhost ~]$ keystone endpoint-create \
--service-id $(keystone service-list | awk '/ network / {print $2}') \
--publicurl http://controller.nice.com:9696 \
--adminurl http://controller.nice.com:9696 \
--internalurl http://controller.nice.com:9696 \
--region regionOne

(3)安装网络服务组件并配置

#安装
[root@localhost ~]$ yum install openstack-neutron openstack-neutron-ml2 python-neutronclient which -y
 
#配置网络服务组件
#编辑/etc/neutron/neutron.conf文件,并完成下列操作:
[root@localhost ~]$ vi /etc/neutron/neutron.conf
#a.编辑[database]小节,配置数据库访问
[database]
...
connection=mysql://neutron:NEUTRON_DBPASS@controller.nice.com/neutron
 
#b.编辑[DEFAULT]小节,配置RabbitMQ消息队列访问:
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest
 
#c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务访问:
[DEFAULT]
...
auth_strategy=keystone
[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=neutron
admin_password=NEUTRON_PASS
 
#d.编辑[DEFAULT]小节,启用Modular Layer2(ML2)插件,路由服务和重叠IP地址功能:
[DEFAULT]
...
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=True
 
#e.编辑[DEFAULT]小节,配置当网络拓扑结构发生变化时通知计算服务:
[DEFAULT]
...
notify_nova_on_port_status_changes=True
notify_nova_on_port_data_changes=True
nova_url=http://controller.nice.com:8774/v2
nova_admin_auth_url=http://controller.nice.com:35357/v2.0
nova_region_name=regionOne
nova_admin_username=nova
nova_admin_password=NOVA_PASS
nova_admin_tenant_id=6314a79ce92c4dd8a48c8a6a47b8d715#SERVICE_TENANT_ID
#注:可通过keystone tenant-get service,获取service租户ID。
 
#f.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True

(4)配置Modular Layer 2 (ML2) plug-in

#编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件,并完成下列操作:
[root@localhost ~]$ vi /etc/neutron/plugins/ml2/ml2_conf.ini
#a.编辑[ml2]小节,启用flat和generic routing encapsulation (GRE)网络类型驱动,配置GRE租户网络和OVS驱动机制。
 
[ml2]
...
type_drivers=flat,gre
tenant_network_types=gre
mechanism_drivers=openvswitch
 
#b.编辑[ml2_type_gre]小节,配置隧道标识范围:
[ml2_type_gre]
...
tunnel_id_ranges=1:1000
 
#c.编辑[securitygroup]小节,启用安全组,启用ipset并配置OVS防火墙驱动:
[securitygroup]
...
enable_security_group=True
enable_ipset=True
firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

(5)配置计算服务使用Neutron,默认情况下,计算服务使用传统网络,我们需要重新配置。

编辑/etc/nova/nova.conf文件,并完成下列操作:

[root@localhost ~]$ vim /etc/nova/nova.conf

#a.编辑[DEFAULT]小节,配置API接口和驱动程序:
[DEFAULT]
...
network_api_class=nova.network.neutronv2.api.API
security_group_api=neutron
linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver=nova.virt.firewall.NoopFirewallDriver
 
#b.编辑[neutron]小节,配置访问参数:
[neutron]
...
url=http://controller.nice.com:9696
auth_strategy=keystone
admin_auth_url=http://controller.nice.com:35357/v2.0
admin_tenant_name=service
admin_username=neutron
admin_password=NEUTRON_PASS

(6)完成配置

#1、为ML2插件配置文件创建连接文件。
[root@localhost ~]$ ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

#2、初始化数据库
[root@localhost ~]$ su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron

#3、重新启动计算服务
[root@localhost ~]$ systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service

#4、启动网络服务并配置开机自动启动
[root@localhost ~]$ systemctl enable neutron-server.service && systemctl start neutron-server.service

(7)验证

#1.执行admin环境变量脚本
[root@localhost ~]$ source admin-openrc.sh


#2.列出加载的扩展模块,确认成功启动neutron-server进程。
[root@localhost ~]$ neutron ext-list 
+-----------------------+-----------------------------------------------+
| alias                 | name                                          |
+-----------------------+-----------------------------------------------+
| security-group        | security-group                                |
| l3_agent_scheduler    | L3 Agent Scheduler                            |
| ext-gw-mode           | Neutron L3 Configurable external gateway mode |
| binding               | Port Binding                                  |
| provider              | Provider Network                              |
| agent                 | agent                                         |
| quotas                | Quota management support                      |
| dhcp_agent_scheduler  | DHCP Agent Scheduler                          |
| l3-ha                 | HA Router extension                           |
| multi-provider        | Multi Provider Network                        |
| external-net          | Neutron external network                      |
| router                | Neutron L3 Router                             |
| allowed-address-pairs | Allowed Address Pairs                         |
| extraroute            | Neutron Extra Route                           |
| extra_dhcp_opt        | Neutron Extra DHCP opts                       |
| dvr                   | Distributed Virtual Router                    |
+-----------------------+-----------------------------------------------+

6.2.2 配置network(neutron)节点

(1)配置先决条件

#1、编辑/etc/sysctl.conf文件,包含下列参数:
[root@localhost ~]$ vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
 
#2、使更改生效
[root@localhost ~]$ sysctl -p

(2)安装网络组件并配置

[root@localhost ~]$ yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch vim


#配置网络通用组件,网络通用组件配置包含认证机制,消息队列及插件。
#编辑/etc/neutron/neutron.conf文件并完成下列操作:
[root@localhost ~]$ vim /etc/neutron/neutron.conf
#a.编辑[database]小节,注释任何connection选项。因为network节点不能直接连接数据库。
#b.编辑[DEFAULT]小节,配置RabbitMQ消息队列访问
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest

#c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务访问:
[DEFAULT]
...
auth_strategy=keystone

[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=neutron
admin_password=NEUTRON_PASS

#d.编辑[DEFAULT]小节,启用Modular Layer2(ML2)插件,路由服务和重叠IP地址功能:
[DEFAULT]
...
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=True

#e.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错
[DEFAULT]
...
verbose=True

(3)配置Modular Layer 2 (ML2) plug-in,ML2插件使用Open vSwitch(OVS)机制为虚拟机实例提供网络框架。

#编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成下列操作
[root@localhost ~]$ vim /etc/neutron/plugins/ml2/ml2_conf.ini
#a.编辑[ml2]小节,启用flat和generic routing encapsulation (GRE)网络类型驱动,配置GRE租户网络和OVS驱动机制。
[ml2]
...
type_drivers=flat,gre
tenant_network_types=gre
mechanism_drivers=openvswitch
 
#b.编辑[ml2_type_flat]小节,配置外部网络:
[ml2_type_flat]
...
flat_networks=external
 
#c.编辑[ml2_type_gre]小节,配置隧道标识范围:
[ml2_type_gre]
...
tunnel_id_ranges=1:1000
 
#d.编辑[securitygroup]小节,启用安全组,启用ipset并配置OVS防火墙驱动:
[securitygroup]
...
enable_security_group=True
enable_ipset=True
firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
 
#e.编辑[ovs]小节,配置Open vSwitch(OVS) 代理
[ovs]
...
local_ip=172.16.0.6
tunnel_type=gre
enable_tunneling=True
bridge_mappings=external:br-ex

(4)配置Layer-3 (L3) agent

#编辑/etc/neutron/l3_agent.ini文件并完成下列配置:
[root@localhost ~]$ vim /etc/neutron/l3_agent.ini
#a.编辑[DEFAULT]小节,配置驱动,启用网络命名空间,配置外部网络桥接
[DEFAULT]
...
interface_driver= neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces=True
external_network_bridge=br-ex
 
#b.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True

(5)配置DHCP agent

#1、编辑/etc/neutron/dhcp_agent.ini文件并完成下列步骤:
[root@localhost ~]$ vim /etc/neutron/dhcp_agent.ini
#a.编辑[DEFAULT]小节,配置驱动和启用命名空间
[DEFAULT]
...
interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
use_namespaces=True
 
#b.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
debug=True
 
#2、(可选,在VMware虚拟机中可能是必要的!)配置DHCP选项,将MUT改为1454bytes,以改善网络性能。
#a.编辑/etc/neutron/dhcp_agent.ini文件,先编辑[DEFAULT]小节,启用dnsmasq配置:
[DEFAULT]
...
dnsmasq_config_file=/etc/neutron/dnsmasq-neutron.conf
 
#b.创建并编辑/etc/neutron/dnsmasq-neutron.conf文件并完成下列配置:
[root@localhost ~]$ vim /etc/neutron/dnsmasq-neutron.conf
#启用DHCP MTU选项(26)并配置值为1454bytes
dhcp-option-force=26,1454
user=neutron
group=neutron
 
#c.终止任何已经存在的dnsmasq进行,shell中敲下面这个命令
[root@localhost ~]$ pkill dnsmasq

(6)配置metadata agent

#1、编辑/etc/neutron/metadata_agent.ini文件并完成下列配置:
[root@localhost ~]$ vim /etc/neutron/metadata_agent.ini
#a.编辑[DEFAULT]小节,配置访问参数:
[DEFAULT]
...
auth_url=http://controller.nice.com:5000/v2.0
auth_region=regionOne
admin_tenant_name=service
admin_user=neutron
admin_password=NEUTRON_PASS
 
#b.编辑[DEFAULT]小节,配置元数据主机:
[DEFAULT]
...
nova_metadata_ip=controller.nice.com
 
#c.编辑[DEFAULT]小节,配置元数据代理共享机密暗号:
[DEFAULT]
...
metadata_proxy_shared_secret=METADATA_SECRET
 
#b.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
debug=True

(7)下面需要在controller节点配置

#编辑/etc/nova/nova.conf文件并完成下列配置
[root@localhost ~]$ vim /etc/nova/nova.conf
#编辑[neutron]小节,启用元数据代理并配置机密暗号:
[neutron]
...
service_metadata_proxy=True
metadata_proxy_shared_secret=METADATA_SECRET
 
#在controller节点,重新启动computeAPI服务
[root@localhost ~]$ systemctl restart openstack-nova-api.service

(8)回到neutron节点上来,配置Open vSwitch(OVS)服务

#1、启动VOS服务并配置开机自动启动:
[root@localhost ~]$ systemctl enable openvswitch.service && systemctl start openvswitch.service
 
#2、添加外部网桥(external birdge)
[root@localhost ~]$ ovs-vsctl add-br br-ex
 
#3、添加一个端口到外部网桥,用于连接外部物理网络
[root@localhost ~]$ ovs-vsctl add-port br-ex eno50332184 #INTERFACE_NAME
#注:将INTERFACE_NAME换成实际连接外部网卡接口名。如:eth2或eno50332208。

(9)完成安装

#1.创建网络服务初始化脚本的符号连接
[root@localhost ~]$ ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

[root@localhost ~]$ cp /usr/lib/systemd/system/neutron-openvswitch-agent.service /usr/lib/systemd/system/neutron-openvswitch-agent.service.orig

[root@localhost ~]$ sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /usr/lib/systemd/system/neutron-openvswitch-agent.service




#2.启动网络服务并设置开机自动启动
[root@localhost ~]$ systemctl enable neutron-openvswitch-agent.service neutron-l3-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-ovs-cleanup.service

[root@localhost ~]$ systemctl start neutron-openvswitch-agent.service neutron-l3-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-ovs-cleanup.service

(10)验证(在controller节点执行下列命令)

#1.执行admin环境变量脚本
[root@localhost ~]$ source admin-openrc.sh

#2.列出neutron代理,确认启动neutron agents成功。
[root@localhost ~]$ neutron agent-list
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
| id                                   | agent_type         | host             | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
| 036b19f9-6af8-46ec-9d8f-3fe4915aa68a | Metadata agent     | network.nice.com | :-)   | True           | neutron-metadata-agent    |
| 2633f9e4-325a-4144-ab73-0b955326c744 | Open vSwitch agent | network.nice.com | :-)   | True           | neutron-openvswitch-agent |
| 68177d80-3d69-42b8-84e4-f9011fdeceb9 | L3 agent           | network.nice.com | :-)   | True           | neutron-l3-agent          |
| ad34a3ca-4f6a-40f9-8a68-1fcdcda4633d | DHCP agent         | network.nice.com | :-)   | True           | neutron-dhcp-agent        |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+

6.2.3 配置compute节点

(1)配置先决条件

#1、编辑/etc/sysctl.conf文件,使其包含下列参数:
[root@localhost ~]$ vi /etc/sysctl.conf
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
 
#2、使/etc/sysctl.conf文件中的更改生效:
[root@localhost ~]$ sysctl -p

(2)安装网络组件并配置网络通用组件

[root@localhost ~]$ yum -y install openstack-neutron-ml2 openstack-neutron-openvswitch vim
 
#编辑/etc/neutron/neutron.conf文件并完成下列操作:
[root@localhost ~]$ vim /etc/neutron/neutron.conf
#a.编辑[database]小节,注释左右connection配置项。因为计算节点不能直接连接数据库。
# connection = mysql://root:pass@127.0.0.1:3306/neutron
 
#b.编辑[DEFAULT]小节,配置RabbitMQ消息代理访问:
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest
 
#c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务访问:
[DEFAULT]
...
auth_strategy=keystone

[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=neutron
admin_password=NEUTRON_PASS
 
#d.编辑[DEFAULT]小节,启用Modular Layer2(ML2)插件,路由服务和重叠ip地址功能:
[DEFAULT]
...
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=True
 
#e.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True

(3)配置Modular Layer 2 (ML2) plug-in

#编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成下列操作:
[root@localhost ~]$ vim /etc/neutron/plugins/ml2/ml2_conf.ini
#a.编辑[ml2]小节,启用flat和generic routing encapsulation (GRE)网络类型驱动,GRE租户网络和OVS机制驱动:
[ml2]
...
type_drivers=flat,gre
tenant_network_types=gre
mechanism_drivers=openvswitch
 
#b.编辑[ml2_type_gre]小节,配置隧道标识符(id)范围:
[ml2_type_gre]
...
tunnel_id_ranges=1:1000
 
#c.编辑[securitygroup]小节,启用安装组,ipset并配置OVS iptables防火墙驱动:
[securitygroup]
...
enable_security_group=True
enable_ipset=True
firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
 
#d.编辑[ovs]小节,配置Open vSwitch(OVS) agent:
[ovs]
...
local_ip=172.16.0.10
tunnel_type=gre
enable_tunneling=True

(4)配置Open vSwitch(OVS) service
启动OVS服务并设置开机自动启动:

[root@localhost ~]$ systemctl enable openvswitch.service && systemctl start openvswitch.service

(5)配置计算服务使用网络

#编辑/etc/nova/nova.conf文件并完成下列操作:
[root@localhost ~]$ vim /etc/nova/nova.conf
#a.编辑[DEFAULT]小节,配置API接口和驱动:
[DEFAULT]
...
network_api_class=nova.network.neutronv2.api.API
security_group_api=neutron
linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver=nova.virt.firewall.NoopFirewallDriver
 
#b.编辑[neutron]小节,配置访问参数:
[neutron]
...
url=http://controller.nice.com:9696
auth_strategy=keystone
admin_auth_url=http://controller.nice.com:35357/v2.0
admin_tenant_name=service
admin_username=neutron
admin_password=NEUTRON_PASS

(6)完成安装

#1、创建网络服务初始化脚本的符号连接
[root@localhost ~]$ ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
[root@localhost ~]$ cp /usr/lib/systemd/system/neutron-openvswitch-agent.service /usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
[root@localhost ~]$ sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /usr/lib/systemd/system/neutron-openvswitch-agent.service
 
#2、重启计算服务:
[root@localhost ~]$ systemctl restart openstack-nova-compute.service
 
#3、启动OVS代理服务并设置开机自动启动:
[root@localhost ~]$ systemctl enable neutron-openvswitch-agent.service && systemctl start neutron-openvswitch-agent.service

(7)验证(在controller节点执行下列命令)

#1.执行admin环境变量脚本
[root@localhost ~]$ source admin-openrc.sh

#2.列出neutron代理,确认启动neutron agents成功。
[root@localhost ~]$ neutron agent-list
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
| id                                   | agent_type         | host             | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
| 036b19f9-6af8-46ec-9d8f-3fe4915aa68a | Metadata agent     | network.nice.com | :-)   | True           | neutron-metadata-agent    |
| 2633f9e4-325a-4144-ab73-0b955326c744 | Open vSwitch agent | network.nice.com | :-)   | True           | neutron-openvswitch-agent |
| 68177d80-3d69-42b8-84e4-f9011fdeceb9 | L3 agent           | network.nice.com | :-)   | True           | neutron-l3-agent          |
| ad34a3ca-4f6a-40f9-8a68-1fcdcda4633d | DHCP agent         | network.nice.com | :-)   | True           | neutron-dhcp-agent        |
| e8ae8c7e-bcb8-4b25-a7d3-718931736d2c | Open vSwitch agent | compute.nice.com | :-)   | True           | neutron-openvswitch-agent |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+

6.2.4 配置外部网络(controller执行)

(1)创建一个外部网络

#1、执行admin环境变量脚本
[root@localhost ~]$ source admin-openrc.sh
 
#2、创建网络
[root@localhost ~]$ neutron net-create ext-net --shared --router:externalTrue --provider:physical_network external --provider:network_typeflat

(2)创建一个外部网络的子网:例如,外网网段为:100.100.100.0/24,浮动地址范围为:100.100.100.12~100.100.100.240,网关为:100.100.100.11

[root@localhost ~]$ neutron subnet-create ext-net --name ext-subnet --allocation-pool start=10.0.0.100,end=10.0.0.200 -- disable-dhcp--gateway 10.0.0.1 10.0.0.0/24

(3)配置租户网络(在controller节点执行后面的命令),先执行demo环境变量脚本

#1、执行demo环境变量脚本
[root@localhost ~]$ source demo-openrc.sh

#2、创建租户网络
[root@localhost ~]$ neutron net-create demo-net

(4)创建一个租户网络的子网,例如,租户网的网段为192.168.2.0/24,网关为192.168.2.1(网关通常默认为.1)

[root@localhost ~]$ neutron subnet-create demo-net --name demo-subnet gateway 192.168.2.1 192.168.2.0/24

(5)在租户网络创建一个路由器,用来连接外部网和租户网

#1、创建路由器
[root@localhost ~]$ neutron router-create demo-router

#2、附加路由器到demo租户的子网
[root@localhost ~]$ neutron router-interface-add demo-router demo-subnet

#3、通过设置网关,使路由器附加到外部网
[root@localhost ~]$ neutron router-gateway-set demo-router ext-net

(6)确认连接

#1、查看路由器获取到的IP。
[root@localhost ~]$ neutron router-list

#2、在任何一台外部主机上ping路由器获取到的外部地址

七、Horizon – 仪表盘套件(controller节点配置)

7.1 Horizon的安装配置

(1)安装仪表板组件

[root@localhost ~]$ yum install openstack-dashboard httpd mod_wsgi memcached python-memcached vim -y

(2)配置仪表板

#编辑/etc/openstack-dashboard/local_settings文件并完成下列配置
[root@localhost ~]$ vim /etc/openstack-dashboard/local_settings
#a.配置dashboard使用controller节点上的OpenStack服务
OPENSTACK_HOST = "controller.nice.com"
 
#b.设置允许来自所有网络的主机访问dashboard
ALLOWED_HOSTS=['controller.nice.com', '*']
 
#c.配置memcached会话存贮服务(将原有CACHES区域注释)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
 
#d.(可选)配置时区
TIME_ZONE = "Asia/Shanghai"

(3)完成安装

#1、在RHEL或CentOS上,配置SElinux去允许web服务器访问OpenStack服务(如果你没
关SElinux)[root@localhost ~]$ setsebool-P httpd_can_network_connecton

#2.修改相关文件归属,使dashboardCSS可以被加载。
[root@localhost ~]$ chown-R apache:apache/usr/share/openstack-dashboard/static

#3.启动web服务和会话保存服务,并设置开机自动启动。
[root@localhost ~]$ systemctlenable httpd.servicememcached.service
[root@localhost ~]$ systemctlstart httpd.servicememcached.service

(4)验证
1、访问dashboard,在浏览器输入:http://controller.nice.com/dashboard
2、使用admin或demo用户登录


八、Cinder – 块存储

8.1 Block Storage(cinder)介绍

  • OpenStack块存储服务为云主机提供块存储设备。支持不同后端
  • The Block Storage API和scheduler服务运行在controller节点
  • The volume service运行在一个或多个存储节点
  • 存储节点可以通过本地磁盘、SAN/NAS等后端设备为云主机提供卷存储
  • cinder-api允许API请求,并路由他们到cinder-volume
  • cinder-volume直接与块存储服务交互。处理像cinder-scheduler这样的服务。通过消息队列相互通信。支持多种存储类型
  • cinder-scheduler daemon选择最优的存储节点创建卷。类似于novascheduler
  • Messagin queue在快存储进程中传递消息。

8.2 Block Storage(cinder)安装配置

8.2.1 安装并配置controller节点

(1)配置先决条件

#1、创建数据库,并完成下列步骤:
#a.以数据库管理员root的身份连接数据库:
[root@localhost ~]$ mysql -uroot -proot
 
#b.创建cinder数据库
MariaDB [(none)]> CREATE DATABASE cinder;
 
#c.创建数据库用户cinder,并授予cinder用户对cinder数据库的完全控制权限:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';
 
#d.退出数据库连接
MariaDB [(none)]> exit


#2、执行admin环境变量脚本
[root@localhost ~]$ source admin-openrc.sh


#3、在认证服务中创建块存储服务认证信息,完成下列步骤:
#a.创建cinder用户
[root@localhost ~]$ keystone user-create --name cinder --pass CINDER_PASS
 
#b.链接cinder用户到service租户和admin角色
[root@localhost ~]$ keystone user-role-add --user cinder --tenant service --role admin
 
#c.创建cinder服务
[root@localhost ~]$ keystone service-create --name cinder --type volume --description "OpenStackBlock Storage"
[root@localhost ~]$ keystone service-create --name cinderv2 --type volumev2 --description "OpenStackBlock Storage"
 
#d.创建块存储服务端点
[root@localhost ~]$ keystone endpoint-create \
--service-id $(keystone service-list | awk '/ volume / {print $2}') \
--publicurl http://controller.nice.com:8776/v1/%\(tenant_id\)s \
--internalurl http://controller.nice.com:8776/v1/%\(tenant_id\)s \
--adminurl http://controller.nice.com:8776/v1/%\(tenant_id\)s \
--region regionOne
 
[root@localhost ~]$ keystone endpoint-create \
--service-id $(keystone service-list | awk '/ volumev2 / {print $2}') \
--publicurl http://controller.nice.com:8776/v2/%\(tenant_id\)s \
--internalurl http://controller.nice.com:8776/v2/%\(tenant_id\)s \
--adminurl http://controller.nice.com:8776/v2/%\(tenant_id\)s \
--region regionOne

(2)安装并配置块存储控制组件

#1、安装软件包
[root@localhost ~]$ yum -y install openstack-cinder python-cinderclient python-oslo-db vim

#2、编辑/etc/cinder/cinder.conf文件并完成下列操作:
[root@localhost ~]$ vim /etc/cinder/cinder.conf
#a.编辑[database]小节,配置数据库连接:
[database]
...
connection=mysql://cinder:CINDER_DBPASS@controller.nice.com/cinder
#b.编辑[DEFAULT]小节,配置RabbitMQ消息代理访问:
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest
#c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务访问:
[DEFAULT]
...
auth_strategy=keystone
[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=cinder
admin_password=CINDER_PASS
#d.编辑[DEFAULT]小节,配置my_ip选项使用controller节点的控制端口ip:
[DEFAULT]
...
my_ip=192.168.222.5
#e.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True




#3、初始化块存储服务数据库
[root@localhost ~]$ su -s /bin/sh -c "cinder-manage db sync" cinder

(3)完成安装

#启动块存储服务并设置开机自动启动:
[root@localhost ~]$ systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
[root@localhost ~]$ systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

8.2.2 安装并配置block节点

(1)配置先决条件

#1、添加一个新的硬盘(如:sdb),并分将全部空间分成一个主分区。

#2、安装LVM软件包(根据自身情况)
[root@localhost ~]$ yum install lvm2 vim

#3、启动LVM服务并这只开机自动启动(根据自身情况)
[root@localhost ~]$ systemctl enable lvm2-lvmetad.service
[root@localhost ~]$ systemctl start lvm2-lvmetad.service

#4、创建物理卷/dev/sdb
[root@localhost ~]$ pvcreate /dev/sdb

#5、创建卷组cinder-volumes(名字不要改):
[root@localhost ~]$ vgcreate cinder-volumes /dev/sdb

#6、编辑/etc/lvm/lvm.conf文件,使系统只扫描启用LVM的磁盘。防止识别其他非LVM磁盘对块存储服务造成影响。
#编辑devices小节,添加过滤器允许/dev/sdb磁盘,拒绝其他设备。

[root@localhost ~]$ vim /etc/lvm/lvm.conf

devices {
...
filter = [ "a/sdb/", "r/.*/"]
警告:如果你的系统磁盘使用了LVM,则必须添加系统盘到过滤器中:
filter = [ "a/sda", "a/sdb/", "r/.*/"]
同样,如果conpute节点的系统盘也使用了LVM,则也需要修改/etc/lvm/lvm.conf文件。并添加过滤器。
filter = [ "a/sdb/", "r/.*/"]


(2)安装并配置块存储卷组件

#1、安装软件包
[root@localhost ~]$ yum install openstack-cinder targetcli python-oslo-db MySQL-python

#2、编辑/etc/cinder/cinder.conf文件并完成下列操作:
[root@localhost ~]$ vim /etc/cinder/cinder.conf

#a.编辑[database]小节,配置数据库访问:
[database]
...
connection=mysql://cinder:CINDER_DBPASS@controller.nice.com/cinder
 
#b.编辑[DEFAULT]小节,配置RabbitMQ消息代理访问:
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest
 
#c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务访问:
[DEFAULT]
...
auth_strategy=keystone
[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=cinder
admin_password=CINDER_PASS
 
#d.编辑[DEFAULT]小节,配置my_ip选项:
[DEFAULT]
...
my_ip=192.168.222.20
 
#e.编辑[DEFAULT]小节,配置镜像服务器位置:
[DEFAULT]
...
glance_host=controller.nice.com
 
#f.编辑[DEFAULT]小节,配置块存储服务使用lioadmiSCSI服务
[DEFAULT]
...
iscsi_helper=lioadm
 
#g.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True

(3)完成安装

#启动块存储volume服务和iSCSI服务,并设置开机自动启动。
[root@localhost ~]$ systemctl enable openstack-cinder-volume.service target.service
[root@localhost ~]$ systemctl start openstack-cinder-volume.service target.service

(4)验证(在controller节点完成下列操作)

#1、执行admin环境变量脚本
[root@localhost ~]$ source admin.sh

#2、列出服务组件确认每个进程启动成功
[root@localhost ~]$ cinder service-list

#3、执行demo用户环境变量脚本
[root@localhost ~]$ source demo.sh

#4、创建1GB的卷
[root@localhost ~]$ cinder create --display-name demo-volume1 1

#5、确认卷已创建并可用
[root@localhost ~]$ cinder list

九、实例创建

9.1 创建密钥对

大多数云镜像使用公钥认证,这有别于传统的用户名/密码认证。在启动一个实例之前,你必须使用ssh-keygen命令生成一个密钥对,并将公钥添加到你的OpenStack环境。

#1、执行demo环境变量脚本
[root@localhost ~]$ source demo-openrc.sh

#2、生成密钥对
[root@localhost ~]$ ssh-keygen

#3、添加公钥到OpenStack环境
[root@localhost ~]$ nova keypair-add --pub-key  ~/.ssh/id_rsa.pub demo-key

#4、验证公钥是否添加成功
[root@localhost ~]$ nova keypair-list

9.2 启动一个实例

要启动一个实例,你必须最少指定flavor(云主机类型),imagename(镜像名),network(网络),security group(安全组),key(密钥)和instance name(实例名)#1、flavor用来指定一个虚拟的独立分配的资源。包括cpu,内存和存储。查看可用的flavor:
[root@localhost ~]$ nova flavor-list


#2、列出可用的镜像
[root@localhost ~]$ nova image-list


#3、列出可用的网络
[root@localhost ~]$ neutron net-list


#4、列出可用的安全组
[root@localhost ~]$ nova secgroup-list


#5、启动实例
[root@localhost ~]$ nova boot --flavor m1.tiny --image cirros-0.3.3-x86_64 --nicnet-id=d36f6eb0-e59a-42b9-9209-5547e022484b--security-group default --key-name demo-key demo- instance1

#6、查看实例状态
[root@localhost ~]$ novalist

9.3 通过虚拟控制台访问你的实例

#获取用于访问你的实例的Virtual Network Computing (VNC) 会话URL,并通过浏览器访问:
[root@localhost ~]$ nova get-vnc-console demo-instance1 novnc
#确保你的客户端能够解析controller节点的FQDN名。


#确认能够连接demo-net租户网络的网关
[root@localhost ~]$ping  -c 4 192.168.2.1

#确认能够连接ext-net外部网络
[root@localhost ~]$ ping -c 10.0.0.1

9.4 远程访问你的实例

#1、添加规则到名为default的安全组:
#a.允许ICMP协议(ping):
[root@localhost ~]$ nova secgroup-add-rule default icmp-1 -1 0.0.0.0/0

#b.允许ssh协议:
[root@localhost ~]$ nova secgroup-add-rule default tcp22 22 0.0.0.0/0

#2、在ext-net外部网络创建一个浮动IP地址:
[root@localhost ~]$ neutron floatingip-create ext-net

#3、分配浮动IP地址到你的实例:
[root@localhost ~]$ nova floating-ip-associate demo-instance110.0.0.110


#4、检查你的浮动IP地址状态:
[root@localhost ~]$ nova list


#5、从任何一个可以和ext-net网络通讯的主机测试连通性
[root@localhost ~]$ ping -c 4 10.0.0.110


#6、从任何一个可以和ext-net网络通讯的主机上通过ssh访问实例
[root@localhost ~]$ sshcirros@10.0.0.110
#或将私钥文件复制到外部客户端,通过密钥对验证登录
[root@localhost ~]$ ssh-iid_rsacirros@10.0.0.110

9.5 为你的实例添加额外的云硬盘

如果你的环境中包含块存储服务,则你可以为你的实例添加云硬盘。

#1、执行demo环境变量脚本
[root@localhost ~]$ source demo-openrc.sh


#2、列出卷
[root@localhost ~]$ nova volume-list

#3、附加demo-volume1卷到demo-instance1实例:
[root@localhost ~]$ nova volume-attach demo-instance1 158bea89-07db-4ac2-8115-66c0d6a4bb48


#4、列出卷
[root@localhost ~]$ nova volume-list


#5、从任何一个可以和ext-net网络通讯的主机上通过ssh访问实例,并使用fdisk命令确认新存储。
[root@localhost ~]$ ssh cirros@10.0.0.110
[root@localhost ~]$ sudo fdisk -l
  • 4
    点赞
  • 0
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

路人甲_passerby

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值