作者:独笔孤行@TaoCloud
本文档主要基于OpenStack官方文档,对官方文档加以更加详细的说明和解读,更适合新手部署学习OpenStack。
官方文档中主要为英文,只有M版和L版有中文版,但存在部分翻译错误,不建议新手使用。在此提供官方文档链接:OpenStack Docs: Newton Installation Guides
若在虚拟机中部署OpenStack,网络要选择vxlan模式,vlan模式只能在物理机中使用。
1.基础环境
1.1 最低硬件配置:
• 控制节点: 1 处理器, 4 GB 内存, 5 GB 磁盘
• 计算节点: 1 处理器, 2 GB 内存, 10 GB 磁盘
• 存储节点: 1 处理器, 2 GB 内存, 10 GB 磁盘+10G数据盘
节点 | 主机名 | 网卡1(eth0) | 网卡2(eth1) |
---|---|---|---|
控制节点 | controller | 10.0.0.10 | 192.168.20.10 |
计算节点 | compute | 10.0.0.11 | 192.168.20.11 |
存储节点 | storage | 10.0.0.12 | 192.168.20.12 |
eth0用途1:eth0为管理网络,是openstack环境里各个模块之间交互,连接数据库,连接Message Queue的网络,即openstack本身用的IP网段。
eth0用途2:eth0为隧道网络tunnel,openstack里使用vxlan模式,需要有隧道网络;隧道网络采用了点到点通信协议代替了交换连接,tunnel用于虚拟机走网络数据流量。
eth1用途 : eth1用于是链接外网,用户访问openstack虚拟机,必须有个网段是连外网的,用户通过这个网络能访问到虚拟机。
注解
标准的生产环境中,OpenStack需要管理网、外网、隧道网络共3个网段,本次主要遵循官方文档,将管理网络与隧道网络合并用eth0网卡。如果只是测试环境,可以将3个网络合并为一个网卡。
1.2 操作系统
CentOS-7-x86_64-Minimal-1511.iso
1.3 CPU虚拟化
本手册采用VMware WorkStation创建虚拟机搭建OpenStack Newton。按照如下内容打开CPU虚拟化功能。物理服务器需要进入BIOS,打开CPU虚拟化功能。打开完成后,在操作系统中执行:egrep -c '(vmx|svm)' /proc/cpuinfo 命令检测是否打开成功。返回值大于1说明完成。
1.4 网卡配置
本次测试采用每台服务器2个物理网卡,环境无法满足时同样可以只配置1个网卡,OpenStack所有网络都走同一网卡。CentOS7.2安装完成后,默认网卡名称是eno16777736,需要把eno16777736改成eth0.也可以不改使用默认名称。
更改网卡名称为eth0
[root@controller ~]# cd /etc/sysconfig/network-scripts/
[root@controller network-scripts]# mv ifcfg-eno16777736 ifcfg-eth0
编辑网卡配置文件,将NAME和DEVICE内容改为eth0.
编辑 /etc/default/grub。在GRUB_CMDLINE_LINUX中添加net.ifnames=0 biosdevname=0内容。
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root net.ifnames=0 biosdevname=0 rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
运行命令grub2-mkconfig -o /boot/grub2/grub.cfg 来重新生成GRUB配置并更新内核参数,完成后执行reboot命令重启服务器。按照同样的操作将其他网卡改成类似的形式。
详细介绍可参考链接:https://jingyan.baidu.com/article/17bd8e524c76a285ab2bb8ff.html
1.5 安全设置
关闭并禁用NetworkManager:
[root@controller ~]# systemctl stop NetworkManager
[root@controller ~]# systemctl disable NetworkManager
关闭并禁用防火墙:
[root@controller ~]# systemctl stop firewall
[root@controller ~]# systemctl disable firewall
1.6 域名解析
配置hosts域名解析,不改变原有内容,添加如下内容:
10.0.0.10 controller
10.0.0.11 compute
10.0.0.12 storage
1.7 yum源配置
OpenStack Newton的yum源有两种配置方式。即网络源和本地源。网络源需要OpenStack服务器能访问互联网。本地源需要把Newton.tar.gz压缩包拷贝到服务器制作本地源。
1.配置OpenStack-Newton网络源
cat /etc/yum.repos.d/OpenStack-Newton.repo
[OpenStack-Newtron]
name=OpenStack-Newtron
baseurl=http://vault.centos.org/7.2.1511/cloud/x86_64/openstack-newton/
gpgcheck=0
enabled=1
安装kvm源
rpm -ivh http://mirrors.163.com/centos/7.4.1708/virt/x86_64/kvm-common/centos-release-qemu-ev-1.0-1.el7.noarch.rpm
2.配置本地yum源
解压缩Newton.tar.gz压缩包到root目录下,并安装createrepo。
[root@compute ~]# cd Newton
[root@compute Newton]# yum localinstall createrepo-0.9.9-28.el7.noarch.rpm\
python-deltarpm-3.6-3.el7.x86_64.rpm deltarpm-3.6-3.el7.x86_64.rpm \
libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm libxml2-2.9.1-6.el7_2.3.x86_64.rpm
创建Newton本地源。
[root@compute ~]# createrepo /root/Newton
Spawning worker 0 with 568 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
编辑yum源配置文件
[root@controller ~]# cat /etc/yum.repos.d/OpenStack-Newton.repo
[OpenStack-Newton]
name=OpenStack-Newton
baseurl=file:///root/Newton
enabled=1
gpgcheck=0
选择以上任意一种方式配置好yum源后,生成yum源缓存。
[root@controller ~]# yum clean all;yum makecache
2.OpenStack环境
2.1概况
2.2密码安全
用户名称 密码名称 描述
root 数据库密码(不能使用变量) 数据库的root密码
admin ADMIN_PASS admin 用户密码
cinder CINDER_DBPASS 块设备存储服务的数据库密码
cinder CINDER_PASS 块设备存储服务的 cinder 密码
admin DASH_DBPASS Database password for the dashboard
demo DEMO_PASS demo 用户的密码
glance GLANCE_DBPASS 镜像服务的数据库密码
glance GLANCE_PASS 镜像服务的 glance 用户密码
keystone KEYSTONE_DBPASS 认证服务的数据库密码
neutron NEUTRON_DBPASS 网络服务的数据库密码
neutron NEUTRON_PASS 网络服务的 neutron 用户密码
nova NOVA_DBPASS 计算服务的数据库密码
nova NOVA_PASS 计算服务中nova
用户的密码
openstack RABBIT_PASS RabbitMQ的guest用户密码
2.3 网络时间协议(NTP)
Controller控制节点
1.安装软件包
# yum install chrony –y
2.编辑 /etc/chrony.conf 文件,按照你环境的要求,对下面的键进行添加,修改或者删除:
server controller iburst
- 为允许其他节点可以连接到控制节点的 chrony 后台进程,在
/etc/chrony.conf
文件添加下面的键值:allow 10.0.0.0/24
如有必要,将10.0.0.0/24替换成你子网的相应描述。
- 启动 NTP 服务并将其配置为随系统启动::
# systemctl enable chronyd.service # systemctl start chronyd.service
在控制节点上运行监测命令: chronyc sources。包含controller内容即可。
其他节点
1.安装软件包
# yum install chrony –y
2.编辑 /etc/chrony.conf 文件,按照你环境的要求,对下面的键进行添加,且只保留controller节点的时间同步,删除其他时间同步:
server controller iburst
3.启动 NTP 服务并将其配置为随系统启动::
# systemctl enable chronyd.service
# systemctl start chronyd.service
验证操作
建议在继续进一步的操作之前验证 NTP 的同步。有些节点,特别是哪些引用了控制节点的,需要花费一些时间去同步。
1.在控制节点上执行这个命令:
[root@controller ~]# chronyc sources
210 Number of sources = 5
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 85.199.214.100 1 6 237 35 -8610us[-8610us] +/- 153ms
^- ntp1.ams1.nl.leaseweb.net 2 6 377 38 +40ms[ +40ms] +/- 343ms
^+ biisoni.miuku.net 2 6 377 102 +572us[-2150us] +/- 110ms
^* cn.ntp.faelix.net 2 6 377 40 +1358us[-1762us] +/- 87ms
^- controller 3 6 377 33 -6501ns[-6501ns] +/- 87ms
在 Name/IP address 列的内容应显示NTP服务器的主机名或者IP地址。在 S 列的内容应该在NTP服务目前同步的上游服务器前显示 *。红色标记部分出现既可。
2.在所有其他节点执行相同命令:
[root@compute ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller 3 6 377 27 +5882us[+6188us] +/- 90ms
在 Name/IP address 列的内容应显示控制节点的主机名。
2.4 OpenStack包
所有节点
1.安装 OpenStack 客户端:
# yum install python-openstackclient
2.CentOS 默认启用了SELinux。安装openstack-selinux软件包以便自动管理OpenStack 服务的安全策略:
# yum install openstack-selinux
2.5 SQL数据库
大多数 OpenStack 服务使用 SQL 数据库来存储信息。 典型地,数据库运行在控制节点上。以下内容只在控制节点上操作。
Controller控制节点
1.安装软件包:
# yum install mariadb mariadb-server python2-PyMySQL
2.创建并编辑 /etc/my.cnf.d/openstack.cnf 文件,完成如下操作:
创建 [mysqld] 部分,设置 bind-address
的值为controller控制节点的管理网ip地址。以使得其它节点可以通过管理网络访问数据库,设置其他键值来启用有用的选项和 UTF-8 字符集:
[mysqld]
bind-address = 10.0.0.10
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
3.启动数据库服务并设置开机自启动:
# systemctl enable mariadb.service
# systemctl start mariadb.service
- 为了保证数据库服务的安全性,运行
mysql_secure_installation
脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。# mysql_secure_installation
2.6 消息队列
Controller控制节点
OpenStack使用message queue协调操作和各服务的状态信息。消息队列服务一般运行在控制节点上。OpenStack支持好几种消息队列服务包括RabbitMQ, Qpid, and ZeroMQ. 不过,大多数发行版本的OpenStack包支持特定的消息队列服务。本指南安装 RabbitMQ 消息队列服务,因为大部分发行版本都支持它。如果你想安装不同的消息队列服务,查询与之相关的文档。
消息队列运行在 controller控制节点上。 - 安装软件包:
# yum install rabbitmq-server -y
- 启动消息队列服务并设置开机自启动:
# systemctl enable rabbitmq-server.service # systemctl start rabbitmq-server.service
- 添加 openstack 用户:(用户名openstack,密码RABBIT_PASS)
# rabbitmqctl add_user openstack RABBIT_PASS Creating user "openstack" ...
用合适的密码替换 RABBIT_PASS
- 为 openstack 用户配置写和读的权限:
# rabbitmqctl set_permissions openstack ".*" ".*" ".*" Setting permissions for user "openstack" in vhost "/" ...
2.7 Memcached
Controller控制节点
认证服务认证缓存使用Memcached缓存令牌。缓存服务memecached运行在controller控制节点。在生产部署中,我们推荐联合启用防火墙、认证和加密保证它的安全。
1.安装软件包:# yum install memcached python-memcached
2.为了允许其他节点通过管理网络访问,编辑 /etc/sysconfig/memcached 文件,配置服务使用controller控制节点管理ip地址:
10.0.0.10
注解
替换原有有内容"127.0.0.1"或" "
配置完成后查看/etc/sysconfig/memcached文件内容为:
[root@controller ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="10.0.0.10"
3.启动Memcached 服务并设置开机自启动:
# systemctl enable memcached.service
# systemctl start memcached.service
3.认证服务
本节描述如何在控制器节点上安装和配置OpenStack认证服务,即Keystone。考虑到可扩展性,此配置部署了Fernet令牌和Apache HTTP服务器来处理请求。
Controller控制节点
3.1安装和配置
在安装和配置OpenStack认证服务之前,一定要创建数据库和管理员令牌。
1.创建数据库,完成如下操作:
用数据库客户端以root用户连接到数据库服务器:
$ mysql -u root -p
创建 keystone 数据库:
mysql> CREATE DATABASE keystone;
对keystone数据库赋予合适的权限:
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
可用合适的密码替换 KEYSTONE_DBPASS。
退出数据库连接。
注解
默认配置文件因分布不同而不同。您可能需要添加这些部分和选项,而不是修改现有的部分和选项。此外,配置片段中的省略号(…),表示应该保留的原有的默认配置。注解
本指南使用带有mod_wsgi的Apache HTTP服务器,响应端口5000和35357上的认证服务请求。默认情况下,keystone服务仍然侦听这些端口。因此,该指南手动禁用keystone服务。
2运行如下命令安装软件包:
# yum install openstack-keystone httpd mod_wsgi
3.编辑/etc/keystone/keystone.conf 文件完成如下操作:
在 [database]部分,配置数据库访问:
[database]
...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
可用keystone 认证服务数据库设置的密码替换KEYSTONE_DBPASS
注解
注释或者移除[database]部分的其他任何connection选项
在 [token] 部分,配置Fernet 令牌提供者:
[token]
...
provider = fernet
4.同步认证服务数据库:
# su -s /bin/sh -c "keystone-manage db_sync" keystone
5.初始化Fernet 存储库:
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
6.引导认证服务:
# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:35357/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
用合适的管理员用户密码替换 ADMIN_PASS。
7.配置Apache http服务,编辑/etc/httpd/conf/httpd.conf 文件,配置ServerName 选项 为控制节点:
ServerName controller
8.创建指向 /usr/share/keystone/wsgi-keystone.conf 文件的链接:
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
9.启动Apache HTTP服务并设置开机自启动:
# systemctl enable httpd.service
# systemctl start httpd.service
10.配置管理员账户
$ 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
可用在“安装和配置”部分使用keystone-manage bootstrap 命令设置的密码替换 ADMIN_PASS
3.2创建域、项目、用户和角色
身份认证服务为每个OpenStack服务提供认证服务。认证服务使用 domains, projects, users, 和 roles的组合。
1.本指南使用一个服务项目,该服务项目为添加到环境中的每个服务包含唯一的用户。创建service项目
$ openstack project create --domain default \
--description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | 24ac7f19cd944f4cba1d77469b2a73ed |
| is_domain | False |
| name | service |
| parent_id | default |
+-------------+----------------------------------+
2.常规(非管理)任务应该使用非特权项目和用户。作为一个例子,这个指南创建demo项目和用户。
创建 demo 项目:
$ openstack project create --domain default \
--description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | 231ad6e7ebba47d6a1e57e1cc07ae446 |
| is_domain | False |
| name | demo |
| parent_id | default |
+-------------+----------------------------------+
注解
在为该项目创建额外用户时,不要重复此步骤。
创建 demo 用户:
$ openstack user create --domain default \
--password-prompt demo
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | aeda23aa78f44e859900e22c24817832 |
| name