目录
一、vmware的环境
单点部署 all-in-one模式:
rhel7.6虚拟机,至少4G的内存;
双网卡: eth0: 192.168.19.71 访问Horizon使用,eth1:激活但不分配ip,neutron使用,云主机访问外网用;
禁用selinux和firewalld;
虚拟机的cpu需要支持kvm虚拟化,CPU 设为直通模式( host-passthrough 是为了虚拟机里支持 kvm 硬件虚拟化)
二、配置节点
设置控制节点:
##设置地址解析
vim /etc/hosts
-----------------------------
192.168.19.71 server1 controller
192.168.19.72 server2 computer1
192.168.19.73 server3 block1
-----------------------------
# 两块网卡的设置
一块网卡eth33给了ip,另一块网卡eth38(用于云主机通信)可以不给ip,但需要激活
##文件配置完成后,激活
[root@server1 network-scripts]# ifup ens38
##时间同步:--所有节点的时间必须与控制节点的时间相同
----------------------
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
...
allow 192.168.19.0/16 --允许以下网段的NTP客户端访问
----------------------
##启动服务 ----使用timedatectl设置时区--timedatectl set-timezone Asia/Shanghai
systemctl enable --now chronyd
##在节点上同样配置服务,此时的时间同步地址为控制节点主机
----------------------
server 192.168.19.71 iburst
----------------------
##两台主机上分别配置openstack的源
vim /etc/yum.repo.d/openstack.repo
--------------------
[centotack-rocky]
name=openstack-recky
baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-rocky/
enabled=1
gpgcheck=0
[qemu-kvm]
name=qemu-kvm
baseurl=https://mirrors.aliyun.com/centos/7/virt/x86_64/kvm-common/
enabled=1
gegcheck=0
--------------------
##对yum源进行更新--升级电脑中的安装包
yum update
##yum源
# CentOS-Base.repo
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/updates/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/extras/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/centosplus/x86_64/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/contrib/x86_64/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
##安装openstack
#安装客户端
yum install python-openstackclient
#自动管理 OpenStack 服务的安全策略:
yum install openstack-selinux
#安装数据库
yum install mariadb mariadb-server python2-PyMySQL
##创建并编辑 /etc/my.cnf.d/openstack.cnf
---------------------------------------
[mysqld]
bind-address = 192.168.19.71 --控制节点IP
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
~
---------------------------------------
##设置数据库启动,并开机自启
systemctl enable --now mariadb.service
##初始化数据库的安全
mysql_secure_installation ---为数据库的root用户设置一个适当的密码(全选yes)
##配置消息队列
--OpenStack 使用 message queue (消息队列)协调操作和各服务的状态信息。
yum install rabbitmq-server
systemctl enable --now rabbitmq-server.service
##设置消息队列的openstack用户
rabbitmqctl add_user openstack openstack
##设置消息队列中openstack的权限
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
##查看rabbitmq的插件
rabbitmq-plugins list
##激活管理插件
rabbitmq-plugins enable rabbitmq_management
##查看端口
netstat -anltupe ---5672为主端口,15672为web端口
##登陆页面,默认用户名和密码都是guest
192.168.19.71:15672
##设置安全组件:Memcached缓存令牌。缓存服务memecached运行在控制节点
yum install memcached python-memcached
systemctl enable --now memcached.service
##检查端口为11211(可以看到这个端口只监听本机,那么其他主机将无法连接它),因此需要变更一下
netstat -antpl | grep 11211
vim /etc/sysconfig/memcached
------------------------------------
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l *"
------------------------------------
【注】消息队列服务一般运行在控制节点上。OpenStack支持好几种消息队列服务包括 RabbitMQ, Qpid, 和 ZeroMQ。不过,大多数发行版本的OpenStack包支持特定的消息队列服务;
这里安装 RabbitMQ 消息队列服务,因为大部分发行版本都支持它。
三、核心组件安装
3.1 搭建安全认证服务
##组件认证服务安装
1 创建数据库
--控制节点上安装和配置OpenStack身份认证服务,代码名称keystone。出于性能原因,这个配置部署Fernet令牌和Apache HTTP服务处理请求;
--在配置 OpenStack 身份认证服务前,必须创建一个数据库和管理员令牌
##用数据库连接客户端以 root 用户连接到数据库服务器;创建 keystone 数据库,并设置相应的权限
[root@controller my.cnf.d]# mysql -u root -p
> CREATE DATABASE keystone;
> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'keystone';
> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'keystone';
##推出,登录测试
mysql -ukeystone -pkeystone
> show databases;
##生成一个随机值在初始的配置中作为管理员的令牌。
openssl rand -hex 10
##安装安全组件
yum install openstack-keystone httpd mod_wsgi -y
##编辑文件 /etc/keystone/keystone.conf
--------------------------------------------
[DEFAULT]
...
admin_token = 26384039124a82cfbee6
[database]
...
connection = mysql+pymysql://keystone:keystone@controller/keystone
[token]
...
provider = fernet
--------------------------------------------
#初始化身份认证服务的数据库(以keystone用户身份来同步数据库)
su -s /bin/sh -c "keystone-manage db_sync" keystone --keystone 是主机中的用户身份
##登录数据库,查看同步的数据
mysql -ukeystone -pkeystone
>show databases;
>use keystone;
>show tables;
##初始化Fernet keys
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
##编辑Apache主配置文件/etc/httpd/conf/httpd.conf ,配置ServerName 选项为控制节点
------------------
ServerName controller
------------------
##配置文件/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服务
systemctl enable --now httpd.service
##身份认证服务提供服务的目录和他们的位置。每个添加到OpenStack环境中的服务在目录中需要一个 service 实体和一些 API endpoints ;
##默认情况下,身份认证服务数据库不包含支持传统认证和目录服务的信息。必须使用为身份认证服务创建的临时身份验证令牌,来初始化的服务实体和API端点。
2 创建服务实体和API端点 ---配置端点URL(v3版本);配置认证 API 版本
##设置初始化令牌
[root@controller keystone]# head /etc/keystone/keystone.conf
[root@controller keystone]# export OS_TOKEN=26384039124a82cfbee6
[root@controller keystone]# export OS_URL=http://controller:35357/v3
[root@controller keystone]# export OS_IDENTITY_API_VERSION=3
##创建服务实体和身份认证服务
[root@controller 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
##查看所创建的endpoint
openstack endpoint list
【注】
身份认证服务管理了一个与您环境相关的 API 端点的目录。服务使用这个目录来决定如何与您环境中的其他服务进行通信。
OpenStack使用三个API端点变种代表每种服务:admin,internal和public。默认情况下,管理API端点允许修改用户和租户而公共和内部APIs不允许这些操作。在生产环境中,处于安全原因,变种为了服务不同类型的用户可能驻留在单独的网络上。对实例而言,公共API网络为了让顾客管理他们自己的云在互联网上是可见的。管理API网络在管理云基础设施的组织中操作也是有所限制的。内部API网络可能会被限制在包含OpenStack服务的主机上。此外,OpenStack支持可伸缩性的多区域。为了简单起见,本指南为所有端点变种和默认``RegionOne``区域都使用管理网络。
##创建域,项目,角色,用户
##身份认证服务为每个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-prompt admin
##创建admin角色
openstack role create admin
##添加``admin`` 角色到 admin 项目和用户上,使admin可以进行管理:
openstack role add --project admin --user admin admin
##添加到你的环境中每个服务包含独有用户的service 项目
openstack project create --domain default --description "Service Project" service
##创建``demo`` 项目:
openstack project create --domain default --description "Demo Project" demo
##创建``demo`` 用户:
openstack user create --domain default --password-prompt demo
##创建 user 角色:
openstack role create user
##添加 user``角色到 ``demo 项目和用户:
openstack role add --project demo --user demo user
##验证操作
##因为安全性的原因,关闭临时认证令牌机制(此时已经有两个用户–admin和demo);
##重置``OS_TOKEN``和``OS_URL`` 环境变量:
unset OS_TOKEN OS_URL
##作为 admin 用户,请求认证令牌:
openstack --os-auth-url http://controller:35357/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name admin --os-username admin token issue
##作为 demo 用户,请求认证令牌:
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name demo --os-username demo token issue
##创建Openstack客户环境脚本
##之前使用环境变量和命令选项的组合通过openstack客户端与身份认证服务交互。为了提升客户端操作的效率,OpenStack支持简单的客户端环境变量脚本即OpenRC 文件。这些脚本通常包含客户端所有常见的选项,当然也支持独特的选项。
##创建 admin 和 demo 项目和用户创建客户端环境变量脚本。接下来的部分会引用这些脚本,为客户端操作加载合适的的凭证
[root@controller keystone]# vim demo-openrc
----------------------------------------------------
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
----------------------------------------------------
[root@controller keystone]# vim admin-openrc
----------------------------------------------------
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
-----------------------------------------------------
##加载admin-openrc文件来身份认证服务的环境变量位置和admin项目和用户证书;此时,可以列出相应信息(所有的用户、连接端点)
[root@controller keystone]# . admin-openrc
[root@controller keystone]# openstack token issue
[root@controller keystone]# openstack role list
3.2 搭建镜像服务
镜像服务 (glance) 允许用户发现、注册和获取虚拟机镜像。它提供了一个 REST API,允许您查询虚拟机镜像的 metadata 并获取一个现存的镜像。您可以将虚拟机镜像存储到各种位置,从简单的文件系统到对象存储系统—-例如 OpenStack 对象存储, 并通过镜像服务使用。
OpenStack镜像服务是IaaS的核心服务,它接受磁盘镜像或服务器镜像API请求,和来自终端用户或OpenStack计算组件的元数据定义。它也支持包括OpenStack对象存储在内的多种类型仓库上的磁盘镜像或服务器镜像存储。
大量周期性进程运行于OpenStack镜像服务上以支持缓存。同步复制(Replication)服务保证集群中的一致性和可用性。其它周期性进程包括auditors, updaters, 和 reapers。
OpenStack镜像服务包括以下组件:
1、glance-api:接收镜像API的调用,诸如镜像发现、恢复、存储。
2、glance-registry:存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。注意:glance-registry是私有内部服务,用于服务OpenStack Image服务。不要向用户暴露该服务。
3、数据库:存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用MySQL或SQLite。
4、镜像文件的存储仓库:支持多种类型的仓库,它们有普通文件系统、对象存储、RADOS块设备、HTTP、以及亚马逊S3。记住,其中一些仓库仅支持只读方式使用。
5、元数据定义服务:通用的API,是用于为厂商,管理员,服务,以及用户自定义元数据。这种元数据可用于不同的资源,例如镜像,工件,卷,配额以及集合。一个定义包括了新属性的键,描述,约束以及可以与之关联的资源的类型。
##镜像的安装
##用数据库连接客户端以 root 用户连接到数据库服务器;
mysql -u root -p
##创建 glance 数据库;
MariaDB [(none)]> CREATE DATABASE glance;
##对glance数据库授予恰当的权限(使得glance用户可以通过本地和远端登陆数据库)。
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
-> IDENTIFIED BY 'glance';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';
##获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
. admin-openrc
##创建服务证书:
##创建 glance 用户:
openstack user create --domain default --password-prompt glance
##添加 admin 角色到 glance 用户和 service 项目上。
openstack role add --project service --user glance admin
##创建``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
##安全并配置组件
##安装软件包
yum install openstack-glance
##编辑文件 /etc/glance/glance-api.conf 并完成如下动作:
-------------------------------------------------------------
[database]
...
connection = mysql+pymysql://glance:glance@controller/glance
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance
[paste_deploy]
...
flavor = keystone
----------------------------------------------------
##/etc/glance/glance-registry.conf``并完成如下动作:
----------------------------------------------------
[database]
...
connection = mysql+pymysql://glance:glance@controller/glance
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance
[paste_deploy]
...
flavor = keystone
----------------------------------------------------
##写入镜像服务数据库:
su -s /bin/sh -c "glance-manage db_sync" glance
##启动镜像服务,配置开机自启
systemctl enable --now openstack-glance-api.service \
openstack-glance-registry.service
【注】控制节点上安装和配置镜像服务(glance)时。这个配置将镜像保存在本地文件系统中。安装和配置镜像服务之前,你必须创建创建一个数据库、服务凭证和API端点。
##验证操作
##获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
. admin-openrc
##下载源镜像:
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
##使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它:
openstack image create "cirros" \
--file cirros-0.3.4-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--public
##确认镜像的上传并验证属性:
openstack image list
3.3 搭建计算节点
使用OpenStack计算服务来托管和管理云计算系统。OpenStack计算服务是基础设施即服务(IaaS)系统的主要部分,模块主要由Python实现。
OpenStack计算组件请求OpenStack Identity服务进行认证;请求OpenStack Image服务提供磁盘镜像;为OpenStack dashboard提供用户与管理员接口。磁盘镜像访问限制在项目与用户上;配额以每个项目进行设定(例如,每个项目下可以创建多少实例)。
OpenStack组件可以在标准硬件上水平大规模扩展,并且下载磁盘镜像启动虚拟机实例。
OpenStack计算服务由下列组件所构成:
nova-api 服务:
接收和响应来自最终用户的计算API请求。此服务支持OpenStack计算服务API,Amazon EC2 API,以及特殊的管理API用于赋予用户做一些管理的操作。它会强制实施一些规则,发起多数的编排活动,例如运行一个实例。
nova-api-metadata 服务:
接受来自虚拟机发送的元数据请求。一般在安装nova-network服务的多主机模式下使用。
nova-compute服务:
一个持续工作的守护进程,通过Hypervior的API来创建和销毁虚拟机实例。
nova-scheduler服务:
拿到一个来自队列请求虚拟机实例,然后决定那台计算服务器主机来运行它。
nova-conductor模块:
媒介作用于nova-compute服务与数据库之间。它排除了由nova-compute服务对云数据库的直接访问。nova-conductor模块可以水平扩展。但是,不要将它部署在运行nova-compute服务的主机节点上。
nova-cert模块:
服务器守护进程向Nova Cert服务提供X509证书。用来为euca-bundle-image生成证书。
nova-consoleauth 守护进程:
授权控制台代理所提供的用户令牌。
nova-novncproxy 守护进程:
提供一个代理,用于访问正在运行的实例,通过VNC协议,支持基于浏览器的novnc客户端。
nova-spicehtml5proxy 守护进程:
提供一个代理,用于访问正在运行的实例,通过 SPICE 协议,支持基于浏览器的 HTML5 客户端。
nova-xvpvncproxy 守护进程:提供一个代理,用于访问正在运行的实例,通过VNC协议,支持OpenStack特定的Java客户端。
nova-cert 守护进程:
X509 证书。
nova客户端:
用于用户作为租户管理员或最终用户来提交命令。
队列:
一个在守护进程间传递消息的中央集线器。常见实现有RabbitMQ <http://www.rabbitmq.com/>__ , 以及如Zero MQ <http://www.zeromq.org/>__等AMQP消息队列。
SQL数据库:
存储构建时和运行时的状态,为云基础设施。
##在control节点安装nova服务
1 用数据库连接客户端以 root 用户连接到数据库服务器;创建 nova_api 和 nova 数据库;对数据库进行正确的授权。
##登录
mysql -u root -p
##创建
CREATE DATABASE nova_api;
CREATE DATABASE nova;
##授权
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'nova';
2 获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
. admin-openrc
3 要创建服务证书,完成这些步骤:
##创建 nova 用户:
openstack user create --domain default \
--password-prompt nova
##给 nova 用户添加 admin 角色:
openstack role add --project service --user nova admin
##创建 nova 服务实体:
openstack service create --name nova \
--description "OpenStack Compute" compute
4 创建 Compute 服务 API 端点 :
##公用
openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1/%\(tenant_id\)s
##内部
openstack endpoint create --region RegionOne \
compute internal http://controller:8774/v2.1/%\(tenant_id\)s
##管理员
openstack endpoint create --region RegionOne \
compute admin http://controller:8774/v2.1/%\(tenant_id\)s
5 安全并配置组件
##安装软件包:
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler
##编辑``/etc/nova/nova.conf``文件并完成下面的操作:
---------------------------------------------------
[DEFAULT]
...
enabled_apis = osapi_compute,metadata --只启用计算和元数据API
rpc_backend = rabbit --配置 “RabbitMQ” 消息队列访问
auth_strategy = keystone --配置认证服务访问
my_ip = 192.168.19.71 --本地IP,用控制节点的管理接口的IP 地址。
use_neutron = True --使用部分网络功能
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
[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
[vnc] --配置VNC代理使用控制节点的管理接口IP地址
...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
[glance] --配置镜像服务 API 的位置:
...
api_servers = http://controller:9292
[oslo_concurrency] --配置锁路径:
...
lock_path = /var/lib/nova/tmp
---------------------------------------------------
##同步Compute 数据库:
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova
##启动 Compute 服务并将其设置为随系统启动:
systemctl enable --now openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
##列出服务
openstack compute service list
computer1:提前设置ip,时间同步
##在computer1节点上配置nova服务
1 安装软件包
yum install openstack-nova-compute
2 编辑``/etc/nova/nova.conf``文件并完成下面的操作:
--------------------------------------------------
[DEFAULT]
...
rpc_backend = rabbit --消息队列
auth_strategy = keystone --认证服务
my_ip = 192.168.19.72 --计算节点IP
use_neutron = True --网络服务
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
[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
[vnc] --启用并配置远程控制台访问:
...
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
[glance] --配置镜像服务 API 的位置:
...
api_servers = http://controller:9292
[oslo_concurrency] --配置锁路径:
...
lock_path = /var/lib/nova/tmp
--------------------------------------------------
3 确定您的计算节点是否支持虚拟机的硬件加速。
egrep -c '(vmx|svm)' /proc/cpuinfo
--返回one or greater支持,返回0则不支持,使用 libvirt 来使用 QEMU 去代替 KVM
--配置:/etc/nova/nova.conf
-----------------
[libvirt]
...
virt_type = qemu
-----------------
4 设置服务自启动
systemctl enable --now libvirtd.service openstack-nova-compute.service
##验证操作
1 获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
. admin-openrc
2 列出服务组件,以验证是否成功启动并注册了每个进程:
openstack compute service list
3.4 搭建网络NetWorking
OpenStack Networking(neutron),允许创建、插入接口设备,这些设备由其他的OpenStack服务管理。插件式的实现可以容纳不同的网络设备和软件,为OpenStack架构与部署提供了灵活性。OpenStack网络主要和OpenStack计算交互,以提供网络连接到它的实例。
它包含下列组件:
neutron-server:
接收和路由API请求到合适的OpenStack网络插件,以达到预想的目的。
OpenStack网络插件和代理:
插拔端口,创建网络和子网,以及提供IP地址,这些插件和代理依赖于供应商和技术而不同,OpenStack网络基于插件和代理为Cisco 虚拟和物理交换机、NEC OpenFlow产品,Open vSwitch,Linux bridging以及VMware NSX 产品穿线搭桥。
常见的代理L3(3层),DHCP(动态主机IP地址),以及插件代理。
消息队列:
大多数的OpenStack Networking安装都会用到,用于在neutron-server和各种各样的代理进程间路由信息。也为某些特定的插件扮演数据库的角色,以存储网络状态。
##先决条件
1 创建数据库
##连接到数据库:
mysql -u root -p
##创建``neutron`` 数据库:
CREATE DATABASE neutron;
##对``neutron`` 数据库授予合适的访问权限,使用合适的密码替换``NEUTRON_DBPASS``:
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY 'neutron';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY 'neutron';
##获得admin权限
. admin-openrc
2 创建服务凭证
##创建``neutron``用户:
openstack user create --domain default --password-prompt neutron
##添加``admin`` 角色到``neutron`` 用户:
openstack role add --project service --user neutron
##创建``neutron``服务实体:
openstack service create --name neutron \
--description "OpenStack Networking" network
3 创建API
openstack endpoint create --region RegionOne \
network public http://controller:9696
openstack endpoint create --region RegionOne \
network internal http://controller:9696
openstack endpoint create --region RegionOne \
network admin http://controller:9696
您可以部署网络服务使用选项1和选项2两种架构中的一种来部署网络服务。
选项1采用尽可能简单的架构进行部署,只支持实例连接到公有网络(外部网络)。没有私有网络(个人网络),路由器以及浮动IP地址。只有``admin``或者其他特权用户才可以管理公有网络
选项2在选项1的基础上多了layer-3服务,支持实例连接到私有网络。``demo``或者其他没有特权的用户可以管理自己的私有网络,包含连接公网和私网的路由器。另外,浮动IP地址可以让实例使用私有网络连接到外部网络,例如互联网
##配置控制节点的公共网络
##安装组件
yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables
##配置服务组件
##编辑``/etc/neutron/neutron.conf`` 文件并完成如下操作:
-----------------------------------------------------------
[DEFAULT]
...
core_plugin = ml2
service_plugins =
rpc_backend = rabbit
auth_strategy = keystone
notify_nova_on_port_status_changes = True --设置网络拓扑
notify_nova_on_port_data_changes = True
[database]
...
connection = mysql+pymysql://neutron:neutron@controller/neutron
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
[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
[nova]
...
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = nova
[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp
-----------------------------------------------------------
##配置 Modular Layer 2 (ML2) 插件--使用Linuxbridge机制来为实例创建layer-2虚拟网络基础设施
##编辑``/etc/neutron/plugins/ml2/ml2_conf.ini``文件并完成以下操作:
--------------------------------------------------------------
[ml2]
...
type_drivers = flat,vlan --启用flat和VLAN网络:
tenant_network_types = --禁用私有网络
mechanism_drivers = linuxbridge --启用Linuxbridge机制:
extension_drivers = port_security --启用端口安全扩展驱动:
[ml2_type_flat]
...
flat_networks = provider --配置公共虚拟网络为flat网络
[securitygroup] --启用 ipset 增加安全组规则的高效性:
...
enable_ipset = True
--------------------------------------------------------------
##配置Linuxbridge代理--为实例建立layer-2虚拟网络并且处理安全组规则。
##编辑``/etc/neutron/plugins/ml2/linuxbridge_agent.ini``文件并且完成以下操作:
--------------------------------------------------------------
[linux_bridge] ---将公共虚拟网络和公共物理网络接口对应起来
physical_interface_mappings = provider:ens33
[vxlan] ---禁止VXLAN覆盖网络
enable_vxlan = False
[securitygroup] --启用安全组并配置 Linuxbridge iptables firewall driver
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
--------------------------------------------------------------
##配置DHCP代理
##编辑``/etc/neutron/dhcp_agent.ini``文件并完成下面的操作:
--------------------------------------------------------------
[DEFAULT] --配置Linuxbridge驱动接口,DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
--------------------------------------------------------------
##配置元数据代理
##编辑``/etc/neutron/metadata_agent.ini``文件并完成以下操作:
--------------------------------------------------------------
[DEFAULT]
...
nova_metadata_ip = controller
metadata_proxy_shared_secret = controller
--------------------------------------------------------------
##为计算节点配置网络服务
##编辑``/etc/nova/nova.conf``文件并完成以下操作:
--------------------------------------------------------------
[neutron] --启用元数据并设置代理
...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
service_metadata_proxy = True
metadata_proxy_shared_secret = controller
--------------------------------------------------------------
##完成安装
##网络服务初始化脚本需要一个超链接 /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
##重启计算API 服务:
systemctl restart openstack-nova-api.service
##设置开机自启
systemctl enable --enable neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
##计算节点安装网络组件
##安装组件
yum install openstack-neutron-linuxbridge ebtables ipset
##配置通用组件
##编辑``/etc/neutron/neutron.conf`` 文件并完成如下操作:
----------------------------------------------------------
在``[database]`` 部分,注释所有``connection`` 项,因为计算节点不直接访问数据库。
[DEFAULT]
...
rpc_backend = rabbit --消息队列
auth_strategy = keystone
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron
[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp
----------------------------------------------------------
##配置Linuxbridge代理
##编辑``/etc/neutron/plugins/ml2/linuxbridge_agent.ini``文件并且完成以下操作:
----------------------------------------------------------
[linux_bridge]
physical_interface_mappings = provider:ens33
[vxlan] --禁止VXLAN覆盖网络:
enable_vxlan = False
[securitygroup] --启用安全组并配置 Linuxbridge iptables firewall driver:
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
----------------------------------------------------------
##为计算节点配置网络服务
##编辑``/etc/nova/nova.conf``文件并完成下面的操作:
----------------------------------------------------------
[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
----------------------------------------------------------
##完成安装
##重启计算服务:
systemctl restart openstack-nova-compute.service
##启动Linuxbridge代理并配置它开机自启动:
systemctl enable --now neutron-linuxbridge-agent.service
##验证操做--列出加载的扩展来验证neutron-server进程是否正常启动
. admin-openrc
neutron ext-list
至此核心组件搭建完成,可进行简单使用测试。