标签:选择 bin common ip地址 磁盘格式 toc pat cee etc
作者:独笔孤行@TaoCloud请添加链接描述若在虚拟机中部署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
/etc/chrony.conf
文件添加下面的键值:
allow 10.0.0.0/24
如有必要,将10.0.0.0/24替换成你子网的相应描述。
# 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
# rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack" ...
用合适的密码替换 RABBIT_PASS
# 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 项目和用户创建客户端项目脚本,本指南的接下来的部分会引用这些脚本,为客户端操作加载合适的的凭证。本指南的接下来的部分会引用这些脚本,为客户端操作加载合适的的凭证。
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。
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端点。
$ 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-openrc
$ 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
[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/
[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-openrc
下载镜像:
$ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
注解
如果没有wget 命令请安装它:yum install wget -y
$ 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。
$ 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-openrc
$ 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
[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
[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-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.完成安装
# 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
注解
网络配置完成之后进行数据库同步,因为脚本需要完成服务器和插件的配置文件。
# 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-openrc
$ 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
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。
# 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-openrc
$ 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
块存储服务会在这个卷组中创建逻辑卷。
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-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/
如有不明之处,欢迎留言提问。
标签:选择 bin common ip地址 磁盘格式 toc pat cee etc
原文地址:http://blog.51cto.com/9099998/2132947