【Opentack项目实战——Keystone、Glance、Nova、Neutron、Horizon、Cinder搭建】

云计算概述

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

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

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

云计算的分类

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
    在这里插入图片描述

Openstack

Openstack介绍

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

组件说明
在这里插入图片描述
核心组件及对应的功能服务

服务							项目名称			描述
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 (数据处理)	        Sahara	      Sahara项目旨在使用用户能够在Openstack平台上便于创建和管理Hadoop以及其他计算框架集群,实现类似AWS的EMR(Amazon Elastic MapReduce service)服务

安装结构说明

  • 操作系统: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
controller2核、1.5G内存、1网卡、100G磁盘
computeMAX U 、6G内存、2网卡、100G磁盘
neutron2核、1.5G内存、3网卡、20G磁盘
block2核、1G内存、1网卡、20G磁盘,100G磁盘

在这里插入图片描述
环境准备:
修改网络,添加三块仅主机模式网卡,ip配置如下,并关闭他们的dhcp自动分配
在这里插入图片描述
按照资源配置情况搭建创建四个虚拟机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

系统环境搭建

  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
  1. 关闭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
  1. 配置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
  1. 安装 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地址和主机名不通,其他环境和之前配置保持一致

  1. 配置时间同步服务器
    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
  1. 在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
  1. 安装Message server服务,协调操作和状态信息服务。利用RabbitMQ这个开源的消息代理软件
    消息队列,可以有效的保障组件之间的沟通,不会出现什么数据损坏的一些故障
    常见的消息代理软件:RabbitMQ、Qpid、ZeroMQ
    在生产环境中,应该将 mysql集群 和 RabbitMQ的高可用 另外分出来,而不上集中在controller节点中
[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

Openstack 组件

1)Keyston – 认证服务

组件说明
什么是keystone?
Keystone是OpehStack Identity Service的项目名称,是一个负责身份管理与授权的组件;
主要功能: 实现用户的身份认证,基于角色的权限管理,及openstack其他组件的访问地址安全策略管理

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

Keystone 的功能

  1. 用户管理(AAA服务,做认证的)
    Account 账户
    Authentication 身份认证
    Authorization 授权
  2. 服务目录管理(告诉用户到哪里访问服务)
    C/S结构,通过http协议,利用API接口—>端点(URL)

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

名词解释

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

组件之间的三张图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

keystone的安装配置

keystone命令大全
controller节点上安装和配置认证服务
配置先决条件

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

安装并配置认证服务组件(keystone的服务包和客户端工具)

[root@localhost ~]$ yum -y install openstack-keystone python-keystoneclient
 接着编辑/etc/keystone/keyston.conf文件并作下列修改:
[root@localhost ~]$ vim /etc/keystone/keystone.conf
修改[DEFAULT]小节,定义初始管理令牌
[DEFAULT]
admin_token=d384cbf8eaf060e988ca
 修改[database]小节,配置数据库访问
[database]
connection=mysql://keystone:KEYSTONE_DBPASS@controller.nice.com/keystone
        数据库类型  数据库用户名 数据库密码  登录地址          连接的数据库名
 修改[token]小节,配置UUID提供者和SQL驱动
[token]
provider=keystone.token.providers.uuid.Provider
driver=keystone.token.persistence.backends.sql.Token
 (可选)开启详细日志,协助故障排除
[DEFAULT]
verbose=True
 
常见通用证书的密钥,并限制相关文件的访问权限
[root@localhost ~]$ keystone-manage pki_setup --keystone-user keystone --keystone-group keystone   设置keystone用户,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   #密钥存放目录将其他人的rwd去掉,这样更安全
 
 初始化keystone数据库
[root@localhost ~]$ su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@localhost ~]$ mysql -uroot -p123  #再登录mysql
use keystone;
show tables;
#如果没有表,则需要重新授权目录!!!!!!!
#5、启动identity服务并设置开机启动
[root@localhost ~]$ systemctl start openstack-keystone.service
[root@localhost ~]$ systemctl enable openstack-keystone.service

安装后的优化配置
默认情况下,服务器会无限存储到期的令牌,在资源有限的情况下会严重影响服务器性能。需要用定时任务,每小时删除过期的令牌

[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

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

Ⅰ配置管理员令牌
[root@localhost ~]$ export OS_SERVICE_TOKEN=d384cbf8eaf060e988ca
Ⅱ配置端点
[root@localhost ~]$ export OS_SERVICE_ENDPOINT=http://controller.nice.com:35357/v2.0
Ⅲ创建租户用户和角色
1、创建admin租户
2、创建admin用户
3、创建admin角色
[root@controller ~]$ keystone tenant-create --name admin --description "Admin Tenant"   #admin租户
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |           Admin Tenant           |
|   enabled   |               True               |
|      id     | 31d523850e094426a734400e585b5abc |
|     name    |              admin               |
+-------------+----------------------------------+
您在 /var/spool/mail/root 中有邮件
[root@controller ~]$ keystone user-create --name admin --pass ADMIN_PASS --email 12345@163.com   #admin用户
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |          12345@163.com           |
| enabled  |               True               |
|    id    | 715301487afb455ab7eddb6faf372d75 |
|   name   |              admin               |
| username |              admin               |
+----------+----------------------------------+
[root@controller ~]$ keystone role-create --name admin   #admin角色
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | c16d5a2784574da6aabd0a1526c77a23 |
|   name   |              admin               |
+----------+----------------------------------+
4、添加admin租户和用户到admin角色
[root@localhost ~]$ keystone user-role-add --tenant admin --user admin --role admin
5、创建用于dashboard访问的“_member_”角色(dashboard是B/S访问结构的主体程序,这里拥有member角色就可以访问仪表盘套件)
[root@localhost ~]$ keystone role-create --name _member_
6、添加admin租户和用户到_member_角色(将admin租户、用户链接到_member_角色,则他们都可以访问仪表盘套件)
[root@localhost ~]$ keystone user-role-add --tenant admin --user admin --role _member_

Ⅳ创建一个用于演示的demo租户和用户
1、创建demo租户
[root@localhost ~]$ keystone tenant-create --name demo --description "Demo Tenant"
2、创建的demo用户
[root@localhost ~]$ keystone user-create --name demo --pass DEMO_PASS --email demo@163.com
3、添加demo租户和用户链接到_member_角色(同样能访问仪表盘套件)
[root@localhost ~]$ keystone user-role-add --tenant demo --user demo --role _member_

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

创建服务实体和API端点(实体:keystone能够提供服务的名称,API端点:提供这个服务的路径)

#1、在OpenStack环境中,identity服务管理一个服务目录,并使用这个目录在OpenStack环境中定位其他服务。
#为identity服务创建一个服务实体名为keystone,类型为认证,描述为openstack的认证
[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

确认操作

#1、删除OS_SERVICE_TOKEN 和OS_SERVICE_ENDPOINT 临时变量
[root@localhost ~]$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
 
#2、使用admin租户和用户请求认证令牌(租户名称、用户名称、密码、URL路径请求token)
[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

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

  • 编辑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
  • 编辑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

2)Glance – 镜像服务

(1)服务功能

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

(2)组件说明

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

(3)基本概念
Image Identifiers:就是Image URL,格式:< Glance Server Location >/images/ < ID >全局唯一

  1. Image Status(镜像状态):
    Queued: 镜像ID已被保留,镜像还没有上传
    Saving: 镜像正在被上传
    Active: 镜像可以使用了
    Killed: 镜像损坏或者不可用
    Deleted: 镜像被删除
  2. 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
  3. Container Format(容器格式)
    Bare
    Ovf
    Aki
    Ami
    Ari

组件工作流
在这里插入图片描述

Glance的安装配置

在controller节点上安装配置Glance服务
(1)配置先决条件

1、创建数据库
以数据库管理员root的身份登录数据库
[root@localhost ~]$  mysql -uroot -p123
2.创建glance数据库
MariaDB [(none)]> CREATE DATABASE glance;
3.创建数据库用户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';
4、启用admin环境脚本
[root@localhost ~]$ source admin-openrc.sh

 创建认证服务凭证,完成下列步骤:
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"
5、为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
如果glance数据库中数据为空,则可能是/etc/glance/glance-api.conf、 /etc/glance/glance-registry.conf文件的注释未去掉

(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
[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 133eae9fb1c98f45894a4e60d8736619     |
| container_format | bare                                 |
| created_at       | 2022-12-04T02:57:29                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
| id               | 53e9d26f-7fca-4965-87e7-3722d6ed12ce |
| is_public        | True                                 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros-0.3.3-x86_64                  |
| owner            | 31d523850e094426a734400e585b5abc     |
| protected        | False                                |
| size             | 13200896                             |
| status           | active                               |
| updated_at       | 2022-12-04T02:57:29                  |
| virtual_size     | None                                 |
+------------------+--------------------------------------+

[root@controller ~]$ glance image-list
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| ID                                   | Name                | Disk Format | Container Format | Size     | Status |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| 53e9d26f-7fca-4965-87e7-3722d6ed12ce | cirros-0.3.3-x86_64 | qcow2       | bare             | 13200896 | active |(镜像可用)
+--------------------------------------+---------------------+-------------+------------------+----------+--------+

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

3)Nova – 计算服务

Nova是什么?

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

组件说明
(1)组件说明-API

  • nova-api service 接收并响应终端用户计算API调用。该服务支持OpenStack 计算API,AmazonEC2和特殊的管理特权API(对于整个nova api来说,其实不仅能管理当前的openstack环境,还允许接口接入别的管理平台)
  • nova-api-metadata service 接受从实例元数据发来的请求。该服务通常与nova-network服务在安装多主机模式下运行(相当于代理节点,应该安装在每台compute节点上)

(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 运行的节点上(相当于此组件是部署在 nova-compute 与 database 之间,通过代理的方式,两者访问)

(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)组件的位置顺序
    在这里插入图片描述
    (2)Nova内部沟通
    在这里插入图片描述
    (3)Nova同其他组件沟通
    在这里插入图片描述
    (4)虚拟机启动流程
    在这里插入图片描述
Nova的安装配置

请在前面实验的基础上继续做以下操作
controller节点配置
(1)配置先决条件

1、创建数据库,完成下列步骤:
a.使用数据库管理员root登录数据库
[root@localhost ~]$ mysql -uroot -p123
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 -y openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler python-novaclient 
 
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   #外部api接口
identity_uri=http://controller.nice.com:35357   #内部api接口
admin_tenant_name=service   #指定租户名称
admin_user=nova
admin_password=NOVA_PASS
d.编辑[DEFAULT]小节,配置my_ip选项为controller节点的管理接口ip:
[DEFAULT]
my_ip=192.168.222.5  #管理网络的IP
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    | 2022-12-04T04:38:24.000000 | -               |
| 2  | nova-conductor   | controller.nice.com | internal | enabled | up    | 2022-12-04T04:38:24.000000 | -               |
| 3  | nova-scheduler   | controller.nice.com | internal | enabled | up    | 2022-12-04T04:38:24.000000 | -               |
| 4  | nova-cert        | controller.nice.com | internal | enabled | up    | 2022-12-04T04:38:24.000000 | -               |
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+

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

(5)再去controller节点上查看是否多出一个compute节点(如果有多个compute节点,可以与上面同样配置,此时下表也会出现多个节点)

[root@controller ~]$ nova service-list
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
| Id | Binary           | Host                | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
| 1  | nova-consoleauth | controller.nice.com | internal | enabled | up    | 2022-12-04T05:14:55.000000 | -               |
| 2  | nova-conductor   | controller.nice.com | internal | enabled | up    | 2022-12-04T05:14:55.000000 | -               |
| 3  | nova-scheduler   | controller.nice.com | internal | enabled | up    | 2022-12-04T05:14:55.000000 | -               |
| 4  | nova-cert        | controller.nice.com | internal | enabled | up    | 2022-12-04T05:14:55.000000 | -               |
| 5  | nova-compute     | compute.nice.com    | nova     | enabled | up    | 2022-12-04T05:14:59.000000 | -               |
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+

[root@controller ~]$ nova image-list   #去查看通过nova去请求镜像,是否成功。也就相当于通过nova去请求当前的镜像列表
+--------------------------------------+---------------------+--------+--------+
| ID                                   | Name                | Status | Server |
+--------------------------------------+---------------------+--------+--------+
| 53e9d26f-7fca-4965-87e7-3722d6ed12ce | cirros-0.3.3-x86_64 | ACTIVE |        |
+--------------------------------------+---------------------+--------+--------+

4)Neutron – 网络服务

neutron网络介绍
(1)neutron基本概念

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

(2)neutron关键概念

  1. Network
    一个L2网络单元
    租户可通过Neutron API创建自己的网络
  2. Subnet
    一段IPV4/IPV6 地址段
    为Instance提供私网或公网地址
  3. Router
    三层路由器
    为租户的Instance 提供路由功能
  4. 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 Network
在这里插入图片描述
Mixed FLAT and Private Network
在这里插入图片描述
Provider Router with Private Network
在这里插入图片描述
Per-tenant Routers with Private Network
在这里插入图片描述

Neutron的安装配置
Ⅰ 配置controller节点

(1)创建数据库

a.使用root用户连接mysql数据库
[root@localhost ~]$ mysql -u root -p123
 
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';

(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)安装网络服务组件并配置

安装neutron相关软件
[root@localhost ~]$ yum install openstack-neutron openstack-neutron-ml2 python-neutronclient which -y
 
配置网络服务组件
编辑/etc/neutron/neutron.conf文件,并完成下列操作:
[root@localhost ~]$ vim /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=db285970d1254cef8ea93b87fdf6ac06  #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 ~]$ 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]小节,配置隧道标识范围:
[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)验证

列出加载的扩展模块,确认成功启动neutron-server进程
[root@controller ~]$ 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                    |
+-----------------------+-----------------------------------------------+
Ⅱ 配置network(neutron)节点

(1)配置先决条件

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

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

[root@localhost ~]$ yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch
配置网络通用组件,网络通用组件配置包含认证机制,消息队列及插件。
编辑/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插件使用OpenvSwitch(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                    |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
| 067770b8-60a6-428e-8f52-817435dbf84f | Open vSwitch agent | network.nice.com | :-)   | True           | neutron-openvswitch-agent |
| 2a5bf715-0fe2-4162-b7a8-6deb26547b09 | DHCP agent         | network.nice.com | :-)   | True           | neutron-dhcp-agent        |
| aef71953-de29-407a-94a6-a13b1918aa7e | Metadata agent     | network.nice.com | :-)   | True           | neutron-metadata-agent    |
| f949b3ca-b816-48d3-87bd-f96d31b76757 | L3 agent           | network.nice.com | :-)   | True           | neutron-l3-agent          |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
Ⅲ 配置compute节点

(1)配置先决条件

编辑/etc/sysctl.conf文件,使其包含下列参数:
[root@localhost ~]$ vi /etc/sysctl.conf
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
使/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                    |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
| 067770b8-60a6-428e-8f52-817435dbf84f | Open vSwitch agent | network.nice.com | :-)   | True           | neutron-openvswitch-agent |
| 29f63e11-7ac1-42b9-afc0-dcaecaebbff9 | Open vSwitch agent | compute.nice.com | :-)   | True           | neutron-openvswitch-agent |
| 2a5bf715-0fe2-4162-b7a8-6deb26547b09 | DHCP agent         | network.nice.com | :-)   | True           | neutron-dhcp-agent        |
| aef71953-de29-407a-94a6-a13b1918aa7e | Metadata agent     | network.nice.com | :-)   | True           | neutron-metadata-agent    |
| f949b3ca-b816-48d3-87bd-f96d31b76757 | L3 agent           | network.nice.com | :-)   | True           | neutron-l3-agent          |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
Ⅳ 配置外部网络(controller执行)

(1)创建一个外部网络(浮动网络)

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

(2)创建一个外部网络的子网(公网地址池):例如,外网网段为:100.100.100.0/24,浮动地址范围为:100.100.100.11~100.100.100.240,网关为:100.100.100.10(注意此处的公网地址在真实的环境中,应该是向运营商申请的)

[root@localhost ~]$ neutron subnet-create ext-net --name ext-subnet --allocation-pool start=100.100.100.11,end=100.100.100.240 --disable-dhcp --gateway 100.100.100.10 100.100.100.0/24   #网关100.100.100.10,网段100.100.100.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路由器获取到的外部地址

查看neutron的外部网络是用的哪块虚拟网卡
在这里插入图片描述
修改网卡ip为100.100.100.244
在这里插入图片描述

在这里插入图片描述
测试:此时我们依靠外部网络就可以ping通租户的路由器
在这里插入图片描述

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

基于B/S架构,进行管理
Horizon的安装步骤:

先决条件

  • 安装OpenStack compute(nova)和identity(keystone) servi ce
  • 安装Python2.6或2.7,并必须支持Django
  • 你的浏览器必须支持HTML5并启用cookies和JavaScript功能

查看Nova服务是否正常运行,Neutron代理端是否正常连接

[root@controller ~]$ nova service-list
ERROR (Forbidden): Policy doesn't allow compute_extension:services to be performed. (HTTP 403) (Request-ID: req-897d0e5e-1fbe-4a31-ba1e-61b59600f2e5)
可能出现的原因是环境变量的问题,所以先运行脚本
[root@controller ~]$ source admin-openrc.sh
[root@controller ~]$ nova service-list
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
| Id | Binary           | Host                | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
| 1  | nova-consoleauth | controller.nice.com | internal | enabled | up    | 2022-12-04T12:16:39.000000 | -               |
| 2  | nova-conductor   | controller.nice.com | internal | enabled | up    | 2022-12-04T12:16:39.000000 | -               |
| 3  | nova-scheduler   | controller.nice.com | internal | enabled | up    | 2022-12-04T12:16:40.000000 | -               |
| 4  | nova-cert        | controller.nice.com | internal | enabled | up    | 2022-12-04T12:16:40.000000 | -               |
| 5  | nova-compute     | compute.nice.com    | nova     | enabled | up    | 2022-12-04T12:16:46.000000 | -               |
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
[root@controller ~]$ neutron agent-list
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
| id                                   | agent_type         | host             | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+
| 067770b8-60a6-428e-8f52-817435dbf84f | Open vSwitch agent | network.nice.com | :-)   | True           | neutron-openvswitch-agent |
| 29f63e11-7ac1-42b9-afc0-dcaecaebbff9 | Open vSwitch agent | compute.nice.com | :-)   | True           | neutron-openvswitch-agent |
| 2a5bf715-0fe2-4162-b7a8-6deb26547b09 | DHCP agent         | network.nice.com | :-)   | True           | neutron-dhcp-agent        |
| aef71953-de29-407a-94a6-a13b1918aa7e | Metadata agent     | network.nice.com | :-)   | True           | neutron-metadata-agent    |
| f949b3ca-b816-48d3-87bd-f96d31b76757 | L3 agent           | network.nice.com | :-)   | True           | neutron-l3-agent          |
+--------------------------------------+--------------------+------------------+-------+----------------+---------------------------+

接着安装仪表盘套件(controller上安装)
(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 ~]$ systemctl enable httpd.service memcached.service
[root@localhost ~]$ systemctl start httpd.service memcached.service

(4)验证
1、访问dashboard,在浏览器(建议谷歌浏览器)输入:http://controller.nice.com/dashboard
特别注意由于我们没有设置DNS服务器,所以需要修改windows的HOST文件,将controller的IP与对应域名进行绑定
在这里插入图片描述
在这里插入图片描述

2、使用admin或demo用户登录
账号 admin
密码 ADMIN_PASS
在这里插入图片描述

6)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在快存储进程中传递消息

Block Storage(cinder)安装配置(controller节点)

1、创建数据库,并完成下列步骤:
a.以数据库管理员root的身份连接数据库:
[root@localhost ~]$ mysql -uroot -p123
 
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服务(两个版本,volume,volumev2都创建)
[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

安装并配置block节点
(1)配置先决条件
在这里插入图片描述

1、添加一个新的硬盘(如:sdb),并分将全部空间分成一个主分区。
[root@block ~]$ fdisk -l  查看是否添加了硬盘
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-openrc.sh 

2、列出服务组件确认每个进程启动成功(此处如果volumes状态为down,则有可能出现了block与controller时间不同步导致的)
[root@localhost ~]$ cinder service-list
[root@controller ~]# cinder service-list
+------------------+---------------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |         Host        | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+---------------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | controller.nice.com | nova | enabled |   up  | 2022-12-04T13:37:10.000000 |       None      |
|  cinder-volume   |    block.nice.com   | nova | enabled |  down | 2022-12-11T16:33:06.000000 |       None      |
+------------------+---------------------+------+---------+-------+----------------------------+----------------
重新将block与controller进行时间同步
在block上做
[root@block ~]$ ntpdate -u controller.nice.com
 4 Dec 21:35:17 ntpdate[2615]: step time server 192.168.222.5 offset -615477.440225 sec
再去controller上
[root@controller ~]$ cinder service-list
+------------------+---------------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |         Host        | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+---------------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | controller.nice.com | nova | enabled |   up  | 2022-12-04T13:37:20.000000 |       None      |
|  cinder-volume   |    block.nice.com   | nova | enabled |   up  | 2022-12-04T13:37:17.000000 |       None      |
+------------------+---------------------+------+---------+-------+----------------------------+-----------------+

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


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

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

9)实例构建

创建密钥对
大多数云镜像使用公钥认证,这有别于传统的用户名/密码认证。在启动一个实例之前,你必须使用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

启动一个实例

要启动一个实例,你必须最少指定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 --nic net-id=320b228b-a84c-4a76-a669-4cd232e9c5fa --security-group default --key-name demo-key demo-instance1

6、查看实例状态
[root@localhost ~]$ nova list

通过虚拟控制台访问你的实例
在这里插入图片描述

获取用于访问你的实例的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

远程访问你的实例

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

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

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
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值