OpenStack 学习笔记

OpenStack简介

OpenStack版本发展

OpenStack版本系列字母以A~Z命名,从2010年发布的第一个版本"Austin"到当前稳定版本"ocata"一共经历了15个版本,第16个版本"pike"正在开发中。

官网图片.png

这七年中OpenStack在不断的更新迭代,虽然还未完全歩入商用化,但是已经受到很多厂商的青睐,很多厂商基于OpenStack做公有云或私有云的云计算操作系统。容器的出现为OpenStack的发展又加了一管血,OpenStack与容器协作可以有效提高开发团队的速度和效率,尤其是在OpenStack私有云环境中。随着容器与OpenStack结合,容器的应用范围将会进一步扩大,另一方面容器也将会对OpenStack市场深化产生助推作用。

OpenStack架构

OpenStack 是一个开源云计算操作系统,通过一个数据中心管理大量的计算、存储、网络资源。管理员通过dashboard高效地管控这些资源,用户则通过web接口使用这些资源。


官网图片.png

OpenStack支持多种类型的云环境,试图打造一个部署简单、操作灵活、可大规模扩展、标准统一的云计算管理平台。OpenStack通过各种各样的服务灵活地提供基础设施即服务(IaaS)解决方案,并且每种服务都提供了API接口以便更加灵活的集成。OpenStack的服务主要包括:

  • dashboard
    a) horizon:提供了一个基于web的自服务门户,与OpenStack底层服务交互,用户无需通过命令,直接在dashboard界面上就能够完成创建实例、分配IP地址以及配置访问控制等操作。

  • 计算服务
    a) nova:在OpenStack环境中计算实例的生命周期管理。按需响应完成生成、调度、回收虚拟机等操作。除了管理虚拟机外还可以管理网络,如分配网络地址、vlan和隔离等。

  • 网络服务
    a) neutron:neutron之前被称为quantum,主要负责为其它OpenStack服务提供网络连接即服务,neutron基于插件架构因此可以支持众多的网络提供商和技术。基于neutron服务,用户可以在openstack上建立负载平衡、VPN、route、配置网络地址和网段等。

  • 存储服务:
    a) 对象存储swift: swift的实现方式像是一个文件服务器需要挂载目录,在这样的方式下,swift将对象和文件写到多个存储装置中。swift上存储的一般是图片、文字和多媒体等,基于数据复制和可扩展架构的swift具有很高的容错性,当一台存储装置故障时,其他存储装置中仍然保留着资料。
    b) 块存储cinder:为运行实例而提供的持久性块存储。可插拔驱动的架构有助于创建和管理块存储设备。管理员可以通过cinder创建volume、创建虚拟机快照等。

  • 共享服务:
    a) identity(keystone):为其他OpenStack服务提供认证和授权服务,为所有的OpenStack服务提供一个端点目录。keystone本身无法提供身份验证,但是可以集成各种其他目录服务实现多种形式的身份验证。
    b) image(glance):存储和检索虚拟机磁盘镜像,OpenStack计算服务会在部署实例时使用glance服务。
    c) telemetry:为OpenStack云的计费、基准、扩展性以及统计等目的提供监测和计量。

  • 高层次服务:
    a) 编排:Orchestration服务支持多样化的综合的云应用,通过调用OpenStack-native REST API和CloudFormation-compatible Query API,支持:term:HOT <Heat Orchestration Template (HOT)>格式模板或者AWS CloudFormation格式模板。

OpenStack架构图如下所示:

官网图片.png
  • 位于最上面的dashboard是图形用户界面,底层服务提供ui接口给dashboard,dashboard可以与底层服务交互从而为用户提供web自服务。
  1. network不仅向dashboard提供ui,还需要为compute服务提供网络连接。
  2. compute被认为是OpenStack的核心,负责处理工作负载流程。compute服务不仅依赖network服务为其提供网络连接,还需要block存储服务提供volumes。此外compute服务会将镜像存储在镜像服务中。
  3. image服务负责存储和检索虚拟机磁盘镜像,compute服务会将镜像存储在image中,并且需要依赖image中的镜像部署vm。
  4. image将disk文件存储在object存储中,vm通过restful API将对象数据存储在swift中,cinder也可以将volumes备份到swift中。
  5. block存储为compute服务提供volumes, 在VM看来block存储提供的volume就像是虚拟硬盘,可以用来存储数据
  6. identity为所有服务提供认证和权限管理,简而言之,OpenStack上的每一个操作都需要通过keystone的审核。

OpenStack Ocata版本安装

1 安装环境

从官网文档获悉,安装一套openstack环境至少需要两台虚拟机,一台作为controller节点,一台作为compute节点,block存储节点和object节点可以选择性安装。本次仅安装controller节点和compute节点。


官网图片.png

即使是搭建概念验证环境,OpenStack也对环境有一定的要求,最低标准如下所示:

  • Controller Node: 1 processor, 4 GB memory, and 5 GB storage
  • Compute Node: 1 processor, 2 GB memory, and 10 GB storage

2 安装准备

2.1 设置hostname

  1. 编辑控制节点上的/etc/hosts文件,修改控制器节点的hostname。
  2. 编辑计算节点上的/etc/hosts文件,修改计算节点的hostname。

2.2 设置网络接口

1、将控制节点上的第二个网口设置为provide interface,无需为其分配IP。编辑/etc/network/interface文件,添加下面内容后重启控制节点。

  auto ens192(第二块网口名称)
  iface ens192 inet manual
  up ip link set dev $IFACE up
  down ip set dev $IFACE down

2、将计算节点上的第二个网口设置为provide interface,具体操作与上面相同。

2.3 网络时间协议NTP

在各个节点上安装chrony,确保各个节点能够准确同步服务。
控制节点
1、安装chrony

apt install chrony

2、确保计算节点能够连接控制上的chrony,在/etc/chrony/chrony.conf中添加:

server NTP_SERVER iburst
allowe 172.171.0.0/24(计算节点网段) 

3、重启NTP服务

service chrony restart  

计算节点
1、安装chrony

apt install chrony

2、确保计算节点能够连接控制上的chrony,在/etc/chrony/chrony.conf中添加:

server NTP_SERVER iburst

注释下述内容 :

pool 2.debian.pool.ntp.org  iburst

3、重启NTP服务

service chrony restart  

验证
1、在控制节点上执行下述命令,结果中带星号的是NTP当前同步的地址。

chronyc sources

2、 在计算节点上执行下述命令,结果中“Name/IP address”一栏显示的应该是控制节点的hostname。

chronyc sources

2.4 启用openstack库

在所有节点执行下列操作,启用openstack库:

apt install software-properties-common
add-apt-repository cloud-archive:ocata
apt update
apt dist-upgrade    # 升级包
apt install python-openstackclient   #安装openstack客户端 

2.5安装数据库

1、在控制节点安装数据库

apt install mariadb-server python-pymysql

2、创建/etc/mysql/mariadb.conf.d/99-openstack.cnf,并编辑内容如下

bind-address = [controller-ip]
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

3、运行mysql_secure_installation脚本来保证数据库安全,为root账户设置一个合适的密码

 mysql_secure_installation

2.6 安装消息队列服务

1、使用RabbitMQ消息队列服务,在controller安装消息队列服务

apt install rabbitmq-server

2、添加用户,用合适的密码替代‘RABBIT_PASS’。

rabbitmqctl add_user openstack RABBIT_PASS

3、用户权限配置

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

2.7 安装memcache

1、认证服务的认证机制使用Memcached来缓存token,一般运行在控制节点上。在控制节点上执行:

apt install memcached python-memcache

2、编辑/etc/memcached.conf,将”-i 127.0.0.1“中的IP改成控制节点IP。
3、重启memcache服务

service memcached restart

3 认证服务

用户使用OpenStack时,通常第一个接触的服务就是认证服务,只有经过认证服务认证,用户才能使用其他OpenStack服务。另外认证服务还可以和一些外部用户管理系统(如LDAP)进行集成。认证服务的主要组成包括:

  • Server:通过RESTful接口提供认证、授权服务的中央服务器;
  • Drivers:集成到中央服务器中,负责获取OpenStack外部仓库中的认证信息。
  • Modules:运行于使用认证服务的OpenStack组件的地址空间中,负责拦截服务请求,提取用户证书后发往中央服务器请求授权。

认证服务安装在控制节点,以下就是具体安装步骤。

3.1 先决条件

1、使用root用户进入数据库,创建keystone数据库,并赋予适当的权限:

mysql -u root -p
 >  CREATE DATABASE keystone;
 >  GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
 >  GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';

其中 'KEYSTONE_DBPASS'是自己设置的密码,由于安装过程中设置的密码较多,建议设置成易记的密码。

3.2安装配置组件

1、安装keystone

apt install keystone

2、编辑/etc/keystone/keystone.conf:

[database]
connection=mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone   
#KEYSTONE_DBPASS是创建keystone数据库时设置的密码
[token]
provider=fernet

3、同步认证服务数据库

su -s /bin/sh –c "keystone-manage db_sync" keystone

4、初始化Fernet key仓库

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

5、bootstrap认证服务

keystone-manage bootstrap --bootstrap-password ADMIN_PASS  --bootstrap-admin-url http://controller:35357/v3/  --bootstrap-internal-url http://controller:5000/v3/  --bootstrap-public-url http://controller:5000/v3/  --bootstrap-region-id RegionOne

其中‘ADMIN_PASS’是admin用户的密码,请自行定义。

3.3. 配置Apache HTTP服务器

1、 编辑/etc/apache2/apache2.conf,添加

ServerName controller

3.4 完成安装

1、 重启Apache服务,删除默认的SQL数据库

service apache2 restart
rm -f /var/lib/keystone/keystone.db

2、 配置管理员帐号

$ export OS_USERNAME=admin
$ export OS_PASSWORD=ADMIN_PASS
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:35357/v3
$ export OS_IDENTITY_API_VERSION=3

ADMIN_PASS是bootstrap认证服务时设置的密码。
3、Identity service为其他OpenStack服务提供认证服务,而认证服务需要domains, projects, users和roles。因此安装好keystone后先创建service项目:

openstack project create --domain default --description "Service Project" service

4、一般的操作无需使用admin用户,创建一个demo项目和用户,作为普通用户使用。

#创建一个demo项目
openstack project create --domain default   --description "Demo Project" demo
#创建一个demo 用户
openstack user create --domain default  --password-prompt demo

6、创建user角色,并且将user角色添加到demo项目和用户中:

openstack role create user
openstack role add --project demo --user demo user

认证服务到此安装完成,在安装其他服务前先验证认证服务。

3.5. 验证操作

1、安全起见,禁用暂时的认证令牌机制。编辑/etc/keystone/keystone-paste.ini,将[pipeline:public_api]、 [pipeline:admin_api]、 [pipeline:api_v3] sections 中的admin_token_auth删除。
2、取消设置临时的OS_AUTH_URL和 OS_PASSWORD环境变量
unset OS_AUTH_URL OS_PASSWORD:

unset OS_AUTH_URL OS_PASSWORD

3、admin用户请求认证token

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

4、demo用户请求认证token

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

3.6. 创建脚本

1、创建openstack客户端环境脚本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_PASS  #admin用户的密码
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

2、为demo用户创建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_PASS  #demo用户的密码
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

3、加载admin-openrc文件,作为admin用户运行客户端,请求认证token:

. admin-openrc
openstack token issue
图片.png

4 镜像服务

镜像服务是IaaS的核心服务,可以接受disk镜像或server镜像的API请求,也可以接受终端用户和OpenStack计算组件的metadata定义,并且支持存储镜像到多种类型的仓库中,包括OpenStack的对象存储中。用户可以使用镜像服务发现、注册、获取虚拟机镜像,而且可以通过镜像服务提供的rest api查询虚拟机镜像的metadata并获取镜像。镜像服务的主要组件包括:

  • glance-api:接收镜像API的调用,诸如镜像发现、恢复、存储。
  • glance-registry:存储、处理、获取镜像的metadata,镜像的metadata中包含镜像的大小、类型等信息。
  • Database:存储镜像metadata,可以根据喜好选择数据库,通常用户会选用MySQL 或 SQLite。
  • Storage repository for image files:支持多种类型的仓库,包括普通文件系统、对象存储、RADOS块设备、VMware datastore以及HTTP。需要注意,其中一些仓库仅支持只读方式使用。
  • Metadata definition service:为厂商、admin、服务、用户提示的通用API,用于自定义metadata,定义的metadata可以用于各种各样的资源,例如镜像、卷、配额等。

镜像服务也安装在控制节点上,以下是镜像服务的具体安装过程。

4.1. 先决条件

1、 进入数据库,创建glance数据库,并赋权限

mysql -u root -p
> CREATE DATABASE glance;
> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';

将'GLANCE_DBPASS'替换成自定义的密码。
2、 导入admin证书,获取admin权限。

. admin-openrc

3、 创建glance用户,并设置密码

openstack user create --domain default --password-prompt glance

4、 添加管理员角色到glance用户和service项目中

openstack role add --project service --user glance admin

5、添加glance服务实体

openstack service create --name glance --description "openstack image"  image

6、添加image服务api endpoint

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

4.2. 安装配置组件

1、安装glance

apt install glance

2、编辑/etc/glance/glance-api.conf文件

[database]
connection=mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
#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_PASS   #glance用户密码

[paste_deploy]
flavor = keystone

[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

3、编辑/etc/glance/glance-registry.conf

[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance 
#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_PASS   #glance用户密码

[paste_deploy]
flavor = keystone

3、更新镜像服务数据库

su -s /bin/sh -c "glance-manage db_sync" glance

4、重启镜像服务

service glance-registry restart
service glance-api restart

4.3. 验证操作

1、以admin用户身份运行客户端,并下载cirros镜像

 . admin-openrc
wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img

2、以qcow2格式上传镜像到镜像服务,设置为public确保其他服务可以使用该镜像。

openstack image create "cirros" --file cirros-0.3.5-x86_64-disk.img  --disk-format qcow2 --container-format bare --public
图片.png

3、查看上传好的镜像

openstack image list
图片.png

5 计算服务

5.1. 安装配置控制节点

5.1.1 先决条件

1、进入mysql,创建数据库nova_api、nova、nova_cell0,并赋予一定的权限。

create database nova_api;
create database nova;
create database nova_ce110;
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';
grant all privileges on nova_ce110.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova_ce110.* to 'nova'@'%' identified by 'NOVA_DBPASS';

其中'NOVA_DBPASS'是自定义的数据库密码。操作完成后则退出数据库。
2、创建计算服务证书

#以admin身份运行客户端
. admin-openrc
#创建nova用户
openstack user create --domain default --password-prompt nova
#将admin角色添加到nova用户
openstack role add --project service --user nova admin
#创建nova服务体
openstack service create --name nova --description "openstack  compute" compute

3、创建Compute API service endpoints:

openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute internal  http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute admin  http://controller:8774/v2.1

4、创建placement服务用户,并自行设置密码

openstack user create --domain default --password-prompt placement

5、添加placement用户到service项目中,并赋予admin角色。

openstack role add --project service --user placement admin

创建placement api实体
openstack service create --name placement --description "placement api" placement
创建placement api服务endpoint
openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778

5.1.2安装配置组件

1、安装nova组件

apt install nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler nova-placement-ap

2、编辑/etc/nova/nova.conf文件

[api_database]
connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
#NOVA_DBPASS是nova数据库的密码

[database]
connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova

[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
#RABBIT_PASS是在rabbitmq中创建的openstack帐号对应的密码

[api]
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_PASS是nova用户对应的密码

[DEFAULT]
my_ip=10.0.0.11
use_neutron=True
firewall_driver=nova.virt.firewall.NoopFirewallDriver
#注释掉[default]中的log_dir

[vnc]
enabled=true
vncserver_listen=$my_ip
vncserver_proxyclient_address=$my_ip

[glance]
api_servers=http://controller:9292

[oslo_concurrency]
lock_path=/var/lib/nova/tmp

[placement]
os_region_name=RegionOne
project_domain_name=Default
project_name=service
auth_type=password
user_domain_name=Default
auth_url=http://controller:35357/v3
username=placement
password=PLACEMENT_PASS
#PLACEMENT_PASS是placement用户对应的密码

3、更新nova-api数据库

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

报错如下所示:

错误1

解决方法:
编辑/etc/nova/nova.conf文件,注释[database]和[api_database]中“connection=sqlite:////var/lib/nova/nova.sqlite”。再次执行更新数据库命令。

4、注册cell0数据库

su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

5、创建cell1 cell

su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

6、 更新nova数据库

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

7、确认cell0和cell1注册成功

nova-manage cell_v2 list_cells
图片.png

8、重启计算服务

service nova-api restart
service nova-consoleauth restart 
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart

5.2. 安装配置计算节点

5.2.1. 安装配置组件

1、安装nova组件

apt install nova-compute

2、编辑/etc/nova/nova.conf文件

[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
#RABBIT_PASS是在rabbitmq中创建的openstack帐号对应的密码

[api]
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_PASS是 nova用户的密码

[DEFAULT]
my_ip=MANAGEMENT_INTERFACE_IP_ADDRESS
use_neutron=True
firewall_driver=nova.virt.firewall.NoopFirewallDriver
#MANAGEMENT_INTERFACE_IP_ADDRESS是计算节点上管理网络的IP。
#注释掉[default]中的log_dir

[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_servers=http://controller:9292

[oslo_concurrency]
lock_path=/var/lib/nova/tmp


[placement]
os_region_name=RegionOne
project_domain_name=Default
project_name=service
auth_type=password
user_domain_name=Default
auth_url=http://controller:35357/v3
username=placement
password=PLACEMENT_PASS
#PLACEMENT_PASS是placement用户的密码

3、检查硬件是否支持虚拟化,返回值大于0则硬件支持虚拟化,否则需要进行额外的配置。

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

当返回值为0时,表明硬件不支持虚拟机,则编辑/etc/nova/nova-compute.conf文件,将libvirt类型从kvm改成qemu。

4、重启服务

service nova-compute restart

5.2.2. 添加计算节点到cell数据库

在控制节点执行以下操作步骤
1、获取admin权限,确认数据库中有计算节点

. admin-openrc
openstack hypervisor list

2、发现计算节点,新增计算节点时都需要执行该操作。

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

5.2.3. 确认操作

1、确认操作也在控制节点执行,获取admin权限,查看服务组件,应该运行着4个服务,“nova-consoleauth”、“nova-scheduler”、“nova-conductor”在控制节点,"nova-compute"在计算节点。

. admin-openrc
openstack compute service list

nova-conductor服务起不来,查看日志发现一直报错:“AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN”。
解决方法:分析发现可能是因为openstack用户创建不成功,查看rabbitmqctl中的用户,发现确实没有用户,重新创建openstack用户。

#查看rabbitmq中的用户
rabbitmqctl list_users
#添加用户,RABBIT_PASS是openstack用户的密码,须与之前配置的保持一致
rabbitmqctl add_user openstack RABBIT_PASS
#再次查看rabbitmq中的用户
rabbitmqctl list_users

创建用户后,重启nova服务,再次执行以上步骤确认nova服务安装完成。
2、列出认证服务中的API endpoints,确认认证服务的连接性

openstack catalog list
图片.png

3、列出镜像,确认镜像服务的连接性

openstack image list
图片.png

4、检查cells和placement api正常运行

nova-status upgrade check
图片.png

6 网络服务

neutron允许创建、插入其他OpenStack服务管理的接口设备,采用插件式结构因此可以容纳各种类型的网络设备和软件,提供了OpenStack架构和部署的灵活性。neutron主要包括以下模块:

  • neutron-server:接收和路由API请求到合适的OpenStack网络插件。
  • OpenStack网络插件和代理:负责插、拔port,创建网络和子网,以及提供IP地址。
  • 消息队列:通常安装OpenStack的时候都会遇到,负责在neutron-server和各种各样的代理进程之间路由信息,也可以作为数据库存储一些插件的网络状态。

6.1. 安装配置控制节点

6.1.1. 先决条件

1、登录数据库,创建neutron数据库,并赋予权限:

create database 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';

2、获取admin权限,创建网络服务相关credentials:

. admin-openrc
#创建neutron用户
openstack user create --domain default --password-prompt neutron
#添加admin角色到neutron用户
openstack role add --project service --user neutron admin
#创建neutron服务体
openstack service create --name neutron --description "openstack networking" network

3、创建网络服务api endpoint:

openstack endpoint create --region ReginOne network public http://controller:9696
openstack endpoint create --region ReginOne network internal  http://controller:9696
openstack endpoint create --region ReginOne network admin  http://controller:9696

部署Self-service 网络

部署网络服务有两种选择:
1)采用简单的结构部署网络服务,仅支持实例连接provider 网络(外部网络),不支持私有网络、路由服务、浮动IP等。另外,只有admin或其他管理员用户才能管理provide网络;
2)选项2在选项1的基础上添加了三层服务,支持实例连接私有网络。普通用户可以管理自己的私有网络,以及连接公网和私有的路由器。另外,外部网络可以借助浮动IP地址访问私有网络。

本次安装中,选择选项2:部署Self-service networks。
1、在控制节点安装服务组件。

apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent

2、编辑/etc/neutron/neutron.conf文件

[database]
connection=mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
#NEUTRON_DBPASS是neutron数据库密码

[DEFAULT]
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=true

[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller
auth_strategy=keystone
#RABBIT_PASS是在rabbitmq中创建的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_PASS
#NEUTRON_PASS是neutron用户密码

[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_PASS是nova用户密码

3、配置ML2插件,编辑/etc/neutron/plugins/ml2/ml2_conf.ini

[ml2] 
#配置支持的网络类型
type_drivers=flat,vlan,vxlan    
#self-service网络支持vxlan
tenant_network_types=vxlan
mechanism_drivers=linuxbridge,l2population
#注释掉type_drivers的值

[ml2]
extension_drivers=port_security

[ml2_type_flat]
flat_networks=provider

[ml2_type_vxlan]
vni_ranges=1:1000

[securitygroup]
enable_ipset=true

4、配置Linux bridge代理,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini:

[linux_bridge]
#映射provider虚拟网络到provider物理网络接口,PROVIDER_INTERFACE_NAME是第二块网卡名称
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME

#OVERLAY_INTERFACE_IP_ADDRESS是物理网络接口的IP地址
[vxlan]
enable_vxlan=true
local_ip=OVERLAY_INTERFACE_IP_ADDRESS
l2_population=true

[securitygroup]
enable_security_group=true
firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

5、配置三层代理,编辑/etc/neutron/l3_agent.ini

[DEFAULT]
interface_driver=linuxbridge

6、配置DHCP代理,编辑/etc/neutron/dhcp_agent.ini

[DEFAULT]
interface_driver=linuxbridge
dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata=true

7、配置metadata agent,编辑/etc/neutron/metadata_agent.ini

#METADATA_SECRET是metadata proxy的密码,自行定义
[DEFAULT]
nova_metadata_ip=controller
metadata_proxy_shared_secret=METADATA_SECRET

8、配置计算服务使用网络服务,编辑/etc/nova/nova.conf

#NEUTRON_PASS是neutron用户的密码,METADATA_SECRET是metadata proxy的密码
[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

9、更新数据库

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

10、重启计算API服务和网络服务

service nova-api restart
service neutron-server restart
service neutron-linuxbridge-agent  restart
service neutron-dhcp-agent  restart
service neutron-metadata-agent  restart
#选择网络服务二,还需要重启3层服务
service neutron-l3-agent restart

6.2. 安装配置计算节点

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

6.2.1. 安装配置组件

1、安装组件

apt install neutron-linuxbridge-agent

2、配置通用组件,编辑/etc/neutron/neutron.conf

[database]
[DEFAULT]
transport_url=rabbit://openstack:RABBIT_PASS@controller

[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

6.2.2.部署Self-service网络

1、在计算节点上也配置网络选项2:Self-service networks,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]
#PROVIDER_INTERFACE_NAME是底层provider物理网络接口,网卡2的名称
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME

#OVERLAY_INTERFACE_IP_ADDRESS是物理网络地址,即计算节点的IP地址
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true

[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

2、配置计算服务使用网络服务,编辑/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

3、完成安装,重启计算服务

service nova-compute restart
service neutron-linuxbridge-agent restart

4、验证安装,在控制节点执行:

. admin-openrc
openstack extension list --network
图片.png

查看neutron服务的agent是否都启动,理论上控制节点上有4个agent,计算节点上各有1个:

. admin-openrc
openstack network agent list
图片.png

7 Dashboard

7.1. 安装配置

1、将 Dashboard安装在控制节点上,执行以下命令安装组件:

apt install openstack-dashboard

2、编辑/etc/openstack-dashboard/local_settings.py

OPENSTACK_HOST="controller"
##所有主机都可以访问
ALLOWED_HOSTS=‘*’   

SESSION_ENGINE='django.contrib.sessions.backends.cache'
CACHES={
'default': {
'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION':'controller:11211',
    }
}

#启用第三版认证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,
}

#通过dashboard创建的用户的默认域为default
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

#通过dashboard创建的用户默认角色为user
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

3、重新加载web 服务器配置

service apache2 reload

7.2. 验证

1、登录http://controller/horizon,查看dashboard页面,确认dashboard安装成功。默认域为default,可以使用admin用户登录,也可以实验demo用户登录。

访问horizon,报错500,网上解决方法如下

cd /var/lib/openstack-dashboard/
ls –ltrh
chown www-data:www-data /var/lib/openstack-dashboard/secret_key
ls –ltrh
service apache2 reload

2、horizon页面出来,输入用户名和密码,报错如下:

图片.png

查看/var/log/apache2/error.log日志,错误信息“RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable”
解决方法:

1)、修改/etc/openstack-dashboard/local_settings.py,
将‘SESSION_ENGINE = 'django.contrib.sessions.backends.cache'改成
’SESSION_ENGINE = 'django.contrib.sessions.backends.file'
2)、重新加载web 服务器配置
service apache2 reload

3、登录控制面板后创建flavor、创建实例,访问实例控制器,发现无法连接。因为vnc地址是127.0.0.1,而不是controller IP。
解决方法:

1)、修改controller上的/etc/nova/nova.conf 
novncproxy_base_url=http://$my_ip:6080/vnc_auto.html
2)、修改computer上的/etc/nova/nova.conf
novncproxy_base_url=http://172.171.3.20:6080/vnc_auto.html
3)、重启nova相关服务
#控制节点
service nova-api restart
service nova-consoleauth restart 
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart
#计算节点
service nova-compute restart

安装参考文档链接:
http://www.10tiao.com/html/625/201703/2652502241/1.html
http://www.10tiao.com/html/625/201703/2652502241/3.html
https://docs.openstack.org/ocata/install-guide-ubuntu/InstallGuide.pdf
http://wangzhijian.blog.51cto.com/6427016/1912487
http://wangzhijian.blog.51cto.com/6427016/1913082?utm_source=tuicool&utm_medium=referral
https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容