OpenStack Queens版搭建详解

目录

 

OpenStack Queens版搭建详解

1.基础环境配置

1.2 节点网络规划

1.3 关闭防火墙

1.4 配置yum源

1.5 配置节点IP

1.6 配置主机名

1.7 配置主机名解析(hosts)

1.8 配置NTP服务

2.安装基础软件包

2.1 安装OpenStack软件包

2.2 安装mariadb数据库

2.3 安装RabbitMQ消息队列

2.4 安装Memcached缓存数据库

2.5 安装Etcd服务

3 安装OpenStack服务

3.1 安装keystone服务

3.1.1 认证服务概述

3.1.2 安装和配置keystone

3.1.3 创建项目和用户

3.1.4 验证认证服务操作

3.1.5 创建客户端环境脚本

3.2 安装Glance服务

3.2.1 镜像服务概述

3.2.2 创建glance数据库

3.2.3 安装和配置组件

3.2.4 验证操作

3.3 安装compute服务(nova)

3.3.1 计算服务概述

3.3.2 安装和配置控制节点

3.3.3 安装和配置计算节点

3.3.4 验证计算服务操作

3.4 安装neutron服务

3.4.1 网络服务概述

3.4.3 安装和配置controller节点

3.4.4 安装和配置compute节点

3.5 安装Horizon服务

3.5.1 安装和配置组件

3.5.2 完成安装启动服务

3.5.3 登录web验证配置

3.6 安装Cinder服务

3.6.1 块存储服务概述

3.6.2 安装和配置cinder节点

3.6.3 安装和配置controller节点

3.6.4 验证cinder配置

4 创建虚拟机实例

4.1 创建外部网络

4.1.1 创建provider外部网络

4.1.2 网络中创建子网

4.1.3 查看节点网卡变化

4.2 创建租户网络

4.2.1 创建self-service网络

4.2.2 网络中创建子网

4.2.3 创建路由器

4.2.4 租户网络添加到路由器

4.2.5 路由器连接到外部网络

4.2.6 验证操作

4.3 创建实例类型

4.4 生成秘钥对

4.5 添加安全组规则

4.6 确认实例选项

4.7 创建实例

4.8 虚拟控制台访问实例

4.9 为实例分配浮动IP地址

4.10 远程SSH访问实例

4.11 网卡变化

4.12 块存储

4.12.1 创建一个卷

4.12.2 将卷添加到实例

5 使用官方云镜像创建实例

5.1 下载官方通用云镜像

5.3 创建实例

5.5 为实例分配浮动IP地址

5.6 远程SSH访问实例

6 查看当前网卡状态

6.1 控制节点

6.2 计算节点

6.3 存储节点


OpenStack Queens版搭建详解

1.基础环境配置

1.1 节点硬件规划

本次搭建使用VMware Workstation虚拟出3台CentOS7虚拟机作为主机节点,节点架构:1个controller控制节点、1个compute计算节点、1个cinder块存储节点。硬件配置具体如下:

OpenStack Queens版搭建详解_第1张图片

 

说明:这里使用CentOS-7-x86_64-Minimal-1810.iso,minimal版占用资源更少,下载地址:https://www.centos.org/

Vmware Workstation虚拟机开启虚拟化引擎:

https://img-blog.csdn.net/20180706172330381?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldHdvcmtlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

查看操作系统及内核版本:

[root@controller ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
[root@controller ~]# uname -sr
Linux 3.10.0-957.21.2.el7.x86_64

1.2 节点网络规划

本次搭建网络使用linuxbridge+vxlan模式,包含三个网络平面:管理网络,外部网络和租户隧道网络,具体规划如下:

节点名称

网卡名称

网卡模式

虚拟交换机

网络类型

IP地址

controller

ens33

NAT模式

vmnet8

外部网络

192.168.241.129

ens34

仅主机模式

Vmnet1

隧道网络

192.168.72.129

ens35

仅主机模式

Vmnet2

管理网络

192.168.234.129

compute1

ens33

NAT模式

Vmnet8

部署网络

192.168.241.130

ens34

仅主机模式

Vmnet1

隧道网络

192.168.72.130

ens35

仅主机模式

Vmnet2

管理网络

192.168.234.130

cinder1

ens33

NAT模式

vmnet8

部署网络

192.168.241.131

ens35

仅主机模式

Vmnet2

管理网络

192.168.234.131

1.3 关闭防火墙

1.关闭selinux

# sed -i 's/enforcing/disabled/g' /etc/selinux/config
# setenforce 0

2.关闭firewalld防火墙

# systemctl stop firewalld.service && systemctl disable firewalld.service
# firewall-cmd --state  #查看是否关闭

1.4 配置yum源

以下操作在所有节点执行

1.备份CentOS官方源:

# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.下载阿里云yum源:

# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3.测试yum源是否正常

# yum clean all && yum makecache

也可以搭建本地yum源:

参考链接:https://blog.csdn.net/networken/article/details/80729234

1.5 配置节点IP

# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID=d1fa93da-4033-4198-b741-a271939430e7
DEVICE=ens33
ONBOOT=yes
 
IPADDR=192.168.241.129
PREFIX=24
GATEWAY=192.168.241.2
DNS1=119.29.29.29
DNS2=1.1.1.1
HWADDR=00:0c:29:8e:eb:b1
=================================================================
# cat /etc/sysconfig/network-scripts/ifcfg-ens34
……
IPADDR=192.168.72.129
PREFIX=24
HWADDR=00:0c:29:8e:eb:bb
=================================================================
# cat /etc/sysconfig/network-scripts/ifcfg-ens35
……
IPADDR=192.168.234.129
PREFIX=24
HWADDR=00:0c:29:8e:eb:c5

1.6 配置主机名

控制节点执行:# hostnamectl set-hostname controller

计算节点执行:# hostnamectl set-hostname compute1

存储节点执行:# hostnamectl set-hostname cinder1

1.7 配置主机名解析(hosts)

1.所有节点执行,配置相同,注意这里使用管理网络IP地址:

[root@controller ~]# cat /etc/hosts
192.168.234.129 controller
192.168.234.130 compute1
192.168.234.131 cinder1

2.验证主机名解析是否正常:

ping计算节点:ping -c 4 compute1

ping存储节点:ping -c 4 cinder1

OpenStack Queens版搭建详解_第2张图片

1.8 配置NTP服务

以下在控制节点进行配置

1.安装软件包:

# yum install chrony

2.修改配置文件:

# vim /etc/chrony.conf
allow 192.168.0.0/16  去掉注释,允许其他节点网段同步时间,请配置为对应网段

3.重启服务并加入开机启动项:

# systemctl enable chronyd.service && systemctl start chronyd.service

4.查看时间同步状态: 
MS列中包含^*的行,指明NTP服务当前同步的服务器。

# chronyc sources

OpenStack Queens版搭建详解_第3张图片

5.查看当前时间是否准确

# timedatectl
其中NTP synchronized: yes说明同步成功

以下在计算节点进行配置:

  1. 安装软件包:
# yum install chrony
  1. 修改配置文件,使计算节点与控制节点同步时间:
# vim /etc/chrony.conf   #注释3-6行,并增加第7行内容
  1 # Use public servers from the pool.ntp.org project.
  2 # Please consider joining the pool (http://www.pool.ntp.org/join.html).
  3 #server 0.centos.pool.ntp.org iburst
  4 #server 1.centos.pool.ntp.org iburst
  5 #server 2.centos.pool.ntp.org iburst
  6 #server 3.centos.pool.ntp.org iburst
  7 server 192.168.234.129 iburst
  1. 重启服务并设置开机启动
# systemctl enable chronyd.service && systemctl start chronyd.service
  1. 查看时间同步状态,当前同步的源为controller

  1. 查看时间是否与控制节点一致
# timedatectl

存储节点配置同计算节点,这里省略

NTP的其他操作命令:

# timedatectl set-ntp yes                  #启用ntp同步服务
# timedatectl set-timezone Asia/Shanghai    #设置时区
# yum install –y ntpdate         #安装时间同步工具
# ntpdate 0.centos.pool.ntp.org   #强制与网络NTP服务器同步时间
# ntpdate 192.168.92.70           #强制与控制节点同步时间

注意:各个节点时间不同步后续可能出现各种问题,建议配置准确在进行后续操作。

2.安装基础软件包

2.1 安装OpenStack软件包

以下操作在所有节点执行

  1. 启用OpenStack存储库,安装queens版本的存储库
# yum install centos-release-openstack-queens
  1. 升级所有软件包,如果升级后内核更新,请重启节点启用新内核。
# yum upgrade
  1. 安装openstack客户端
# yum install python-openstackclient
  1. 安装 openstack-selinux软件包以自动管理OpenStack服务的安全策略:
# yum install openstack-selinux

2.2 安装mariadb数据库

以下操作在控制节点执行

大多数OpenStack服务使用SQL数据库来存储信息。数据库通常在控制器节点上运行。本次搭建使用MariaDB数据库, OpenStack服务还支持其他SQL数据库,包括 PostgreSQL等。

1.安装软件包

# yum install mariadb mariadb-server python2-PyMySQL

2.创建并编辑/etc/my.cnf.d/openstack.cnf文件并完成以下操作:

配置以下内容,bind-address设置为控制节点的管理IP地址,以使其他节点能够通过管理网络进行访问:

# vim /etc/my.cnf.d/openstack.cnf    
[mysqld]
bind-address = 192.168.234.129
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

3.启动数据库服务并设置服务开机启动:

# systemctl start mariadb.service && systemctl enable mariadb.service

4.运行mysql_secure_installation 脚本初始化数据库服务,并为数据库root帐户设置密码(这里设为liuxin):

# mysql_secure_installation
……
Enter current password for root (enter for none): 
OK, successfully used password, moving on...
 
Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
……
Remove anonymous users? [Y/n] Y
 ... Success!
……
# 是否禁止root远程访问数据库
Disallow root login remotely? [Y/n] Y
 ... Success!
……
Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
……
will take effect immediately.
# 让前面修改生效
Reload privilege tables now? [Y/n] Y
 ... Success!
……
Thanks for using MariaDB!

2.3 安装RabbitMQ消息队列

以下在控制节点执行

OpenStack使用消息队列(Message queue)来协调服务之间的操作和状态信息,消息队列服务通常在控制节点上运行,OpenStack支持多种消息队列服务,包括RabbitMQ, Qpid和ZeroMQ。

  1. 安装软件包:
# yum install rabbitmq-server

2.启动消息队列服务并设置服务开机启动

# systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service

3.添加openstack 用户,并设置密码,这里设置为liuxin

# rabbitmqctl add_user openstack liuxin

4.为openstack用户增加配置、读取及写入相关权限

# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...

2.4 安装Memcached缓存数据库

以下在控制节点执行

身份认证服务使用Memcached缓存令牌,memcached服务通常在控制节点上运行。 

为keystone服务缓存tokens
1.安装软件包

# yum install memcached python-memcached

2.编辑/etc/sysconfig/memcached文件并完成以下操作: 
使用
控制节点的管理IP地址配置服务。这使其他节点能够通过管理网络进行访问:

# vim  /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 192.168.234.129,::1"    #增加一行

3.启动Memcached服务并将其配置为在系统引导时启动:

# systemctl enable memcached.service && systemctl start memcached.service

2.5 安装Etcd服务

以下操作在控制节点执行

OpenStack服务可能使用Etcd,这是一个可靠的分布式键值存储,用于分布式密钥锁定,存储配置,跟踪服务的实时性和其他场景。 
1.安装软件包

# yum install etcd

2.编辑/etc/etcd/etcd.conf文件,以控制节点管理IP地址设置相关选项,以使其他节点通过管理网络进行访问

# vi /etc/etcd/etcd.conf
[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://192.168.234.129:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.234.129:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="controller"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.234.129:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.234.129:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
ETCD_INITIAL_CLUSTER="default=http://192.168.234.129:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"

3.启动etcd服务并设为开机启动:

# systemctl enable etcd && systemctl start etcd

3 安装OpenStack服务

3.1 安装keystone服务

以下在控制节点执行

本节描述如何在控制节点上安装和配置OpenStack身份认证服务,即称为keystone。出于可扩展性的目的,此配置部署了Fernet tokens和Apache HTTP服务器来处理请求。

3.1.1 认证服务概述

OpenStack认证服务提供单一的集成点,用于管理身份验证、授权和服务目录。 

认证服务通常是用户与之交互的第一个服务。一旦经过身份验证,最终用户可以使用其身份来访问其他OpenStack服务。同样,其他OpenStack服务利用认证服务来确保用户是他们本人,并且发现部署中的其他服务在哪里。认证服务还可以与一些外部用户管理系统(如LDAP)集成。

用户和服务可以通过使用由认证服务管理的服务目录来定位其他服务。顾名思义,服务目录是OpenStack部署中可用服务的集合。每个服务可以有一个或多个端点,每个端点可以是三种类型之一:管理员、内部或公共。在生产环境中,出于安全原因,不同的端点类型可能驻留在暴露给不同类型用户的单独网络上。例如,公共API网络可能从因特网上可见,因此客户可以管理他们的云。管理API网络可能局限于管理云基础设施的组织内的操作员。内部API网络可能局限于包含OpenStack服务的主机。此外,OpenStack支持多个区域的可扩展性。为了简单起见,本指南使用管理网络来实现所有端点类型和默认的TrimOne区域。在认证服务中创建的区域、服务和端点一起构成部署的服务目录。部署中的每个OpenStack服务需要一个服务条目,其中存储在标识服务中的相应端点。这一切都可以在认证服务安装和配置之后完成。

认证服务包含这些组件:

Server

一个中央服务器使用RESTful接口提供认证和授权服务。

Drivers

驱动程序或服务后端集成到中央服务器。它们用于访问OpenStack外部的库中的身份信息,并且可能已经存在于部署OpenStack的基础设施中(例如,SQL数据库或LDAP服务器)。

Modules

中间件模块运行在使用认证服务的OpenStack组件的地址空间中。这些模块拦截服务请求,提取用户凭据,并将其发送到集中式服务器进行授权。中间件模块和OpenStack组件之间的集成使用Python Web服务器网关接口。

3.1.2 安装和配置keystone

创建keystone数据库

1.以root用户连接到数据库服务器:

$ mysql -uroot -p

2.创建keystone数据库:

MariaDB [(none)]> CREATE DATABASE keystone;

3.授予keystone数据库适当的访问权限:这里密码设置为liuxin

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'liuxin';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'liuxin'; 

安装和配置keystone组件

1.安装软件包

# yum install openstack-keystone httpd mod_wsgi

2.编辑并修改/etc/keystone/keystone.conf配置文件

# vim /etc/keystone/keystone.conf

 [database]

# 配置数据库访问权限
connection = mysql+pymysql://keystone:liuxin@controller/keystone

 [token]

# 配置Fernet token provider
provider = fernet

3.同步认证服务数据库:

# su -s /bin/sh -c "keystone-manage db_sync" keystone

4.初始化Fernet key库:

# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

5.引导身份认证服务:

# keystone-manage bootstrap --bootstrap-password liuxin --bootstrap-admin-url http://controller:35357/v3/ --bootstrap-internal-url http://controller:5000/v3/ --bootstrap-public-url http://controller:5000/v3/ --bootstrap-region-id RegionOne

替换ADMIN_PASS为管理用户的合适密码,这里为liuxin

配置apache http服务

1.编辑/etc/httpd/conf/httpd.conf文件并配置ServerName选项以引用控制节点:

# vim /etc/httpd/conf/httpd.conf
ServerName controller

2.创建到/usr/share/keystone/wsgi-keystone.conf文件的链接:

# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

3.启动Apache HTTP服务并配置开机启动

# systemctl enable httpd.service && systemctl start httpd.service

4.配置administrative 账户

export OS_USERNAME=admin
export OS_PASSWORD=liuxin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3

注意这里admin密码为liuxin,这里的密码要和keystone-manage bootstrap命令中使用的密码相同

3.1.3 创建项目和用户

身份服务为每个OpenStack服务提供身份验证服务。身份验证服务使用域,项目,用户和角色的组合(domain, projects, users, and roles)。

1.创建域,尽管上面keystone-manage bootstrap步骤已经存在“default”域,但创建新域的正式方法是:

# openstack domain create --description "Domain" example           

OpenStack Queens版搭建详解_第4张图片

2.创建服务项目,本指南使用一个服务项目,其中包含您添加到环境中的每项服务的唯一用户。

# openstack project create --domain default --description "Service Project" service

OpenStack Queens版搭建详解_第5张图片

 3.创建平台demo项目,普通(非管理员)任务应该使用非特权项目和用户。 作为示例,这里创建演示项目和用户。创建演示项目:

# openstack project create --domain default --description "Demo Project" demo

OpenStack Queens版搭建详解_第6张图片

 4.创建demo用户 (密码:demo)

# openstack user create --domain default --password-prompt demo

OpenStack Queens版搭建详解_第7张图片

 5.创建用户角色:

# openstack role create user

 OpenStack Queens版搭建详解_第8张图片

6.将用户角色添加到demo项目和用户:

$ openstack role add --project demo --user demo user

注意:该命令没有输出,另外可以重复此过程来创建其他项目和用户。

3.1.4 验证认证服务操作

1.取消设置临时OS_AUTH_URL和OS_PASSWORD环境变量:

$ unset OS_AUTH_URL OS_PASSWORD

2.作为管理员admin用户,请求身份验证令牌(liuxin)

# openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue

OpenStack Queens版搭建详解_第9张图片

3.作为demo用户,请求身份验证令牌(demo)

# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name demo --os-username demo token issue

OpenStack Queens版搭建详解_第10张图片

注意:此命令使用演示用户和API端口5000的密码,该端口只允许对Identity Service API进行常规(非管理员)访问。

3.1.5 创建客户端环境脚本

前面几节使用了环境变量和命令选项的组合,通过openstack客户端与Identity服务进行交互。 为了提高客户端操作的效率,OpenStack支持简单的客户端环境脚本,也称为OpenRC文件。 这些脚本通常包含所有客户端的常用选项,但也支持独特的选项。

创建脚本

为管理员和演示项目和用户创建客户端环境脚本。后续所有操作将引用这些脚本来为客户端操作加载适当的凭据。

1.创建并编辑admin-openrc文件并添加以下内容:(这里/root目录下)

# vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=liuxin
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

2.创建并编辑demo-openrc文件并添加以下内容:

# vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

使用脚本 

要以特定项目和用户身份运行客户端,只需在运行客户端环境脚本之前加载相关的客户端环境脚本即可。 例如:

1.加载admin-openrc文件以使用Identity服务的位置以及管理项目和用户凭据执行环境变量:

# . admin-openrc

2.请求身份验证令牌:

# openstack token issue

OpenStack Queens版搭建详解_第11张图片

 

3.2 安装Glance服务

以下操作在控制节点执行

本节介绍如何在控制节点上安装和配置镜像服务,即glance。 为了简单起见,该配置将镜像存储在本地文件系统上。

3.2.1 镜像服务概述

镜像服务(glance)使用户能够发现,注册和检索虚拟机镜像。 它提供了一个REST API,使您可以查询虚拟机镜像元数据并检索实际镜像。 您可以将通过镜像服务提供的虚拟机映像存储在各种位置,从简单的文件系统到对象存储系统(如OpenStack对象存储)。

为了简单起见,本指南描述了将Image服务配置为使用文件后端,该后端上载并存储在托管Image服务的控制节点上的目录中。 默认情况下,该目录是/ var / lib / glance / images /。

OpenStack Image服务是基础架构即服务(IaaS)的核心。 它接受磁盘或服务器映像的API请求,以及来自最终用户或OpenStack Compute组件的元数据定义。 它还支持在各种存储库类型(包括OpenStack对象存储)上存储磁盘或服务器映像。

OpenStack镜像服务包括以下组件:

glance-api

接受镜像API调用以进行镜像发现,检索和存储。

glance-registry

存储,处理和检索有关镜像的元数据。 元数据包括例如大小和类型等项目。

Database

存储镜像元数据,您可以根据自己的喜好选择数据库。 大多数部署使用MySQL或SQLite。

Storage repository for image files(镜像文件的存储库)

支持各种存储库类型,包括常规文件系统(或安装在glance-api控制节点上的任何文件系统),Object Storage,RADOS块设备,VMware数据存储和HTTP。 请注意,某些存储库仅支持只读用法。

Metadata definition service(元数据定义服务)

用于供应商,管理员,服务和用户的通用API来有意义地定义他们自己的定制元数据。 此元数据可用于不同类型的资源,如镜像,开发,卷,定制和聚合。 定义包括新属性的关键字,描述,约束和它可以关联的资源类型。

3.2.2 创建glance数据库

1.创建glance数据库 
以root用户连接到数据库:

# mysql -uroot -p

创建glance数据库,密码liuxin

MariaDB [(none)]> CREATE DATABASE glance;

授予对glance数据库的正确访问权限:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'liuxin';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'liuxin';

2.获取admin用户的环境变量

$ . admin-openrc

3.要创建服务凭据,请完成以下步骤 
创建glance用户:(密码:glance)

#  openstack user create --domain default --password-prompt glance

OpenStack Queens版搭建详解_第12张图片

把admin角色添加到glance用户和项目中

# openstack role add --project service --user glance admin

创建glance服务实体

# openstack service create --name glance --description "OpenStack Image" image

OpenStack Queens版搭建详解_第13张图片

4.创建镜像服务API端点 

# openstack endpoint create --region RegionOne image public http://controller:9292 
# openstack endpoint create --region RegionOne image internal http://controller:9292 
# openstack endpoint create --region RegionOne image admin http://controller:9292

OpenStack Queens版搭建详解_第14张图片

3.2.3 安装和配置组件

1.安装软件包:

# yum install openstack-glance

2.编辑/etc/glance/glance-api.conf文件,完成以下操作

Glanceapi服务配置文件

# vim /etc/glance/glance-api.conf

 [database]

connection = mysql+pymysql://glance:liuxin@controller/glance

 [keystone_authtoken]

auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance

[paste_deploy]

flavor = keystone

[glance_store]

# 配置本地文件系统存储和映像文件的位置
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

3.编辑/etc/glance/glance-registry.conf配置文件

Glance registry服务配置文件,用户存储镜像有关的元数据

# vim /etc/glance/glance-registry.conf

 [database]

connection = mysql+pymysql://glance:liuxin@controller/glance

 [keystone_authtoken]

auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance

[paste_deploy]

flavor = keystone

4.同步镜像服务数据库

# su -s /bin/sh -c "glance-manage db_sync" glance

5.完成安装,启动镜像服务并设为开机启动:

# systemctl enable openstack-glance-api.service openstack-glance-registry.service
# systemctl start openstack-glance-api.service openstack-glance-registry.service

3.2.4 验证操作

使用CirrOS验证Image服务的操作,这是一个小型Linux映像,可帮助您测试OpenStack部署。 

有关如何下载和构建映像的更多信息,请参阅OpenStack虚拟机映像指南:

https://docs.openstack.org/image-guide/

       有关如何管理映像的信息,请参阅OpenStack最终用户指南:

https://docs.openstack.org/queens/user/

1.获取admin用户的环境变量

# . admin-openrc

2.下载镜像

# wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

3.将镜像上传到image服务,指定磁盘格式为QCOW2,指定裸容器格式和公开可见性,以便所有项目都可以访问它:

# openstack image create "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public
=================================================================
 file          跟一个本地的文件路径
 copy-from     跟一个url,会把url对应的镜像拷贝到存储后端
 location      跟一个url,不会去拷贝下来,是直接去使用

OpenStack Queens版搭建详解_第15张图片

3.查看上传的镜像,镜像状态应为active状态

# openstack image list

OpenStack Queens版搭建详解_第16张图片

glance具体配置选项可参考:

https://docs.openstack.org/glance/queens/configuration/index.html

3.3 安装compute服务(nova

本节介绍如何在控制节点上安装和配置计算服务,代号为nova

3.3.1 计算服务概述

使用OpenStack Compute来托管和管理云计算系统。OpenStack Compute是基础架构即服务(IaaS)系统的重要组成部分。主要模块是用Python实现的。

      OpenStack Compute与OpenStack Identity进行交互以进行身份验证; 用于磁盘和服务器映像的OpenStack映像服务; 和用于用户和管理界面的OpenStack Dashboard。镜像访问受到项目和用户的限制; 每个项目的限额是有限的(例如,实例的数量)。OpenStack Compute可以在标准硬件上水平扩展,并下载映像以启动实例。

OpenStack Compute包含以下内容及组件:

nova-api service

接受并响应最终用户计算API调用。该服务支持OpenStack Compute API。它执行一些策略并启动大多数编排活动,例如运行实例。

nova-api-metadata service

接受来自实例的元数据请求。nova-api-metadata通常在nova-network 安装多主机模式下运行时使用该服务。有关详细信息,请参阅计算管理员指南中的元数据服务。

nova-compute service

通过管理程序API创建和终止虚拟机实例的工作守护程序。例如:

XenAPI for XenServer/XCP

libvirt for KVM or QEMU

VMwareAPI for VMware

处理相当复杂。基本上,守护进程接受来自队列的动作并执行一系列系统命令,例如启动KVM实例并更新其在数据库中的状态。

nova-placement-api service

跟踪每个提供者的库存和使用情况。有关详情,请参阅 Placement API。

nova-scheduler service

从队列中获取虚拟机实例请求,并确定它在哪个计算服务器主机上运行。

nova-conductor module

调解nova-compute服务和数据库之间的交互。它消除了由nova-compute服务直接访问云数据库的情况 。该nova-conductor模块水平缩放。但是,请勿将其部署到nova-compute运行服务的节点上。有关更多信息,请参阅配置选项中的conductor部分 。

nova-consoleauth daemon(守护进程)

为控制台代理提供的用户授权令牌。见 nova-novncproxy和nova-xvpvncproxy。此服务必须运行以使控制台代理正常工作。您可以在群集配置中针对单个nova-consoleauth服务运行任一类型的代理。有关信息,请参阅关于nova-consoleauth。

nova-novncproxy daemon

提供通过VNC连接访问正在运行的实例的代理。支持基于浏览器的novnc客户端。

nova-spicehtml5proxy daemon

提供通过SPICE连接访问正在运行的实例的代理。支持基于浏览器的HTML5客户端。

nova-xvpvncproxy daemon

提供通过VNC连接访问正在运行的实例的代理。支持OpenStack特定的Java客户端。

The queue队列

守护进程之间传递消息的中心集线器。通常用RabbitMQ实现 ,也可以用另一个AMQP消息队列实现,例如ZeroMQ。

SQL database

存储云基础架构的大部分构建时间和运行时状态,其中包括:

Available instance types 可用的实例类型

Instances in use 正在使用的实例

Available networks 可用的网络

Projects 项目

理论上,OpenStack Compute可以支持SQLAlchemy支持的任何数据库。通用数据库是用于测试和开发工作的SQLite3,MySQL,MariaDB和PostgreSQL。

3.3.2 安装和配置控制节点

以下在控制节点执行

3.3.2.1 创建数据库

1.以root账户登录数据库

# mysql -uroot -p

2.创建nova_api, nova, nova_cell0数据库

MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;

数据库登录授权

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'liuxin';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'liuxin';
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'liuxin';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'liuxin';
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'liuxin';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'liuxin';

2.执行admin-openrc凭证

# . admin-openrc

3.创建nova用户(密码:nova)

# openstack user create --domain default --password-prompt nova

OpenStack Queens版搭建详解_第17张图片

为nova用户添加admin角色(加入管理员组)

# openstack role add --project service --user nova admin

创建nova服务端点

# openstack service create --name nova --description "OpenStack Compute" compute

4.创建compute API 服务端点:

# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 
# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 
# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

OpenStack Queens版搭建详解_第18张图片

5.创建一个placement服务用户:(密码:placement

#openstack user create --domain default --password-prompt placement
 

6.添加placement用户为项目服务admin角色

# openstack role add --project service --user placement admin

7.在服务目录中创建Placement API条目:

# openstack service create --name placement --description "Placement API" placement

8.创建Placement API服务端点

# openstack endpoint create --region RegionOne placement public http://controller:8778
# openstack endpoint create --region RegionOne placement internal http://controller:8778
# openstack endpoint create --region RegionOne placement admin http://controller:8778

3.3.2.2 安装和配置组件

1.安装软件包

# yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api

2.编辑 /etc/nova/nova.conf文件并完成以下操作

# vim /etc/nova/nova.conf

 [DEFAULT]

# 只启用计算和元数据API
enabled_apis = osapi_compute,metadata
# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 使用控制节点的管理接口IP地址配置my_ip选项
my_ip = 192.168.234.129
# 启用对网络服务的支持
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

 [api_database]

# 配置数据库访问
connection = mysql+pymysql://nova:liuxin@controller/nova_api

[database]

# 配置数据库访问
connection = mysql+pymysql://nova:liuxin@controller/nova

[api]

# 配置认证服务访问
auth_strategy = keystone

[keystone_authtoken]

# 配置认证服务访问
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = nova

 [vnc]

# 使用控制节点的管理接口IP地址配置VNC代理
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip

 [glance]

# 配置Image服务API的位置
api_servers = http://controller:9292

 [oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/nova/tmp

 [placement]

# 配置 Placement API
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = placement

由于软件包的一个bug,需要在/etc/httpd/conf.d/00-nova-placement-api.conf文件中添加如下配置,来启用对Placement API的访问:

# vim /etc/httpd/conf.d/00-nova-placement-api.conf
[root@controller ~]# vim /etc/httpd/conf.d/00-nova-placement-api.conf
Listen 8778
 
  WSGIProcessGroup nova-placement-api
  ……
  = 2.4>
    ErrorLogFormat "%M"
  
  ErrorLog /var/log/nova/nova-placement-api.log #这里放在此行之后
  
   = 2.4>
      Require all granted
   
   
      Order allow,deny
      Allow from all
   
  
  #SSLEngine On
  #SSLCertificateFile ...
  #SSLCertificateKeyFile ...
 
Alias /nova-placement-api /usr/bin/nova-placement-api
……

重新启动httpd服务

# systemctl restart httpd

3.同步nova-api数据库

# su -s /bin/sh -c "nova-manage api_db sync" nova

4.注册cell0数据库

# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

5.创建cell1 cell

# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

6.同步nova数据库

# su -s /bin/sh -c "nova-manage db sync" nova

7.验证 nova、 cell0、 cell1数据库是否注册正确

# nova-manage cell_v2 list_cells

3.3.2.3 完成安装启动服务

启动计算服务并配置为开机启动

# systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

3.3.3 安装和配置计算节点

以下操作在计算节点执行

1.安装软件包

# yum install openstack-nova-compute

2.编辑/etc/nova/nova.conf配置文件并完成以下操作

# vim /etc/nova/nova.conf

[DEFAULT]

# 只启用计算和元数据API
enabled_apis = osapi_compute,metadata
# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 这里使用计算节点管理IP地址
my_ip = 192.168.234.130
# 启用对网络服务的支持
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[api]

# 配置认证服务访问
auth_strategy = keystone

[keystone_authtoken]

# 配置认证服务访问
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = nova

[vnc]

# 启用和配置远程控制台访问
enabled = True
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html

服务器组件侦听所有IP地址,并且代理组件只侦听计算节点的管理接口IP地址。 基本URL指示您可以使用Web浏览器访问此计算节点上实例的远程控制台的位置。 
    如果用于访问远程控制台的Web浏览器驻留在无法解析控制器主机名的主机上,则必须用控制节点的管理接口IP地址替换控制器。

[glance]

# 配置Image服务API的位置
api_servers = http://controller:9292

[oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/nova/tmp

[placement]

# 配置 Placement API
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = placement

3.3.3.2 完成配置启动服务

1.确定您的计算节点是否支持虚拟机的硬件加速:

$ egrep -c '(vmx|svm)' /proc/cpuinfo

如果此命令返回值为1或更大,则您的计算节点支持通常不需要额外配置的硬件加速。

如果此命令返回零值,则您的计算节点不支持硬件加速,并且您必须配置libvirt才能使用QEMU而不是KVM。(我这里返回值为2,所有并没有执行下面这一步,配置文件未做任何更改) 
在/etc/nova/nova.conf文件中编辑 [libvirt] 部分:

# vim /etc/nova/nova.conf

[libvirt]

virt_type = qemu

2.启动计算服务(包括其相关性),并将其配置为在系统引导时自动启动:

# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl start libvirtd.service openstack-nova-compute.service

注意:如果NOVA计算服务无法启动,检查/var/log/nova/nova-compute.log。控制节点上的错误消息AMQP服务器:5672是不可达的,可能指示控制节点上的防火墙阻止对端口5672的访问。配置防火墙以打开控制节点上的端口5672,并重新启动计算节点上的Nova计算服务。 
如果想要清除防火墙规则执行以下命令:

# iptables -F
# iptables -X
# iptables -Z

3.3.3.3 添加compute节点到cell数据库

以下在控制节点上执行

1.执行admin-openrc,验证有几个计算节点在数据库中

# . admin-openrc
# openstack compute service list --service nova-compute

 2.发现计算节点

# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

添加新计算节点时,必须在控制节点上运行nova-manage cell_v2 discover_hosts以注册这些新计算节点。 或者,您可以在/etc/nova/nova.conf中设置适当的时间间隔:

vim /nova/nova.conf

[scheduler]

discover_hosts_in_cells_interval = 300

3.3.4 验证计算服务操作

以下操作在控制节点执行

1.列出服务组件以验证每个进程成功启动和注册:

#. admin-openrc
# openstack compute service list

OpenStack Queens版搭建详解_第19张图片

此输出应显示在控制节点上启用三个服务组件,并在计算节点上启用一个服务组件。

2.列出身份服务中的API端点以验证与身份服务的连接:

#  openstack catalog list
 

3.列出Image服务中的镜像以验证与Image服务的连通性:

# openstack image list
 

4.检查cells和placement API是否正常运行

# nova-status upgrade check

OpenStack Queens版搭建详解_第20张图片

若是报错:

ConnectFailure: Unable to establish connection to http://controller:8778/....

则清除防火墙规则:看’3.3.3.2的2’

nova配置参考:https://docs.openstack.org/nova/queens/admin/index.html

3.4 安装neutron服务

3.4.1 网络服务概述

OpenStack Networking(neutron)允许您创建由其他OpenStack服务管理的接口设备并将其连接到网络。可以实现插件以适应不同的网络设备和软件,为OpenStack架构和部署提供灵活性。 

网络服务包含以下组件: 
neutron-server 

接受API请求并将其路由到适当的OpenStack Networking插件以便采取行动。 
OpenStack Networking plug-ins and agents 

插拔端口,创建网络或子网,并提供IP地址。这些插件和代理根据特定云中使用的供应商和技术而有所不同。OpenStack Networking带有用于思科虚拟和物理交换机,NEC OpenFlow产品,Open vSwitch,Linux桥接和VMware NSX产品的插件和代理。

通用代理是L3(第3层),DHCP(动态主机IP寻址)和插件代理。

Messaging queue 

大多数OpenStack Networking安装用于在neutron-server和各种代理之间路由信息。还充当存储特定插件的网络状态的数据库。

OpenStack Networking主要与OpenStack Compute进行交互,为其实例提供网络和连接。

3.4.3 安装和配置controller节点

以下操作在控制节点执行

3.4.3.1 创建数据库

1.要创建数据库,需要完成以下操作 

以root用户使用数据库连接客户端连接到数据库服务器:

# mysql -uroot -p

创建neutron数据库:

MariaDB [(none)] CREATE DATABASE neutron;

授予neutron数据库适当访问权,这里密码为liuxin:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'liuxin';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'liuxin';

2.加载管理员凭据以获得仅管理员访问的CLI命令:

$ . admin-openrc

3.创建服务凭证,完成以下操作

创建neutron用户,密码neutron

# openstack user create --domain default --password-prompt neutron

OpenStack Queens版搭建详解_第21张图片

添加admin角色到neutron用户

# openstack role add --project service --user neutron admin

创建neutron服务实体

# openstack service create --name neutron --description "OpenStack Networking" network

OpenStack Queens版搭建详解_第22张图片

4.创建网络服务API端点 

$ openstack endpoint create --region RegionOne network public http://controller:9696 
$ openstack endpoint create --region RegionOne network internal http://controller:9696 
$ openstack endpoint create --region RegionOne network admin http://controller:9696

3.4.3.2 配置网络部分

可以使用选项1和2所代表的两种体系结构之一来部署网络服务。

* 选项1部署了仅支持将实例附加到提供者(外部)网络的最简单的可能架构。 没有自助服务(专用)网络,路由器或浮动IP地址。

只有管理员或其他特权用户才能管理提供商网络。

* 选项2增加了选项1,其中支持将实例附加到自助服务网络的第3层服务。

演示或其他非特权用户可以管理自助服务网络,包括提供自助服务和提供商网络之间连接的路由器。此外,浮动IP地址可提供与使用来自外部网络(如Internet)的自助服务网络的实例的连接。 自助服务网络通常使用隧道网络。隧道网络协议(如VXLAN),选项2还支持将实例附加到提供商网络。

以下两项配置二选一:

 Networking Option 1: Provider networks 
 Networking Option 2: Self-service networks

这里选择Networking Option 2: Self-service networks

1.安装组件

# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables

2.配置服务组件 

# vim /etc/neutron/neutron.conf

[database]

# 配置数据库访问
connection = mysql+pymysql://neutron:liuxin@controller/neutron

[DEFAULT]

# 启用模块化第2层(ML2)插件,路由器服务和overlapping IP addresses
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
# 配置RabbitMQ消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 配置认证服务访问
auth_strategy = keystone
# 配置网络通知计算网络拓扑更改
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

[keystone_authtoken]

# 配置认证服务访问
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron

[nova]

#配置网络通知计算网络拓扑更改 
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = nova

[oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/neutron/tmp

3.配置网络二层插件

ML2插件使用Linux桥接机制为实例构建第2层(桥接和交换)虚拟网络基础结构。编辑/etc/neutron/plugins/ml2/ml2_conf.ini 文件:

# vim /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]

# 启用 flat, VLAN, and VXLAN 网络
type_drivers = flat,vlan,vxlan
# 租户创建的默认网络类型
tenant_network_types = vxlan
# 启用Linux网桥和第2层集群机制
# mechanism_ drivers 是一个数组,包含了 Neutron 可以接纳(加载)的具体厂家(含开源) 的 Mechanism Driver 的名称
mechanism_drivers = linuxbridge,l2population
# 启用端口安全扩展驱动程序
extension_drivers = port_security

[ml2_type_flat]

# 将提供者虚拟网络配置为扁平网络
flat_networks = provider

[ml2_type_vlan]

# vlan范围(租户)
network_vlan_ranges = provider:1001:2000

[ml2_type_vxlan]

# vxlan范围(租户)
vni_ranges = 1:1000

[securitygroup]

# 启用ipset以提高安全组规则的效率
enable_ipset = true

 

4.配置linux网桥代理

Linux桥接代理为实例构建层-2(桥接和交换)虚拟网络基础结构,并处理安全组。编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini

# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]

# vlan network 与物理网卡的对应关系
physical_interface_mappings = provider:ens33
注意:这里的ens33物理网卡是外部网络的网卡(underlying provider physical network interface)。

[vxlan]

# 启用vxlan隧道网络,配置处理隧道网络的物理网络接口的IP地址,并启用
enable_vxlan = true
local_ip = 192.168.72.129
l2_population = true
注意这里的ip地址192.168.72.129为隧道网络的ip地址(IP address of the underlying physical network interface that handles overlay networks)

[securitygroup]

# 启用安全组并配置Linux网桥iptables防火墙驱动程序
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

通过验证下列所有SysTL值设置为1以确保Linux操作系统内核支持网桥过滤器

# vim /usr/lib/sysctl.d/00-system.conf 
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
# sysctl -p

5.配置三层代理

Layer-3(L3)代理为自助虚拟网络提供路由和NAT服务。

# vim /etc/neutron/l3_agent.ini

[DEFAULT]

# 配置Linux网桥接口驱动程序和外部网络桥接器
interface_driver = linuxbridge

7.配置DHCP agent 

DHCP代理为虚拟网络提供DHCP服务。 

$ vim /etc/neutron/dhcp_agent.ini

[DEFAULT]

# 配置Linux网桥接口驱动程序,Dnsmasq DHCP驱动程序,并启用隔离的元数据,以便提供商网络上的实例可以通过网络访问元数据
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

3.4.3.5 配置metadata

元数据代理为实例提供配置信息,例如凭据。 
编辑 /etc/neutron/metadata_agent.ini文件并完成以下操作:

# vim /etc/nova/nova.conf

[neutron]

url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
service_metadata_proxy = true
metadata_proxy_shared_secret = liuxin

3.4.3.7 完成安装启动服务

1.网络服务初始化脚本需要一个指向ML2插件配置文件

/etc/neutron/plugins/ml2/ml2_conf.ini的符号链接

/etc/neutron/plugin.ini

如果此符号链接不存在,请使用以下命令创建它

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

2.同步数据库

# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf   --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
 

3.重启compute API服务

# systemctl restart openstack-nova-api.service

4.启动网络服务并设为开机启动

# systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
# systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service

5.对于联网选项2,还启用并启动第三层服务

# systemctl enable neutron-l3-agent.service && systemctl start neutron-l3-agent.service

3.4.4 安装和配置compute节点

以下操作在计算节点执行

计算节点处理实例的连接和安全组。

3.4.4.1 安装和配置组件

1.安装组件

# yum install openstack-neutron-linuxbridge ebtables ipset

2.配置公共组件 
网络通用组件配置包括身份验证机制,消息队列和插件。 

# vim /etc/neutron/neutron.conf

[DEFAULT]

注释掉任何connection选项,因为计算节点不直接访问数据库。

# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 配置身份服务访问
auth_strategy = keystone

[keystone_authtoken]

# 配置身份服务访问
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron

[oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/neutron/tmp

3.4.4.2 配置网络部分

选择您为控制器节点选择的相同网络选项以配置特定的服务。 之后,返回此处并继续配置计算服务以使用网络服务。 
      网络选项1:提供商网络 
      网络选项2:自助服务网络

这里选择网络选项2:自助服务网络

1.配置Linux网桥 
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:

# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[vxlan]

# 启用VXLAN隧道网络,配置处理隧道网络的物理网络接口的IP地址,并启用第2层群体
enable_vxlan = true
local_ip = 192.168.72.130
l2_population = true
注意:这里的192.168.72.130为计算节点隧道网络的IP地址(underlying physical network interface that handles overlay networks)

[securitygroup]

# 启用安全组并配置Linux网桥iptables防火墙驱动程序
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

2.配置计算服务使用网络服务

# vim /etc/nova/nova.conf 

[neutron]

url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron

确保Linux操作系统内核支持网桥过滤器,方法是验证以下所有sysctl值均设置为1

$ vim /usr/lib/sysctl.d/00-system.conf 
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
$ sysctl -p

3.4.4.5 完成安装启动服务

1.重启compute服务

# systemctl restart openstack-nova-compute.service

2.设置网桥服务开机启动

# systemctl enable neutron-linuxbridge-agent.service && systemctl start neutron-linuxbridge-agent.service

3.5 安装Horizon服务

以下操作在控制节点执行

本节介绍如何在控制节点上安装和配置仪表板。

仪表板所需的唯一核心服务是身份服务。 您可以将仪表板与其他服务结合使用,例如镜像服务,计算和网络。 您还可以在具有独立服务(如对象存储)的环境中使用仪表板。

3.5.1 安装和配置组件

1.安装软件包

# yum install openstack-dashboard -y

2.编辑 /etc/openstack-dashboard/local_settings 文件并完成以下操作

# vim /etc/openstack-dashboard/local_settings

配置仪表板以在controller节点上使用OpenStack服务

OPENSTACK_HOST = "controller"

允许您的主机访问仪表板:

ALLOWED_HOSTS = ['*']
或者ALLOWED_HOSTS = [‘one.example.com’, ‘two.example.com’] 
ALLOWED_HOSTS也可以[‘*’]接受所有主机。这对开发工作可能有用,但可能不安全,不应用于生产。

配置memcache会话存储服务

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}
* 注释掉任何其他会话存储配置。 

开启身份认证API 版本v3

OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

启用对域的支持

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

配置API版本

OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
}

配置Default为您通过仪表板创建的用户的默认域

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

将用户配置为通过仪表板创建的用户的默认角色

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

配置时区(可选)

TIME_ZONE = "Asia/Shanghai"

4.如果未包括,则将以下行添加到openstack-dashboard.conf

# vim /etc/httpd/conf.d/openstack-dashboard.conf
WSGIApplicationGroup %{GLOBAL}

3.5.2 完成安装启动服务

完成安装,重启web服务和会话存储

# systemctl restart httpd.service memcached.service

3.5.3 登录web验证配置

在浏览器中输入http://192.168.234.129/dashboard.,访问openstack的dashboard界面,

  • domain:default
  • 用户名(管理员):     admin(管理员),demo(租户)
  • 密码:liuxin

OpenStack Queens版搭建详解_第23张图片

3.6 安装Cinder服务

块存储服务(cinder)为访客实例提供块存储设备。 存储配置和使用的方法由块存储驱动程序确定,或者在多后端配置的情况下由驱动程序确定。 有多种可用的驱动程序:NAS / SAN,NFS,iSCSI,Ceph等。

块存储API和调度程序服务通常在控制节点上运行。 根据所使用的驱动程序,卷服务可以在控制节点,计算节点或独立存储节点上运行。

一旦能够在OpenStack环境中“启动实例”,请按照以下说明将Cinder添加到基本环境。

3.6.1 块存储服务概述

OpenStack块存储服务(Cinder)将持久性存储添加到虚拟机。块存储为管理卷提供基础架构,并与OpenStack Compute进行交互以提供实例卷。该服务还支持管理卷快照和卷类型。

块存储服务包含以下组件: 
cinder-api 

接受API请求,并将它们路由到cinder-volume操作。

cinder-volume 

       直接与Block Storage服务进行交互,以及诸如cinder-scheduler。它也通过消息队列与这些进程交互。该cinder-volume服务响应发送到块存储服务的读取和写入请求以保持状态。它可以通过驱动程序架构与各种存储提供商进行交互。

cinder-scheduler daemon守护进程

选择要在其上创建卷的最佳存储提供者节点。 与nova-scheduler类似的组件。

cinder-backup daemon守护进程 

该cinder-backup服务可将任何类型的卷备份到备份存储提供程序。与cinder-volume服务一样,它可以通过驱动程序体系结构与各种存储提供商进行交互。

Messaging queue消息队列

路由块存储过程之间的信息。

3.6.2 安装和配置cinder节点

以下操作在cinder节点执行

3.6.2.1 安装配置LVM

本节介绍如何为Block Storage服务安装和配置存储节点。 为简单起见,此配置引用具有空本地块存储设备的一个存储节点。 这些指令使用/ dev / sdb,但您可以将特定节点的值替换为不同的值。

该服务使用LVM驱动程序在该设备上配置逻辑卷,并通过iSCSI传输将其提供给实例。 您可以按照这些说明进行小的修改,以便使用其他存储节点水平扩展您的环境。

1.安装支持的软件包

安装LVM软件包

# yum install lvm2 device-mapper-persistent-data 

启动LVM元数据服务并将其配置为在系统引导时启动

# systemctl enable lvm2-lvmetad.service && systemctl start lvm2-lvmetad.service
说明:一些发行版默认包含LVM。

2.创建LVM物理逻辑卷/dev/sdb

# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

3.创建cinder-volumes逻辑卷组

# vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created

4 . 编辑/etc/lvm/lvm.conf文件

只有实例才能访问块存储卷。 但是,底层操作系统管理与卷关联的设备。 默认情况下,LVM卷扫描工具会扫描包含卷的块存储设备的/ dev目录。 如果项目在其卷上使用LVM,则扫描工具将检测这些卷并尝试缓存它们,这可能会导致底层操作系统和项目卷出现各种问题。 您必须重新配置LVM以仅扫描包含cinder-volumes卷组的设备。

在devices部分中,添加一个接受/ dev / sdb设备的过滤器并拒绝所有其他设备:

# vim /etc/lvm/lvm.conf
devices {
...
filter = [ "a/sdb/", "r/.*/"]

每个过滤器组中的元素都以``a``开头,即为 accept,或以 r 开头,即为**reject**,并且包括一个设备名称的正则表达式规则。过滤器组必须以``r/.*/``结束,过滤所有保留设备。您可以使用 :命令:`vgs -vvvv` 来测试过滤器。

如果您的存储节点在操作系统磁盘上使用LVM,则还必须将关联的设备添加到过滤器。 例如,如果/ dev / sda设备包含操作系统:

filter = [ "a/sda/", "a/sdb/", "r/.*/"]

同样,如果您的计算节点在操作系统磁盘上使用LVM,则还必须修改这些节点上/etc/lvm/lvm.conf文件中的过滤器,将操作系统磁盘包含到过滤器中。例如,如果/dev/sda 设备包含操作系统:

filter = [ "a/sda/", "r/.*/"]

3.6.2.2 安装和配置组件

1.安装软件包

# yum install openstack-cinder targetcli python-keystone -y

2.编辑/etc/cinder/cinder.conf文件并完成以下操作:

# vim /etc/cinder/cinder.conf

[database]

# 配置数据库访问
connection = mysql+pymysql://cinder:liuxin@controller/cinder

[DEFAULT]

# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 配置身份服务访问
auth_strategy = keystone
# 存储节点上管理网络接口的IP地址
my_ip = 192.168.234.131
# 启用LVM后端
后端名称是任意的。作为示例,本指南使用驱动程序的名称作为后端的名称
enabled_backends = lvm
# 配置Image Service API的位置
glance_api_servers = http://controller:9292

[keystone_authtoken]

auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = cinder

[lvm] 不存在,则创建它

# 使用LVM驱动程序,cinder-volumes卷组,iSCSI协议和相应的iSCSI服务配置LVM后端。如果该[lvm]部分不存在,请创建它
volume_driver  =  cinder.volume.drivers.lvm.LVMVolumeDriver 
volume_group  =  cinder-volumes 
iscsi_protocol  =  iscsi 
iscsi_helper  =  lioadm

[oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/cinder/tmp

3.6.2.3 完成安装启动服务

设置存储服务开机启动

# systemctl enable openstack-cinder-volume.service target.service 
# systemctl start openstack-cinder-volume.service target.service

3.6.3 安装和配置controller节点

本节介绍如何在控制节点上安装和配置代码为cinder的块存储服务。 此服务至少需要一个为实例提供卷的额外存储节点。

以下操作在控制节点执行

3.6.3.1 创建cinder数据库

在安装和配置块存储服务之前,您必须创建数据库,服务凭据和API端点。

1.使用数据库访问客户端以root用户身份连接到数据库服务器:

$ mysql -u root -p

创建cinder数据库:

MariaDB [(none)]> CREATE DATABASE cinder;

授予对cinder数据库的适当访问权限

MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'liuxin';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%'
IDENTIFIED BY 'liuxin';

2.加载admin凭据

$ . admin-openrc

3.要创建服务凭据,请完成以下步骤

创建一个cinder用户:密码:cinder

# openstack user create --domain default --password-prompt cinder
User Password: cinder
Repeat User Password: cinder

添加admin角色到cinder用户:

$ openstack role add --project service --user cinder admin

创建cinderv2和cinderv3服务实体:

# openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
# openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
注意:块存储服务需要两个服务实体。

4.创建块存储服务API端点:

# openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s 
# openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s 
# openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s 
# openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s 
# openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s 

3.6.3.2 安装和配置组件

1.安装软件包:

# yum install openstack-cinder

2.编辑/etc/cinder/cinder.conf文件并完成以下操作

# vim /etc/cinder/cinder.conf

[database]

connection = mysql+pymysql://cinder:liuxin@controller/cinder

[DEFAULT]

# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 配置身份服务访问
auth_strategy = keystone
# 该my_ip选项配置为使用控制节点的管理接口IP地址
my_ip = 192.168.234.129

[keystone_authtoken]

auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = cinder

[oslo_concurrency]

lock_path = /var/lib/cinder/tmp

4.同步块存储数据库

# su -s /bin/sh -c "cinder-manage db sync" cinder
Option "logdir" from group "DEFAULT" is deprecated. Use option "log-dir" from group "DEFAULT".
忽略此输出中的任何弃用消息。

3.6.3.3 配置计算服务使用块存储

# vim /etc/nova/nova.conf

[cinder]

os_region_name = RegionOne

3.6.3.4 完成安装启动服务

重新启动Compute API服务

# systemctl restart openstack-nova-api.service

启动块存储服务并将其配置为在系统引导时启动

# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

3.6.4 验证cinder配置

验证Cinder操作,在控制器节点上执行这些命令。

1.输入管理员凭据以访问仅限管理员的CLI命令

$ . admin-openrc

列出服务组件以验证每个进程的成功启动:

# openstack volume service list

 

4 创建虚拟机实例

创建过程: 

1) 创建虚拟网络

2) 创建m1.nano规格的主机(相等于定义虚拟机的硬件配置)

3) 生成一个密钥对(openstack的原理是不使用密码连接,而是使用密钥对进行连接)

4) 增加安全组规则(用iptables做的安全组)

5) 启动一个实例(启动虚拟机有三种类型:1.命令CLI 2.api 3.Dashboard)实际上Dashboard也是通过api进行操作

6) 虚拟网络分为提供者网络和私有网络,提供者网络就是跟主机在同一个网络里,私有网络自定义路由器等,跟主机不在一个网络

4.1 创建外部网络

控制节点执行

为配置Neutron时选择的网络选项创建虚拟网络。 如果您选择选项1,则只创建提供商网络。 如果您选择了选项2,请创建提供商和自助服务网络。

Provider network 
Self-service network

在为您的环境创建适当的网络后,您可以继续准备环境以启动实例。

提供者网络-provider网络

在启动实例之前,您必须创建必要的虚拟网络基础结构,管理员或其他特权用户必须创建此网络,因为它直接连接到物理网络基础结构。

4.1.1 创建provider外部网络

在控制节点上,获取admin用户凭证以访问仅管理员的CLI命令

$ . admin-openrc

创建虚拟网络(网络名为provider)

$ openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider

OpenStack Queens版搭建详解_第24张图片

参数说明: 
- -share选项允许所有项目使用虚拟网络。 
- -external选项将虚拟网络定义为外部。 如果你想创建一个内部网络,你可以使用–internal代替。 默认值是内部的。

--provider-physical-network提供者和--provider-network-type平面选项使用来自以下文件的信息将扁平虚拟网络连接到主机上eth33接口上的扁平(本地/非标记)物理网络:

/etc/neutron/plugins/ml2/ml2_conf.ini :
[ml2_type_flat]
flat_networks = provider
 
/etc/neutron/plugins/ml2/linuxbridge_agent.ini:
[linux_bridge]
physical_interface_mappings = provider:ens33

使用命令查看创建的网络:

# openstack network list

OpenStack Queens版搭建详解_第25张图片

以admin用户登录dashboard查看创建的网络

OpenStack Queens版搭建详解_第26张图片

查看网络拓扑图

OpenStack Queens版搭建详解_第27张图片

4.1.2 网络中创建子网

在外部网络上创建一个子网

# openstack subnet create --network provider \
  --allocation-pool start=192.168.241.80,end=192.168.241.90 \
  --dns-nameserver 114.114.114.114 --gateway 192.168.241.2 \
  --subnet-range 192.168.241.0/24 provider

OpenStack Queens版搭建详解_第28张图片

参数说明 

用CIDR表示法将PROVIDER_NETWORK_CIDR替换为提供商物理网络上的子网。

将START_IP_ADDRESS和END_IP_ADDRESS替换为要为实例分配的子网内范围的第一个和最后一个IP地址。 该范围不得包含任何现有的活动IP地址。

将DNS_RESOLVER替换为DNS解析器的IP地址。 在大多数情况下,您可以使用主机上/etc/resolv.conf文件中的一个。

将PROVIDER_NETWORK_GATEWAY替换为提供商网络上的网关IP地址,通常为“.1”IP地址。

--network,指定创建的子网名称 

--subnet-range 后边的provider为要创建子网的网络

(要跟上面创建网络的名称对应起来) 
查看创建的子网

# openstack subnet list

以admin用户登录dashboard查看创建的子网

OpenStack Queens版搭建详解_第29张图片

查看网络拓扑图变化

OpenStack Queens版搭建详解_第30张图片

4.1.3 查看节点网卡变化

OpenStack中创建的实例想要访问外网必须要创建外部网络(即provider network),然后通过虚拟路由器连接外部网络和租户网络,Neutron网桥的方式实现外网的访问,当Neutron创建外部网络并创建子网后会创建一个新的网桥,并且将ens38这块外部网卡加入网桥,执行ifconfig可以看到多了一个brq6e8e2254-8a的网桥:

OpenStack Queens版搭建详解_第31张图片

查看该网桥信息,其中,该网桥的 tap52369e85-ad接口分别连接了ens33物理网卡和dhcp节点

4.2 创建租户网络

如果选择联网选项2,则还可以创建通过NAT连接到物理网络基础结构的自助服务(专用)网络。该网络包括一个为实例提供IP地址的DHCP服务器。此网络上的实例可以自动访问外部网络,如Internet。但是,从外部网络(例如Internet)访问此网络上的实例需要浮动IP地址

这个demo或其他非特权用户可以创建这个网络,因为它仅提供与demo项目内实例的连接。 
Warning

您必须在自助服务网络之前创建提供商网络。

4.2.1 创建self-service网络

1.在控制节点上,获取凭据demo-openrc

$ . demo-openrc

2.创建网络

# openstack network create selfservice1

OpenStack Queens版搭建详解_第32张图片

非特权用户通常不能为该命令提供额外的参数。该服务使用来自以下文件的信息自动选择参数

# cat /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
tenant_network_types = vxlan
[ml2_type_vxlan]
vni_ranges = 1:1000

创建的内部网络类型是由tenant_network_types中指定,为vxlan。该配置能指定内部网络类型,如flat,vlan,gre等。

查看创建的网络

# openstack network list

 

在dashboard上查看创建的网络

 

4.2.2 网络中创建子网

在网络上创建子网

$ openstack subnet create --network selfservice1 \
  --dns-nameserver 114.114.114.114 --gateway 172.16.1.1 \
  --subnet-range 172.16.1.0/24 selfservice1-net1

OpenStack Queens版搭建详解_第33张图片

查看创建的子网

# openstack subnet list

在dashboard上查看创建的网络

OpenStack Queens版搭建详解_第34张图片

切换到demo用户登录dashboard查看网络拓扑图

OpenStack Queens版搭建详解_第35张图片

查看计算节点网卡变化

OpenStack Queens版搭建详解_第36张图片

OpenStack Queens版搭建详解_第37张图片

4.2.3 创建路由器

自助服务网络使用通常执行双向NAT的虚拟路由器连接到提供商网络。每个路由器至少包含一个自助服务网络上的接口和提供商网络上的网关。

提供商网络必须包含router:external选项以使自助服务路由器能够使用它来连接到外部网络,例如互联网。这个admin或其他特权用户必须在网络创建期间包含此选项或稍后添加它。在这种情况下,该 router:external选项–external在创建provider网络时通过使用该参数进行设置。

1.在控制节点上,demo获取凭据以访问仅限用户的CLI命令

$ . demo-openrc

2.创建路由器

# openstack router create router

OpenStack Queens版搭建详解_第38张图片

查看创建的路由器

# openstack router list

登录dashboard查看创建的路由器

OpenStack Queens版搭建详解_第39张图片

4.2.4 租户网络添加到路由器

将自助服务网络子网添加为路由器上的接口

# neutron router-interface-add router selfservice1-net1

4.2.5 路由器连接到外部网络

在路由器上的提供商网络上设置网关

# neutron router-gateway-set router provider

切换demo用户登录dashboard查看网络拓扑图变化

OpenStack Queens版搭建详解_第40张图片

4.2.6 验证操作

我们建议您在继续之前验证操作并解决所有问题。 以下步骤使用网络和子网创建示例中的IP地址范围。

1.在控制器节点上,输入管理员凭据以访问仅限管理员的CLI命令

$ . admin-openrc

2.列出网络名称空间。你应该看到一个qrouter命名空间和两个 qdhcp命名空间

# ip netns

OpenStack Queens版搭建详解_第41张图片

3.列出路由器上的端口以确定提供商网络上的网关IP(192.168.241.82)地址

# neutron router-port-list router    --路由名称

4.从控制节点或物理提供商网络上的任何主机ping此IP地址

OpenStack Queens版搭建详解_第42张图片

4.3 创建实例类型

最小的默认flavor消耗每个实例512 MB的内存。 对于包含少于4 GB内存的计算节点的环境,我们建议创建每个实例仅需要64 MB的m1.nano特征。 为了测试目的,请仅将CirrOS图像用于此flavor。

# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
这里创建两种规格的实例类型
# openstack flavor create --id 1 --vcpus 1 --ram 1024 --disk 10 m2.nano

OpenStack Queens版搭建详解_第43张图片

参数说明: 

openstack flavor create 创建主机 

- -id 主机ID 

- -vcpus cpu数量 

- -ram 64(默认是MB,可以写成G) 

- -disk 磁盘(默认单位是G)

查看创建的实例类型

# openstack flavor list

OpenStack Queens版搭建详解_第44张图片

切换到admin用户查看创建的实例类型

OpenStack Queens版搭建详解_第45张图片

4.4 生成秘钥对

大多数云镜像支持公钥认证,而不是传统的密码认证。 在启动实例之前,您必须将公钥添加到Compute服务。

1.加载demo项目凭证

$ . demo-openrc

2.生成密钥对并添加公钥

生成密钥文件(一个公钥文件和一个私钥文件),保存在/root/.ssh/id

# ssh-keygen -q -N ""
Enter file in which to save the key (/root/.ssh/id_rsa):    #Enter默认
# ll /root/.ssh/
-rw------- 1 root root 1675 6月  18 18:20 id_rsa    #生成的私钥文件
-rw-r--r-- 1 root root  397 6月  18 18:20 id_rsa.pub        #生成的公钥文件

创建秘钥对,并将生成的公钥文件添加到秘钥对

# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

OpenStack Queens版搭建详解_第46张图片

3.验证密钥对是否添加成功

# openstack keypair list
登录dashboard查看创建的秘钥对

OpenStack Queens版搭建详解_第47张图片

4.5 添加安全组规则

默认情况下,默认安全组适用于所有实例,并包含拒绝对实例进行远程访问的防火墙规则。 对于像CirrOS这样的Linux映像,我们建议至少允许ICMP(ping)和安全shell(SSH)。 

向default安全组添加规则:

1.允许ICMP(ping)

# openstack security group rule create --proto icmp default

OpenStack Queens版搭建详解_第48张图片

2.允许安全shell(SSH)访问

#  openstack security group rule create --proto tcp --dst-port 22 default

OpenStack Queens版搭建详解_第49张图片

查看安全组及创建的安全组规则

# openstack security group list

切换到demo用户登录dashboard查看创建的安全组规则

OpenStack Queens版搭建详解_第50张图片

4.6 确认实例选项

要启动实例,必须至少指定flavor、镜像名称、网络、安全组、密钥和实例名称。 

1.在控制器节点上,获取演示凭据以访问仅限用户的CLI命令

$ . demo-openrc

2.flavor指定了包括处理器,内存和存储的虚拟资源分配概要文件。

列出可用的flavor:

# openstack flavor list

OpenStack Queens版搭建详解_第51张图片

3.列出镜像

# openstack image list

OpenStack Queens版搭建详解_第52张图片

本实例使用cirros镜像

4.列出可用的网络

# openstack network list

这个实例使用provider提供者网络。但是,您必须使用ID而不是名称来引用此网络。

如果你选择了选项2,则输出还应包含 selfservice自助服务网络。 

5.列出可用的安全组

# openstack security group list

此实例使用default安全组。

6.列出可用的秘钥

# openstack keypair list

4.7 创建实例

租户网络selfservice1上创建实例

$ . demo-openrc
$ openstack server create --flavor m1.nano --image “cirros”--nic net-id=eb85d1ec-0903-4ce8-a907-855482bafa94 --security-group default --key-name mykey selfservice1-cirros1

OpenStack Queens版搭建详解_第53张图片

参数说明:

openstack server create 创建实例 
–flavor 主机类型名称 
–image 镜像名称 
–nic net-id=网络ID 
–security-group 安全组名称 
–key-name key名称 
最后一个是自定义实例名称 

检查实例状态

# openstack server list

目前实例地址无法ping通

4.8 虚拟控制台访问实例

加载demo-openrc环境

$ . demo-openrc

为您的实例获取虚拟网络计算(VNC)会话URL并从Web浏览器访问它

# openstack console url show selfservice1-cirros1
如果您的Web浏览器在无法解析控制器主机名的主机上运行,则可以使用控制节点上的管理接口的IP地址替换控制器。

测试实例对外网的访问

   ping 172.16.1.1    租户网络网关
   ping 192.168.92.2  本地外部网络网关
   ping www.baidu.com 外部互联网

测试全部能够正常ping通

CirrOS映像包含传统的用户名/密码认证,并在登录提示符处提供这些凭据。 登录到CirrOS后,我们建议您使用ping验证网络连接。默认用户名cirros默认密码gocubsgo

4.9 为实例分配浮动IP地址

如果想通过外网远程连接到实例,需要在外部网络上创建浮动IP地址,并将浮动ip地址关联到实例上,然后通过访问外部的浮动ip地址来访问实例

1.在外部网络上生成浮动ip地址

[root@controller ~]# openstack floating ip create provider

+---------------------+--------------------------------------+

| Field               | Value                                |

+---------------------+--------------------------------------+

| created_at          | 2018-06-14T07:27:59Z                 |

| description         |                                      |

| fixed_ip_address    | None                                 |

| floating_ip_address | 192.168.92.86                        |

| floating_network_id | 891787bb-ce4a-4b41-b222-1493ec30035c |

| id                  | 0aa48060-ed79-4f60-baa7-0cba7be74ac2 |

| name                | 192.168.92.86                        |

| port_id             | None                                 |

2.将浮动IP地址与实例关联

$ openstack server add floating ip selfservice1-cirros1 192.168.92.86

3.检查浮动IP地址的关联状态

[root@controller ~]# openstack server list

依次生成多个浮动ip对其他实例进行相同操作 

3.在控制节点或者外部网络上通过floating IP验证对实例的访问是否正常:

通过来自控制器节点或供应商物理网络上的任何主机的浮动IP地址验证与实例的连接性:

控制节点测试:

[root@controller ~]# ping 192.168.92.86
PING 192.168.92.86 (192.168.92.86) 56(84) bytes of data.
64 bytes from 192.168.92.86: icmp_seq=1 ttl=63 time=1.59 ms
64 bytes from 192.168.92.86: icmp_seq=2 ttl=63 time=0.856 ms

本地主机测试:

C:\Users\zwpos>ping 192.168.92.86
正在 Ping 192.168.92.86 具有 32 字节的数据:
来自 192.168.92.86 的回复: 字节=32 时间=1ms TTL=63
来自 192.168.92.86 的回复: 字节=32 时间=1ms TTL=63

4.10 远程SSH访问实例

通过控制节点或者远程主机登录实例

默认用户名cirros默认密码gocubsgo

[root@controller ~]# ssh [email protected]

The authenticity of host '192.168.92.86 (192.168.92.86)' can't be established.

ECDSA key fingerprint is SHA256:GiuwydTpzXUrQ0K7DYTv7+sJXA5afNJpCnU+t/xsgvE.

ECDSA key fingerprint is MD5:20:a9:81:33:16:0b:34:8e:2f:b6:42:8f:d2:3b:72:7c.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.92.86' (ECDSA) to the list of known hosts.

$

4.11 网卡变化

创建好内部网络和实例之后,vxlan隧道就建立起来。系统会在控制节点创建一个vxlan 的VTEP,在计算节点创建一个vxlan的VTEP。

如下图,第一张为控制节点,创建vxlan21;第二张为计算节点创建也为vxlan21。这两个VTEP设备组成了vxlan隧道的两个端点。

[root@controller ~]#  brctl show

bridge name     bridge id               STP enabled     interfaces

brqa248893f-02  8000.02516746fd7d       no             tapcae7f217-1e

                                                        vxlan-21

[root@compute1 ~]# brctl show

bridge name     bridge id               STP enabled     interfaces

brqa248893f-02  8000.a6aaa0e77f45       no              tap8cb57c9e-a7

                                                        vxlan-21

通过查看计算节点上vxlan21的详细信息可以看到其连接ens37网卡。

[root@compute1 ~]# ip -d link show dev vxlan-21 

10: vxlan-21: mtu 1450 qdisc noqueue master brqa248893f-02 state UNKNOWN mode DEFAULT group default qlen 1000

    link/ether a6:aa:a0:e7:7f:45 brd ff:ff:ff:ff:ff:ff promiscuity 1

vxlan id 21 dev ens37 srcport 0 0 dstport 8472 ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx

4.12 块存储

4.12.1 创建一个卷

$ . demo-openrc

创建1GB大小的卷:

[root@controller ~]# openstack volume create --size 1 volume1

+---------------------+--------------------------------------+

| Field               | Value                                |

+---------------------+--------------------------------------+

| attachments         | []                                   |

| availability_zone   | nova                                 |

| bootable            | false                                |

| consistencygroup_id | None                                 |

| created_at          | 2018-05-15T01:53:57.000000           |

| description         | None                                 |

| encrypted           | False                                |

| id                  | e3d30f58-6c0a-4f13-8433-c274e014fc3f |

| multiattach         | False                                |

| name                | volume1                              |

| properties          |                                      |

| replication_status  | None                                 |

| size                | 1                                    |

| snapshot_id         | None                                 |

| source_volid        | None                                 |

| status              | creating                             |

| type                | None                                 |

| updated_at          | None                                 |

| user_id             | 19ba7d00b87c4132b4fc0c6ee8555fef     |

+---------------------+--------------------------------------+

在短时间内,卷状态应该从创建变为可用:

$ openstack volume list

[root@controller ~]# openstack volume list

+--------------------------------------+---------+-----------+------+-------------+

| ID                                   | Name    | Status    | Size | Attached to |

+--------------------------------------+---------+-----------+------+-------------+

| e3d30f58-6c0a-4f13-8433-c274e014fc3f | volume1 | available |    1 |             |

+--------------------------------------+---------+-----------+------+-------------+

4.12.2 将卷添加到实例

$ openstack server add volume INSTANCE_NAME VOLUME_NAME 

Replace INSTANCE_NAME with the name of the instance and VOLUME_NAME with the name of the volume you want to attach to it.

 

Example

Attach the volume1 volume to the provider-instance instance:

$ openstack server add volume provider-instance volume1

Note

This command provides no output.

List volumes:

 

$ openstack volume list
[root@controller ~]# openstack server add volume provider-vm3 volume1     
[root@controller ~]# openstack volume list

+--------------------------------------+------+-----------+------+---------------------------------------------------------------+

| ID                                   | Name | Status    | Size | Attached to                                                   |

+--------------------------------------+------+-----------+------+---------------------------------------------------------------+

| 5e3c9ff9-dd13-402e-9377-065df66c3960 |      | in-use    |   10 | Attached to cde97911-dc1c-4265-8f14-2bc20ae77973 on /dev/vda  |

| b59a916f-7663-4bee-825f-1c6c240ac49b |      | available |   10 |                                                               |

+--------------------------------------+------+-----------+------+---------------------------------------------------------------+

Access your instance using SSH and use the fdisk command to verify presence of the volume as the /dev/vdb block storage device:

$ sudo fdisk -l

[root@provider-vm3 ~]# fdisk -l

 

Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 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: 0x000b2f10

 

   Device Boot      Start         End      Blocks   Id  System

/dev/vda1   *        2048    20971486    10484719+  83  Linux

 

Disk /dev/vdb: 1073 MB, 1073741824 bytes, 2097152 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

 

[root@provider-vm3 ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        10G  1.1G  9.0G  11% /

devtmpfs        476M     0  476M   0% /dev

tmpfs           497M     0  497M   0% /dev/shm

tmpfs           497M   13M  484M   3% /run

tmpfs           497M     0  497M   0% /sys/fs/cgroup

tmpfs           100M     0  100M   0% /run/user/0

 

[root@provider-vm3 ~]# lsblk

NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

vda    253:0    0  10G  0 disk

└─vda1 253:1    0  10G  0 part /

vdb    253:16   0   1G  0 disk

You must create a file system on the device and mount it to use the volume

[root@provider-vm3 ~]# parted /dev/vdb

(parted) mkpart primary 0 -1

(parted) toggle 1 lvm 

 

[root@provider-vm3 ~]# mkfs.xfs /dev/vdb1

meta-data=/dev/vdb1              isize=512    agcount=4, agsize=65474 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=0, sparse=0

data     =                       bsize=4096   blocks=261895, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0 ftype=1

log      =internal log           bsize=4096   blocks=855, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

 

[root@provider-vm3 ~]# fdisk -l

 

Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 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: 0x000b2f10

 

   Device Boot      Start         End      Blocks   Id  System

/dev/vda1   *        2048    20971486    10484719+  83  Linux

WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

 

Disk /dev/vdb: 1073 MB, 1073741824 bytes, 2097152 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: gpt

Disk identifier: 8D328EE8-2A24-4F42-954A-3B817470C5AC

 

 

#         Start          End    Size  Type            Name

 1           34      2095199   1023M  Linux LVM       primary

[root@provider-vm3 ~]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

vda    253:0    0   10G  0 disk

└─vda1 253:1    0   10G  0 part /

vdb    253:16   0    1G  0 disk

└─vdb1 253:17   0 1023M  0 part 
[root@provider-vm3 ~]# mount /dev/vdb1 /data/
[root@provider-vm3 ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        10G  1.1G  9.0G  11% /

devtmpfs        476M     0  476M   0% /dev

tmpfs           497M     0  497M   0% /dev/shm

tmpfs           497M   13M  484M   3% /run

tmpfs           497M     0  497M   0% /sys/fs/cgroup

tmpfs           100M     0  100M   0% /run/user/0

/dev/vdb1      1020M   33M  988M   4% /data

 

For more information about how to manage volumes, see the python-openstackclient documentation for Pike or the python-openstackclient documentation for Queens.

Return to Launch an instance.

5 使用官方云镜像创建实例

在openstack中,glance负责image,即镜像相关的服务,镜像是一个已经打包好的文件,内置有操作系统和预先部署好的软件。基于image创建虚拟机,在openstack中是以backing file的形式创建的,即新建的虚拟机和镜像文件之间建立一个连接。

OpenStack 的 instance(实例,就是虚拟机/云主机) 是通过 Glance 镜像部署的,下载clould 镜像使用标准镜像。主流的Linux发行版都提供可以在 OpenStack 中直接使用的cloud镜像。

5.1 下载官方通用云镜像

1、执行环境变量

# . admin-openrc

2、centos官网下载qcow2格式的openstack镜像

# wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2c

官方链接:http://cloud.centos.org/centos/7/images 

5.2 上传镜像到Glance 

# openstack image create “CentOS7-image” \
--file CentOS-7-x86_64-GenericCloud-1802.qcow2c \
--disk-format qcow2 --container-format bare \ 
--public

OpenStack Queens版搭建详解_第54张图片

查看上传的镜像

# openstack image list

OpenStack Queens版搭建详解_第55张图片

5.3 创建实例

# openstack server create --flavor m2.nano /
--image “CentOS7-image” /
--nic net-id=eb85d1ec-0903-4ce8-a907-855482bafa94 /
--security-group default /
--key-name mykey selfservice1-centos7
 

OpenStack Queens版搭建详解_第56张图片

5.5 为实例分配浮动IP地址

1.在外部网络上生成浮动ip地址:

# openstack floating ip create provider

OpenStack Queens版搭建详解_第57张图片

2.将浮动IP地址与实例关联

$ openstack server add floating ip selfservice1-centos7 192.168.241.83

3.检查浮动IP地址的关联状态

# openstack server list

3.在控制节点或者外部网络上通过floating IP验证对实例的访问是否正常: 

通过来自控制器节点或供应商物理网络上的任何主机的浮动IP地址验证与实例的连接性: 

控制节点测试:

本地主机测试:

 

5.6 远程SSH访问实例

通过控制节点登录实例:

[root@controller ~]# ssh [email protected]

OpenStack Queens版搭建详解_第58张图片

修改实例root密码并开启SSH远程密码登录

# ssh [email protected]

OpenStack Queens版搭建详解_第59张图片

使用root账号及设置的密码访问实例:

6 查看当前网卡状态

6.1 控制节点

# nmcli connection show

[root@controller ~]# ifconfig

[root@controller ~]# ifconfig

brq6e8e2254-8a: flags=4163  mtu 1500

        inet 192.168.241.129  netmask 255.255.255.0  broadcast 192.168.241.255

        inet6 fe80::249e:f5ff:feda:7b09  prefixlen 64  scopeid 0x20

        ether 00:0c:29:8e:eb:b1  txqueuelen 1000  (Ethernet)

        RX packets 102448  bytes 399354548 (380.8 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 79094  bytes 12632995 (12.0 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

brqeb85d1ec-09: flags=4163  mtu 1450

        inet6 fe80::789a:f0ff:fe86:4f46  prefixlen 64  scopeid 0x20

        ether 1a:ee:83:25:99:b5  txqueuelen 1000  (Ethernet)

        RX packets 25  bytes 2526 (2.4 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 8  bytes 656 (656.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

ens33: flags=4163  mtu 1500

        inet6 fe80::b3a8:9179:b957:cebf  prefixlen 64  scopeid 0x20

        ether 00:0c:29:8e:eb:b1  txqueuelen 1000  (Ethernet)

        RX packets 304051  bytes 411709400 (392.6 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 83751  bytes 14916095 (14.2 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

ens34: flags=4163  mtu 1500

        inet 192.168.72.129  netmask 255.255.255.0  broadcast 192.168.72.255

        inet6 fe80::8d58:10ca:75b4:9369  prefixlen 64  scopeid 0x20

        ether 00:0c:29:8e:eb:bb  txqueuelen 1000  (Ethernet)

        RX packets 1022  bytes 147128 (143.6 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 962  bytes 136713 (133.5 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

ens35: flags=4163  mtu 1500

        inet 192.168.234.129  netmask 255.255.255.0  broadcast 192.168.234.255

        inet6 fe80::5ca6:da49:a63e:2537  prefixlen 64  scopeid 0x20

        ether 00:0c:29:8e:eb:c5  txqueuelen 1000  (Ethernet)

        RX packets 35884  bytes 13158229 (12.5 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 303231  bytes 704484745 (671.8 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

lo: flags=73  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10

        loop  txqueuelen 1000  (Local Loopback)

        RX packets 362520  bytes 546291655 (520.9 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 362520  bytes 546291655 (520.9 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

tap52369e85-ad: flags=4163  mtu 1500

        ether e6:2a:53:2d:fa:6a  txqueuelen 1000  (Ethernet)

        RX packets 5  bytes 446 (446.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 2618  bytes 188657 (184.2 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

tapb8ded7fb-ab: flags=4163  mtu 1450

        ether 4e:d6:fe:95:d0:2e  txqueuelen 1000  (Ethernet)

        RX packets 10  bytes 2022 (1.9 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 33  bytes 3784 (3.6 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

tapc652a409-0b: flags=4163  mtu 1450

        ether 1a:ee:83:25:99:b5  txqueuelen 1000  (Ethernet)

        RX packets 877  bytes 86363 (84.3 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 822  bytes 88119 (86.0 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

tape8bc2892-b8: flags=4163  mtu 1500

        ether 2e:df:59:f3:2f:b9  txqueuelen 1000  (Ethernet)

        RX packets 558  bytes 60762 (59.3 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 3270  bytes 249818 (243.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

vxlan-90: flags=4163  mtu 1450

        ether de:9f:f2:25:3e:94  txqueuelen 1000  (Ethernet)

        RX packets 821  bytes 76827 (75.0 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 874  bytes 75143 (73.3 KiB)

        TX errors 0  dropped 4 overruns 0  carrier 0  collisions 0

6.2 计算节点

[root@compute1 ~]# nmcli connection show 
 [root@compute1 ~]# ifconfig

6.3 存储节点

[root@cinder1 ~]# nmcli connection show 
[root@cinder1 ~]# ifconfig

附录:

出现错误

An unexpected error prevented the server from fulfilling your request. (HTTP 500) 

penstack环境搭建程度(安装完keystone

然后运行 openstack domain create --description "An Example Domain" example

出现报错 An unexpected error prevented the server from fulfilling your request. (HTTP 500) (Request-ID: req-5e6811f3-0671-4615-88aa-00f35b1e9258)

解决方法一: vim /etc/keystone/keystone.conf

connection = mysql://keystone:redhat@controller/keystone

去掉原先的 connection = mysql+pymysql://keystone:redhat@localhost/keystone 

然后按照官方指导从下面的命令开始重新操作一遍

su -s /bin/sh -c "keystone-manage db_sync" keystone

 

解决方法 数据库中授权 grant all privileges on keystone.* to 'keystone'@'controller' identified by 'redhat';

然后按照官方指导从下面的命令开始重新操作一遍

su -s /bin/sh -c "keystone-manage db_sync" keyst

 

你可能感兴趣的:(OpenStack)