openstack云平台

bian@TOC

一、openstack简介

OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。

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

openstack是一个云平台管理的项目,它不是一个软件。也就是说我们可以使用openstack来管理我们一个数据中心大量资源池。它里面包含了很多子项目。

二、基本搭建

官方文档:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/environment.html

1、控制节点环境配置

1.主机网络

我们此处配置的是双网卡:第一块网卡正常桥接、第二块网卡用于虚拟机之间的通信

参考官方文档:gogogo
step1:配置网络接口

[root@server1 ~]# cd /etc/sysconfig/network-scripts/
[root@server1 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@server1 network-scripts]# vim ifcfg-eth1
[root@controller network-scripts]# cat ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none

[root@server1 network-scripts]# ifup eth1

step2:配置域名解析
设置节点主机名为 controller。

编辑 /etc/hosts 文件包含以下内容:
在这里插入图片描述

[root@server1 network-scripts]# hostnamectl set-hostname controller
[root@server1 network-scripts]# logout 
Connection to 172.25.254.1 closed.
[westos@westos_student50 Desktop]$ ssh [email protected]
[email protected]'s password: 
[root@controller ~]# 

2.网络时间协议文档(同步时间)**

官方文档:网络时间协议文档
openstack云平台_第1张图片

[root@controller ~]# yum install chrony
[root@controller ~]# vim /etc/chrony.conf 
server 172.25.254.50 iburst  同步主机时间

[root@controller ~]# systemctl start chronyd
[root@controller ~]# systemctl is-enabled chronyd  ##该服务默认开机自启
enabled

[root@controller ~]#  chronyc sources -v
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^? westos_student50.westos.>     0   8     0     -     +0ns[   +0ns] +/-    0ns
[root@controller ~]# date
Mon Apr 11 16:44:18 CST 2022  

顺便再提一嘴:只要涉及到集群,注意两点 一点是时间,(比如证书生效的时间、数据备份的时间)一点是解析!

3.OpenStack包**

在真机上操作:把mitaka解压到apache的发布目录下:

[root@westos_student50 media]# mkdir /var/www/html/openstack
[root@westos_student50 media]# tar xf mitaka.tar -C /var/www/html/openstack

虚拟机上操作:设置网络仓库

[root@controller ~]# cd /etc/yum.repos.d/
[root@controller yum.repos.d]# ls
dvd.repo  redhat.repo
[root@controller yum.repos.d]# vim openstack.repo
[root@controller yum.repos.d]# cat openstack.repo 
[openstack]
name=mitaka
baseurl=http://172.25.254.50/openstack/mitaka  ##设置完检查一下该地址是否能访问到(下图显示没问题)
gpgcheck=0

openstack云平台_第2张图片加粗样式
接下来 完成安装:

(1)升级包:

[root@controller yum.repos.d]# yum upgrade

(2)安装 OpenStack 客户端

yum install python-openstackclient

4.SQL数据库**

参考文档:SQL数据库的配置

安全并配置组件

(1)安装软件包:

yum install mariadb mariadb-server python2-PyMySQL -y

(2)创建并编辑 /etc/my.cnf.d/openstack.cnf,然后完成如下动作:

[root@controller yum.repos.d]# vim /etc/my.cnf.d/openstack.cnf
[root@controller yum.repos.d]# cat /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 172.25.254.1  ##该值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库:
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

(3)启动数据库服务,并将其配置为开机自启:

systemctl enable --now mariadb.service

(4)为了保证数据库服务的安全性,运行mysql_secure_installation脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。

 mysql_secure_installation 

openstack云平台_第3张图片

5.消息队列**

消息队列:它主要用来暂存生产者生产的消息,供后续其他消费者来消费。

(1)安装包

 yum install rabbitmq-server

(2)启动消息队列服务并设置开机自启

systemctl enable --now rabbitmq-server.service

该服务监听的端口是25672
openstack云平台_第4张图片

(3)添加 openstack 用户

rabbitmqctl add_user openstack openstack  ## 为方便操作 设置密码和用户都为一串字符

(4)给openstack用户配置写和读权限:

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

查看上述读写权限的划分:

[root@controller yum.repos.d]# rabbitmq-plugins list
[root@controller yum.repos.d]# rabbitmq-plugins enable rabbitmq_management 

openstack云平台_第5张图片
openstack云平台_第6张图片
下图展示了openstack用户的权限:
openstack云平台_第7张图片

6.Memcached**

(1)安装软件包并设置开机自启

yum install memcached python-memcached -
systemctl enable --now memcached.service

(2)编辑/etc/sysconfig/memcached

在这里插入代码片

下面是原先的内容:
openstack云平台_第8张图片
修改后的内容:
openstack云平台_第9张图片

systemctl restart memcached.service

openstack云平台_第10张图片

三、认证服务(keystone)

1.浅识keystone

对于keystone的基本知识,可以参考这里,keystone详解

keystone是OpenStack的核⼼组件之⼀,为OpenStack⼤家族中的其他组件提供统⼀的⾝份认证服务,包括⾝份认证、令牌发放和校验服务列表、定义⽤户权限等。OpenStack中所有服务的授权和认证都需要经过keystone,因此keystone是OpenStack中第⼀个需要安装的核⼼组件。

keystone的具体功能如下:
管理⽤户及其权
限维护各种服务的endpoint
认证和鉴权

2.先决条件

(1)根据下列步骤创建数据库

[root@controller yum.repos.d]# mysql -p ##用数据库连接客户端以 root 用户连接到数据库服务器

## 创建用户 对``keystone``数据库授予恰当的权限,使本地和远程都可以连接数据库 (注意密码规范 做一个记录表 别到最后忘了密码)
MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.00 sec)

## 将keystone数据库的所有权限授予本地用户keystone,登陆密码是keystone
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
    ->   IDENTIFIED BY 'keystone';  
Query OK, 0 rows affected (0.00 sec)

## 将keystone数据库的所有权限授予远程用户keystone,登陆密码是keystone
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
    ->   IDENTIFIED BY 'keystone';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> bye  #退出数据库客户端。

(2)生成一个随机值在初始的配置中作为管理员的令牌。

 openssl rand -hex 10

因为目前keystone里面是没有任何认证用户的,那就需要一个初始令牌去调用api接口

2.安装并配置组件

(1)安装包

 yum install openstack-keystone httpd mod_wsgi -y

(2)编辑文件 /etc/keystone/keystone.conf 并完成如下动作

[root@controller yum.repos.d]#  openssl rand -hex 10
560054dc1d173f892f8e

vim /etc/keystone/keystone.conf

1 [DEFAULT]
2 admin_token = 560054dc1d173f892f8e  ##这个令牌一定是刚刚生成的令牌

528 [database]
529 connection = mysql+pymysql://keystone:keystone@controller/keystone  
## 我们使用的数据库是mysql,通过pymysql的插件连接数据库,通过keystone:keystone(用户名和密码)去连接controler上的keystone数据库
 
1985 [token]
1986 provider = fernet  ##令牌提供方式

(3)初始化身份认证服务的数据库

su -s /bin/sh -c "keystone-manage db_sync" keystone ## 切换成keystone用户来初始化数据库

openstack云平台_第11张图片
(4)初始化Fernet keys

[root@controller yum.repos.d]# cd /etc/keystone/
[root@controller keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

openstack云平台_第12张图片

3.配置 Apache HTTP 服务器

(1)编辑/etc/httpd/conf/httpd.conf 文件,配置ServerName 选项为控制节点:

 96 ServerName controller

(2)创建文件 /etc/httpd/conf.d/wsgi-keystone.conf。

Listen 5000  ##公共的端口 谁都可以连
Listen 35357   ## 内部的 管理员 连接此端口

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    
        Require all granted
    Directory>
VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    
        Require all granted
    Directory>
VirtualHost>

(3)启动 Apache HTTP 服务并配置其随系统启动

systemctl enable httpd.service

openstack云平台_第13张图片

4.创建服务实体和API端点

(1)先决条件


[root@controller conf.d]# export OS_TOKEN=560054dc1d173f892f8e  ##配置认证令牌
[root@controller conf.d]# export OS_URL=http://controller:35357/v3  ##配置端点URL
[root@controller conf.d]# export OS_IDENTITY_API_VERSION=3  ##配置认证 API 版本

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

在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。

endpoint是⼀个可以通过网络访问的地址,通常是⼀个URL,也就是⽹址。每个部署在OpenStack上的服务都通过endpoint提供⾃⼰的API,⽤户可以去访问这些⽹址来使⽤服务。
那么联想到刚才token上所说的认证过程,⽹址就在这⾥,keystone想要确保有权限的⽤户才能访问服务的话,就必须将这些endpoint管理起来,为它们挡住没有权限的⽤户的访问。

创建服务实体和身份认证服务:
openstack云平台_第14张图片

5.创建域、项目、用户和角色

(1)创建域default

openstack domain create --description "Default Domain" default

(2)在刚刚创建的域中创建管理的项目、用户和角色:(admin)

首先,创建 admin 项目:

openstack user create --domain default \
  --password-prompt admin

openstack云平台_第15张图片
然后,创建admin 用户

openstack user create --domain default --password admin admin

openstack云平台_第16张图片
接着,创建 admin 角色

openstack role create admin

openstack云平台_第17张图片
最后,添加admin 角色到 admin 项目和用户上,让他去管理:

openstack role add --project admin --user admin admin

此时 我们罗列一下
openstack云平台_第18张图片
(3)本指南使用一个你添加到你的环境中每个服务包含独有用户的service 项目。创建service项目:

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

openstack云平台_第19张图片

(4)常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户。

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

创建demo 项目:
openstack云平台_第20张图片
创建demo 用户:

openstack user create --domain default --password demo demo  ##用户名和密码都是demo

openstack云平台_第21张图片

创建 user 角色:

openstack role create user

openstack云平台_第22张图片
添加 user角色到 demo 项目和用户:

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

openstack云平台_第23张图片

6.验证操作

(1)重置OS_TOKENOS_URL 环境变量:

unset OS_TOKEN OS_URL  ##将刚刚加的两个变量去掉

因为在keystone里面我们刚刚创建用户了,我们要通过指定的用户来进行认证。

(2)作为 admin 用户,请求认证令牌:

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云平台_第24张图片
(3)作为demo 用户,请求认证令牌

openstack --os-auth-url http://controller:35357/v3   --os-project-domain-name default --os-user-domain-name default   --os-project-name demo --os-username demo token issue

openstack云平台_第25张图片

7.创建 OpenStack 客户端环境脚本

前一节中使用环境变量和命令选项的组合通过openstack客户端与身份认证服务交互。为了提升客户端操作的效率,OpenStack支持简单的客户端环境变量脚本即OpenRC 文件。这些脚本通常包含客户端所有常见的选项,当然也支持独特的选项。

(1)创建脚本
创建 admin 和 demo项目和用户创建客户端环境变量脚本

step1:编辑文件 admin-openrc 并添加如下内容:

[root@controller ~]# vim admin-openrc 
[root@controller ~]# cat 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=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

step2:编辑文件 demo-openrc 并添加如下内容:

[root@controller ~]# vim demo-openrc 
[root@controller ~]# cat 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=dmeo
export OS_AUTH_URL=http://controller:5000/v3 
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

注意观察上面 两个用户 连接的是不同的端口,代表了demo和admin用户的权限不同。(如下图所示)
openstack云平台_第26张图片
到此 我们的keystone的服务组件就配好了。刚才配置的所有信息都存在keystone数据库中,

顺便说一句:如有服务起不来,那就要排查 ,排查时要养成看日志的习惯,

[root@controller log]# cd keystone/
[root@controller keystone]# ls
keystone.log
[root@controller keystone]# pwd
/var/log/keystone

[root@controller keystone]# grep ERROR keystone.log   ##查看错误日志 

四、镜像服务

1.镜像服务概览

openstack云平台_第27张图片
镜像的源数据存在数据库中,为了安全起见,这里使用了一个G-r。

2.安装和配置

1.先决条件

(1)创建 glance 数据库并授予相应

CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
  IDENTIFIED BY 'glance';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
  IDENTIFIED BY 'glance';

openstack云平台_第28张图片
(2)要创建服务证书

step1:创建glance用户用以和keystone对接做认证

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

这个glance是用来做集群间的组件调用的,用以和keystone做认证。

step2:添加 admin 角色到 glance 用户和 service 项目上。

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

openstack云平台_第29张图片
step3:创建glance服务实体:

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

step4:创建镜像服务的 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云平台_第30张图片
以上所有的配置都是存在数据库中的

2.安装配置组件

(1)安装软件包

yum install openstack-glance

(2)编辑文件 /etc/glance/glance-api.conf 并完成如下动作:


[database]
connection = mysql+pymysql://glance:glance@controller/glance  ## 用于数据库访问

[keystone_authtoken]    ##  用于keystone认证
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并完成如下动作:


[database]
connection = mysql+pymysql://glance:glance@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

openstack云平台_第31张图片
(5)设置开机自启动

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

openstack云平台_第32张图片

3.验证操作

(1)下载源镜像

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

(2)使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它

openstack image create "cirros" \
  --file cirros-0.3.4-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --public

openstack云平台_第33张图片
(3)确认镜像的上传并验证属性:

openstack image list

openstack云平台_第34张图片

五、计算服务(控制节点)

1.计算服务概览

2.安装并配置控制节点

(1)创建 nova_api 和 nova 数据库:

CREATE DATABASE nova_api;
CREATE DATABASE nova;

(2)对数据库进行正确的授权

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%'    IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost'    IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%'    IDENTIFIED BY 'nova';

openstack云平台_第35张图片
(3)创建服务证书,

step1:创建nova用户

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

step2:给 nova 用户添加 admin 角色

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

openstack云平台_第36张图片
step3:创建 nova 服务实体

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

openstack云平台_第37张图片
(4)创建 Compute 服务 API 端点

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

openstack云平台_第38张图片

3.安全并配置组件

(1)安装软件包:

yum install openstack-nova-api openstack-nova-conductor \
  openstack-nova-console openstack-nova-novncproxy \
  openstack-nova-scheduler

(2)编辑/etc/nova/nova.conf文件并完成下面的操作

## 在``[DEFAULT]``部分,只启用计算和元数据API:
[DEFAULT]
enabled_apis = osapi_compute,metadata

## 在``[api_database]``和``[database]``部分,配置数据库的连接:
[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

## 在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列访问:
[DEFAULT]
rpc_backend = rabbit

[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack

##在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[DEFAULT]
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 = nova
password = nova

## 在 [DEFAULT 部分,配置``my_ip`` 来使用控制节点的管理接口的IP 地址。
[DEFAULT]
my_ip = 172.25.254.1

## 在 [DEFAULT] 部分,使能 Networking 服务:
[DEFAULT]
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

## 在``[vnc]``部分,配置VNC代理使用控制节点的管理接口IP地址 :
[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip

## 在 [glance] 区域,配置镜像服务 API 的位置:
[glance]
api_servers = http://controller:9292

## 在 [oslo_concurrency] 部分,配置锁路径:
[oslo_concurrency]
lock_path = /var/lib/nova/tmp

3.同步Compute 数据库

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

openstack云平台_第39张图片
openstack云平台_第40张图片

4.完成安装

# 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

六、计算服务(计算节点)

每当有新的节点加入openstack集群中,都要先配置一下环境

1.配置环境

1.配置计算节点的网络

vim /etc/hosts
在这里插入图片描述

[root@compute1 ~]# cd /etc/sysconfig/network-scripts/
[root@compute1 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@compute1 network-scripts]# vim ifcfg-eth1
[root@compute1 network-scripts]# cat ifcfg-eth1
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
[root@compute1 network-scripts]# ifup eth1

2.网络事件协议

参考:官方文档

(1)安装软件包:

yum install chrony -y

(2)编辑/etc/chrony.conf 文件并注释除server 值外的所有内容。修改它引用控制节点:

server 172.25.254.50 iburst

(3)启动 NTP 服务并将其配置为随系统启动:

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

注意:计算节点只配置网络和时间同步协议 至于消息队列 、memcached等都旨在控制节点上配置

2.安装openstack包

将网络仓库从controller上复制到compute1上:

root@controller yum.repos.d]# scp openstack.repo compute1:/etc/yum.repos.d/

(1)安装软件包:

 yum install openstack-nova-compute -y

(2)编辑/etc/nova/nova.conf文件并完成下面的操作:
[DEFAULT] 和 [oslo_messaging_rabbit]部分,配置RabbitMQ消息队列的连接:

[DEFAULT]
...
rpc_backend = rabbit

[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

[DEFAULT]
...
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 = nova
password = nova

在 [DEFAULT] 部分,配置 my_ip 选项:

[DEFAULT]
...
my_ip = 172.25.254.2

在 [DEFAULT] 部分,使能 Networking 服务:

[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[vnc]部分,启用并配置远程控制台访问:
[vnc]

enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html

在 [glance] 区域,配置镜像服务 API 的位置:

[glance]
...
api_servers = http://controller:9292

在 [oslo_concurrency] 部分,配置锁路径:

[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp

3.完成安装

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

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

如果这个命令返回了 one or greater 的值,那么你的计算节点支持硬件加速且不需要额外的配置。

如果这个命令返回了 zero 值,那么你的计算节点不支持硬件加速。你必须配置 libvirt 来使用 QEMU 去代替 KVM,此时就要按照如下配置:

[root@compute1 yum.repos.d]# 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

4.验证操作

在控制节点上已经能看到计算节点成功启动,且状态为up

openstack compute service list

openstack云平台_第41张图片
以后如果想往集群中加更多的节点,那就按照此步骤添加即可。

七、Networking 服务(控制节点)

参考官方文档:官方文档

1.先决条件

(1)完成下面的步骤以创建数据库

step1:连接数据库

[root@controller ~]# mysql -p
Enter password: 
Welcome to the MariaDB monitor.

step2:创建neutron 数据库

CREATE DATABASE neutron;

step3:对neutron 数据库授予合适的访问权限 注意密码设置

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
  IDENTIFIED BY 'neutron';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
  IDENTIFIED BY 'neutron';

(2)要创建服务证书,完成这些步骤:

step1:创建neutron用户:

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

openstack云平台_第42张图片
step2:添加admin 角色到neutron 用户:

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

step3:创建neutron服务实体:

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

openstack云平台_第43张图片

(3)创建网络服务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

openstack云平台_第44张图片

2.配置网络选项

此处配置网络选项1:公共网络

(1)安装组件

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

(2)配置服务组件
编辑/etc/neutron/neutron.conf 文件并完成如下操作:

在 [database] 部分,配置数据库访问:

[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

[DEFAULT]部分,启用ML2插件并禁用其他插件:

[DEFAULT]
core_plugin = ml2
service_plugins =

在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列的连接:

[DEFAULT]
rpc_backend = rabbit

[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

[DEFAULT]
...
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

[DEFAULT][nova]部分,配置网络服务来通知计算节点的网络拓扑变化:

[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True

[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] 部分,配置锁路径:

[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp

(3)配置 Modular Layer 2 (ML2) 插件

编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作:

[ml2]部分,启用flat和VLAN网络:

[ml2]
...
type_drivers = flat,vlan

[ml2]部分,禁用私有网络:

[ml2]
...
tenant_network_types =

[ml2]部分,启用Linuxbridge机制:

[ml2]
...
mechanism_drivers = linuxbridge

[ml2] 部分,启用端口安全扩展驱动:

[ml2]
...
extension_drivers = port_security

[ml2_type_flat]部分,配置公共虚拟网络为flat网络

[ml2_type_flat]
...
flat_networks = provider

[securitygroup]部分,启用 ipset 增加安全组规则的高效性:

[securitygroup]
...
enable_ipset = True

(4)配置Linuxbridge代理

编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并且完成以下操作:
[linux_bridge]部分,将公共虚拟网络和公共物理网络接口对应起来:

[linux_bridge]
physical_interface_mappings = provider:eth1  ##告诉他虚拟机桥接的时候 用这个设备 

[vxlan]部分,禁止VXLAN覆盖网络:

[vxlan]
enable_vxlan = False

[securitygroup]部分,启用安全组并配置 Linuxbridge iptables firewall driver:

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

(5)配置DHCP代理 用于给云主机动态分配ip:

编辑/etc/neutron/dhcp_agent.ini文件并完成下面的操作:

[DEFAULT]部分,配置Linuxbridge驱动接口,DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True

3.配置元数据代理

编辑/etc/neutron/metadata_agent.ini文件并完成以下操作:

[DEFAULT] 部分,配置元数据主机以及共享密码:

[DEFAULT]
...
nova_metadata_ip = controller
metadata_proxy_shared_secret = westos  ##定义一个密钥

4.为计算节点配置网络服务

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

[neutron]部分,配置访问参数,启用元数据代理并设置密码:

[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 = METADATA_SECRET

5.完成安装

(1)网络服务初始化脚本需要一个超链接 /etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.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)重启计算API 服务:

systemctl restart openstack-nova-api.service  ##因为刚刚修改了nova的主配置文件 所以此处得重启该服务

(4)当系统启动时,启动 Networking 服务并配置它启动。

# 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

列一下刚刚启动的服务:

neutron agent-list

在这里插入图片描述

八、Networking 服务(计算节点)

1.安装组件

yum install openstack-neutron-linuxbridge ebtables ipset

2.配置通用组件

编辑/etc/neutron/neutron.conf 文件并完成如下操作:

[database] 部分,注释所有connection 项,因为计算节点不直接访问数据库。

在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列的连接:

[DEFAULT]
...
rpc_backend = rabbit

[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

[DEFAULT]
...
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] 部分,配置锁路径:

[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp

3.网络配置

参考文档:`文档
配置Linuxbridge代理

编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并且完成以下操作:

[linux_bridge]部分,将公共虚拟网络和公共物理网络接口对应起来:

[linux_bridge]
physical_interface_mappings = provider:eth1

[vxlan]部分,禁止VXLAN覆盖网络:

[vxlan]
enable_vxlan = False   

[securitygroup]部分,启用安全组并配置 Linuxbridge iptables firewall driver:

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

4.为计算节点配置网络服务

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

[neutron] 部分,配置访问参数:

[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

5.完成安装

(1)重启计算服务:

systemctl restart openstack-nova-compute.service

(2)启动Linuxbridge代理并配置它开机自启动

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

验证一下neutron 代理是否成功

neutron agent-list

在这里插入图片描述

九、启动一个实例

暂时不开启图形,先用命令行的方式启用云服务:

1.设置公共网络

参考官方文档

(1)创建公用网络

云主机肯定是要接入网络的,所以要先创建网络

neutron net-create --shared --provider:physical_network provider \
  --provider:network_type flat provider
  ## 创建一个网络 类型为shared(共享) 名称为provider的物理网络[刚刚在配置文件中定义好的] 
  启用的网络类型有两种 (flat) 最后的provider是名称

openstack云平台_第45张图片

(2)在provider网络上创建一个子网,

neutron subnet-create --name provider --allocation-pool start=172.25.254.100,end=172.25.254.200  --dns-nameserver 114.114.114.114 --gateway 172.25.254.50 provider 172.25.254.0/24

openstack云平台_第46张图片

2.创建m1.nano规格的主机

默认的最小规格的主机需要512 MB内存。对于环境中计算节点内存不足4 GB的,我们推荐创建只需要64 MB的m1.nano规格的主机。若单纯为了测试的目的,请使用m1.nano规格的主机来加载CirrOS镜像

这里我们定义了一个云主机类型 id为0 1核的cpu 64兆 磁盘1G 命名为m1.nano

[root@controller ~]#  openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

openstack云平台_第47张图片
当然,云主机类型有很多 但是此时我们是为了测试,且cirros镜像才13M 所以刚刚的配置足矣。

openstack云平台_第48张图片

3.生成一个键值对

大部分云镜像支持公共密钥认证而不是传统的密码认证。在启动实例前,你必须添加一个公共密钥到计算服务。

(1)导入租户demo的凭证

[root@controller ~]# source demo-openrc 

(2)生成和添加秘钥对:

ssh-keygen -q -N ""  ## 生成密钥对
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey  ## 添加密钥对  命名为mykey。通过密钥对 在启动云主机的时候 它可以自动帮我们实现免密 他可以帮我们把公钥注入到云主机里面再启动

openstack云平台_第49张图片

4.增加安全组规则

其实就是防火墙 ,就是你这个云主机谁可以访问 谁不可以访问,开哪个端口,
默认情况下, default安全组适用于所有实例并且包括拒绝远程访问实例的防火墙规则。对诸如CirrOS这样的Linux镜像,我们推荐至少允许ICMP (ping) 和安全shell(SSH)规则。

(1)添加规则到 default 安全组。

允许 ICMP (ping)

openstack security group rule create --proto icmp default  

允许安全 shell (SSH) 的访问:

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

openstack云平台_第50张图片

5.在公有网络上创建实例

(1)确定实例选项

参考官方文档:在公有网络上创建实例

列出可用类型

openstack flavor list

列出可用镜像

openstack image list

列出可用网络

openstack network list

列出可用的安全组

openstack security group list

openstack云平台_第51张图片
(2)创建实例

openstack server create --flavor m1.nano --image cirros --nic net-id=f882b656-7575-4c4e-9f1c-7e63dc35eccf --security-group default --key-name mykey provider-instance

openstack云平台_第52张图片
检查实例的状态
在这里插入图片描述

6.使用虚拟控制台访问实例

它提供了一个url用以访问云平台

openstack console url show provider-instance

在这里插入图片描述
由于给的url中是controller 所以需要解析

在真机上:vim/etc/hosts
172.25.254.1 controller

测试:
openstack云平台_第53张图片

你可能感兴趣的:(virtualenv)