OpenStack搭建

一、Openstack服务通用安装步骤:

a、数据库创库授权

b、在keystone创建系统用户关联角色

c、在keystone上创建服务,注册api

d、安装相应服务软件包

e、修改相应服务的配置文件

f、同步数据库

g、启动服务

二、Openstack搭建

第一次搭建的时候控制节点IP是:192.168.0.110;;计算节点IP是192.168.0.108

1、时间同步

控制节点:把控制节点变成一个时间同步服务器,其他节点都去和控制节点同步

yum install chrony

allow 192.168.0.0/24

控制节点没有配成时间同步服务器的时候只监听323,变成服务同步器的时候监听123和323

计算节点配置chrony服务,配置时间同步服务为控制节点的IP

2、openstack包安装--openstack包安装需要有openstack相应的源

在CentOS中, ``extras``仓库提供用于启用 OpenStack 仓库的RPM包。 CentOS 默认启用``extras``仓库,因此你可以直接安装用于启用OpenStack仓库的包

这是本地已经上传好的源(openstack_rpm.tar.gz和local源),不用执行yum了。或者centos安装centos_base源要更新到最新和epel源再yum

yum install centos-release-openstack-mitaka(openstack源-Mitaka版)(https://mirrors.aliyun.com/centos/7.8.2003/extras/x86_64/Packages/在这可以找到相应的rpm源包,这里有R版\q版\k\o版)或yum install centos-release-openstack-rocky(openstack-R版),安装完之后会生成几个仓库文件,仓库文件指向7.6.1810/cloud//x86_64/各个版本/所有openstack软件所有安装包

本地源:

root@compute1 opt]# mount /dev/cdrom /mnt/
上传openstack_rpm到opt目录下,并解压
echo '[local]
name=local
baseurl=file:///mnt
gpgcheck=0
[openstack]
name=openstack
baseurl=file:///opt/repo
gpgcheck=0' >/etc/yum.repos.d/local.repo

yum makecache
echo 'mount /dev/cdrom /mnt'  >>/etc/rc.local  配置自动挂盘
chmod +x /etc/rc.local 

yum安装openstack源:--本次我们采用本地源,不采用yum安装源方式

https://vault.centos.org/7.6.1810/extras/x86_64/Packages/

yum -y install https://vault.centos.org/7.6.1810/extras/x86_64/Packages/centos-release-openstack-rocky-1-1.el7.centos.noarch.rpm

 

控制节点计算所有节点都要执行:yum install python-openstackclient openstack-selinux

安装 OpenStack 客户端:RHEL 和 CentOS 默认启用了 SELinux . 安装 openstack-selinux 软件包以便自动管理 OpenStack 服务的安全策略

3、安装数据库 

大多数 OpenStack 服务使用 SQL 数据库来存储信息。 典型地,数据库运行在控制节点上

控制节点:yum install mariadb mariadb-server python2-PyMySQL -y

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

在 [mysqld] 部分,设置 ``bind-address``值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库:

在``[mysqld]`` 部分,设置如下键值来启用一起有用的选项和 UTF-8 字符集:

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

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

4、消息队列

OpenStack 使用 message queue 协调操作和各服务的状态信息。消息队列服务一般运行在控制节点上,大多数发行版本的OpenStack包支持特定的消息队列服务。本安装 RabbitMQ 消息队列服务,因为大部分发行版本都支持它。

yum install rabbitmq-server -y

启动消息队列服务并将其配置为随系统启动:

systemctl enable rabbitmq-server.service

systemctl start rabbitmq-server.service

* unable to connect to epmd (port 4369) on controller: address (cannot connect to host/port)

添加 openstack 用户:用户是openstack,密码是RABBIT_PASS

rabbitmqctl add_user openstack RABBIT_PASS

给``openstack``用户配置写和读权限:

 

[root@controller ~]# rabbitmqctl list_users  查看当前用户列表 

 

[root@controller ~]# rabbitmqctl  list_user_permissions openstack 查看用户权限

[root@controller ~]# rabbitmq-plugins enable rabbitmq_management 开启rabbitmq的web界面,来监控rabbitmq的运行状态

5、安装memcache

认证服务认证缓存使用Memcached缓存令牌。缓存服务memecached运行在控制节点

yum install memcached python-memcached -y

[root@controller ~]# sed -i 's#127.0.0.1#192.168.0.110#g' /etc/sysconfig/memcached

[root@controller ~]# systemctl enable memcached.service

[root@controller ~]#systemctl start memcached.service

6、安装keystone

控制节点上安装和配置OpenStack身份认证服务,keystone为认证管理,授权管理和服务目录服务管理提供单点整合

认证:账号管理,openstack所有用户,都是在keystone上注册的

授权:glance、Nova、neutron、cinder等其他服务都统一使用keystone的账号管理,类似很多网站支持qq登录

服务目录:每增加一个服务,都需要在keystone上做注册登记,用户通过keystone可以知道那有哪些服务,这些服务的URL是什么,用户就可以直接访问这些服务了。

在你配置 OpenStack 身份认证服务前,你必须创建一个数据库和管理员令牌。

用数据库连接客户端以 root 用户连接到数据库服务器:mysql -u root –p

创建 keystone 数据库:CREATE DATABASE keystone;

对``keystone``数据库授予恰当的权限:

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost'  IDENTIFIED BY 'KEYSTONE_DBPASS';

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'   IDENTIFIED BY 'KEYSTONE_DBPASS';

教程使用带有``mod_wsgi``的Apache HTTP服务器来服务认证服务请求,端口为5000和35357。缺省情况下,Kestone服务仍然监听这些端口。然而,本教程手动禁用keystone服务。

安装包:[root@controller ~]#yum install openstack-keystone httpd mod_wsgi -y

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

[root@controller ~]#cp /etc/keystone/keystone.conf{,.bak}

[root@controller ~]# grep -Ev '^$|#' /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf

在``[DEFAULT]``部分,定义初始管理令牌的值:

admin_token = ADMIN_TOKEN(生成一个随机值在初始的配置中作为管理员的令牌。使用这个openssl rand -hex 10,也可以使用这个不变)

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

connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone将``KEYSTONE_DBPASS``替换为你为数据库选择的密码

mysql+pymysql://这是个协议

keystone:KEYSTONE_DBPASS访问数据库的账号和密码

controller/keystone访问哪台主机的哪个库,由于keystone部署在controller节点,所以就是访问controller节点下的keystone库。默认端口3306

在``[token]``部分,配置Fernet UUID令牌的提供者。

[token]

provider = fernet,提供token的方案,加密算法

 

以上改配置是手动进vim改的。接下来自动配置相关参数,先安装自动配置工具

yum -y install openstack-utils

[root@controller ~]# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token ADMIN_TOKEN

[root@controller ~]# openstack-config --set /etc/keystone/keystone.conf database connection  mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

[root@controller ~]# openstack-config --set /etc/keystone/keystone.conf token provider  fernet

MD5校验配置文件和手动配置的md5一样,说明自动配置结果一样

初始化身份认证服务的数据库: 以keystone用户执行keystone-manage db_sync

[root@controller ~] su -s /bin/sh -c "keystone-manage db_sync" keystone,进入数据如果有很多表说明同步成功

su代表切换用户;=s /bin/sh表指定了指定了一个shell; -c "keystone-manage db_sync"代表切换用户后在数据库中执行的命令;keystone代表切换到哪个用户

以keystone的身份在shell中执行keystone-manage db_sync

初始化Fernet keys:

[root@controller ~]keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

配置 Apache HTTP 服务器

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

[root@controller ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf

用下面的内容创建文件 /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 
    <Directory /usr/bin>
        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
    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

启动 Apache HTTP 服务并配置其随系统启动:
# systemctl enable httpd.service
# systemctl start httpd.service

创建服务和注册api

身份认证服务提供服务的目录和他们的位置。每个你添加到OpenStack环境中的服务在目录中需要一个 service 实体和一些 API endpoints

你必须使用``–os-token``参数将认证令牌的值传递给:command:openstack 命令。类似的,你必须使用``–os-url`` 参数将身份认证服务的 URL传递给 openstack 命令或者设置OS_URL环境变量。配置认证令牌:export OS_TOKEN=ADMIN_TOKEN这个和前面default下配的一样

配置端点URL:export OS_URL=http://controller:35357/v3

配置认证 API 版本:export OS_IDENTITY_API_VERSION=3

创建服务实体和身份认证服务:openstack service create --name keystone --description "OpenStack Identity" identity(类型,ID,身份认证)

创建认证服务的 API 端点:

openstack endpoint create --region RegionOne  identity public http://controller:5000/v3  public是所有人都可以用的api接口

openstack endpoint create --region RegionOne  identity internal http://controller:5000/v3  internal是内部使用的(glance、neutron、cinder等 )

openstack endpoint create --region RegionOne  identity admin http://controller:35357/v3   admin是管理员使用的

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

身份认证服务为每个OpenStack服务提供认证服务。认证服务使用 T domains, projects (tenants), :term:`users<user>`和 :term:`roles<role>`的组合。

创建域``default``:openstack domain create --description "Default Domain" default

创建 admin 项目:openstack project create --domain default --description "Admin Project" admin

创建 admin 用户:openstack user create --domain default  --password ADMIN_PASS admin

创建 admin 角色:openstack role create admin

查看用户:openstack user list;openstack user show ID

添加``admin`` 角色到 admin 项目和用户上(关联项目、用户、角色):openstack role add --project admin --user admin admin(角色)

在admin项目上,给admin用户赋予admin角色

 添加到你的环境中每个服务包含独有用户的service 项目。创建``service``项目:openstack project create --domain default \

  --description "Service Project" service 创建service项目是为了nova\glance用户都属于一个项目,到时候把他们放到service项目,刚才设置变量是临时有效,退出xshell失效。

export OS_TOKEN=ADMIN_TOKEN

export OS_URL=http://controller:35357/v3

export OS_IDENTITY_API_VERSION=3

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 --os-password ADMIN_PASS user list

 

unset OS_TOKEN OS_URL   --查看token不要这两个变量,否则会出现'NoneType' object has no attribute 'service_catalog'

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 --os-password ADMIN_PASS token issue

每次执行那么麻烦,导入环境变量

cat>> admin-openrc << EOF

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_PASS

export OS_AUTH_URL=http://controller:35357/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

EOF

[root@controller ~]# openstack token issue 能获取到token,keystone就安装OK

 7、安装glance镜像服务

先执行source admin-openrc导入环境变量,后期直接用openstack命令

安装在控制节点:镜像服务 (glance) 允许用户发现、注册和获取虚拟机镜像。它提供了一个 REST API,允许您查询虚拟机镜像的 metadata 并获取一个现存的镜像。

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

glance-api:接收镜像API的调用,诸如镜像发现、恢复、存储。

glance-registry:存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。

安装和配置镜像服务之前,你必须创建创建一个数据库、服务凭证和API端点

a、数据库创库授权

用数据库连接客户端以 root 用户连接到数据库服务器:mysql -u root -p 密码为空直接回车

创建 glance 数据库:CREATE DATABASE glance;

对``glance``数据库授予恰当的权限:

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost'  IDENTIFIED BY 'GLANCE_DBPASS';

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%'  IDENTIFIED BY 'GLANCE_DBPASS';

b、在keystone创建系统用户关联角色

创建 glance 用户:openstack user create --domain default --password GLANCE_PASS glance

添加 admin 角色到 glance 用户和 service 项目上。openstack role add --project service --user glance admin 在service项目上给glance用户授权admin的角色

c、在keystone上创建服务,注册api

创建``glance``服务实体:openstack service create --name glance   --description "OpenStack Image" image

创建镜像服务的 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

d、安装相应服务软件包

安装软件包: yum install openstack-glance -y

e、修改相应服务的配置文件

[root@controller ~]# cp  /etc/glance/glance-api.conf{,.bak}

[root@controller ~]# grep -Ev '^$|#' /etc/glance/glance-api.conf.bak >/etc/glance/glance-api.conf

在 [database] 部分,配置数据库访问:将``GLANCE_DBPASS`` 替换为你为镜像服务设置的密码

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

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

[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_PASS

[paste_deploy]

...

flavor = keystone

在 [glance_store] 部分,配置本地文件系统存储和镜像文件位置:[glance_store]

...

stores = file,http

default_store = file

filesystem_store_datadir = /var/lib/glance/images/

用openstack-config更改上面的配置

openstack-config --set /etc/glance/glance-api.conf  database connection mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken auth_type password

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken project_domain_name default

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken user_domain_name default

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken project_name service

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken username glance

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken password GLANCE_PASS

openstack-config --set /etc/glance/glance-api.conf  paste_deploy flavor keystone

openstack-config --set /etc/glance/glance-api.conf  glance_store stores file,http

openstack-config --set /etc/glance/glance-api.conf  glance_store default_store file

openstack-config --set /etc/glance/glance-api.conf  glance_store filesystem_store_datadir /var/lib/glance/images/

编辑文件 ``/etc/glance/glance-registry.conf``并完成如下动作:

在 [database] 部分,配置数据库访问:将``GLANCE_DBPASS`` 替换为你为镜像服务设置的密码

[database]

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

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

[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_PASS

[paste_deploy]

flavor = keystone

[root@controller ~]# cp /etc/glance/glance-registry.conf{,.bak}

[root@controller ~]# grep -Ev '^$|#' /etc/glance/glance-registry.conf.bak >/etc/glance/glance-registry.conf

[root@controller ~]# cat /etc/glance/glance-registry.conf 

openstack-config --set /etc/glance/glance-registry.conf database connection mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken auth_type password

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken project_domain_name default

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken user_domain_name default

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken project_name service

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken username glance

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken password GLANCE_PASS

openstack-config --set /etc/glance/glance-registry.conf  paste_deploy flavor keystone

f、同步数据库

写入镜像服务数据库:su -s /bin/sh -c "glance-manage db_sync" glance。忽略输出中任何不推荐使用的信息。

g、启动服务

启动镜像服务、配置他们随机启动:

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

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

监听端口一个9191,一个9292

h、验证

[root@controller ~]# openstack image create "cirros"  --file cirros-0.3.4-x86_64-disk.img  --disk-format qcow2 --container-format bare --public,下面报错是因为没有配置glancepublicendpointopenstack endpoint create --region RegionOne image public http://controller:9292

我们可以在/etc/glance/glance-api.conf 这个配置文件中设置[glance_store]文件存储路径filesystem_store_datadir = /var/lib/glance/images/查看刚上传的

8、安装计算服务Nova

计算服务来托管和管理云计算系统,OpenStack计算组件请求OpenStack Identity服务进行认证;请求OpenStack Image服务提供磁盘镜像;为OpenStack dashboard提供用户与管理员接口。

OpenStack计算服务由下列组件所构成:

nova-api 服务接收和响应来自最终用户的计算API请求,管理虚拟机生命周期

nova-compute(多个)服务,一个持续工作的守护进程,通过Hypervior的API来创建和销毁虚拟机实例。真正管理虚拟机的生命周期。

nova-api-metadata 服务,接受来自虚拟机发送的元数据请求。``nova-api-metadata``服务一般在安装``nova-network``服务的多主机模式下使用。

nova-scheduler服务,拿到一个来自队列请求虚拟机实例,然后决定哪台计算服务器主机来运行它。Nova调度器(挑出最合适的Nova-compute来创建虚机)

nova-conductor模块,媒介作用于``nova-compute``服务与数据库之间,帮助Nova-compute代理修改数据库中虚拟机的状态。

nova客户端,用于用户作为租户管理员或最终用户来提交命令

nova-consoleauth 守护进程,授权控制台代理所提供的用户令牌,为web版的vnc提供访问令牌token。

novncproxy ,web版VNC客户端

备注:用户发起请求创建虚拟机,Nova-api收到请求,开始下发任务,Nova-compute(计算节点)有多台,Nova-api把活安排给谁呢,怎么安排合理,nova-scheduler负责选节点,nova-scheduler需要知道每个计算节点资源情况,比如CPU、MEM,硬盘等等,把这些信息写到数据库,schedule从数据库Nova-db中根据资源情况去选择相应的计算节点,Nova-compute也需要连接数据库,去更新自己资源信息。假设有10000个计算节点,每个节点都要连接数据库,这样不安全,另一个如果数据库Nova-db的密码修改,则所有计算节点都需要修改,且需要重启计算节点,为了避免以上两点,nova-conductor出现了。只需在Nova-compute配置消息队列(rabbitmq),所有的计算节点通过消息队列去连接nova-conductor,Nova-api通过消息队列发给Nova-schedule,Nova-schedule收到消息之后,去数据库查询nova-compute剩的资源最多。

(1)在控制节点controller上安装Nova

在安装和配置 Compute 服务前,你必须创建数据库服务的凭据以及 API endpoints。

先导入环境变量:source admin-openrc

a、数据库创库授权

用数据库连接客户端以 root 用户连接到数据库服务器:mysql -u root -p

创建 nova_api 和 nova 数据库:CREATE DATABASE nova_api;CREATE DATABASE nova;

对数据库进行正确的授权:

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

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

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

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

b、在keystone创建系统用户关联角色

创建 nova 用户:openstack user create --domain default  --password NOVA_PASS nova

给 nova 用户添加 admin 角色:openstack role add --project service --user nova admin

c、在keystone上创建服务,注册api

创建 nova 服务实体:openstack service create --name nova  --description "OpenStack Compute" compute

创建 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

d、安装相应服务软件包

安装软件包:yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler -y

e、修改相应服务的配置文件

cp /etc/nova/nova.conf{,.bak}

grep -Ev "^$|#" /etc/nova/nova.conf.bak >/etc/nova/nova.conf

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

在``[DEFAULT]``部分,只启用计算和元数据API:

[DEFAULT]

...

enabled_apis = osapi_compute,metadata

在``[api_database]``和``[database]``部分,配置数据库的连接:用你为 Compute 数据库选择的密码来代替 NOVA_DBPASS

[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” 消息队列访问:用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。

[DEFAULT]

...

rpc_backend = rabbit

 

[oslo_messaging_rabbit]

...

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``。

[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_PASS

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

[DEFAULT]

...

my_ip = 192.168.0.110

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

[DEFAULT]

...

use_neutron = True

firewall_driver = nova.virt.firewall.NoopFirewallDriver

默认情况下,计算服务使用内置的防火墙服务。由于网络服务包含了防火墙服务,你必须使用``nova.virt.firewall.NoopFirewallDriver``防火墙服务来禁用掉计算服务内置的防火墙服务

[root@controller ~]# ll /lib/python2.7/site-packages/nova/virt/firewall.py

-rw-r--r-- 1 root root 16823 May 24  2017 /lib/python2.7/site-packages/nova/virt/firewall.py

[root@controller ~]#

在``[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

用openstack-config配置上面的配置:

openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata

openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova

openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend rabbit

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host controller

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid openstack

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_password  RABBIT_PASS

openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password

openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name default

openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name default

openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service

openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova

openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS

openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.0.110

openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True

openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver  nova.virt.firewall.NoopFirewallDriver

openstack-config --set /etc/nova/nova.conf vnc vncserver_listen $my_ip

openstack-config --set /etc/nova/nova.conf vnc vncserver_proxyclient_address $my_ip

openstack-config --set /etc/nova/nova.conf glance api_servers http://controller:9292

openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp 

f、同步数据库

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

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

g、启动服务

启动 Compute 服务并将其设置为随系统启动:

# 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

h、验证测试

[root@controller ~]# openstack compute service list

[root@controller ~]# nova service-list

(2)在计算节点compute上安装并配置计算服务

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

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

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

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

在 /etc/nova/nova.conf 文件的 [libvirt] 区域做出如下的编辑:

[libvirt]

...

virt_type = qemu

正式安装:

nova-compute调用libvirtd创建虚拟机

yum install openstack-nova-compute openstack-utils.noarch -y

cp /etc/nova/nova.conf{,.bak}

grep -Ev "^$|#" /etc/nova/nova.conf.bak >/etc/nova/nova.conf

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

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

[DEFAULT]

...

rpc_backend = rabbit

[oslo_messaging_rabbit]

...

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。

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

...

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_PASS

使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``。

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

[DEFAULT]

...

my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS

将其中的 MANAGEMENT_INTERFACE_IP_ADDRESS 替换为计算节点上的管理网络接口的IP 地址,例如 :ref:`example architecture <overview-example-architectures>`中所示的第一个节点 192.168.0.108 。

在 [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

服务器组件监听所有的 IP 地址,而代理组件仅仅监听计算节点管理网络接口的 IP 地址。基本的 URL 指示您可以使用 web 浏览器访问位于该计算节点上实例的远程控制台的位置

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

[glance]

...

api_servers = http://controller:9292

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

[oslo_concurrency]

...

lock_path = /var/lib/nova/tmp

通过openstack-config配置上面文件:

openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend rabbit

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host controller

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid openstack

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_password  RABBIT_PASS

openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password

openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name default

openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name default

openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service

openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova

openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS

openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.0.108

openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True

openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver  nova.virt.firewall.NoopFirewallDriver

openstack-config --set /etc/nova/nova.conf vnc enabled True

openstack-config --set /etc/nova/nova.conf vnc vncserver_listen 0.0.0.0

openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://controller:6080/vnc_auto.html

openstack-config --set /etc/nova/nova.conf vnc vncserver_proxyclient_address $my_ip

openstack-config --set /etc/nova/nova.conf glance api_servers http://controller:9292

openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp

启动计算服务及其依赖,并将其配置为随系统自动启动:

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

# systemctl start libvirtd.service openstack-nova-compute.service (控制节点的消息队列服务要起来systemctl status rabbitmq-server,否则计算节点开启这个服务失败)

验证测试:

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

9、网络服务neutron

OpenStack Networking(neutron),允许创建、插入接口设备。常用组件:

neutron-server:接收和路由API请求到合适的OpenStack网络插件

neutron-linuxbridge-agent:负责创建桥接网卡

neutron-dhcp-agent:负责分配IP

neutron-metadata-agent:配合neutron-metadata-api实现虚拟机的定制

L3-agent:实现三层网络vxlan(网络层)

在你配置OpenStack网络(neutron)服务之前,你必须为其创建一个数据库,服务凭证和API端点

先执行下:source admin-openrc设置环境变量

(1)控制节点配置

a、数据库创库授权

用数据库连接客户端以 root 用户连接到数据库服务器:mysql -u root -p

创建``neutron`` 数据库:CREATE DATABASE neutron;

对``neutron`` 数据库授予合适的访问权限,使用合适的密码替换``NEUTRON_DBPASS``:

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

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

b、在keystone创建系统用户关联角色

创建``neutron``用户:openstack user create --domain default --password NEUTRON_PASS neutron

添加``admin`` 角色到``neutron`` 用户:openstack role add --project service --user neutron admin

c、在keystone上创建服务,注册api

创建``neutron``服务实体:openstack service create --name neutron --description "OpenStack Networking" network

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

d、安装相应服务软件包

选择公共网络安装:yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y

http://docs.qstack.com.cn/mitaka/zh_CN/install-guide-rdo/neutron-controller-install-option1.html

e、修改相应服务的配置文件

配置服务组件:Networking 服务器组件的配置包括数据库、认证机制、消息队列、拓扑变化通知和插件

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

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

[database]

...

connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

使用你设置的数据库密码替换 NEUTRON_DBPASS 。

在``[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

用你在RabbitMQ中为``openstack``选择的密码替换 “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_PASS

将 NEUTRON_PASS 替换为你在认证服务中为 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_PASS

使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``。

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

[oslo_concurrency]

...

lock_path = /var/lib/neutron/tmp

通过openstack-config配置上面信息:

openstack-config --set /etc/neutron/neutron.conf database connection  mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

openstack-config --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2

openstack-config --set /etc/neutron/neutron.conf DEFAULT service_plugins

openstack-config --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host controller

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid openstack

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password RABBIT_PASS

openstack-config --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_type password

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_name service

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken username neutron

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS

openstack-config --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes True

openstack-config --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes True

openstack-config --set /etc/neutron/neutron.conf nova auth_url              http://controller:35357

openstack-config --set /etc/neutron/neutron.conf nova auth_type             password

openstack-config --set /etc/neutron/neutron.conf nova project_domain_name   default

openstack-config --set /etc/neutron/neutron.conf nova user_domain_name      default

openstack-config --set /etc/neutron/neutron.conf nova region_name           RegionOne

openstack-config --set /etc/neutron/neutron.conf nova project_name          service

openstack-config --set /etc/neutron/neutron.conf nova username              nova

openstack-config --set /etc/neutron/neutron.conf nova password              NOVA_PASS

openstack-config --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp

配置 Modular Layer 2 (ML2) 插件

ML2插件使用Linuxbridge机制来为实例创建layer-2虚拟网络基础设施

编辑``/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

通过openstack-config配置上面文档:

cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/plugins/ml2/ml2_conf.ini.bak >/etc/neutron/plugins/ml2/ml2_conf.ini

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers linuxbridge

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset True

配置Linuxbridge代理¶

Linuxbridge代理为实例建立layer-2虚拟网络并且处理安全组规则。

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

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

[linux_bridge]

physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

将``PUBLIC_INTERFACE_NAME`` 替换为底层的物理公共网络接口。请查看:ref:environment-networking for more information。

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

[vxlan]

enable_vxlan = False

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

[securitygroup]

...

enable_security_group = True

firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

通过openstack-config配置上面文档:

cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak >/etc/neutron/plugins/ml2/linuxbridge_agent.ini

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:eth0

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan  enable_vxlan False

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group True

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

配置DHCP代理¶

The DHCP agent provides DHCP services for virtual networks.

编辑``/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

通过openstack-config配置上面文档

cp /etc/neutron/dhcp_agent.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/dhcp_agent.ini.bak >/etc/neutron/dhcp_agent.ini

openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver

openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver  neutron.agent.linux.dhcp.Dnsmasq

openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata True

配置元数据代理:

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

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

[DEFAULT]

...

nova_metadata_ip = controller

metadata_proxy_shared_secret = METADATA_SECRET

用你为元数据代理设置的密码替换 METADATA_SECRET。

cp /etc/neutron/metadata_agent.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/metadata_agent.ini.bak >/etc/neutron/metadata_agent.ini

openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_ip  controller

openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret  METADATA_SECRET

为计算服务配置网络服务:

编辑``/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_PASS

service_metadata_proxy = True

metadata_proxy_shared_secret = METADATA_SECRET

将 NEUTRON_PASS 替换为你在认证服务中为 neutron 用户选择的密码。

使用你为元数据代理设置的密码替换``METADATA_SECRET``

openstack-config --set /etc/nova/nova.conf neutron url   http://controller:9696

openstack-config --set /etc/nova/nova.conf neutron auth_url   http://controller:35357

openstack-config --set /etc/nova/nova.conf neutron auth_type   password

openstack-config --set /etc/nova/nova.conf neutron project_domain_name   default

openstack-config --set /etc/nova/nova.conf neutron user_domain_name   default

openstack-config --set /etc/nova/nova.conf neutron region_name   RegionOne

openstack-config --set /etc/nova/nova.conf neutron project_name   service

openstack-config --set /etc/nova/nova.conf neutron username   neutron

openstack-config --set /etc/nova/nova.conf neutron password   NEUTRON_PASS

openstack-config --set /etc/nova/nova.conf neutron service_metadata_proxy   True

openstack-config --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret   METADATA_SECRET

f、同步数据库

网络服务初始化脚本需要一个超链接 /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

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

g、启动服务

systemctl restart openstack-nova-api.service

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

(2)在计算节点上配置

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

# yum install openstack-neutron-linuxbridge ebtables ipset

Networking 通用组件的配置包括认证机制、消息队列和插件

cp /etc/neutron/neutron.conf{,.bak}

grep -Ev "^$|#" /etc/neutron/neutron.conf.bak >/etc/neutron/neutron.conf

openstack-config --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host controller

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid openstack

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password RABBIT_PASS

openstack-config --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_type password

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_name service

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken username neutron

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS

openstack-config --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp

配置Linuxbridge代理:

http://docs.qstack.com.cn/mitaka/zh_CN/install-guide-rdo/neutron-compute-install-option1.html

cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak >/etc/neutron/plugins/ml2/linuxbridge_agent.ini

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:eth0

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan  enable_vxlan False

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group True

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

为计算服务配置网络服务:

openstack-config --set /etc/nova/nova.conf neutron url   http://controller:9696

openstack-config --set /etc/nova/nova.conf neutron auth_url   http://controller:35357

openstack-config --set /etc/nova/nova.conf neutron auth_type   password

openstack-config --set /etc/nova/nova.conf neutron project_domain_name   default

openstack-config --set /etc/nova/nova.conf neutron user_domain_name   default

openstack-config --set /etc/nova/nova.conf neutron region_name   RegionOne

openstack-config --set /etc/nova/nova.conf neutron project_name   service

openstack-config --set /etc/nova/nova.conf neutron username   neutron

openstack-config --set /etc/nova/nova.conf neutron password   NEUTRON_PASS

完成安装:

systemctl restart openstack-nova-compute.service

# systemctl enable neutron-linuxbridge-agent.service

# systemctl start neutron-linuxbridge-agent.service

(3)在控制节点验证

[root@controller ~]# neutron agent-list

[root@controller ~]# neutron agent-list

503 Service Unavailable

The server is currently unavailable. Please try again at a later time.

Neutron server returns request_ids: ['req-e7689fba-87db-47fc-8786-2e633dfa1c59']

报错原因是 /etc/neutron/neutron.conf里面的keystone密码配置错误

发现缺少compute计算节点的linux bridge agent,是因为计算节点未和控制节点时间同步,在计算节点可以利用`ntpdate 控制节点IP`(在计算节点配置’server 控制节点IP iburst’)或者一直重启chronyd

10、安装horizon仪表盘服务

Dashboard(horizon)是一个web接口,使得云平台管理员以及用户可以管理不同的Openstack资源以及服务。这个部署示例使用的是 Apache Web 服务器。

计算节点进行安装配置(在计算节点和控制节点都行),keystone安装在控制节点,也用Apache,horizon也是使用Apache,一旦Apache配置错误,重启Apache,horizon和keystone都挂了。没有自己数据库,web页面展示,全程依赖调用其他服务的api

http://docs.qstack.com.cn/mitaka/zh_CN/install-guide-rdo/horizon-install.html

a、安装软件包

yum install openstack-dashboard  python-memcached -y

编辑文件 /etc/openstack-dashboard/local_settings 增加并按照如下修改:

编辑文件 /etc/openstack-dashboard/local_settings 并完成如下动作:
ALLOWED_HOSTS = ['*', ]
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'controller:11211',
    },
}
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
OPENSTACK_HOST = "controller"
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
}

OPENSTACK_NEUTRON_NETWORK = {
    'enable_router': False,
    'enable_quotas': False,
    'enable_ipv6': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_lb': False,
    'enable_firewall': False,
    'enable_vpn': False,
    'enable_fip_topology_check': False,
    'default_ipv4_subnet_pool_label': None,
    'default_ipv6_subnet_pool_label': None,
    'profile_support': None,
    'supported_provider_types': ['*'],
    'supported_vnic_types': ['*'],
}

TIME_ZONE = "Asia/Shanghai"

将本地配置的local_settings上传到计算节点,然后替换

[root@compute ~]# cat local_settings >/etc/openstack-dashboard/local_settings 

权限是640,用户是Apache

systemctl start httpd.service

/usr/share/doc/httpd-2.4.6/httpd-default.conf

验证:

验证仪表盘的操作。在浏览器中输入 ``http://192.168.0.108/dashboard``访问仪表盘。

验证使用 admin 或者``demo``用户凭证和``default``域凭证。

 

在/var/log/httpd/error_log中看到End of script output before headers: django.wsgi

在/etc/httpd/conf.d/openstack-dashboard.conf添加一行WSGIApplicationGroup %{GLOBAL}

[root@compute1 ~]# vim /etc/httpd/conf.d/openstack-dashboard.conf

[root@compute1 ~]# cat /etc/httpd/conf.d/openstack-dashboard.conf  | grep -i global

WSGIApplicationGroup %{GLOBAL}

cat >> etc/httpd/conf.d/openstack-dashboard.conf << 'EOF'
WSGIDaemonProcess dashboard WSGIProcessGroup dashboard WSGISocketPrefix run/wsgi WSGIApplicationGroup %{GLOBAL} WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi Alias /dashboard/static /usr/share/openstack-dashboard/static <Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi> Options All AllowOverride All Require all granted </Directory> <Directory /usr/share/openstack-dashboard/static> Options All AllowOverride All Require all granted </Directory>
EOF

 

Oct 08 00:12:25 compute1 httpd[77803]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.0.108. Set the 'ServerName' directive globally to suppress this message

解决方案:将 apache 的配置文件httpd.conf中的 ServerName 改成可用域名或如下配置

ServerName localhost:80

验证:http://192.168.0.108/dashboard

admin 用户:openstack user create --domain default \

  --password ADMIN_PASS admin

 

登录时有如下报错:
Something went wrong!
An unexpected error has occurred. Try refreshing the page. If that doesn't help, contact your local administrator.

解决方法

1.修改配置文件vim /etc/openstack-dashboard/local_settings2.将SESSION_ENGINE值修改

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
改为SESSION_ENGINE = 'django.contrib.sessions.backends.file'

3.重启服务,然后再次登录。
systemctl restart httpd.service memcached.service

http://controller//dashboard/ 这样登录也行,需要在本地配置hosts解析

 

posted @ 2020-10-07 16:25  闲云野鹤cs  阅读(2097)  评论(0编辑  收藏  举报