设为首页 收藏本站
查看: 759|回复: 0

[经验分享] OpenStack 搭建(一)

[复制链接]

尚未签到

发表于 2018-5-31 13:45:18 | 显示全部楼层 |阅读模式
  

  OpenStack介绍
  openstack是一个云平台管理项目,我们可以使用openstack来管理我们的资源池,在这个资源池中包含了很多的子项目。openstack是有多个不同的模块组成,不同的功能有相对应得不同模块负责。openstack三大核心分别是 计算、网络、存储。通过调用不同模块的API来对外提供交互。
  openstack 的版本发布很快,从最初的A版到现在的N版,官方一般会每隔六个月发布一个新的版本。
  openstack每个服务都有对应的项目名称,不同的项目就相当于一个提供单独服务的模块,具体的对应关系如下:

  •   Horizon (Dashboard): Openstack的web管理服务。
  •   Nova (Compute):  通虚拟化技术,提供的计算资源池。
  •   Neutron (Networking): 虚拟机的网络资源管理。
  存储服务(Storage):

  •   Swift (Object Storage): 对象存储,适合于 “一次写入,多次读取”。

  •   Cinder (Block Storage): 块存储,提供存储资源池。
  共享服务(Share Service):

  •   Keystone (Identify service):认证管理。
  •   Glance (Image service): 提供虚拟镜像的注册和存储管理。
  •   Ceilometer (Telemetry): 提供监控和数据采集、计量服务。
  高层服务 (Higher-level service):

  •   Heat (Orchestration): 自动化部署的组件。
  •   Trove(Database Service): 提供数据库应用服务。

  

  基础服务配置安装
  准备工作:
  两台CentOS7的机器,分别命名为node1和node2,如果没有内部DNS需要绑定hosts.
  CS7修改主机名示例:
# hostnamectl set-hostname node1
# hostnamectl status
# cat /etc/hostname
node1  

  安装yum源:
rpm -ivh  http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm  安装openstack仓库:

yum install -y centos-release-openstack-mitaka  安装管理包和客户端:
  

yum install -y python-openstackclient
yum install -y openstack-selinux  控制节点上安装以下服务

yum install -y mariadb mariadb-server python2-PyMySQL
yum install -y rabbitmq-server
yum install -y openstack-keystone httpd mod_wsgi memcached python-memcached
yum install -y openstack-glance
yum install -y openstack-nova-api openstack-nova-cert \
  openstack-nova-conductor openstack-nova-console \
  openstack-nova-novncproxy openstack-nova-scheduler
yum install -y openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables  
  计算节点安装nova和neutron:
  

yum install -y openstack-nova-compute sysfsutils
yum install -y openstack-neutron openstack-neutron-linuxbridge ebtables  除了Horizon,openstack的其他组件都需要连接数据库。
  除了Horizon和keystone,其他组件都需要连接RabbitMQ(消息队列,通信枢纽).

  

  OpenStack数据库配置
创建/etc/my.cnf.d/openstack.cnf,并添加如下配置:
[mysqld]
bind-address = 172.16.10.50
default-storage-engine = innodb
innodb_file_per_table  #独享表空间
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8启动数据库:

# systemctl enable mariadb.service
# systemctl start mariadb.service
为了保证数据库服务的安全性,运行``mysql_secure_installation``脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。
# mysql_secure_installation创建库,并授权:
> create database keystone;
> grant all on keystone.* to 'keystone'@'localhost' identified by 'keystone';
> grant all on keystone.* to 'keystone'@'%' identified by 'keystone';
> create database glance;
> grant all on glance.* to 'glance'@'localhost' identified by 'glance';
> grant all on glance.* to 'glance'@'%' identified by 'glance';
> create database nova;
> grant all on nova.* to 'nova'@'localhost' identified by 'nova';
> grant all on nova.* to 'nova'@'%' identified by 'nova';
> create database nova_api;
> grant all on nova_api.* to 'nova'@'localhost' identified by 'nova';
> grant all on nova_api.* to 'nova'@'%' identified by 'nova';
> create database neutron;
> grant all on neutron.* to 'neutron'@'localhost' identified by 'neutron';
> grant all on neutron.* to 'neutron'@'%' identified by 'neutron';MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| glance             |
| information_schema |
| keystone           |
| mysql              |
| neutron            |
| nova               |
| nova_api           |
| performance_schema |
+--------------------+
8 rows in set (0.00 sec)
控制节点安装RabbitMQ,并授权用户:
yum install -y rabbitmq-server
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmqctl add_user openstack openstack
rabbitmqctl set_permissions openstack ".*" ".*" ".*"  打开监控插件:
rabbitmq-plugins enable rabbitmq_management  此时可以查看RabbitMQ的服务端口是否开启:
# netstat -lntup|grep 15672
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      30174/beam  可以直接访问web界面进行查看:http://localhost_ip:15672/
  RabbitMQ的服务是5672端口:
# netstat -lntup|grep 5672
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      30174/beam         
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      30174/beam         
tcp6       0      0 :::5672                 :::*                    LISTEN      30174/beam  

  

  所有主机同步时间
yum install ntpdate -y
ntpdate  time1.aliyun.com
timedatectl set-timezone Asia/Shanghai  在生产环境中,一定要保证服务器时间一致,否则会出现创建不了虚拟机的情况,在同步过程中也会出现各种问题。
  

  OpenStack认证管理-Keystone

  

  Keystone主要提供用户认证服务目录的功能。openstack的服务授权都需要在keystone上完成,keystone通过给授权的用户提供一个具有时间有效期的token,在用户token过期之后需要重新授权。服务目录则包含了所有服务项和与之相关的API端点。
  用户认证:User, Project,Token,Role.
  这里的Role就类似一个具有相同权限的用户组,Keystone通过这些机制来进行认证授权操作。
  服务目录:service,endpoint.
  service 服务,如 Nova, Glance,Swift. 一个服务可以确认当前用户是否具有访问资源的权限。
  endpoint其实是一个url,每个url都对应一个服务的实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问,private url只能被局域网访问,admin url被从常规的访问中分离。
  

  Keystone的部署
  

  Keystone使用memcatch来管理认证的token,之所以选择使用memcache而不是使用mysql的原因是存放在memcache中的token可以设置过期时间,到期之后会自动清理,防止在mysql中因为长期使用而出现表过大难以维护的问题。

  

  生成一个token随机值
# openssl rand -hex 10
48d263aed5f11b0bc02f  

  修改keystone的配置文件
  在/etc/keystone/keystone.conf文件中配置以下各项
  

  在[DEFAULT]部分,定义初始管理令牌的值
使用前面步骤生成的随机数替换``ADMIN_TOKEN`` 值。
# grep "admin_token"  /etc/keystone/keystone.conf
admin_token = 48d263aed5f11b0bc02f  

在 [database] 部分,配置数据库访问:
connection = mysql+pymysql://keystone:keystone@172.16.10.50/keystone  
在``[token]``部分,配置Fernet UUID令牌的提供者,并修改token的存储方式为memcache。
provider = fernet
driver = memcache在[memcache]部分,修改提供memcache服务的主机ip:
servers = 172.16.10.50:11211  修改完成后,keystone的配置就完成了。
[root@node1 ~]# grep '^[a-z]' /etc/keystone/keystone.conf
admin_token = 48d263aed5f11b0bc02f
connection = mysql+pymysql://keystone:keystone@172.16.10.50/keystone
servers = 172.16.10.50:11211
provider = fernet
driver = memcache初始化身份认证服务的数据库,进行数据库同步:
# su -s /bin/sh -c "keystone-manage db_sync" keystone  验证是否同步成功:
# mysql -h 172.16.10.50 -ukeystone -pkeystone -e "use keystone; show tables;"初始化Fernet keys,此命令执行后会在/etc/keystone下创建一个fernet-keys目录:
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone启动memcached:
systemctl enable memcached
systemctl start memcached  

  配置Apache HTTP服务器

编辑``/etc/httpd/conf/httpd.conf`` 文件,配置``ServerName`` 选项为控制节点:
ServerName 172.16.10.50:80用下面的内容创建文件 /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 httpd.service
# systemctl start httpd.service查看对应的5000端口和35357端口是否启用。
同时查看/var/log/keystone/keystone.log 是否有报错信息,如果有报错信息需要开启keystone的debug模式进行排错:
vim /etc/keystone/keystone.conf
#debug = false  #将此项改为true,再查看日志。

设置认证


配置认证令牌,直接在命令行执行:
export OS_TOKEN=48d263aed5f11b0bc02f配置端点URL:

export OS_URL=http://172.16.10.50:35357/v3
配置认证 API 版本:
export OS_IDENTITY_API_VERSION=3

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


创建域``default``:
# openstack domain create --description "Default Domain" default
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Default Domain                   |
| enabled     | True                             |
| id          | 5ab6cfb424ee4c99b0fea0cbec19e3b3 |
| name        | 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 项目和用户上:
openstack role add --project admin --user admin admin上面命令的含义为:将admin用户添加到admin的项目,并授权为admin角色




创建一个demo的项目
创建``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

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

openstack user create --domain default --password-prompt glance添加glance 用户到 service 项目和admin角色:
openstack role add --project service --user glance admin创建nova用户:

openstack user create --domain default --password-prompt nova添加nova用户到service项目和admin角色:
openstack role add --project service --user nova admin创建neutron用户:

openstack user create --domain default --password-prompt neutron
添加neutron用户到service项目和admin角色:
openstack role add --project service --user neutron admin

服务注册
openstack service create   --name keystone --description "OpenStack Identity" identity创建public的endpoint,并指定url, 注意IP和端口:

openstack endpoint create --region RegionOne   identity public http://172.16.10.50:5000/v3创建internal类型的endpoint:
openstack endpoint create --region RegionOne   identity internal http://172.16.10.50:5000/v3创建admin类型的endpoint,指定admin的管理端口:
openstack endpoint create --region RegionOne   identity admin http://172.16.10.50:35357/v3提示:由于内部是相互对应的,如果某一条创建错误,需要将对应的三条全部删除,重新创建。
删除方式:(service、user、project等都可以用这种方式删除)

openstack endpoint list   #查看对应的记录ID号
openstack endpoint delete ab66752a92334e31a08aa65d6fb5fdfc #删除ID这些记录实质上都在mysql的keystone.endpoint表中,也可以直接修改表。


验证操作
在安装其它服务前,要先对之前的操作进行验证。

先重置``OS_TOKEN``和``OS_URL`` 环境变量:
unset OS_TOKEN OS_URL使用 admin 用户,请求认证令牌进行测试:
openstack --os-auth-url http://172.16.10.50:35357/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name admin --os-username admin token issue使用demo项目的demo用户,请求认证令牌测试:
openstack --os-auth-url http://172.16.10.50:35357/v3 \
--os-project-domain-name default --os-user-domain-name default \
  --os-project-name demo --os-username demo token issue如果出现 (HTTP 401)则说明是密码输入错误。


创建环境变量脚本

在上面的测试中,使用了指定参数的方式来进行连接的验证,但是输入内容比较长,在实际的生产操作中我们可以定义一个环境变量的脚本,来省去指定参数的操作。


创建 admin 和 ``demo``项目和用户创建客户端环境变量脚本。接下来的部分会引用这些脚本,为客户端操作加载合适的的凭证。

编辑文件 admin-openstack.sh 并添加如下内容(注意指定密码和URL):

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://172.16.10.50:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2同理,添加demo的环境配置文件demo-openstack.sh:
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://172.16.10.50:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2对脚本添加执行权限后,每次执行openstack相关的命令一定要先source执行此脚本,否则会不成功。

对环境变量脚本进行验证:
source  admin-openstack.sh尝试直接获取token,看是否成功

openstack token issue

Openstack镜像管理-Glance


Glance由Glance-api和Glance-Registry以及image Storage三个组件组成。
Glance-api: 接受云系统镜像的创建、删除和读取请求。通过接收REST API的请求,调用其他模块来完成镜像的查找,获取、上传、删除等操作。默认的监听端口为9292.
Glance-Registry:云镜像的注册服务。与mysql进行数据交互,用于存储和获取镜像的元数据。Glance数据库中有两张表,一张是image表,另一张是image property表。image表保存了镜像格式、大小等信息,image property表则主要保存镜像的定制化信息。glance-registry监听的端口为9191.
Image storage: 是一个存储的接口层,严格来说它并不是属于glance,只是给glance提供调用的一个接口。通过这个接口,glance可以获取镜像。image storage支持的存储有Amazon的S3、Openstack本身的Swift,还有如 ceph,sheepdog,GlusterFS等分布式存储,image storage是镜像保存和获取的接口,由于仅仅是一个接口层,具体的实现需要外部存储的支持。


Glance的部署

http://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/glance-install.html#prerequisites
  安装glance服务并配置数据库
  前面已经对数据库进行了相关操作,这里需要编辑配置文件/etc/glance/glance-api.conf 并完成如下动作:
在 [database] 部分,配置数据库访问:(第二个glance为密码)
connection = mysql+pymysql://glance:glance@172.16.10.50/glance在/etc/glance/glance-registry.conf 的配置文件中[database] 也配置上此参数
connection = mysql+pymysql://glance:glance@172.16.10.50/glance同步数据库,此处会有一个警告:
su -s /bin/sh -c "glance-manage db_sync" glance验证数据库是否同步成功:
# mysql -h  172.16.10.50 -uglance -pglance -e "use glance;show tables;"

设置keystone
在/etc/glance/glance-api.conf中设置keystone的配置,分别在下面的两个模块中
添加如下配置信息:


[keystone_authtoken]
...
auth_uri = http://172.16.10.50:5000
auth_url = http://172.16.10.50:35357
memcached_servers = 172.16.10.50: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 中设置相同的配置:
[keystone_authtoken]
...
auth_uri = http://172.16.10.50:5000
auth_url = http://172.16.10.50:35357
memcached_servers = 172.16.10.50: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-api.conf的配置:
[glance_store] 部分,配置本地文件系统存储和镜像文件位置:
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images启动服务:
systemctl enable openstack-glance-api.service   openstack-glance-registry.service
systemctl start openstack-glance-api.service   openstack-glance-registry.service



  查看启动后9292和9191端口是否开启。

在keystone上做服务注册
创建glance服务实体,首先加载admin环境变量
# source admin-openstack.sh#  openstack service create --name glance  \
--description "OpenStack Image" image创建镜像服务的 API 端点:
# openstack endpoint create --region RegionOne \
  image public http://172.16.10.50:9292# openstack endpoint create --region RegionOne  \
image internal http://172.16.10.50:9292# openstack endpoint create --region RegionOne  \
image admin http://172.16.10.50:9292验证配置是否成功:

# glance image-list   
+----+------+
| ID | Name |
+----+------+
+----+------+
验证操作

获得 admin 凭证来获取只有管理员能执行的命令的访问权限:

# source admin-openstack.sh下载源镜像:

# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它:
# openstack image create "cirros"   --file cirros-0.3.4-x86_64-disk.img  \
--disk-format qcow2 --container-format bare   --public验证是否上传成功:
# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 82c3ba8f-4930-4e32-bd1b-34881f5eb4cd | cirros | active |
+--------------------------------------+--------+--------+上传成功后在/var/lib/glance/images/下可以看到这个镜像,以镜像ID命名:
[root@node1 ~]# cd /var/lib/glance/images/
[root@node1 images]# ll
total 12980
-rw-r-----. 1 glance glance 13287936 Oct 26 16:00 82c3ba8f-4930-4e32-bd1b-34881f5eb4cd
OpenStack计算服务-Nova
http://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/nova-controller-install.html
在openstack的创建中,我们一般将Nova的计算节点组件放在需要创建虚拟机的主机上,而除了计算节点之外的其他Nova组件安装在控制节点上,计算节点只负责创建虚拟机。

Nova的服务组件:
API:负责接收和响应外部请求。API接收的请求将会放到消息队列(rabbitMQ)中。是外部访问nova的唯一途径。
Cert:负责身份认证EC2.
Scheduler:用于云主机调度。决策虚拟机创建在哪个主机(计算节点)上
Conductor: 计算节点访问数据库的中间件。
Consoleauth:用于控制台的授权验证
Novncproxy: VNC代理


配置数据库



编辑``/etc/nova/nova.conf``文件并完成下面的操作:
在``[api_database]``和``[database]``部分,配置数据库的连接:
[api_database]
...
connection = mysql+pymysql://nova:nova@172.16.10.50/nova_api
[database]
...
connection = mysql+pymysql://nova:nova@172.16.10.50/nova
同步Compute 数据库:
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova查看数据库同步是否成功:
mysql -h 172.16.10.50 -unova -pnova -e "use nova;show tables;"
mysql -h 172.16.10.50 -unova -pnova -e "use nova_api;show tables;"

配置keystone
编辑``/etc/nova/nova.conf``文件并完成下面的操作:
编辑“[keystone_authtoken]” 部分,添加如下内容:
[keystone_authtoken]
...
auth_uri = http://172.16.10.50:5000
auth_url = http://172.16.10.50:35357
memcached_servers = 172.16.10.50:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = nova在[DEFAULT]中打开注释:

[DEFAULT]
...
auth_strategy = keystone

配置RabbitMQ
修改nova.conf文件:
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=172.16.10.50
rabbit_port=5672
rabbit_userid=openstack
rabbit_password=openstack



配置nova服务参数
编辑``/etc/nova/nova.conf``文件
在``[DEFAULT]``部分,只启用计算和元数据API:
enabled_apis=osapi_compute,metadata
在 [DEFAULT] 部分,使能 Networking 服务:(此处的设置需要修改默认参数Noop)
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver在``[vnc]``部分,配置VNC代理使用控制节点的管理接口IP地址 :
vncserver_listen=172.16.10.50
vncserver_proxyclient_address=172.16.10.50在 [glance] 区域,配置镜像服务 API 的位置:
api_servers= http://172.16.10.50:9292在 [oslo_concurrency] 部分,配置锁路径:
lock_path=/var/lib/nova/tmp启动 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

注册nova服务

创建 nova 服务实体:
# source  admin-openstack.sh
# openstack service create --name nova  \
--description "OpenStack Compute" compute创建 Compute 服务 API 端点,nova api的端口为8774 :
# openstack endpoint create --region RegionOne \
  compute public http://172.16.10.50:8774/v2.1/%\(tenant_id\)s# openstack endpoint create --region RegionOne \
  compute internal http://172.16.10.50:8774/v2.1/%\(tenant_id\)s# openstack endpoint create --region RegionOne \
  compute admin http://172.16.10.50:8774/v2.1/%\(tenant_id\)s查看注册是否成功:
# openstack host list
+-----------+-------------+----------+
| Host Name | Service     | Zone     |
+-----------+-------------+----------+
| node1     | conductor   | internal |
| node1     | consoleauth | internal |
| node1     | scheduler   | internal |
+-----------+-------------+----------+

Nova计算节点的部署
http://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/nova-compute-install.html
计算节点是真正运行虚拟机的节点,其硬件配置决定了可以运行多少虚拟机。并且这些节点需要支持CPU虚拟化。
确定CPU是否支持虚拟机的硬件加速:(结果不为0,表示支持)
egrep -c '(vmx|svm)' /proc/cpuinfo此处的计算节点已经在前面安装了对应的服务。
修改计算节点nova配置:(由于和控制节点的大部分配置类似,直接从控制节点scp配置文件到本地修改,并修改用户权限)

# scp 172.16.10.50:/etc/nova/nova.conf  ./nova1.conf
# chown root:nova nova1.conf
# mv nova.conf  nova.conf-bak
# mv nova1.conf  nova.conf修改配置文件:

删除[database]中connection的配置参数。

#connection = mysql+pymysql://nova:nova@172.16.10.50/nova
#connection = mysql+pymysql://nova:nova@172.16.10.50/nova_api
在``[vnc]``部分,启用并配置远程控制台访问:
打开注释:
enabled=true
novncproxy_base_url=http://172.16.10.50:6080/vnc_auto.html
vncserver_listen=0.0.0.0
vncserver_proxyclient_address=172.16.10.51 #修改为本地主机ip打开默认的KVM虚拟化:

virt_type=kvm

启动计算服务及其依赖,并将其配置为随系统自动启动:
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service验证操作是否正常:

在控制节点查看:

# source admin-openstack.sh
# openstack  host list
+-----------+-------------+----------+
| Host Name | Service     | Zone     |
+-----------+-------------+----------+
| node1     | conductor   | internal |
| node1     | consoleauth | internal |
| node1     | scheduler   | internal |
| node2     | compute     | nova     |
+-----------+-------------+----------+
# nova image-list
+--------------------------------------+--------+--------+--------+
| ID                                   | Name   | Status | Server |
+--------------------------------------+--------+--------+--------+
| 82c3ba8f-4930-4e32-bd1b-34881f5eb4cd | cirros | ACTIVE |        |
+--------------------------------------+--------+--------+--------+出现上面的结果,证明计算节点的安装正常。




OpenStack网络服务-Neutron


Neutron由一个Neutron Server提供服务,主要包含一些二层的插件,如Linux Bridge,openvSwitch,DHCP-Agent, L3-Agent ,LBAAS-Agent 和其他组件等。模拟了实际物理网络中的服务和协议。


安装部署
http://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron-controller-install-option1.html
Neutron有两种网络架构,单一扁平网络和负杂的多网段网络,这里以单一扁平网络为例。
安装部署需要在控制节点和计算节点上安装对应的服务,之前已经安装,此处跳过此步骤。


数据库配置
编辑``/etc/neutron/neutron.conf`` 文件并在控制节点完成如下操作:
在 [database] 部分,配置数据库访问:
connection = mysql+pymysql://neutron:neutron@172.16.10.50/neutron配置Keystone
在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[DEFAULT]
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://172.16.10.50:5000
auth_url = http://172.16.10.50:35357
memcached_servers = 172.16.10.50:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron配置RabbitMQ
在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列的连接:
[DEFAULT]
...
rpc_backend = rabbit# 修改注释
[oslo_messaging_rabbit]
rabbit_host = 172.16.10.50
rabbit_userid = openstack
rabbit_password = openstackneutron的其他配置
在``[DEFAULT]``部分,启用ML2插件并禁用其他插件:
core_plugin = ml2
service_plugins =配置nova
在``[DEFAULT]``和``[nova]``部分,配置网络服务来通知计算节点的网络拓扑变化:
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true[nova]
auth_url = http://172.16.10.50: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) 插件
  ML2插件使用Linuxbridge机制来为实例创建layer-2虚拟网络基础设施.
  编辑``/etc/neutron/plugins/ml2/ml2_conf.ini``文件并完成以下操作:
  在``[ml2]``部分,启用flat和VLAN网络:
type_drivers = flat,vlan,gre,vxlan,geneve  在``[ml2]``部分,禁用私有网络:
tenant_network_types =  在``[ml2]``部分,启用Linuxbridge机制:
mechanism_drivers = linuxbridge,openvswitch  在``[ml2]`` 部分,启用端口安全扩展驱动:
extension_drivers = port_security  在``[ml2_type_flat]``部分,配置公共虚拟网络为flat网络
[ml2_type_flat]
flat_networks = public  在 ``[securitygroup]``部分,启用 ipset 增加安全组规则的高效性:
enable_ipset = true  

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

  编辑``/etc/neutron/plugins/ml2/linuxbridge_agent.ini``文件并且完成以下操作:
  在``[linux_bridge]``部分,将公共虚拟网络和公共物理网络接口对应起来:
physical_interface_mappings = public:eth0  在``[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 = 172.16.10.50
metadata_proxy_shared_secret = trying  为nova配置网络服务
  编辑``/etc/nova/nova.conf``文件并完成以下操作:
  在``[neutron]``部分,配置访问参数,启用元数据代理并设置密码:
[neutron]
...
url = http://172.16.10.50:9696
auth_url = http://172.16.10.50:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutronservice_metadata_proxy=true
metadata_proxy_shared_secret = trying  完成安装
  网络服务初始化脚本需要一个软链接 /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  当系统启动时,启动 Networking 服务并配置它启动
systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.servicesystemctl start neutron-server.service \  
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \  
neutron-metadata-agent.service  在keystone上完成注册
# source  admin-openstack.sh
# openstack service create --name neutron   --description "OpenStack Networking" network
# openstack endpoint create --region RegionOne \
network public http://172.16.10.50:9696
# openstack endpoint create --region RegionOne \
network internal http://172.16.10.50:9696
# openstack endpoint create --region RegionOne \  
network admin http://172.16.10.50:9696  验证neutron是否验证成功:
# neutron agent-list
+------------------+------------------+-------+-------------------+-------+----------------+-------------------+
| id               | agent_type       | host  | availability_zone | alive | admin_state_up | binary            |
+------------------+------------------+-------+-------------------+-------+----------------+-------------------+
| 172afad4-755b-47 | Linux bridge     | node1 |                   | :-)   | True           | neutron-          |
| a1-81e8-d38056e2 | agent            |       |                   |       |                | linuxbridge-agent |
| 441e             |                  |       |                   |       |                |                   |
| 7f568fdf-192f-45 | Metadata agent   | node1 |                   | :-)   | True           | neutron-metadata- |
| bd-8436-b48ecb5d |                  |       |                   |       |                | agent             |
| 7480             |                  |       |                   |       |                |                   |
| fda9f554-952a-4b | DHCP agent       | node1 | nova              | :-)   | True           | neutron-dhcp-     |
| 7e-8509-f2641a65 |                  |       |                   |       |                | agent             |
| 95c9             |                  |       |                   |       |                |                   |
+------------------+------------------+-------+-------------------+-------+----------------+-------------------+  

  在计算节点上安装Neutron
  计算节点的配置和控制节点的配置文件是类似的,我们可以将控制节点的文件直接复制到计算节点进行修改。

# scp /etc/neutron/neutron.conf  172.16.10.51:/etc/neutron/
# scp /etc/neutron/plugins/ml2/linuxbridge_agent.ini
172.16.10.51:/etc/neutron/plugins/ml2/
# chown root.neutron /etc/neutron/plugins/ml2/linuxbridge_agent.ini #scp后的文件  删除neutron.conf上[database]的配置部分,删除所有``connection`` 项,因为计算节点不直接访问数据库。
# connection = mysql+pymysql://neutron:neutron@172.16.10.50/neutron  
  同时删除[nova]部分的配置:
[nova]
...
#auth_url = http://172.16.10.50:35357
#auth_type = password
#project_domain_name = default
#user_domain_name = default
#region_name = RegionOne
#project_name = service
#username = nova
#password = nova  注释掉核心plugin的选项:
#core_plugin = ml2
#service_plugins =  注释掉nova端口通知的选项:
#notify_nova_on_port_status_changes = true
#notify_nova_on_port_data_changes = true  查看计算节点/etc/neutron/plugins/ml2/linuxbridge_agent.ini的配置信息:
[root@node2 ~]# grep '^[a-z]' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
physical_interface_mappings = public:eth0
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
enable_security_group = True
enable_vxlan = False  

  修改计算节点上nova的配置文件/etc/nova/nova.conf,和控制节点的一致:
[neutron]
url = http://172.16.10.50:9696
auth_url = http://172.16.10.50:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron  重启计算节点Nova-compute
# systemctl restart openstack-nova-compute启动neutron-linuxbridge-agent:
# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service  

  在控制节点上验证是否成功:
[root@node1 ~]# neutron agent-list
+--------------------------------------+--------------------+-------+-------------------+-------+----------------+---------------------------+
| id                                   | agent_type         | host  | availability_zone | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+-------+-------------------+-------+----------------+---------------------------+
| 172afad4-755b-47a1-81e8-d38056e2441e | Linux bridge agent | node1 |                   | :-)   | True           | neutron-linuxbridge-agent |
| 7f568fdf-192f-45bd-8436-b48ecb5d7480 | Metadata agent     | node1 |                   | :-)   | True           | neutron-metadata-agent    |
| cb3f16cf-c8dd-4a6b-b9e8-71622cde1774 | Linux bridge agent | node2 |                   | :-)   | True           | neutron-linuxbridge-agent |
| fda9f554-952a-4b7e-8509-f2641a6595c9 | DHCP agent         | node1 | nova              | :-)   | True           | neutron-dhcp-agent        |
+--------------------------------------+--------------------+-------+-------------------+-------+----------------+---------------------------+  node2已经添加进来,说明配置成功。
  提示:如果此过程无法正常获取node2的状态,检查配置文件neutron权限,防火墙和selinux的设置。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-486583-1-1.html 上篇帖子: Why Namespace? 下篇帖子: 安装OpenStack ValueError: Tables "migrate_version" have non utf8 co
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表