OpenStack平台部署
OpenStack简介
OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。由NASA(美国国家航空航天局)和Rackspace合作研发并发起,以Apache许可证(Apache软件基金会发布的一个自由软件许可证)授权的开源代码项目。
OpenStack为私有云和公有云提供可扩展的弹性的云计算服务。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。
OpenStack基础环境
基础环境介绍
主机名 | 操作系统 | CPU | 内存 | 磁盘 | 网卡1 |
---|---|---|---|---|---|
Controller | Centos7.5 | 2核 | 4G | 100G | 192.168.52.161 |
Computer | Centos7.5 | 2核 | 4G | 100G | 192.168.52.162 |
- 两台centos7服务器,一台作为控制节点(4G内存),一台作为计算节点(2G内存);
- centos7.5镜像,OpenStack-mitaka版镜像;两台Centos7.5虚拟机(需要两个光盘用来挂载centos7和openstack-mitaka的镜像);
- 控制节点IP地址192.168.52.161,计算节点IP地址192.168.52.162;修改主机名;设置hosts文件解析;
- 配置控制节点和计算节点的本地yum仓库(centos本地仓库和openstack-mitaka本地仓库);
- 关闭防火墙和selinux。
安装时间同步服务器
- 安装chrony时间同步服务(控制节点和计算节点都要安装)。
#所有节点都需要安装;
yum -y install chrony
#控制节点;
vim /etc/chrony.conf
server ntp6.aliyun.com iburst
allow 192.168.52.0/24
#重启restart服务,并设置开机自启;
systemctl restart chronyd
systemctl enable chronyd
#计算节点;
vim /etc/chrony.conf
server 192.168.52.162 iburst
#重启服务,设置开机自启;
systemctl restart chronyd
systemctl enable chronyd
安装openstack客户端
#所有节点都需要安装;
yum -y install python-openstackclient openstack-selinux
安装mysql数据库
#控制节点
yum -y install mariadb mariadb-server python2-PyMySQL
#如果安装报错下面信息需执行:yum -y remove mariadb-libs;
Transaction check error:
file /usr/lib64/mysql/plugin/dialog.so from install of mariadb-
common-1:10.1.12-4.el7.x86_64 conflicts with file from package
mariadb-libs-1:5.5.56-2.el7.x86_64
file /usr/lib64/mysql/plugin/mysql_clear_password.so from
install of mariadb-common-1:10.1.12-4.el7.x86_64 conflicts with
file from package mariadb-libs-1:5.5.56-2.el7.x86_64
#创建并编辑 /etc/my.cnf.d/openstack.cnf,然后完成如下动作;
#在 [mysqld] 部分,设置 ``bind-address``值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库,设置如下键值来启用一起有用的选项和 UTF-8 字符集;
echo '[mysqld]
bind-address = 192.168.52.161
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8' > /etc/my.cnf.d/openstack.cnf
#启动mariadb服务,设置开机自启;
systemctl enable mariadb
systemctl start mariadb
#为了保证数据库服务的安全性,运行``mysql_secure_installation``脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码,我这里密码为1。
mysql_secure_installation
安装消息队列
#控制节点;
yum -y install rabbitmq-server
#启动rabbitmq服务,设置开机自启;
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
#添加 openstack 用户,密码为“1”;给``openstack``用户配置写和读权限;
rabbitmqctl add_user openstack 1
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
#开启rabbitmq web界面插件;
rabbitmq-plugins enable rabbitmq_management
配置memcached服务实现认证缓存
- memcached缓存token。
#控制节点;
yum -y install memcached python-memcached
#修改memcached监听地址;
vim /etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1,::1,192.168.52.161"
#启动memcached服务,设置开机自启;
systemctl enable memcached.service
systemctl start memcached.service
keystone认证服务
keystone服务介绍
Keystone是Openstack的组件之一,用于为Openstack家族中的其它组件成员提供统一的认证服务,包括身份验证,令牌的发放和校验,服务列表,用户权限的定义等。Openstack中任何组件均依赖与Keystone提供的服务。
- openstack架构图:
- 功能:认证功能,授权管理,服务目录;
- 认证:账号密码;
- 授权:授权管理;
- 服务目录:相当于电话本,记录其他服务的web管理界面。
openstack服务安装的通用步骤
- 1、创库授权;
- 2、在keystone服务上创建用户,关联角色;
- 3、在keystone服务上创建服务,注册api;
- 4、安装服务相关的软件包;
- 5、修改配置;
- 数据库的连接
- keystone认证授权信息
- rabbitmq连接信息
- 其他配置
- 6、同步数据库,创建表;
- 7、启动服务。
控制节点数据库配置
#在控制节点上创建keystone数据库,并授权;
mysql -u root -p1;
#创建keystone数据库;
CREATE DATABASE keystone;
#对``keystone``数据库授予恰当的权限,用合适的密码替换1;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY '1';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY '1';
安装配置keystone服务
#安装keystone相关软件包;
yum -y install openstack-keystone httpd mod_wsgi
#修改/etc/keystone/keystone.conf配置文件;
#首先备份配置文件,过滤配置文件去除注释行;
cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak
grep -Ev "^$|^#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf
#修改配置文件;
vim /etc/keystone/keystone.conf
[DEFAULT]
admin_token = ADMIN_TOKEN
[database]
connection = mysql+pymysql://keystone:1@controller/keystone
[token]
provider = fernet
#修改配置文件也可以使用openstack-utils插件;
yum -y install openstack-utils
openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token ADMIN_TOKEN
openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:1@controller/keystone
openstack-config --set /etc/keystone/keystone.conf token provider fernet
#写入keystone服务的数据库(同步数据库);
su -s /bin/sh -c "keystone-manage db_sync" keystone
#查看keystone数据库,是否有表,有表为成功,空的为失败;
mysql -uroot -p1 keystone -e 'show tables'
#初始化Fernet keys,初始化完成后/etc/keystone/下会出现一个fernet-keys目录;
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
#配置httpd;
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>
#启动httpd服务,设置开机自启;
systemctl enable httpd.service
systemctl start httpd.service
创建keystone服务实体,注册api
#声明管理员token的环境变量;
#配置认证令牌;
export OS_TOKEN=ADMIN_TOKEN
#配置端点URL;
export OS_URL=http://controller:35357/v3
#配置认证 API 版本;
export OS_IDENTITY_API_VERSION=3
#创建openstack认证服务实体,注册api;
#创建认证服务keystone;
openstack service create \
--name keystone --description "OpenStack Identity" identity
#注册认证服务api;
#公共的;
openstack endpoint create --region RegionOne \
identity public http://controller:5000/v3
#内部的;
openstack endpoint create --region RegionOne \
identity internal http://controller:5000/v3
#有管理员的;
openstack endpoint create --region RegionOne \
identity admin http://controller:35357/v3
创建域,项目,用户和角色
#创建域(名为default);
openstack domain create --description "Default Domain" default
#在default域中创建项目(名为admin);
openstack project create --domain default \
--description "Admin Project" admin
#在default域中创建用户(名为admin);
openstack user create --domain default \
--password "1" admin
#创建角色(名为admin);
openstack role create admin
#关联项目,用户,角色;
#添加``admin`` 角色到 admin 项目和admin用户上;
openstack role add --project admin --user admin admin
#创建一个名为server的项目,用于存放其他openstack服务的信息;
openstack project create --domain default \
--description "Service Project" service
测试,使用创建的用户获取token
#先取消管理员token的环境变量;
unset OS_TOKEN
unset OS_URL
unset OS_IDENTITY_API_VERSION
#使用admin用户获取token;
#声明admin用户的环境变量
export OS_USERNAME=admin
export OS_PASSWORD=1
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_PROJECT_DOMAIN_NAME=default
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_AUTH_URL=http://controller:35357/v3
#向keystone服务申请一个token;
openstack token issue
#如果不声明环境变量那么每次执行openstack命令就需要加选项和参数;
openstack --os-username admin \
--os-password 1 \
--os-user-domain-name default \
--os-project-name admin \
--os-project-domain-name default \
--os-identity-api-version 3 \
--os-image-api-version 2 \
--os-auth-url http://controller:35357/v3 \
token issue
#环境变量每次断开shell时就会重置,所以创建一个脚本存放环境变量;
echo 'export OS_USERNAME=admin
export OS_PASSWORD=1
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_PROJECT_DOMAIN_NAME=default
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_AUTH_URL=http://controller:35357/v3' > ./admin-openstack
#运行环境变量脚本;
source admin-openstack
#用户登陆时自动运行环境变量脚本;
echo 'source admin-openstack' >> /root/.bashrc
#测试环境变量脚本能否自动运行;
#断开shell连接,重新登陆,运行openstack token issue命令;
#直接运行成功说明环境变量脚本配置成功。
glance镜像服务
glance服务介绍
Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找、注册和检索等。 Glance提供Restful API可以查询虚拟机镜像的metadata及获取镜像。 Glance可以将镜像保存到多种后端存储上,比如简单的文件存储或者对象存储。
Glance服务是负责管理镜像,不负责提供镜像的存储空间,它要把镜像存储到Glance服务运行的服务器的某一个目录下面,或者对接不同的后端。所以搭完Glance服务后要给它指定镜像保存的方式。
控制节点数据库配置
#在控制节点上创建glance数据库,并授权;
mysql -uroot -p1
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
IDENTIFIED BY '1';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
IDENTIFIED BY '1';
keystone端配置glance服务用户
#在keystone上创建服务证书;
#在default域创建glance用户;
openstack user create --domain default --password "1" glance
#添加 admin 角色到 glance 用户和 service 项目上;
openstack role add --project service --user glance admin
keystone端创建glance服务实体,注册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
安装配置glance镜像服务
#安装glance服务;
yum -y install openstack-glance
#修改 /etc/glance/glance-api.conf配置文件;
cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.bak
grep -Ev "^$|^#" /etc/glance/glance-api.conf.bak > /etc/glance/glance-api.conf
openstack-config --set /etc/glance/glance-api.conf database connection mysql+pymysql://glance:1@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 1
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配置文件;
cp /etc/glance/glance-registry.conf /etc/glance/glance-registry.conf.bak
grep -Ev "^$|^#" /etc/glance/glance-registry.conf.bak > /etc/glance/glance-registry.conf
openstack-config --set /etc/glance/glance-registry.conf database connection mysql+pymysql://glance:1@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 1
openstack-config --set /etc/glance/glance-registry.conf paste_deploy flavor keystone
#写入glance服务数据库(同步数据库);
su -s /bin/sh -c "glance-manage db_sync" glance
#查看glance数据库,是否有表,有表为成功,空的为失败;
mysql -uroot -p1 glance -e "show tables;"
#启动glance服务,设置开机自启;
systemctl enable openstack-glance-api.service \
openstack-glance-registry.service
systemctl start openstack-glance-api.service \
openstack-glance-registry.service
测试,上传一个镜像到glance服务
openstack image create "cirros" \
--file cirros-0.4.0-i386-disk.img \
--disk-format qcow2 \
--container-format bare \
--public
nova计算服务
nova服务介绍
Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源。OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的。计算资源只是内存跟cpu。
- nova-api:接受并相应所有的计算服务请求,管理虚拟机(云主机)生命周期;
- nova-compute(可以有多个):真正管理虚拟机(nova-compute调用libvirt);
- nova-nova-scheduler:nova调度器(挑选出最合适的nova-compute来创建虚拟机);
- nova-conductor:帮助nova-compute代理修改数据库中虚拟机的状态;
- nova-network:早期openstack版本管理虚拟机网络(已弃用,neutron);
- nova-consoleauth和nova-novncproxy:web版的vnc用来直接在web界面操作虚拟机;
- nova-novncproxy:web版vnc客户端;
- nova-api-metadata:接受来自虚拟机发送的元数据请求(配合neutron-metadata-agent,来实现虚拟机定制化)。
控制节点数据库配置
#在控制节点上创建nova数据库,并授权;
mysql -uroot -p1
CREATE DATABASE nova_api;
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
IDENTIFIED BY '1';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
IDENTIFIED BY '1';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost'\
IDENTIFIED BY '1';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY '1';
keystone端配置nova服务用户
openstack user create --domain default \
--password "1" nova
openstack role add --project service --user nova admin
keystone端创建nova服务实体,注册api
openstack service create --name nova \
--description "OpenStack Compute" compute
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
安装配置nova控制节点
#安装nova控制节点服务
yum -y install openstack-nova-api \
openstack-nova-scheduler \
openstack-nova-conductor \
openstack-nova-console \
openstack-nova-novncproxy
#修改/etc/nova/nova.conf配置文件
cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
grep -Ev "^$|^#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf
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:1@controller/nova_api
openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:1@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 1
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 1
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 10.0.0.11
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
#写入nova服务数据库(同步数据库);
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova
##查看nova数据库,是否有表,有表为成功,空的为失败;
mysql -uroot -p1 nova_api -e 'show tables;'
mysql -uroot -p1 nova -e 'show tables;'
#启动nova控制节点服务,设置开机自启;
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
测试,请求nova控制节点服务状态
#有三个服务up状态;
nova service-list
netstat -lntup | grep 6080
安装配置nova计算节点
#安装nova计算节点服务;
yum -y install openstack-nova-compute
#编辑/etc/nova/nova.conf配置文件;
cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
grep -Ev "^$|^#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf
#安装openstack-utils插件,使用命令修改配置文件;
yum -y install openstack-utils.noarch
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 1
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 1
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.52.162
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 vncserver_proxyclient_address '$my_ip'
openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://controller:6080/vnc_auto.html
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
#查看计算节点是否支持虚拟机硬件加速;
#如果这个命令返回了1或者其他的值时,那么你的计算节点支持硬件加速且不需要额外的配置;
#如果这个命令返回了0值,那么你的计算节点不支持硬件加速,你必须配置libvirt来使用QEMU去代替KVM。
egrep -c '(vmx|svm)' /proc/cpuinfo
openstack-config --set /etc/nova/nova.conf libvirt virt_type kvm
#启动nova计算节点服务,设置开机自启;
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
测试,请求nova控制节点服务状态
#有四个服务up状态;
#多了一个nova-compute服务;
nova service-list
neutron网络服务
neutron服务介绍
OpenStack网络服务已由Quantum改名为Neutron。Neutron是OpenStack核心项目之一,提供云计算环境下的虚拟网络功能服务。
Neutron的设计目标是实现“网络即服务(Networking as a Service)”。为了达到这一目标,在设计上遵循了基于SDN(Software-Defined Networking,软件定义网络)实现网络虚拟化的原则,在实现上充分利用了Linux系统上的各种网络相关的技术。
Neutron网络允许用户创建和管理网络对象,如网络(Net)、子网(Subnet)、端口(Port),这些对象可以被其他OpenStack服务所利用。插件架构模式增强了OpenStack架构和部署的柔韧性,可以适应不同的网络设备和软件。
Neutron为整个OpenStack环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和*** 等。Neutron提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。
- neutron-server:接受和响应外部的网络管理请求(端口9696);
- neutron-linuxbridge-agent:负责创建桥接网卡;
- neutron-dhcp-agent:分配IP地址;
- neutron-metadata-agent:配合nova-metadata-api实现虚拟机的定制化操作;
- L3-agent:实现三层网络vxlan(网络层)。
控制节点数据库配置
#在控制节点上创建neutron数据库,并授权;
mysql -uroot -p1
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY '1';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY '1';
keystone端配置neutron服务用户
openstack user create --domain default \
--password '1' neutron
openstack role add --project service --user neutron admin
keystone端创建neutron服务实体,注册api
openstack service create --name neutron \
--description "OpenStack Networking" network
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
安装配置neutron控制节点
#安装neutron控制节点服务;
yum -y install openstack-neutron \
openstack-neutron-ml2 \
openstack-neutron-linuxbridge \
ebtables
#neutron网络服务分为公共网络和私有网络;
#公共网络是二层网络,私有网络是三层网络;
#选择你需要的网络进行搭建;
#这里使用公共网络演示配置;
#修改/etc/neutron/neutron.conf配置文件;
cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak
grep -Ev "^$|^#" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
openstack-config --set /etc/neutron/neutron.conf database connection mysql+pymysql://neutron:1@controller/neutron
#配置启用ML2插件,禁用其他插件;
openstack-config --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
openstack-config --set /etc/neutron/neutron.conf DEFAULT service_plugins
#配置RabbitMQ消息队列连接;
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 1
#配置keystone认证服务访问
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 1
#配置网络服务来通知计算节点的网络拓扑变化;
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 1
#配置锁路径;
openstack-config --set /etc/neutron/neutron.conf
oslo_concurrency lock_path /var/lib/neutron/tmp
#修改/etc/neutron/plugins/ml2/ml2_conf.ini配置文件;
#配置 Modular Layer 2 (ML2) 插件;
cp /etc/neutron/plugins/ml2/ml2_conf.ini /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
#启用flat和VLAN网络;
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
#启用Linuxbridge机制;
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
#配置公共虚拟网络为flat网络;
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider
#启用 ipset 增加安全组规则的高效性;
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset True
#修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini配置文件;
#配置Linuxbridge代理;
cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini /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:ens33
#禁止VXLAN覆盖网络;
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
#修改/etc/neutron/dhcp_agent.ini配置文件;
#配置DHCP代理;
cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini.bak
grep -Ev "^$|^#" /etc/neutron/dhcp_agent.ini.bak > /etc/neutron/dhcp_agent.ini
#配置Linuxbridge驱动接口,DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据。
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配置文件;
#配置元数据代理;
#负责提供配置信息,例如:访问实例的凭证;
cp /etc/neutron/metadata_agent.ini /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 1
#修改/etc/nova/nova.conf配置文件;
#为计算服务控制端配置网络服务;
#启用元数据代理并设置密码;
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 1
openstack-config --set /etc/nova/nova.conf neutron service_metadata_proxy True
openstack-config --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret 1
#写入neutron服务数据库(同步数据库);
#网络服务初始化脚本需要一个超链接 /etc/neutron/plugin.ini``指向ML2插件配置文件;
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
#同步数据库,出现ok即为成功;
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
#重启计算服务控制节点api服务;
systemctl restart openstack-nova-api.service
#启动neutron控制节点服务,设置开机自启;
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服务配置的是私有网络,则还需要启用layer-3服务;
systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service
测试,请求neutron控制节点服务状态;
#服务启动后等待几分钟;
#使用下面命令查看neutron服务状态,共三个服务;
#如果alive列全部为笑脸状的标志表示成功,如果为xxx则失败;
neutron agent-list
安装配置neutron计算节点
#安装neutron计算节点服务;
yum -y install openstack-neutron-linuxbridge ebtables ipset
#修改/etc/neutron/neutron.conf配置文件;
#配置通用组件;
#Networking 通用组件的配置包括认证机制、消息队列和插件;
cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak
grep -Ev "^$|^#" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
#在``[database]`` 部分,注释所有``connection`` 项,因为计算节点不直接访问数据库。
#配置 “RabbitMQ” 消息队列的连接;
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 1
#配置keystone认证服务访问;
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 1
#配置锁路径;
openstack-config --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
#配置网络选项;
#选择公共网络和私有网络,和neutron控制节点保持一致;
#公共网络;
#修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini配置文件;
#配置Linuxbridge代理;
cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini /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:ens33
#禁止VXLAN覆盖网络;
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
#修改/etc/nova/nova.conf配置文件;
#为计算节点配置网络服务;
#配置访问参数;
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 1
#重启计算节点nova计算服务;
systemctl restart openstack-nova-compute.service
#启动neutron计算节点Linuxbridge代理并配置它开机自启动;
systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service
测试,在控制节点请求neutron控制节点服务状态
#计算节点服务启动后等待几分钟;
#使用下面命令查看neutron服务状态;
#会多出一个Linux bridge agent服务,主机名为computer,alive列是笑脸;
neutron agent-list
#也可使用下面命令列出加载的扩展来验证;
#有结果即为成功;
neutron ext-list
Dashboard(Horizon)图形化服务
Dashboard(horizon)是一个web接口,使得云平台管理员以及用户可以管理不同的Openstack资源以及服务。
- 提供一个Web界面操作OpenStack系统
- 使用Django框架基于OpenStack API开发
- 支持将session存储在DB、Memcached
- 支持集群
安装配置dashboard服务
#安装dashboard服务;
yum -y install openstack-dashboard
#vim编辑/etc/openstack-dashboard/local_settings文件修改内容;
#配置仪表盘以使用 OpenStack 服务;
OPENSTACK_HOST = "controller"
#允许所有主机访问仪表板;
ALLOWED_HOSTS = ['*', ]
#配置 memcached 会话存储服务;
#将其他的会话存储服务配置注释。
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'controller:11211',
}
}
#启用第3版认证API;
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
#启用对域的支持;
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
#配置API版本;
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 2,
}
#通过仪表盘创建用户时的默认域配置为 default;
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"
#通过仪表盘创建的用户默认角色配置为 user ;
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
#如果您选择网络参数1,禁用支持3层网络服务;
OPENSTACK_NEUTRON_NETWORK = {
'enable_router': False,
'enable_quotas': False,
'enable_distributed_router': False,
'enable_ha_router': False,
'enable_lb': False,
'enable_firewall': False,
'enable_vpn': False,
'enable_fip_topology_check': False,
}
#可以选择性地配置时区;
TIME_ZONE = "Asia/Shanghai"
#修改httpd服务的openstack-dashboard配置文件;
echo 'WSGIApplicationGroup %{GLOBAL}' > /etc/httpd/conf.d/openstack-dashboard.conf
#重启web服务器以及会话存储服务;
systemctl restart httpd.service memcached.service
测试,在浏览器访问dashboard服务
#浏览器输入http://openstack控制节点IP地址/dashboard
#keystone服务所在节点就是openstack控制节点。
#登陆默认域为:default
#默认用户:admin
#默认密码:1