作者: 独笔孤行 @TaoCloud 请添加链接描述 http://www.taocloudx.com/
本文档主要基于 OpenStack 官方文档, 对官方文档加以更加详细的说明和解读, 更适合新手部署学习 OpenStack.
官方文档中主要为英文, 只有 M 版和 L 版有中文版, 但存在部分翻译错误, 不建议新手使用. 在此提供官方文档链接: https://docs.openstack.org/newton/install/
若在虚拟机中部署 OpenStack, 网络要选择 vxlan 模式, vlan 模式只能在物理机中使用.
1. 基础环境
1.1 最低硬件配置:
? 控制节点: 1 处理器, 4 GB 内存, 5 GB 磁盘
? 计算节点: 1 处理器, 2 GB 内存, 10 GB 磁盘
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 内容.
运行命令 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 域名解析, 不改变原有内容, 添加如下内容:
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.rpmpython-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 | demo |
- | password_expires_at | None |
- +---------------------+----------------------------------+
创建 user 角色:
- $ openstack role create user
- +-----------+----------------------------------+
- | Field | Value |
- +-----------+----------------------------------+
- | domain_id | None |
- | id | 997ce8d05fc143ac97d83fdfb5998552 |
- | name | user |
- +-----------+----------------------------------+
添加 user 角色到 demo 项目和用户:
$ openstack role add --project demo --user demo user
注解
此命令没有输出
注解
可以重复此步骤创建更多项目和用户
3.3 验证操作
在安装其他服务之前, 验证身份认证服务的操作.
注解
在控制节点上执行这些命令
1. 考虑安全因素, 关闭临时认证令牌机制:
编辑 /etc/keystone/keystone-paste.ini 文件, 从 [pipeline:public_api], [pipeline:admin_api], 和 [pipeline:api_v3] 这 3 个部分移除 admin_token_auth.
2. 重置 OS_AUTH_URL 和 OS_PASSWORD 临时环境变量:
$ unset OS_AUTH_URL OS_PASSWORD
3. 作为 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
- Password:
- +------------+-----------------------------------------------------------------+
- | Field | Value |
- +------------+-----------------------------------------------------------------+
- | expires | 2016-02-12T20:14:07.056119Z |
- | id | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv |
- | | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 |
- | | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws |
- | project_id | 343d245e850143a096806dfaefa9afdc |
- | user_id | ac3377633149401296f6c0d92d79dc16 |
- +------------+-----------------------------------------------------------------+
注解
这个命令使用 admin 用户的密码.
4. 作为 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
- Password:
- +------------+---------------------------------------------------------+
- | Field | Value |
- +------------+---------------------------------------------------------+
- | expires | 2018-06-22 10:14:31+00:00 |
- | id | gAAAAABbLL33VlBkLLD_fu0KXR97qbk0GKzjeDgmQVokSHfHnys9AUv |
- | | n0SXPJHxbh0inyMUWQFQTYbwjOLztN0UERzb9Lohrm1QPtJfrO1YYej |
- | | 4YBqnPpwjbaQvWLg9g7MBVcaZZK1A771Yl2BEUKxttAOhNemItP0Nfy |
- | | rIQOsPnCprKuycPQcA |
- | project_id | 31eb23991654472f986b104f31c0eafe |
- | user_id | 0ef27ca68eb84bd396cee85e142d52c5 |
- +------------+---------------------------------------------------------+
注解
这个命令使用 demo 用户密码和 API 端口 5000, 这样只会允许对身份认证服务 API 的常规 (非管理) 访问.
3.4 创建 OpenStack 客户端环境脚本
前一节中使用环境变量和命令选项的组合, 通过 openstack 客户端与身份认证服务交互. 为了提升客户端操作的效率, OpenStack 支持简单的客户端环境变量脚本即 OpenRC 文件. 这些脚本通常包含客户端所有常见的选项, 当然也支持唯一选项.
为 admin 和 demo 项目和用户创建客户端项目脚本, 本指南的接下来的部分会引用这些脚本, 为客户端操作加载合适的的凭证. 本指南的接下来的部分会引用这些脚本, 为客户端操作加载合适的的凭证.
编辑 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
- export OS_AUTH_URL=http://controller:35357/v3
- export OS_IDENTITY_API_VERSION=3
- export OS_IMAGE_API_VERSION=2
用在认证服务中设置的 admin 用户的密码替换 ADMIN_PASS.
编辑 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
用在认证服务中设置的 demo 用户的密码替换 DEMO_PASS.
使用特定租户和用户运行客户端, 你可以在运行之前简单地加载相关客户端脚本. 例如:
加载 admin-openrc 文件以满足身份认证服务的环境变量, 和 admin 项目和用户认证:
$ . admin-openrc
请求认证令牌:
- $ openstack token issue
- +------------+---------------------------------------------------------+
- | Field | Value |
- +------------+---------------------------------------------------------+
- | expires | 2018-06-22 10:20:16+00:00 |
- | id | gAAAAABbLL9QK8flVesG1iK83v-VUpbbx4UaNul_DpltZsU6fmeSwgg |
- | | 4P2EwUx3IlVvViAeX8esAIW3FQhTX3iEuT4P5ZMhb4eEr0o9X6v4YAV |
- | | qNKBnTVhtY20TwK5AW7TfQGE6qDk1qeZRtHb8G2j5KaxgnFzoazwGeu |
- | | v9trkukOfzxQ8wJzfA |
- | project_id | 257966dab33148b9843b7e86efde84e8 |
- | user_id | 73dcdee1cc954a598a67d095211bf582 |
- +------------+---------------------------------------------------------+
4. 镜像服务
Controller 控制节点
4.1 安装前准备
这个部分描述如何在控制节点上安装和配置镜像服务, 即 glance. 简单来说, 这个配置将镜像保存在本地文件系统中.
安装和配置镜像服务之前, 你必须创建创建一个数据库, 服务凭证和 API 端点.
创建数据库并完成以下步骤:
用数据库连接客户端以 root 用户连接到数据库服务器: $ mysql -u root -p
创建 glance 数据库:
mysql> CREATE DATABASE glance;
对 glance 数据库赋予合适的权限:
- mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
- mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
可用合适的密码替换 GLANCE_DBPASS.
获得 admin 凭证来获取只有管理员能执行的命令的访问权限: $ . admin-openrc
要创建服务证书, 完成这些步骤:
创建 glance 用户:
- $ openstack user create --domain default --password-prompt glance
- User Password:
- Repeat User Password:
- +---------------------+----------------------------------+
- | Field | Value |
- +---------------------+----------------------------------+
- | domain_id | default |
- | enabled | True |
- | id | 3f4e777c4062483ab8d9edd7dff829df |
- | name | glance |
- | password_expires_at | None |
- +---------------------+----------------------------------+
添加 admin 角色到 glance 用户和 service 项目:
$ openstack role add --project service --user glance admin
注解
此命令没有输出.
创建 glance 服务实体:
- $ openstack service create --name glance --description "OpenStack Image" image
- +-------------+----------------------------------+
- | Field | Value |
- +-------------+----------------------------------+
- | description | OpenStack Image |
- | enabled | True |
- | id | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
- | name | glance |
- | type | image |
- +-------------+----------------------------------+
4. 创建镜像服务的 API 端点:
- $ openstack endpoint create --region RegionOne image public http://controller:9292
- +--------------+----------------------------------+
- | Field | Value |
- +--------------+----------------------------------+
- | enabled | True |
- | id | 340be3625e9b4239a6415d034e98aace |
- | interface | public |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
- | service_name | glance |
- | service_type | image |
- | url | http://controller:9292 |
- +--------------+----------------------------------+
- $ openstack endpoint create --region RegionOne image internal http://controller:9292
- +--------------+----------------------------------+
- | Field | Value |
- +--------------+----------------------------------+
- | enabled | True |
- | id | a6e4b153c2ae4c919eccfdbb7dceb5d2 |
- | interface | internal |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
- | service_name | glance |
- | service_type | image |
- | url | http://controller:9292 |
- +--------------+----------------------------------+
- $ openstack endpoint create --region RegionOne image admin http://controller:9292
- +--------------+----------------------------------+
- | Field | Value |
- +--------------+----------------------------------+
- | enabled | True |
- | id | 0c37ed58103f4300a84ff125a539032d |
- | interface | admin |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
- | service_name | glance |
- | service_type | image |
- | url | http://controller:9292 |
- +--------------+----------------------------------+
4.2 安装配置组件
注解
默认配置文件在各发行版本中可能不同. 你可能需要添加这些部分和选项, 而不是修改已经存在的部分和选项. 另外, 在配置片段中的省略号 (...) 表示默认的配置选项应该保留.
安装软件包:
# yum install openstack-glance
编辑 /etc/glance/glance-api.conf 文件完成如下步骤:
在 [database] 部分, 配置数据库访问:
- [database]
- ...
- connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
可用在 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_PASS 替换为在认证服务中为 glance 用户设置的密码.
注解
注释或删除 [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 镜像服务数据库设置的密码替换 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 用户的密码替换 GLANCE_PASS.
注解
注释或者删除 [keystone_authtoken] 部分的其它选项.
同步镜像服务数据库:
# su -s /bin/sh -c "glance-manage db_sync" glance
注解
忽略任何输出.
5. 启动镜像服务并设置开机自启动:
- # systemctl enable openstack-glance-api.service openstack-glance-registry.service
- # systemctl start openstack-glance-api.service openstack-glance-registry.service
4.3 验证操作
CirrOS 是一个小型的 Linux 镜像, 使用 CirrOS 对镜像服务进行验证, 可以用来测试 OpenStack 部署.
注解
在控制节点执行如下命令.
获得 admin 凭证来获取只有管理员能执行的命令的访问权限: $ . admin-openrc
下载镜像:
$ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
注解
如果没有 wget 命令请安装它: yum install wget -y
使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见, 这样所有的项目都可以访问它:
- $ openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public
- +------------------+------------------------------------------------------+
- | Field | Value |
- +------------------+------------------------------------------------------+
- | checksum | 133eae9fb1c98f45894a4e60d8736619 |
- | container_format | bare |
- | created_at | 2015-03-26T16:52:10Z |
- | disk_format | qcow2 |
- | file | /v2/images/cc5c6982-4910-471e-b864-1098015901b5/file |
- | id | cc5c6982-4910-471e-b864-1098015901b5 |
- | min_disk | 0 |
- | min_ram | 0 |
- | name | cirros |
- | owner | ae7a98326b9c455588edd2656d723b9d |
- | protected | False |
- | schema | /v2/schemas/image |
- | size | 13200896 |
- | status | active |
- | tags | |
- | updated_at | 2015-03-26T16:52:10Z |
- | virtual_size | None |
- | visibility | public |
- +------------------+------------------------------------------------------+
注解
OpenStack 是动态生成 ID 的, 因此您看到的输出会与示例中的命令行输出不相同.
确认镜像的上传并验证属性:
- $ openstack image list
- +--------------------------------------+--------+--------+
- | ID | Name | Status |
- +--------------------------------------+--------+--------+
- | 38047887-61a7-41ea-9b49-27987d5e8bb9 | cirros | active |
- +--------------------------------------+--------+--------+
5. 计算服务
Controller 控制节点
这个部分将描述如何在控制节点上安装和配置 Compute 服务, 即 nova.
5.1 安装前准备
在安装和配置 Compute 服务前, 你必须创建数据库服务的凭据以及 API endpoints.
创建数据库, 完成如下步骤:
用数据库连接客户端以 root 用户连接到数据库服务器: $ mysql -u root -p
创建 nova_api 和 nova 数据库:
- mysql> CREATE DATABASE nova_api;
- mysql> CREATE DATABASE nova;
给 nova_api 和 nova 数据库赋予合适的权限:
- mysql> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
- mysql> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
- mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
- mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
可用合适的密码替换 NOVA_DBPASS.
退出数据库连接.
获得 admin 凭证来获取只有管理员能执行的命令的访问权限: $ . admin-openrc
要创建服务证书, 完成如下步骤:
创建 nova 用户:
- $ openstack user create --domain default --password-prompt nova
- User Password:
- Repeat User Password:
- +---------------------+----------------------------------+
- | Field | Value |
- +---------------------+----------------------------------+
- | domain_id | default |
- | enabled | True |
- | id | 8a7dbf5279404537b1c7b86c033620fe |
- | name | nova |
- | password_expires_at | None |
- +---------------------+----------------------------------+
添加 admin 角色到 nova 用户:
$ openstack role add --project service --user nova admin
注解
此命令没有输出.
创建 nova 服务实体:
- $ openstack service create --name nova --description "OpenStack Compute" compute
- +-------------+----------------------------------+
- | Field | Value |
- +-------------+----------------------------------+
- | description | OpenStack Compute |
- | enabled | True |
- | id | 060d59eac51b4594815603d75a00aba2 |
- | name | nova |
- | type | compute |
- +-------------+----------------------------------+
3. 创建 Compute 服务 API 端点:
- $ openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s
- +--------------+-------------------------------------------+
- | Field | Value |
- +--------------+-------------------------------------------+
- | enabled | True |
- | id | 3c1caa473bfe4390a11e7177894bcc7b |
- | interface | public |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | 060d59eac51b4594815603d75a00aba2 |
- | service_name | nova |
- | service_type | compute |
- | url | http://controller:8774/v2.1/%(tenant_id)s |
- +--------------+-------------------------------------------+
- $ openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s
- +--------------+-------------------------------------------+
- | Field | Value |
- +--------------+-------------------------------------------+
- | enabled | True |
- | id | e3c918de680746a586eac1f2d9bc10ab |
- | interface | internal |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | 060d59eac51b4594815603d75a00aba2 |
- | service_name | nova |
- | service_type | compute |
- | url | http://controller:8774/v2.1/%(tenant_id)s |
- +--------------+-------------------------------------------+
- $ openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s
- +--------------+-------------------------------------------+
- | Field | Value |
- +--------------+-------------------------------------------+
- | enabled | True |
- | id | 38f7af91666a47cfb97b4dc790b94424 |
- | interface | admin |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | 060d59eac51b4594815603d75a00aba2 |
- | service_name | nova |
- | service_type | compute |
- | url | http://controller:8774/v2.1/%(tenant_id)s |
- +--------------+-------------------------------------------+
5.2 安装配置组件
注解
默认配置文件在各发行版本中可能不同. 你可能需要添加这些部分, 选项而不是修改已经存在的部分和选项. 另外, 在配置片段中的省略号 (...) 表示默认的配置选项你应该保留.
安装软件包:
# 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 和 nova_api 计算服务数据库设置的密码替换 NOVA_DBPASS.
在 [DEFAULT] 部分, 配置 RabbitMQ 消息队列访问:
- [DEFAULT]
- ...
- transport_url = rabbit://openstack:RABBIT_PASS@controller
可用在 RabbitMQ 消息队列设置的 openstack 账户密码替换 RABBIT_PASS.
在 [DEFAULT] 和 [keystone_authtoken] 部分, 配置身份认证服务访问:
- [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 = nova
- password = NOVA_PASS
可用在认证服务中设置的 nova 用户密码替换 NOVA_PASS.
注解
注释或者删除 [keystone_authtoken] 部分的其它选项.
在 [DEFAULT] 部分, 配置 my_ip 选项使用控制节点的管理网:
- [DEFAULT]
- ...
- my_ip = 10.0.0.10
在 [DEFAULT] 部分, 允许使用网络服务:
- [DEFAULT]
- ...
- use_neutron = True
- firewall_driver = nova.virt.firewall.NoopFirewallDriver
注解
默认情况下, 计算服务使用内置的防火墙服务. 由于网络服务包含了防火墙服务, 你必须使用 nova.virt.firewall.NoopFirewallDriver 防火墙服务来禁用掉计算服务内置的防火墙服务
在 [vnc] 部分, 配置配置 VNC 代理使用控制节点的管理接口 IP 地址:
- [vnc]
- ...
- 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
3. 同步计算服务数据库:
- # su -s /bin/sh -c "nova-manage api_db sync" nova
- # su -s /bin/sh -c "nova-manage db sync" nova
注解
忽略任何信息输出.
4. 启动计算服务并设置开机自启动:
- # 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
Compute 计算节点
安装并配置计算节点. 这部分描述如何在计算节点上安装并配置计算服务. 计算服务支持多种 hypervisors 虚拟化方式部署 instances 或 VMs. 简而言之, 本次配置使用 KVM 计算节点扩展的 QEMU 虚拟机管理程序, 支持对虚拟化的硬件加速. 对于传统的硬件, 本配置使用 QEMU 虚拟化. 可以根据这些说明进行细微的调整, 或者使用额外的计算节点来横向扩展环境.
注解
假设已经按照之前的向导配置好了第一个计算节点. 如果想要配置更多的计算节点, 以类似配置第一个计算节点的方式准备好其它节点. 每个额外的计算节点都需要一个唯一的 IP 地址.
6.5.3 安装配置组件
注解
默认配置文件在各发行版本中可能不同. 你可能需要添加这些部分选项, 而不是修改已经存在的部分和选项. 此外, 在配置片段中的省略号 (...) 表示默认的配置选项你应该保留.
安装软件包:
# yum install openstack-nova-compute
编辑 /etc/nova/nova.conf 文件完成如下步骤:
在 [DEFAULT] 部分, 只启用计算和元数据 API:
- [DEFAULT]
- ...
- enabled_apis = osapi_compute,metadata
在 [DEFAULT] 部分, 配置 RabbitMQ 消息队列访问:
- [DEFAULT]
- ...
- transport_url = rabbit://openstack:RABBIT_PASS@controller
可用在 RabbitMQ 消息队列中设置 openstack 用户的密码替换 RABBIT_PASS.
在 [DEFAULT] 和 [keystone_authtoken] 部分, 配置身份认证服务访问:
- [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 = nova
- password = NOVA_PASS
可用在认证服务中设置的 nova 用户密码替换 NOVA_PASS.
注解
注释或者删除 [keystone_authtoken] 部分的其它选项.
在 [DEFAULT] 部分, 配置 my_ip 选项:
- [DEFAULT]
- ...
- my_ip = 10.0.0.11
可用在 compute 计算节点的管理网 ip 地址替换 10.0.0.11.
在 [DEFAULT] 部分, 启用网络服务:
- [DEFAULT]
- ...
- use_neutron = True
- firewall_driver = nova.virt.firewall.NoopFirewallDriver
注解
缺省情况下, Compute 使用内置的防火墙服务. 由于 Networking 包含了防火墙服务, 所以你必须通过使用 nova.virt.firewall.NoopFirewallDriver 来禁用 Compute 内置的防火墙服务.
在 [vnc] 部分, 启用并配置远程控制台访问:
- [vnc]
- ...
- enabled = True
- vncserver_listen = 0.0.0.0
- vncserver_proxyclient_address = $my_ip
- novncproxy_base_url = http://10.0.0.10:6080/vnc_auto.html
服务器组件监听所有的 IP 地址, 而代理组件仅仅监听计算节点管理网络接口的 IP 地址. 基本的 URL 表示可以使用 web 浏览器访问位于该计算节点上实例的远程控制台位置.
注解
10.0.0.10 是控制节点管理网的 ip 地址, 可用使用控制节点管理网的 ip 地址替换 10.0.0.10, 尽量使用控制节点管理网的 ip 地址而不是域名, 使用域名可能出现无法解析的情况.
在 [glance] 部分, 配置镜像服务 API 的位置:
- [glance]
- ...
- api_servers = http://controller:9292
在 [oslo_concurrency] 部分, 配置锁路径:
- [oslo_concurrency]
- ...
- lock_path = /var/lib/nova/tmp
检查计算节点是否支持虚拟机的硬件加速:
$ egrep -c '(vmx|svm)' /proc/cpuinfo
如果这个命令返回值大于等于 1, 说明计算节点支持硬件加速且不需要其它配置.
如果这个命令返回值是 0, 说明计算节点不支持硬件加速. 必须配置 libvirt 来使用 QEMU 代替 KVM. 或者打开 CPU 虚拟化使其支持虚拟化硬件加速.
返回值是 0 时, 编辑 /etc/nova/nova.conf 文件的 [libvirt] 部分为如下内容:
- [libvirt]
- ...
- virt_type = qemu
启动计算服务及其依赖, 并将其配置为开机自动启动:
- # systemctl enable libvirtd.service openstack-nova-compute.service
- # systemctl start libvirtd.service openstack-nova-compute.service
注解
如果 nova-compute 服务启动失败, 检查日志 /var/log/nova/nova-compute.log. 类似报错消息如 AMQP server on controller:5672 is unreachable, 说明控制节点的防火墙阻止访问 5672 端口.
5.4 验证操作
注解
在控制节点上执行如下命令, 验证计算服务操作.
获得 admin 凭证来获取只有管理员能执行的命令的访问权限: $ . admin-openrc
列出服务组件, 以验证是否成功启动并注册了每个进程:
- $ openstack compute service list
- +----+--------------------+------------+----------+---------+-------+----------------------------+
- | Id | Binary | Host | Zone | Status | State | Updated At |
- +----+--------------------+------------+----------+---------+-------+----------------------------+
- | 1 | nova-consoleauth | controller | internal | enabled | up | 2016-02-09T23:11:15.000000 |
- | 2 | nova-scheduler | controller | internal | enabled | up | 2016-02-09T23:11:15.000000 |
- | 3 | nova-conductor | controller | internal | enabled | up | 2016-02-09T23:11:16.000000 |
- | 4 | nova-compute | compute1 | nova | enabled | up | 2016-02-09T23:11:20.000000 |
- +----+--------------------+------------+----------+---------+-------+----------------------------+
注解
输出应该显示三个服务组件在控制节点上启用, 一个服务组件在计算节点上启用.
6. 网络服务
Controller 控制节点
6.1 安装前准备
在配置 OpenStack 的 neutron 网络服务之前, 需要创建 neutron 数据库, 服务凭证和 API 端点.
1. 创建数据库完成如下步骤:
用数据库连接客户端以 root 用户连接到数据库服务器:
$ mysql -u root -p
创建 neutron 数据库:
mysql> CREATE DATABASE neutron;
对 neutron 数据库赋予合适的权限:
- mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
- mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
可用合适的密码替换 NEUTRON_DBPASS.
退出数据库连接.
1. 获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
$ . admin-openrc
2. 创建服务证书, 完成如下步骤:
创建 neutron 用户:
- $ openstack user create --domain default --password-prompt neutron
- User Password:
- Repeat User Password:
- +---------------------+----------------------------------+
- | Field | Value |
- +---------------------+----------------------------------+
- | domain_id | default |
- | enabled | True |
- | id | 319f34694728440eb8ffcb27b6dd8b8a |
- | name | neutron |
- | password_expires_at | None |
- +---------------------+----------------------------------+
添加 admin 角色到 neutron 用户:
$ openstack role add --project service --user neutron admin
注解
此命令没有输出.
创建 neutron 服务实体:
- $ openstack service create --name neutron --description "OpenStack Networking" network
- +-------------+----------------------------------+
- | Field | Value |
- +-------------+----------------------------------+
- | description | OpenStack Networking |
- | enabled | True |
- | id | f71529314dab4a4d8eca427e701d209e |
- | name | neutron |
- | type | network |
- +-------------+----------------------------------+
3. 创建网络服务 API 端点:
- $ openstack endpoint create --region RegionOne network public http://controller:9696
- +--------------+----------------------------------+
- | Field | Value |
- +--------------+----------------------------------+
- | enabled | True |
- | id | 85d80a6d02fc4b7683f611d7fc1493a3 |
- | interface | public |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | f71529314dab4a4d8eca427e701d209e |
- | service_name | neutron |
- | service_type | network |
- | url | http://controller:9696 |
- +--------------+----------------------------------+
- $ openstack endpoint create --region RegionOne network internal http://controller:9696
- +--------------+----------------------------------+
- | Field | Value |
- +--------------+----------------------------------+
- | enabled | True |
- | id | 09753b537ac74422a68d2d791cf3714f |
- | interface | internal |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | f71529314dab4a4d8eca427e701d209e |
- | service_name | neutron |
- | service_type | network |
- | url | http://controller:9696 |
- +--------------+----------------------------------+
- $ openstack endpoint create --region RegionOne network admin http://controller:9696
- +--------------+----------------------------------+
- | Field | Value |
- +--------------+----------------------------------+
- | enabled | True |
- | id | 1ee14289c9374dffb5db92a5c112fc4e |
- | interface | admin |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | f71529314dab4a4d8eca427e701d209e |
- | service_name | neutron |
- | service_type | network |
- | url | http://controller:9696 |
- +--------------+----------------------------------+
6.2 配置网络服务
OpenStack 有公共网络和私有网络两种网络架构. 在物理机中部署 OpenStack 时, 两种网络可以选择其中一种部署, 公共网络配置简单, 私有网络配置复杂. 但在虚拟机中部署 OpenStack 时, 不支持公共网络部署, 只支持私有网络 vxlan 模式部署, 因此本次配置选择私有网络 vxlan 模式部署.
私有网络在公共网络的基础上多了 layer-3 服务, 增加了私有网络, 路由器以及浮动 IP 地址等内容. 支持实例连接到私有网络. demo 或者其他没有特权的用户可以管理自己的私有网络, 包含连接公网和私网的路由器. 另外, 浮动 IP 地址可以让实例使用私有网络连接到外部网络, 例如互联网.
典型的私有网络一般使用覆盖网络. 覆盖网络, 例如 VXLAN 包含了额外的数据头, 这些数据头增加了开销, 减少了有效内容和用户数据的可用空间. 在不了解虚拟网络架构的情况下, 实例尝试用以太网最大传输单元 (MTU) 1500 字节发送数据包. 网络服务会自动给实例提供正确的 MTU 的值通过 DHCP 的方式. 但是, 一些云镜像并没有使用 DHCP 或者忽视了 DHCP MTU 选项, 要求使用元数据或者脚本来进行配置
注解
私有网络支持实例连接到公共网络. 在控制节点安装并配置网络组件.
1. 安装组件
# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
2. 配置服务组件
编辑 /etc/neutron/neutron.conf 文件, 完成如下操作:
在数据库 [database] 部分, 配置数据库访问:
- [database]
- ...
- connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
可用创建 neutron 数据库设置的密码替换 NEUTRON_DBPASS.
注解
注释或者删除[database] 部分的其他 connection 选项.
在 [DEFAULT] 部分, 启用 Modular Layer 2 (ML2)插件, 路由服务和重叠的 IP 地址:
- [DEFAULT]
- ...
- core_plugin = ml2
- service_plugins = router
- allow_overlapping_ips = True
在 [DEFAULT] 部分, 配置 RabbitMQ 消息队列访问:
- [DEFAULT]
- ...
- transport_url = rabbit://openstack:RABBIT_PASS@controller
可用在 RabbitMQ 消息队列中设置 openstack 用户的密码替换 RABBIT_PASS.
在 [DEFAULT] 和 [keystone_authtoken] 部分, 配置身份认证服务访问:
- [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
可用在身份认证服务中设置的 neutron 用户的密码替换 NEUTRON_PASS.
注解
注释或者删除[keystone_authtoken] 部分的其他选项.
在 [DEFAULT] 和 [nova] 部分, 配置网络服务来通知计算节点的网络拓扑变化:
- [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 用户的密码替换 NOVA_PASS.
在 [oslo_concurrency] 部分, 配置锁路径:
- [oslo_concurrency]
- ...
- lock_path = /var/lib/neutron/tmp
3. 配置 Modular Layer 2 (ML2) 插件
ML2 插件使用 Linuxbridge 机制, 为实例创建 layer-2 虚拟网络基础设施
编辑 /etc/neutron/plugins/ml2/ml2_conf.ini 文件, 完成如下内容:
在 [ml2] 部分, 启用 flat,VLAN 和 VXLAN 网络:
- [ml2]
- ...
- type_drivers = flat,vlan,vxlan
在 [ml2] 部分, 配置 VXLAN 私有网络:
- [ml2]
- ...
- tenant_network_types = vxlan
在 [ml2] 部分, 启用 Linuxbridge 和 layer-2 机制:
- [ml2]
- ...
- mechanism_drivers = linuxbridge,l2population
警告
在你配置完 ML2 插件之后, 删除可能导致数据库不一致的 type_drivers 项的值.
注解
Linuxbridge 代理只支持 VXLAN 覆盖网络.
在 [ml2] 部分, 启用端口安全扩展驱动:
- [ml2]
- ...
- extension_drivers = port_security
在 [ml2_type_flat] 部分, 配置公共虚拟网络为 flat 网络:
- [ml2_type_flat]
- ...
- flat_networks = provider
在 [ml2_type_vxlan] 部分, 配置私有网络 VXLAN 识别的网络范围:
- [ml2_type_vxlan]
- ...
- vni_ranges = 1:1000
在 [securitygroup] 部分, 启用 ipset 增加安全组规则的高效性:
- [securitygroup]
- ...
- enable_ipset = True
4. 配置 Linuxbridge 代理
Linuxbridge 代理为实例建立 layer-2 虚拟网络并且处理安全组规则.
编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件完成如下步骤:
在 [linux_bridge] 部分, 将 provider 虚拟网络和 provider 物理网络接口对应起来:
- [linux_bridge]
- physical_interface_mappings = provider:eth1
可用 provider 物理网络接口的名字替换 eth1.
在 [vxlan] 部分, 启用 VXLAN 覆盖网络, 配置覆盖网络的物理网络接口的 IP 地址, 启用 layer-2 population:
- [vxlan]
- enable_vxlan = True
- local_ip = 10.0.0.10
- l2_population = True
可用处理覆盖网络的底层物理网络接口的 IP 地址替换 10.0.0.10. 本次环境搭建使用管理网络接口与其他节点建立流量隧道. 因此, 将 10.0.0.10 替换为控制节点的管理网络的 IP 地址.
在 [securitygroup] 部分, 启用安全组并配置 Linux 桥接防火墙驱动:
- [securitygroup]
- ...
- enable_security_group = True
- firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
5. 配置 layer-3 代理
Layer-3 代理为私有虚拟网络提供路由和 NAT 服务
编辑 / etc/neutron/l3_agent.ini 文件并完成以下操作:
在 [DEFAULT] 部分, 配置 Linux 网桥接口驱动和外部网络桥接:
- [DEFAULT]
- ...
- interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
6. 配置 DHCP 代理
DHCP 代理提供虚拟网络 DHCP 服务.
编辑 / etc/neutron/dhcp_agent.ini 文件并完成以下操作:
在 [DEFAULT] 部分, 配置 Linuxbridge 驱动接口, DHCP 驱动并启用隔离元数据, 这样在 provider 网络上的实例就可以通过网络来访问元数据:
- [DEFAULT]
- ...
- interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
- dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
- enable_isolated_metadata = True
7. 配置元数据代理
元数据代理负责提供配置信息, 例如: 访问实例的凭证.
编辑 /etc/neutron/metadata_agent.ini 文件完成如下操作:
在 [DEFAULT] 部分, 配置元数据主机以及共享密码
- [DEFAULT]
- ...
- nova_metadata_ip = controller
- metadata_proxy_shared_secret = METADATA_SECRET
可用合适的元数据代理密码替换 METADATA_SECRET.
8. 配置计算服务使用网络
注解
此处为 controller 控制节点的计算服务, 而非 compute 计算节点.
编辑 / etc/nova/nova.conf 文件并完成如下操作:
在 [neutron] 部分, 配置访问参数, 启用元数据代理并设置密码:
- [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
可用在认证服务中设置的 neutron 用户密码替换 NEUTRON_PASS.
可用在元数据代理中设置的密码替换 METADATA_SECRET.
9. 完成安装
网络服务初始化脚本需要 / 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 neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
- # systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
启动 layer-3 服务并设置开机自启动:
- # systemctl enable neutron-l3-agent.service
- # systemctl start neutron-l3-agent.service
Compute 计算节点
6.3. 安装组件
# yum install openstack-neutron-linuxbridge ebtables ipset
6.4. 配置通用组件
网络通用组件的配置包括认证机制, 消息队列和插件.
注解
默认配置文件因分布不同而不同. 您可能需要添加这些部分和选项, 而不是修改现有的部分和选项. 此外, 配置片段中的省略号(...), 表示应该保留的原有的默认配置.
编辑 /etc/neutron/neutron.conf 文件完成如下操作:
在 [database] 部分, 注释所有 connection 项, 因为计算节点不直接访问数据库.
在 [DEFAULT] 部分, 配置 RabbitMQ 消息队列访问:
- [DEFAULT]
- ...
- transport_url = rabbit://openstack:RABBIT_PASS@controller
可用在 RabbitMQ 消息队列设置的 openstack 账户密码替换 RABBIT_PASS.
在 [DEFAULT] 和 [keystone_authtoken] 部分, 配置认证服务访问:
- [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
可用在身份认证服务中设置的 neutron 用户的密码替换 NEUTRON_PASS.
注解
在 [keystone_authtoken] 中注释或者删除其他选项.
在 [oslo_concurrency] 部分, 配置锁路径:
- [oslo_concurrency]
- ...
- lock_path = /var/lib/neutron/tmp
6.5. 配置 Linuxbridge 代理
Linuxbridge 代理为实例建立 layer-2 虚拟网络并且处理安全组规则.
编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件完成如下步骤:
在 [linux_bridge] 部分, 将 provider 虚拟网络和 provider 物理网络接口对应起来:
- [linux_bridge]
- physical_interface_mappings = provider:eth1
可用 provider 物理网络接口的名字替换 eth1.
在 [vxlan] 部分, 启用 VXLAN 覆盖网络, 配置覆盖网络的物理网络接口的 IP 地址, 启用 layer-2 population:
- [vxlan]
- enable_vxlan = True
- local_ip = 10.0.0.11
- l2_population = True
可用处理覆盖网络的底层物理网络接口的 IP 地址替换 10.0.0.11. 本次环境搭建使用管理网络接口与其他节点建立流量隧道. 因此, 将 10.0.0.11 替换为控制节点的管理网络的 IP 地址.
在 [securitygroup] 部分, 启用安全组并配置 Linux 桥接防火墙驱动:
- [securitygroup]
- ...
- enable_security_group = True
- firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
6.6. 配置计算服务使用网络
编辑 / etc/nova/nova.conf 文件并完成如下操作:
在 [neutron] 部分, 配置访问参数:
- [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
可用在认证服务中设置的 neutron 用户密码替换 NEUTRON_PASS.
6.7. 完成安装
重启计算服务:
# systemctl restart openstack-nova-compute.service
启动网络代理服务并设置开机自启动.
- # systemctl enable neutron-linuxbridge-agent.service
- # systemctl start neutron-linuxbridge-agent.service
验证操作
注解
在控制节点执行这些命令.
获得 admin 凭证来获取只有管理员能执行的命令的访问权限:: $ . admin-openrc
列出加载的扩展来验证 neutron-server 进程是否正常启动:
- $ neutron ext-list
- +---------------------------+-----------------------------------------------+
- | alias | name |
- +---------------------------+-----------------------------------------------+
- | default-subnetpools | Default Subnetpools |
- | network-ip-availability | Network IP Availability |
- | network_availability_zone | Network Availability Zone |
- | auto-allocated-topology | Auto Allocated Topology Services |
- | ext-gw-mode | Neutron L3 Configurable external gateway mode |
- | binding | Port Binding |
- | agent | agent |
- | subnet_allocation | Subnet Allocation |
- | l3_agent_scheduler | L3 Agent Scheduler |
- | tag | Tag support |
- | external-net | Neutron external network |
- | net-mtu | Network MTU |
- | availability_zone | Availability Zone |
- | quotas | Quota management support |
- | l3-ha | HA Router extension |
- | flavors | Neutron Service Flavors |
- | provider | Provider Network |
- | multi-provider | Multi Provider Network |
- | address-scope | Address scope |
- | extraroute | Neutron Extra Route |
- | timestamp_core | Time Stamp Fields addition for core resources |
- | router | Neutron L3 Router |
- | extra_dhcp_opt | Neutron Extra DHCP opts |
- | dns-integration | DNS Integration |
- | security-group | security-group |
- | dhcp_agent_scheduler | DHCP Agent Scheduler |
- | router_availability_zone | Router Availability Zone |
- | rbac-policies | RBAC Policies |
- | standard-attr-description | standard-attr-description |
- | port-security | Port Security |
- | allowed-address-pairs | Allowed Address Pairs |
- | dvr | Distributed Virtual Router |
- +---------------------------+-----------------------------------------------+
注解
实际的输出结果也许与本例有细微的差异.
列出代理以验证启动 neutron 代理是否成功::
- $ openstack network agent list
- +--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
- | ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
- +--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
- | f49a4b81-afd6-4b3d-b923-66c8f0517099 | Metadata agent | controller | None | True | UP | neutron-metadata-agent |
- | 27eee952-a748-467b-bf71-941e89846a92 | Linux bridge agent | controller | None | True | UP | neutron-linuxbridge-agent |
- | 08905043-5010-4b87-bba5-aedb1956e27a | Linux bridge agent | compute1 | None | True | UP | neutron-linuxbridge-agent |
- | 830344ff-dc36-4956-84f4-067af667a0dc | L3 agent | controller | nova | True | UP | neutron-l3-agent |
- | dd3644c9-1a3a-435a-9282-eb306b4b0391 | DHCP agent | controller | nova | True | UP | neutron-dhcp-agent |
- +--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
输出结果应该包括控制节点上的四个代理和每个计算节点上的一个代理.
7.Dashboard
Dashboard(horizon)是一个 web 接口, 使得云平台管理员以及用户可以管理不同的 Openstack 资源以及服务. 本次署示例使用的是 Apache Web 服务器. 描述如何在控制节点上安装和配置仪表盘.
Keystone 身份认证服务是 Dashboard 所需的核心服务, 可以结合图像, 网络, 计算等其它服务使用 Dashboard. 也可以在具有独立服务 (如对象存储) 的环境中使用 Dashboard.
Controller 节点
7.1 安装配置组件
注解
默认配置文件在各发行版本中可能不同. 你可能需要添加这些部分选项, 而不是修改已经存在的部分和选项. 此外, 在配置片段中的省略号 (...) 表示默认的配置选项你应该保留.
安装软件包:
# yum install openstack-dashboard
编辑 /etc/openstack-dashboard/local_settings 文件完成如下步骤:
在 controller 节点上配置仪表盘使用 OpenStack 服务:
OPENSTACK_HOST = "controller"
允许所有主机访问仪表板:
ALLOWED_HOSTS = ['*', ]
配置 memcached 会话存储服务:
- SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
- CACHES = {
- 'default': {
- 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
- 'LOCATION': 'controller:11211',
- }
- }
注解
注释其他的会话存储服务配置
启用第 3 版认证 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,
- }
通过仪表盘创建用户时的默认域配置为 default:
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"
通过仪表盘创建的用户默认角色配置为 user:
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
vxlan 模式默认支持 layer-3 网络服务, 保持原有默认配置文件即可, 主要有以下内容:
- OPENSTACK_NEUTRON_NETWORK = {
- ...
- 'enable_router': True,
- 'enable_quotas': True,
- 'enable_distributed_router': False,
- 'enable_ha_router': False,
- 'enable_lb': True,
- 'enable_firewall': True,
- 'enable_***': True,
- 'enable_fip_topology_check': True,
- }
可以选择性的配置时区:
TIME_ZONE = "Asia/Shanghai"
使用恰当的时区标识替换 Asia/Shanghai.
重启 web 服务器以及会话存储服务:
# systemctl restart httpd.service memcached.service
注解
如果当前的服务当前没有运行, 用 systemctl start 来启动每个服务.
7.2 验证操作
验证仪表盘的操作. 在浏览器中输入 http://controller/dashboard 访问仪表盘. 验证使用 admin 或者 demo 用户凭证和 default 域凭证. 如果域名 controller 无法解析, 可用 controller 节点管理网 ip 地址 10.0.0.10 替换, 即在浏览器中输入 http://10.0.0.10/dashboard.
8. 块存储服务
Controller 控制节点
块存储服务 (cinder) 为实例提供块存储. 存储的分配和消耗是由块存储驱动器, 或者多后端配置的驱动器决定的. 还有很多驱动程序可用: NAS/SAN,NFS,ISCSI,Ceph 等. 典型情况下, 块服务 API 和调度器服务运行在控制节点上. 取决于使用的驱动, 卷服务器可以运行在控制节点, 计算节点或单独的存储节点.
本节内容讲述如何在控制节点上安装和配置块存储服务, 即 cinder. 在控制节点, cinder 服务至少需要一个额外的磁盘为实例提供卷.
8.1 安装前准备
在你安装和配置块存储服务之前, 你必须创建数据库, 服务证书和 API 端点
1. 创建数据库, 完成以下步骤:
用数据库连接客户端以 root 用户连接到数据库服务器:
$ mysql -u root -p
创建 cinder 数据库:
mysql> CREATE DATABASE cinder;
对 cinder 数据库赋予合适的权限:
- mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS';
- mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';
可用合适的密码替换 CINDER_DBPASS.
退出数据库连接.
获得 admin 凭证来获取只有管理员能执行的命令的访问权限: $ . admin-openrc
创建服务证书, 完成如下步骤:
创建 cinder 用户:
- $ openstack user create --domain default --password-prompt cinder
- User Password:
- Repeat User Password:
- +---------------------+----------------------------------+
- | Field | Value |
- +---------------------+----------------------------------+
- | domain_id | default |
- | enabled | True |
- | id | 0dbcdd0968dd4c948eacf9eb60d82b46 |
- | name | cinder |
- | password_expires_at | None |
- +---------------------+----------------------------------+
添加 admin 角色到 cinder 用户:
$ openstack role add --project service --user cinder admin
注解
此命令没有输出.
创建 cinder 和 cinderv2 服务实体:
- $ openstack service create --name cinder --description "OpenStack Block Storage" volume
- +-------------+----------------------------------+
- | Field | Value |
- +-------------+----------------------------------+
- | description | OpenStack Block Storage |
- | enabled | True |
- | id | ab3bbbef780845a1a283490d281e7fda |
- | name | cinder |
- | type | volume |
- +-------------+----------------------------------+
- $ openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
- +-------------+----------------------------------+
- | Field | Value |
- +-------------+----------------------------------+
- | description | OpenStack Block Storage |
- | enabled | True |
- | id | eb9fd245bdbc414695952e93f29fe3ac |
- | name | cinderv2 |
- | type | volumev2 |
- +-------------+----------------------------------+
注解
块存储服务需要两个服务实体
4. 创建块设备存储服务的 API 入口点:
- $ openstack endpoint create --region RegionOne volume public http://controller:8776/v1/%\(tenant_id\)s
- +--------------+-----------------------------------------+
- | Field | Value |
- +--------------+-----------------------------------------+
- | enabled | True |
- | id | 03fa2c90153546c295bf30ca86b1344b |
- | interface | public |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | ab3bbbef780845a1a283490d281e7fda |
- | service_name | cinder |
- | service_type | volume |
- | url | http://controller:8776/v1/%(tenant_id)s |
- +--------------+-----------------------------------------+
- $ openstack endpoint create --region RegionOne volume internal http://controller:8776/v1/%\(tenant_id\)s
- +--------------+-----------------------------------------+
- | Field | Value |
- +--------------+-----------------------------------------+
- | enabled | True |
- | id | 94f684395d1b41068c70e4ecb11364b2 |
- | interface | internal |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | ab3bbbef780845a1a283490d281e7fda |
- | service_name | cinder |
- | service_type | volume |
- | url | http://controller:8776/v1/%(tenant_id)s |
- +--------------+-----------------------------------------+
- $ openstack endpoint create --region RegionOne volume admin http://controller:8776/v1/%\(tenant_id\)s
- +--------------+-----------------------------------------+
- | Field | Value |
- +--------------+-----------------------------------------+
- | enabled | True |
- | id | 4511c28a0f9840c78bacb25f10f62c98 |
- | interface | admin |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | ab3bbbef780845a1a283490d281e7fda |
- | service_name | cinder |
- | service_type | volume |
- | url | http://controller:8776/v1/%(tenant_id)s |
- +--------------+-----------------------------------------+
- $ openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(tenant_id\)s
- +--------------+-----------------------------------------+
- | Field | Value |
- +--------------+-----------------------------------------+
- | enabled | True |
- | id | 513e73819e14460fb904163f41ef3759 |
- | interface | public |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | eb9fd245bdbc414695952e93f29fe3ac |
- | service_name | cinderv2 |
- | service_type | volumev2 |
- | url | http://controller:8776/v2/%(tenant_id)s |
- +--------------+-----------------------------------------+
- $ openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(tenant_id\)s
- +--------------+-----------------------------------------+
- | Field | Value |
- +--------------+-----------------------------------------+
- | enabled | True |
- | id | 6436a8a23d014cfdb69c586eff146a32 |
- | interface | internal |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | eb9fd245bdbc414695952e93f29fe3ac |
- | service_name | cinderv2 |
- | service_type | volumev2 |
- | url | http://controller:8776/v2/%(tenant_id)s |
- +--------------+-----------------------------------------+
- $ openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(tenant_id\)s
- +--------------+-----------------------------------------+
- | Field | Value |
- +--------------+-----------------------------------------+
- | enabled | True |
- | id | e652cf84dd334f359ae9b045a2c91d96 |
- | interface | admin |
- | region | RegionOne |
- | region_id | RegionOne |
- | service_id | eb9fd245bdbc414695952e93f29fe3ac |
- | service_name | cinderv2 |
- | service_type | volumev2 |
- | url | http://controller:8776/v2/%(tenant_id)s |
- +--------------+-----------------------------------------+
注解
块设备存储服务每个服务实体都需要端点.
8.2 安装配置组件
1. 安装软件包:
# yum install openstack-cinder
2. 编辑 /etc/cinder/cinder.conf 文件并完成以下步骤:
在 [database] 部分, 配置数据库访问:
- [database]
- ...
- connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
可用在创建 cinder 数据库时设置的密码替换 CINDER_DBPASS.
在 [DEFAULT] 部分, 配置 RabbitMQ 消息队列访问:
- [DEFAULT]
- ...
- transport_url = rabbit://openstack:RABBIT_PASS@controller
可用在 RabbitMQ 消息队列设置的 openstack 账户密码替换 RABBIT_PASS
在 [DEFAULT] 和 [keystone_authtoken] 部分, 配置身份认证服务访问:
- [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 = cinder
- password = CINDER_PASS
可用在认证服务中设置的 cinder 用户密码替换 CINDER_PASS.
注解
注释或者删除 [keystone_authtoken] 部分的其它选项.
在 [DEFAULT] 部分, 使用 controller 控制节点管理网 ip 地址配置 my_ip 选项:
- [DEFAULT]
- ...
- my_ip = 10.0.0.10
在 [oslo_concurrency] 部分, 配置锁路径:
- [oslo_concurrency]
- ...
- lock_path = /var/lib/cinder/tmp
3. 同步块存储数据库:
# su -s /bin/sh -c "cinder-manage db sync" cinder
注解
忽略输出中任何不推荐使用的信息.
4. 配置计算服务使用块存储
编辑 /etc/nova/nova.conf 文件为如下内容:
- [cinder]
- os_region_name = RegionOne
注解
此处为 controller 控制节点的计算服务, 而非 compute 计算节点. compute 计算节点不需要做任何关于使用 cinder 的配置.
5. 重启计算 API 服务:
# systemctl restart openstack-nova-api.service
6. 启动块存储服务并设置开机自启动:
- # systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
- # systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
Cinder 存储节点
本节描述如何为块存储服务安装并配置存储节点. 简而言之, 在存储节点配有一个空的本地磁盘设备 /dev/sdb, 可以根据需求替换成不同的值. cinder 服务在 / dev/sdb 设备上使用 LVM 提供逻辑卷, 并通过 iSCSI 协议映射给实例使用. 同样可以根据这些修改指导, 添加额外的存储节点来增加存储环境规模.
8.3 安装前准备
在安装和配置块存储服务之前, 必须准备好存储设备.
注解
在 Cinder 存储节点实施这些步骤.
1. 安装支持的工具包:
安装 LVM 包:
# yum install lvm2
启动 LVM 服务并且设置该服务随系统启动:
- # systemctl enable lvm2-lvmetad.service
- # systemctl start lvm2-lvmetad.service
2. 创建 LVM 物理卷 /dev/sdb:
- # pvcreate /dev/sdb
- Physical volume "/dev/sdb" successfully created
3. 创建 LVM 卷组 cinder-volumes:
- # vgcreate cinder-volumes /dev/sdb
- Volume group "cinder-volumes" successfully created
块存储服务会在这个卷组中创建逻辑卷.
只有实例可以访问块存储卷组. 而底层的操作系统管理设备与卷关联. 默认情况下, LVM 卷扫描工具会默认扫描 /dev 目录, 查找包含卷的块存储设备. 如果系统有其它任务和 lVM 使用同一块设备, 扫描工具检测到这些卷时会尝试配置缓存, 可能会在底层操作系统和卷上产生各种问题. 所以, 必须重新配置 LVM, 让它只扫描包含 cinder-volume 卷组的设备. 编辑 / etc/lvm/lvm.conf 文件并完成下面的操作:
在 devices 部分, 添加一个过滤器, 只接受 /dev/sdb 设备, 拒绝其他所有设备:
- devices {
- ...
- filter = [ "a/sdb/", "r/.*/"]
每个过滤器组中的元素都以 a 开头, 即为 accept, 或以 r 开头, 即为 reject, 并且包括一个设备名称的正则表达式规则. 过滤器组必须以 r/.*/ 结束, 过滤所有保留设备. 可以使用 vgs -vvvv 命令来测试过滤器.
警告
如果您的存储节点在操作系统磁盘上使用了 LVM, 您还必需添加相关的设备到过滤器中. 例如, 如果 /dev/sda 设备包含操作系统:
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
类似地, 如果您的计算节点在操作系统磁盘上使用了 LVM, 您也必需修改这些节点上 /etc/lvm/lvm.conf 文件中的过滤器, 将操作系统磁盘包含到过滤器中. 例如, 如果 / dev/sda 设备包含操作系统:
filter = [ "a/sda/", "r/.*/"]
8.4 安装配置组件
1. 安装软件包:
# yum install openstack-cinder targetcli python-keystone
2. 编辑 /etc/cinder/cinder.conf 文件并完成以下步骤:
在 [database] 部分, 配置数据库访问:
- [database]
- ...
- connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
可用在创建 cinder 数据库时设置的密码替换 CINDER_DBPASS.
在 [DEFAULT] 部分, 配置 RabbitMQ 消息队列访问:
- [DEFAULT]
- ...
- transport_url = rabbit://openstack:RABBIT_PASS@controller
可用在 RabbitMQ 消息队列设置的 openstack 账户密码替换 RABBIT_PASS
在 [DEFAULT] 和 [keystone_authtoken] 部分, 配置身份认证服务访问:
- [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 = cinder
- password = CINDER_PASS
可用在认证服务中设置的 cinder 用户密码替换 CINDER_PASS.
注解
注释或者删除 [keystone_authtoken] 部分的其它选项.
在 [DEFAULT] 部分, 配置 my_ip 选项:
- [DEFAULT]
- ...
- my_ip = 10.0.0.12
可用 cinder 存储节点的管理网 ip 地址替换 10.0.0.12.
在 [lvm] 部分, 配置 LVM 后端包括: LVM 驱动, cinder-volumes 卷组, iSCSI 协议和正确的 iSCSI 服务. 如果 [lvm] 部分不存在, 需要在文件末尾创建, 内容如下:
- [lvm]
- volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
- volume_group = cinder-volumes
- iscsi_protocol = iscsi
- iscsi_helper = lioadm
在 [DEFAULT] 部分, 启用 LVM 后端:
- [DEFAULT]
- enabled_backends = lvm
注解
后端名字是任意的. 比如, 本教程使用驱动的名字作为后端的名字.
在 [DEFAULT] 部分, 配置镜像服务 API:
- [DEFAULT]
- glance_api_servers = http://controller:9292
在 [oslo_concurrency] 部分, 配置锁路径:
- [oslo_concurrency]
- lock_path = /var/lib/cinder/tmp
3. 启动块存储卷服务及其依赖的服务, 并将其配置为随系统启动:
- # systemctl enable openstack-cinder-volume.service target.service
- # systemctl start openstack-cinder-volume.service target.service
8.5 验证操作
注解
在控制节点上执行如下命令, 验证块存储服务操作.
获得 admin 凭证来获取只有管理员能执行的命令的访问权限: $ . admin-openrc
列出服务组件以验证是否每个进程都成功启动:
- $ openstack volume service list
- +------------------+------------+------+---------+-------+----------------------------+
- | Binary | Host | Zone | Status | State | Updated_at |
- +------------------+------------+------+---------+-------+----------------------------+
- | cinder-scheduler | controller | nova | enabled | up | 2016-09-30T02:27:41.000000 |
- | cinder-volume | block@lvm | nova | enabled | up | 2016-09-30T02:27:46.000000 |
- +------------------+------------+------+---------+-------+----------------------------+
- ?
OpenStack 官网镜像指南: https://docs.openstack.org/image-guide/
如有不明之处, 欢迎留言提问.
来源: http://www.bubuko.com/infodetail-2660958.html