手把手教你安装OpenStack——Ocata安装指南(上)

本文参考:https://docs.openstack.org/ocata/install-guide-rdo/index.html官方文档来手把手教你安装Ocata,安装文档中有漏洞的地方,本文都会提及。本指南不会给出所有命令的输出结果,只给出部分必要的解释,因此在安装时最好对照着官方文档进行。

本文目录:

  • 安装环境

  • 认证服务

  • 镜像服务

  • 计算服务

  • 网络服务

  • Dashboard

一、安装环境

1、示例架构

根据官方文档,本文架构采用一个控制节点和一个计算节点。

(The example architecture requires at least twonodes (hosts) to launch a basic virtual machine or instance. )

控制节点运行认证服务、镜像服务、计算服务的管理部分、网络服务的管理部分、各种网络代理以及Dashboard,还包括一些基础服务如数据库、消息队列以及NTP。

计算节点上运行计算服务中管理实例的管理程序部分。默认情况下,计算服务使用 KVM。还运行网络代理服务,用来连接实例和虚拟网络以及通过安全组给实例提供防火墙服务。

2、网络

  • 公有网络

公有网络选项以尽可能简单的方式通过layer-2(网桥/交换机)服务以及VLAN网络的分割来部署OpenStack网络服务。实际上,它将虚拟网络桥接到物理网络,并依靠物理网络基础设施提供layer-3服务(路由)。另外,DHCP服务为实例提供IP地址。

  • 私有网络

私有网络选项扩展了公有网络选项,增加了layer-3(路由)服务,使用VXLAN类似的方式。本质上,它使用NAT路由虚拟网络到物理网络。另外,这个选项也提供高级服务的基础,比如LBaas和FWaaS。

这里我们选择私有网络。

3、安全

下面是各个需要密码的服务以及解释,建议这些密码使用同一个,以免混淆。

手把手教你安装OpenStack——Ocata安装指南(上)


4、主机网络配置

控制节点

  • 配置网络接口

Controller:IP:192.168.0.112/24 GATEWAY:192.168.0.1

网络配置完之后需要将防火墙和selinux关闭。

  • 关闭防火墙:

systemctl stop firewalld.service

  • 禁止防火墙开机启动

systemctl disable firewalld.service

  • 关闭selinux

vim /etc/selinux/config,配置selinux=disabled

#  setenforce 0,使配置立即生效

  • 配置地址解析

编辑/etc/hosts

# controller

192.168.0.112       controller

# compute1

192.168.0.113       compute1

计算节点

  • 配置网络接口。

Compute:IP:192.168.0.113/24 GATEWAY:192.168.0.1

同样需要配置地址解析,参考控制节点。

配置完成之后需要进行验证:

  • 与外网连通性:

分别在控制节点和计算节点上:

# ping -c 4 www.baidu.com

  • 控制节点和计算节点连通性:

控制节点上输入# ping -c 4 compute1

计算节点上输入# ping -c 4 controller

5、NTP

控制节点

  • 安装相关包

# yum install chrony

  • 编辑 /etc/chrony.conf

server NTP_SERVER iburst

可以根据需要将NTP_SERVER替换为合适的NTP服务器,建议不用改。然后添加:

allow 192.168.0.0/24

即允许计算节点同步。(计算节点IP网段属于192.168.0.0)

# systemctl enable chronyd.service

# systemctl start chronyd.service


启动服务。

计算节点

编辑/etc/chrony.conf,可以将其他的几个同步地址注释掉。

server controller iburst


同步控制节点。


# systemctl enable chronyd.service

# systemctl start chronyd.service


启动服务。(如果发现同步的不是控制节点,那么重启一下NTP服务即可。)


# systemctl restart chronyd.service


验证操作:

在控制节点上同步时间。

# chronyc sources


带星号的是NTP当前同步的地址。

计算节点上同步。

# chronycsources

    210 Number of sources = 1

    MS Name/IP address        

    Stratum Poll Reach LastRx Last sample

   ======================================================

    ^* controller 3 9 377  421 +15us[  -87us] +/-   15ms


6、安装OpenStack包

以下操作在所有节点上进行。

  • 启用OpenStack库:

# yum install centos-release-openstack-ocata

  • 完成安装

1)在所有节点上升级包

# yum upgrade

2)安装OpenStack 客户端

# yum install python-openstackclient

3)CentOS默认启用了SELinux,安装openstack-selinux来自动管理OpenStack服务的安全策略。

# yum install openstack-selinux


7、安装数据库

数据库一般运行在控制节点上。

安装并配置组件。

  • 安装相关包。

# yum install mariadb mariadb-server python2-PyMySQL

创建并编辑/etc/my.cnf.d/openstack.cnf 文件,并完成以下操作。在配置文件中添加以下配置:

[mysqld]

    bind-address=192.168.0.112

    default-storage-engine=innodb

    innodb_file_per_table=on

    max_connections=4096

    collation-server=utf8_general_ci

    character-set-server=utf8


其中bind-address为控制节点IP地址。

  • 完成安装

1)启动数据库并设置开机启动

# systemctl enable mariadb.service

# systemctl start mariadb.service


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

# mysql_secure_installation


8、消息队列


OpenStack使用消息队列来协调服务之间的状态和操作,消息队列服务一般运行在控制节点上。,OpenStack支持RabbitMQ,Qpid以及ZeroMQ等消息队列服务。本指南使用RabbitMQ消息队列服务。

  • 安装相关包

# yum install rabbitmq-server

  • 启动消息队列并设置开机启动

# systemctl enable rabbitmq-server.service

# systemctl start rabbitmq-server.service

  • 添加openstack用户

#rabbitmqctl add_user openstack RABBIT_PASS

Creating user "openstack" ...


使用合适的密码替换掉 RABBIT_PASS 

  • 允许openstack用户的配置、写、读权限

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

Setting permissions for user "openstack" in vhost "/" ...

9、缓存令牌

认证服务的认证机制使用Memcached来缓存令牌,一般运行在控制节点上。

  • 安装相关包

# yum install memcached python-memcached


编辑 /etc/sysconfig/memcached文件并配置IP地址,将127.0.0.1改为控制节点IP。

  • 完成安装

启动 Memcached服务并设置开机启动。

# systemctl enable memcached.service

# systemctl start memcached.service

二、认证服务


控制节点上配置。

1、前提条件

  • 创建数据库

以root身份登录数据库

$ mysql -u root -p

创建keystone数据库

MariaDB[(none)]> CREATE DATABASE keystone;


给数据库赋予适当的权限;

MariaDB [(none)]> GRANT ALL PRIVILEGESON keystone.* TO 'keystone'@'localhost' \
                 IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGESON keystone.* TO 'keystone'@'%' \
                 IDENTIFIED BY 'KEYSTONE_DBPASS';


用合适的密码替换KEYSTONE_DBPASS


2、安装并配置组件


  • 运行命令安装相关包

# yum install openstack-keystone httpd mod_wsgi


编辑文件/etc/keystone/keystone.conf

在[database]选项配置数据库连接

[database]

# ...

connection=mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone


替换掉KEYSTONE_DBPASS

在[token]选项中,配置,Fernet令牌提供者:

[token]

    # ...

    provider=fernet

  • 同步认证服务数据库

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

  • 初始化Fernetkey仓库

# keystone-manage fernet_setup --keystone-user keystone --keystone-

  groupkeystone

# keystone-manage credential_setup --keystone-user keystone--keystone-groupkeystone

  • 引导认证服务

# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \

 --bootstrap-admin-urlhttp://controller:35357/v3/ \

 --bootstrap-internal-urlhttp://controller:5000/v3/ \

 --bootstrap-public-urlhttp://controller:5000/v3/ \

 --bootstrap-region-id RegionOne



替换掉 ADMIN_PASS 

  • 配置Apache服务器

  1. 编辑 /etc/httpd/conf/httpd.conf并配置ServerName选项,使之参考控制节点

  2. 给/usr/share/keystone/wsgi-keystone.conf文件创建一个链接

# ln -s/usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

  • 完成安装

1.启动Apache服务器并设置开机启动

# systemctlenable httpd.service

# systemctl start httpd.service


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

3、创建一个域、项目、用户和角色

  • 本指南有一个service 项目,你添加的每一个服务都有唯一的用户。

$ openstack project create --domain default \

 --description "Service Project"service

  • 普通的任务不应该使用具有特权的项目和用户。作为示例,本指南创建一个demo项目和用户。

1、创建demo项目:

$ openstack project create --domain default \

 --description "Demo Project"demo

2、创建demo用户:


$ openstack user create --domain default \

 --password-prompt demo

3、创建user角色:

$ openstack role create user

4、将user角色添加到demo项目和用户中。

$ openstack role add --project demo --user demo user

4、验证操作

  • 出于安全性的原因,禁用掉暂时的认证令牌机制。

编辑/etc/keystone/keystone-paste.ini文件,并从[pipeline:public_api], [pipeline:admin_api], 和 [pipeline:api_v3]选项中删除admin_token_auth

手把手教你安装OpenStack——Ocata安装指南(上)

  • 取消设置临时的OS_AUTH_URL和 OS_PASSWORD环境变量:

$unset OS_AUTH_URL OS_PASSWORD

  • 使用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 admintoken issue

这里遇到错误

手把手教你安装OpenStack——Ocata安装指南(上)

由于是Http错误,所以返回Apache HTTP 服务配置的地方,重启Apache 服务,并重新设置管理账户:

# systemctlrestart httpd.service

$ 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


手把手教你安装OpenStack——Ocata安装指南(上)

错误解决!

  • 使用demo用户,请求认证令牌:

$ openstack--os-auth-url http://controller:5000/v3 \

--os-project-domain-namedefault --os-user-domain-name default \

--os-project-namedemo --os-username demo token issue

 

Password:

密码为创建demo用户时的密码。

5、创建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=root

export OS_AUTH_URL=http://controller:35357/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2


替换掉OS_PASSWORD的密码。

创建并编辑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

export OS_AUTH_URL=http://controller:5000/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

  • 使用脚本

加载脚本文件更新环境变量:

$ . admin-openrc

请求一个认证令牌;

$ openstack token issue


三、镜像服务

1、前提条件

  • 创建数据库

连接数据库,使用root登录。

$ mysql -u root -p

创建 glance 数据库

MariaDB [(none)]> CREATE DATABASEglance;

赋予权限:

MariaDB [(none)]> GRANT ALL PRIVILEGESON glance.* TO 'glance'@'localhost' \

 IDENTIFIED BY 'GLANCE_DBPASS';

MariaDB [(none)]> GRANT ALL PRIVILEGESON glance.* TO 'glance'@'%' \

 IDENTIFIED BY 'GLANCE_DBPASS';

替换GLANCE_DBPASS为合适的密码;

退出数据库连接。

  • 导入admin证书来获取只有admin才能执行的命令行权限;

$ . admin-openrc

  • 创建服务认证:

创建glance用户

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

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

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

  • 创建glance服务实体

创建镜像服务API端口:

$ openstack endpoint create --region RegionOne \

  imagepublic http://controller:9292

$ openstack endpoint create --region RegionOne \

image internal http://controller:9292

$ openstack endpoint create --region RegionOne \

image admin http://controller:9292

2、安装并配置组件

  • 安装相关包:

# yum install openstack-glance

  • 编辑/etc/glance/glance-api.conf文件,完成以下操作;

在[keystone_authtoken]和[paste_deploy]选项中,配置认证服务权限:

[keystone_authtoken]

# ...

auth_uri=http://controller:5000

auth_url=http://controller:35357

memcached_servers=controller:11211

auth_type=password

project_domain_name=default

user_domain_name=default

project_name=service

username=glance

password=GLANCE_PASS

 

[paste_deploy]

# ...

flavor=keystone

替换掉GLANCE_PASS密码。删除或注释掉其他[keystone_authtoken]参数。

在[glance_store]选项中,配置本地文件系统存储和镜像文件位置。

[glance_store]

# ...

stores=file,http

default_store=file

filesystem_store_datadir=/var/lib/glance/images/

编辑/etc/glance/glance-registry.conf文件,并完成以下操作:

在[database]选项中,配置数据库权限:

[database]

# ...

connection=mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

替换掉 GLANCE_DBPASS密码。

在[keystone_authtoken]和[paste_deploy]选项中,配置认证服务权限:

[keystone_authtoken]
# ...
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=glance
password=GLANCE_PASS
[paste_deploy]
# ...
flavor=keystone

替换掉GLANCE_DBPASS密码。

4、更新镜像服务数据库

完成安装

  • 启动镜像服务并设置开机启动。

# systemctl enable openstack-glance-api.service \

 openstack-glance-registry.service

# systemctl start openstack-glance-api.service \

 openstack-glance-registry.service

5、验证操作

  •  获取admin权限

$ . admin-openrc

  • 下载源镜像

$ 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

四、计算服务

1、安装和配置控制节点

  • 准备条件

创建数据库,与之前步骤类似,这里不再详细列出

$ mysql -u root -p

MariaDB [(none)]> CREATE DATABASEnova_api;

MariaDB [(none)]> CREATE DATABASE nova;

MariaDB [(none)]> GRANT ALL PRIVILEGESON nova_api.* TO 'nova'@'localhost' \

 IDENTIFIED BY 'NOVA_DBPASS';

MariaDB [(none)]> GRANT ALL PRIVILEGESON nova_api.* TO 'nova'@'%' \

 IDENTIFIED BY 'NOVA_DBPASS';

MariaDB [(none)]> GRANT ALL PRIVILEGESON nova.* TO 'nova'@'localhost' \

 IDENTIFIED BY 'NOVA_DBPASS';

MariaDB [(none)]> GRANT ALL PRIVILEGESON nova.* TO 'nova'@'%' \

 IDENTIFIED BY 'NOVA_DBPASS';

  • 获取admin权限:

$ . admin-openrc

创建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

2、创建计算服务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

  • 安装并配置组件

安装相关包

# yum install openstack-nova-api openstack-nova-conductor \

 openstack-nova-console openstack-nova-novncproxy \

 openstack-nova-scheduler

  • 编辑 /etc/nova/nova.conf文件

在[DEFAULT]选项中,开启计算和元数据API

[DEFAULT]

# ...

enabled_apis=osapi_compute,metadata

在 [api_database]和[database]选项中,配置数据库连接

[api_database]

# ...

connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

[database]

# ...

connection=mysql+pymysql://nova:NOVA_DBPASS@controller/nova

替换NOVA_DBPASS密码。

在[DEFAULT] 选项中,配置消息队列连接。

[DEFAULT]

# ...

transport_url=rabbit://openstack:RABBIT_PASS@controller

替换掉RABBIT_PASS

在[api]和[keystone_authtoken]选项中,

[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

在[DEFAULT]选项中,配置my_ip

[DEFAULT]

# ...

my_ip=10.0.0.11

开启对网络服务的支持

[DEFAULT]

# ...

use_neutron=True

firewall_driver=nova.virt.firewall.NoopFirewallDriver

在[vnc] 选项中,配置VNC代理

[vnc]

enabled=true

# ...

vncserver_listen=$my_ip

vncserver_proxyclient_address=$my_ip

在 [glance] 选项中,配置镜像服务API的位置。

[glance]

# ...

api_servers=http://controller:9292

在 [oslo_concurrency]选项中,配置锁定路径

[oslo_concurrency]

# ...

lock_path=/var/lib/nova/tmp

更新数据库

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

# su -s /bin/sh -c "nova-manage db sync" 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

3、安装并配置计算节点

  • 安装并配置组件

安装相关包

# yum install openstack-nova-compute

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

在[DEFAULT]选项中,开启计算和元数据API

[DEFAULT]

# ...

enabled_apis=osapi_compute,metadata

在[DEFAULT]选项中,配置消息队列权限

[DEFAULT]

# ...

transport_url=rabbit://openstack:RABBIT_PASS@controller

替换掉 RABBIT_PASS

在 [api] 和 [keystone_authtoken]选项中,配置认证服务权限

[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

在[DEFAULT]选项中,配置my_ip参数

[DEFAULT]

# ...

my_ip=MANAGEMENT_INTERFACE_IP_ADDRESS

替换 MANAGEMENT_INTERFACE_IP_ADDRESS 为计算节点IP

在[DEFAULT]选项中,开启网络服务支持

[DEFAULT]

# ...

use_neutron=True

firewall_driver=nova.virt.firewall.NoopFirewallDriver

在[vnc]选项中,开启并配置远程控制台权限

[vnc]

# ...

enabled=True

vncserver_listen=0.0.0.0

vncserver_proxyclient_address=$my_ip

novncproxy_base_url=http://controller:6080/vnc_auto.html


在[glance]选项中,配置镜像服务API地址

[glance]

# ...

api_servers=http://controller:9292

在 [oslo_concurrency] 选项,配置锁定路径

[oslo_concurrency]

# ...

lock_path=/var/lib/nova/tmp

4、完成安装

  • 检查你的计算节点是否支持硬件虚拟化

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

如果输出值大于等于1,那么不需要配置,否则,需要做一下配置

编辑/etc/nova/nova.conf文件,配置[libvirt]

[libvirt]

# ...

virt_type=qemu

  • 开启计算服务并设置开机启动

# systemctl enable libvirtd.serviceopenstack-nova-compute.service

# systemctl start libvirtd.service openstack-nova-compute.service

  • 验证操作

在控制节点上进行操作。

获取admin权限

$ . admin-openrc

列出服务组件来验证每个组件都成功运行了

$ openstack compute service list

这里遇到问题:发现计算节点上服务没有启动

手把手教你安装OpenStack——Ocata安装指南(上)

手把手教你安装OpenStack——Ocata安装指南(上)查看计算节点日志:/var/log/nova/nova-compute.log发现

手把手教你安装OpenStack——Ocata安装指南(上)

里面提到需要配置placement,而官方文档并没有提到这一点。解决办法是安装openstack-nova-placement-api,并配置相关选项。手把手教你安装OpenStack——Ocata安装指南(上)


控制节点上,然后创建用户把用户placement添加到项目中去并创建placement类型的服务目录:手把手教你安装OpenStack——Ocata安装指南(上)手把手教你安装OpenStack——Ocata安装指南(上)

最终创建端口:

openstack endpoint create --regionRegionOne placement public http://192.168.0.112:8778

openstack endpoint create --regionRegionOne placement admin http://192.168.0.112:8778

openstack endpoint create --regionRegionOne placement intenal http://192.168.0.112:8778

在计算节点上编辑文件:/etc/nova/nova.conf

在placement选项中添加:

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 = root

os_region_name = RegionOne

替换掉password,重启计算服务:

# systemctl restartopenstack-nova-compute.service

可以看到服务已经启动:

手把手教你安装OpenStack——Ocata安装指南(上)

控制节点上也显示正常:

手把手教你安装OpenStack——Ocata安装指南(上)

在此参考了

http://superbigsea.blog.51cto.com/6862263/1901216,特别感谢!

下面接着验证操作:

3、列出认证服务中的API端口以检查连通性

$ openstack catalog list

手把手教你安装OpenStack——Ocata安装指南(上)4、         列出镜像服务中的镜像以验证连通性;

$ openstack image list

手把手教你安装OpenStack——Ocata安装指南(上)

下节继续配置网络服务和Dashboard。

手把手教你安装OpenStack——Ocata安装指南(上)

手把手教你安装OpenStack——Ocata安装指南(上)


上一篇:OpenStack trove原理及配置实践


下一篇:谷歌开源的TensorFlow Object Detection API视频物体识别系统实现(二)[超详细教程] ubuntu16.04版本