首页 > 网络 > 云计算 >

Openstack基本模块单机部署练习

2016-09-13

由于是在虚拟机环境下单机部署,考虑到系统的流畅性,内存分配4096MB,4 CPU,虚拟磁盘动态分配16GB,双网卡(Host-Only+桥接)。Openstack基本模块单机部署练习。

系统版本

Oracle VM VirtualBox 5.0.24,Ubuntu-14.04.4(LTS) 64位。

系统配置

由于是在虚拟机环境下单机部署,考虑到系统的流畅性,内存分配4096MB,4 CPU,虚拟磁盘动态分配16GB,双网卡(Host-Only+桥接)。

*注:这里虚拟机网卡用Host-Only模式,个人想法是Host-Only模式正好可以模拟一个局域网,便于以后配置openstack多节点的管理网络,所以本练习中就用Host-Only模式这块网卡来作为控制节点的管理网络接口;而虚拟机第二块网卡采用桥接方式便于在搭建环境中访问外网。

参考文档

Openstack目前最新的版本是Mitaka(2016.04),Ubuntu_14.04版本上的安装指南如下:

http://docs.openstack.org/mitaka/install-guide-ubuntu/

本次练习中安装的基本服务包括:

ServiceProject Name

Identity serviceKeystone

Image serviceGlance

Compute serviceNova

Networking serviceNeutron

Block StorageCinder

*注:Horizon其实也装了,但是没有调试起来,回头再去debug一下django的问题。

练习目标

练习在单机上部署openstack基本的服务模块,配通这些服务模块;

练习创建一个实例,其中包括上传镜像、创建一个openstack网络、创建一个volume并附着给一个实例,最后在实例中挂载块设备。

部署过程

正常按照官方文档进行部署即可,只不过本练习中是把控制节点、计算节点和存储节点都放在了一台虚拟机上。安装的过程中会碰到一些需要注意的地方:

[Environment]

1)[Networking]章节中给出了两种网络选择:provider network和self-service network,选择了更简单的前者作为练习部署的网络选择。这里大概能看懂官方文档中的解释,前者配置的网络只有层2服务,后者可以配置的网络包含层3服务,相关层2层3网络的知识点(bridge、routing、NAT、VXLAN等)还需要课外补充下。

2)官方推荐使用虚拟机安装,也是本练习采用的方案,原因是可以利用快照节省时间,另外虚拟机方便配置多网卡。由于对linux操作系统比较生疏,练习过程中确实在安装操作系统和配置openstack服务上花费了很多时间,中间还在物理机上安装了ubuntu练习部署openstack环境,但是中间碰到问题不知道怎么回滚,所以后来还是转移到虚拟机环境下部署。

3) 部署过程中,密码有_DBPASS和_PASS两种,前者是sql密码,后者是service密码,为了方便,本练习中的_DBPASS全部采用openstack,_PASS采用项目名称(即glance项目的服务密码是glance,以此类推)。

4)[Host networking]章节中给出了官方推荐的网络拓设计示例。本次练习中虚拟机Host-Only模式的网卡(eth0)扮演的是控制/计算/存储节点的管理网络接口,但是没有练习到把管理网络配通道外网。

5)接着是练习手动修改节点网卡配置,配置节点IP,修改Hosts文件(虚拟机hostname配置为controller,和文档中控制节点的保持一致,这样后续直接复制粘贴配置指令很方便)等操作。其中网卡配置文件/etc/network/interfaces内容的含义自己查了一下]:

# The provider network interface

auto INTERFACE_NAME //auto小节定义了接口是不是要在系统启动时自动初始化。

iface INTERFACE_NAME inet manual //iface小节定义的逻辑接口的特性,这里意思应该是手动配置

up ip link set dev $IFACE up //启动端口

down ip link set dev $IFACE down //关闭端口

6)NTP同步并没有调试,因为是单节点练习,这里随便百度了下网络上可用的NTP服务器,貌似国内的NTP服务器都无法ping通。

7)安装和配置数据库,最后需要运行一次安全配置向导。

8)RabbitMQ和Memcached的安装按照文档流程即可顺利通过。

[Indentity service]

1)在生成一个随机数用作admin token时,可以把随机数保存到文件中,后续用到时方便查阅,例如:

openssl rand -hex 10 > /root/token

2)配置/etc/keystone/keystone.conf的[database]小节时,官方文档并没有强调必须注释掉默认的数据库连接这句,但国内写的很多openstack配置文档上都强调需要注释掉这句,实际看起来好像不注释掉这句也没有影响。

...

connection = sqlite:////var/lib/keystone/keystone.db

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

...

3)最后会创建两个client environment scripts,我也是保存在/root目录下,后续会经常用到。

4)Keystone模块是第一个创建的模块,是Openstack框架中负责管理身份验证、服务规则和服务令牌功能的模块。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone来处理,本次练习中配置的是V3版本,新加入了Domain和Group等概念,详细的模块介绍可以看官方[wiki]。

[Image service]

配置本章节时按照官方文档流程即可,最后下载一个cirros镜像并上传到openstack镜像服务中。

root@controller:/home/jason# openstack image list

+--------------------------------------+--------+--------+

| ID | Name | Status |

+--------------------------------------+--------+--------+

| 56804a7b-0fc3-4bc8-b04d-60af0f4b1942 | cirros | active |

+--------------------------------------+--------+--------+

[Compute service]

1)需要分别创建nova_api和nova两个数据库。

2)修改/etc/nova/nova.conf时,官方文档提到的需要修改的小节都是缺省的,需要手动添加上去。文档有句很隐蔽的提示:由于某个BUG,需要注释掉[DEFAULT]小节中logdir选项的配置。

3)由于是单机部署,所以配置计算节点的部分基本上在配置控制节点时都已经完成了,唯一不同的地方是在/etc/nova/nova.conf文件的[vnc]小节。另外需要验证节点是否支持硬件加速,本练习中虚拟机并不支持,所以要将libvirt改为QEMU,这样才能在虚拟机里成功创建实例吧。

4)本练习中部署的计算服务列表如下:

root@controller:/home/jason# openstack compute service list

+----+------------------+------------+----------+---------+-------+----------------------------+

| Id | Binary | Host | Zone | Status | State | Updated At |

+----+------------------+------------+----------+---------+-------+----------------------------+

| 3 | nova-consoleauth | controller | internal | enabled | up | 2016-09-10T15:53:39.000000 |

| 4 | nova-scheduler | controller | internal | enabled | up | 2016-09-10T15:53:39.000000 |

| 5 | nova-conductor | controller | internal | enabled | up | 2016-09-10T15:53:38.000000 |

| 6 | nova-compute | controller | nova | enabled | up | 2016-09-10T15:53:46.000000 |

+----+------------------+------------+----------+---------+-------+----------------------------+

[Networking service]

1)本练习中创建的是Provider networks。

2)配置/etc/neutron/plugins/ml2/ml2_conf.ini文件的[ml2]小节时,由于是单机部署,type_drivers字段采用了示例值而没有完全按照官方文档来配置:

[ml2]

...

type_drivers = local,flat,vlan,gre,vxlan,geneve

3)配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件的[linux_bridge]小节时,physical_interface_mappings的值配置为eth1,因为官方文档给出该字段的解释是应该配置为provider physical network的接口。

4)计算服务部署完毕后,就可以练习启动一个实例了。

root@controller:/home/jason# openstack network list

+--------------------------------------+----------+--------------------------------------+

| ID | Name | Subnets |

+--------------------------------------+----------+--------------------------------------+

| bda76bb6-bb48-47a2-9f80-d6306c2388a9 | provider | a3eb4871-d48a-4f78-8d3e-6c525cb8beaa |

+--------------------------------------+----------+--------------------------------------+

root@controller:/home/jason# openstack server list

+--------------------------------------+-------------------+--------+------------------------+

| ID | Name | Status | Networks |

+--------------------------------------+-------------------+--------+------------------------+

| 11fe5a2c-f594-46b2-90d3-e8eeefd51159 | provider-instance | ACTIVE | provider=192.168.0.102 |

+--------------------------------------+-------------------+--------+------------------------+

[Block Storage service]

1)开始配置虚拟机时,只创建了一个虚拟磁盘,fdisk只能看到/dev/sda,为了创建LVM物理卷,需要关闭虚拟机后新增一个虚拟磁盘:

这里写图片描述

2)修改lvm配置文件/etc/lvm/lvm.conf时,devices小节的filter字段配置需要接受sda和sdb:

filter = [ "a/sda/", "a/sdb/", "r/.*/"]

3)cinder服务部署完毕后,就可以创建一个volume并附着到之前创建的实例上了。

root@controller:/home/jason# openstack volume list

+--------------------------------------+--------------+--------+------+--------------------------------------------+

| ID | Display Name | Status | Size | Attached to |

+--------------------------------------+--------------+--------+------+--------------------------------------------+

| 500ec894-9d1d-44d4-a0bb-5322c9f8ac11 | volume1 | in-use | 1 | Attached to provider-instance on /dev/vdb |

+--------------------------------------+--------------+--------+------+--------------------------------------------+

登陆到实例中,可以看到实例用volume作为它的/dev/vdb块存储设备。

root@controller:/home/jason# ssh cirros@192.168.0.102

$ sudo fdisk -l

Disk /dev/vda: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders, total 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

Device Boot Start End Blocks Id System

/dev/vda1 * 16065 2088449 1036192+ 83 Linux

Disk /dev/vdb: 1073 MB, 1073741824 bytes

9 heads, 8 sectors/track, 29127 cylinders, total 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x55b4d605

Device Boot Start End Blocks Id System

/dev/vdb1 2048 2097151 1047552 83 Linux

最后在实例中挂在该快设备,并写入一个文件:

root@controller:/home/jason# ssh cirros@192.168.0.102

$ sudo su

$ fdisk -l

Disk /dev/vda: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders, total 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

Device Boot Start End Blocks Id System

/dev/vda1 * 16065 2088449 1036192+ 83 Linux

Disk /dev/vdb: 1073 MB, 1073741824 bytes

9 heads, 8 sectors/track, 29127 cylinders, total 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x55b4d605

Device Boot Start End Blocks Id System

/dev/vdb1 2048 2097151 1047552 83 Linux

$ df -h

Filesystem Size Used Available Use% Mounted on

/dev 21.3M 0 21.3M 0% /dev

/dev/vda1 23.2M 18.2M 3.8M 83% /

tmpfs 24.8M 0 24.8M 0% /dev/shm

tmpfs 200.0K 72.0K 128.0K 36% /run

/dev/vdb1 1006.9M 17.3M 938.5M 2% /mnt/vdb1

$ echo "Hello world!" > /mnt/vdb1/text

$ cat /mnt/vdb1/text

Hello world!

$

小节

其实有很多一键部署的项目例如Devstack这种,通过几个脚本来非常快速地部署openstack环境,我一开始也用这种方法操作过,大约20分钟就可以直接登陆使用web界面了。但是练习按照官方文档来手动配置openstack环境有这么些好处:

首先也是最重要的,官方文档最新也最准确。网络上也可以搜到很多用命令行部署openstack环境的中文文档,但是要么版本比较老,要么有些地方没有写清楚或者不正确,与其这样不如老老实实读官方文档。其次可以拆解式地了解到这些基础模块创建的过程,比如每个模块包含哪些组件,需要给模块配置什么参数(创建数据库-创建用户-创建服务实体-创建API端点-在配置文件中添加database链接/message queue配置/keystone认证等等),整个体系的基本网络拓扑等等。虽然是单机部署练习,但是通过阅读官方配置文档(因为配置文档是针对分布式架构部署)可以分别了解控制节点、计算节点和存储节点上分别应该部署哪些模块,他们之间如何配置到可以互相连通等等。最后通过命令行配置,多少也可以初步练习到一些基本的CLI命令,后面学习openstack CLI命令会更快。另外从熟悉linux环境的角度来说,本身熟练使用命令行操作也是必须的。

整个过程中碰到比较难以消化的是neutron网络配置这一块,因为自己网络方面的知识忘得差不多了,到最后还没有把实例网络配置到可以ping通外网,所以网络这一块的知识下来需要好好补充一下。

相关文章
最新文章
热点推荐