一、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,下面报错是因为没有配置glance的public的endpoint(openstack 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解析