叶绍琛yeshaochen.blog.chinaunix.net

RHCA|OCM|CCIE RedHat大中华地区前50位RHCA系统架构师

  • 博客访问: 420779
  • 博文数量: 31
  • 博客积分: 921
  • 博客等级: 中士
  • 技术积分: 2217
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-06 10:45
  • 认证徽章:
个人简介

RedHat大中华区前50位RHCA认证系统架构师,Oracle OCM认证数据库大师,曾任网易游戏私有云项目负责人,拼客学院PingingLab联合创始人、课程总监,现为寻游旅行(深圳)股份有限公司运维总监。关注技术创新,关注云计算背景下的技术变革。 欢迎关注我的微信公众账号,微信号:rhcaysc

文章分类
文章存档

2014年(3)

2012年(28)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: 云计算


wKioL1kWrjjhlGAgAABfa5Meq-Y607.jpg


0. 环境介绍

0.1 Puppet介绍

Puppet是一个基于Ruby,并使用GPLv2协议授权的开源软件,是一个C/S架构的配置管理工具,在中央服务器上安装puppet-server软件包(被称作Puppetmaster)。在需要管理的目标主机上安装puppet客户端软件(被称作PuppetClient)。

wKioL1kWrw3C8VllAAFMvbWP6KU733.jpg

当客户端连接上Puppetmaster后,定义在Puppetmaster上的配置文件会被编译,然后在客户端上运行。每个客户端默认每半个小时和服务器进行一次通信,确认配置信息的更新情况。如果有新的配置信息或者配置信息已经改变,配置将会被重新编译并发布到各客户端执行。也可以在服务器上主动触发一个配置信息的更新,强制各客户端进行配置。如果客户端的配置信息被改变了,它可以从服务器获得原始配置进行校正。

目前,puppet作为企业运维自动化的重要工具被广泛地应用,对于openstack来说,通过puppet来实现自动化部署及节点添加,将会大大提高运维效率。


0.2 系统架构说明

我们本次的puppet自动化部署实验在虚拟机中进行,使用3台虚拟机作为openstack3个节点,具体架构如下:

wKioL1kWr3ix-KKAAAAwe1l9h-U530.png

如上图,3台虚拟机分别作为1个控制节点,其中用于运行除nova-compute之外的全部openstack组件服务,同时,该节点也是puppet的服务器端;其余两个节点作为openstack的运算节点。

每台虚拟机均配置了2个网卡,一个连接管理网络,一个是虚拟机内网,同时也用于openstack内部组件之前的通信。具体网络信息如下:

·控制节点:eth0:192.168.17.133
            eth1:10.120.17.133

·运算节点:eth0:192.168.17.134
            eth1:10.120.17.134

·运算节点:eth0:192.168.17.135
            eth1:10.120.17.135


0.3 puppet架构说明:

下图是一个比较常见且实用性较强的puppet配置架构:

图中1台机器作为puppet master,一台是SVN服务器,用于管理puppet配置所需的脚本等文件,其余3台则是puppet agent,即需要被部署的机器。

wKioL1kWsHbBAP_GAAEtb0kJ288770.jpg

对于大型的商业应用来说,上面所示的架构显然不能满足企业对服务高可用的要求,所以企业往往会采用双SVN服务器及双puppet master的架构,下面是京东商城openstack自动化部署的架构图:

wKioL1kWsKGTZBNHAAS1OG7aCXA686.png


1. 系统准备

1.1 系统选型与安装

由于puppetlabs提供了基于Ubuntu的完全的puppet脚本,我们本次实验将使用Ubuntu12.04 server作为节点系统,等在Ubuntu上成功实现了自动化部署之后再对puppet脚本进行自定义的修改,实现在Debian上的部署。

值得注意的是:由于控制节点上既运行了openstack服务,也运行了puppetmaster服务器端,所以需要设置比较大的内存,同时应该预留一个空闲分区,用于nova-volume创建服务。


1.2 网络设置

在开始puppet部署之前,我们首先需要把各节点的网络部分完成,下面我们首先配置网卡部分:

# vi /etc/network/interfaces
auto lo
iface lo inet loopback
 
auto eth0
iface eth0 inet static
  address192.168.17.133
  netmask255.255.255.0
  network192.168.17.0
  gateway192.168.17.1
 
auto eth1
iface eth1 inet manual
  upifconfig eth1 up

从以上配置可知,我们需要把eth2启动起来,重启网络之后,我们使用ifconfig命令应该能看到eth2网卡的信息。

接下来是重要的一步,由于puppet的主客服务器之间的通信是通过FQDN来通信的,所以我们需要在各节点上设置/etc/hosts文件,使得各节点之间的puppet程序能正常通信。

# vi /etc/hosts
127.0.0.1                localhost.example.com.      localhost.example.com       localhost
192.168.17.133             node1.example.com.      node1.example.com       control-01
192.168.17.134             node2.example.com.      node2.example.com       compute-01   
192.168.17.135             node3.example.com.      node3.example.com       compute-02


2. 部署puppet agent从节点

2.1 安装相关软件包

对于puppet来说,只要是安装了agent并注册进了puppetmaster端的节点都是可以被部署配置的。本例中,我们的控制节点既是puppetmaster服务器端,同时也部署了puppetagent,即控制节点可以为自己做自动化部署。

对于所有需要被管理的从节点,只需要安装puppetagent端软件:

# apt-get install puppet augeas-tools


2.2 预先设置动态迁移环境

为了能在配置好的openstack集群中能使用动态迁移(LiveMigration)功能,我们需要预先在各节点中创建相关的用户和组,使得虚拟机动态迁移能顺利地进行,openstack在创建过程中会创建这些用户和组,但是我们这里直接指定用户或组的ID,使得各节点保持一致。

创建相关组:

# addgroup --system --gid 999 kvm
# addgroup --system --gid 998 libvirtd
# addgroup --system --gid 997 nova

创建相关用户:

# adduser --system --home /var/lib/libvirt --shell/bin/false --uid 999 --gid 999 --disabled-password libvirt-qemu
 
# adduser --system --home/var/lib/libvirt/dnsmasq --shell /bin/false --uid 998 --gid 998--disabled-password libvirt-dnsmasq
 
# adduser --system --home /var/lib/nova--shell /bin/false --uid 997 --gid 997  --disabled-passwordnova
 
# adduser nova libvirtd


2.3 启用pluginsync插件

我们需要在所有的agent节点上启用pluginsync插件,并需要设置puppetmaster节点的hostname指向,使得节点间顺利通信。

# augtool<< EOF
  set/files/etc/puppet/puppet.conf/agent/pluginsync true
  set/files/etc/puppet/puppet.conf/agent/server node1.example.com
  Save
EOF


3. 部署puppet master控制节点

3.1 安装相关软件包

首先,需要安装puppetmaster相关软件包:

# apt-get install git
# apt-get install puppetmaster sqlite3libsqlite3-ruby libactiverecord-ruby rake

接下来,使用gem工具安装puppetlabs的帮助工具:

# gem install puppetlabs_spec_helper


3.2 配置数据库

接下来,我们需要在master节点上开启storedconfig功能,并配置puppet使用的数据库类型,指向数据库存储位置。在这里我们使用的是sqlite数据库,所以我们将dbadapter设置为sqlite3,并指向默认的sqlite文件所在路径。

# augtool << EOF
  set/files/etc/puppet/puppet.conf/master/storeconfigs true
  set/files/etc/puppet/puppet.conf/master/dbadapter sqlite3
  set/files/etc/puppet/puppet.conf/master/dblocation /var/lib/puppet/server_data/storeconfigs.sqlite
  save
EOF


3.4 创建第一个manifest

接下来,我们创建一个用于测试的manifest,通过这个简单的manifest我们可以初步了解一下puppet部署脚本的语法,最重要的是,我们可以测试master节点agent节点的配置是否正确无误。

# vi /etc/puppet/manifests/site.pp

    node default {
          file{"/tmp/test.txt":
                mode => 600
          }
    }

上面脚本内容是比较好理解的,表示我们需要部署/tmp/test.txt文件到所有的agent节点,并且该文件的权限设为600


3.5 重启服务

接下来,我们需要重启master节点上的服务,第一次启动时puppet会自动创建所需的文件,包括一系列的证书文件等。

# /etc/init.d/puppetmaster restart


4. 使用测试

4.1 测试连接master节点

此时,我们可以在任意一个agent节点上使用命令行工具测试一下与master节点之间的通信是否正常。

# puppetd --test --server node1.example.com

我们会看在如下报错信息:

Warning: peer certificate won't be verifiedin this SSL session
Info: Caching certificate for ca
...
Info: creating a new SSL certificaterequest for node1.example.com
Info: certificate Request fingerprint(md5): S2:D1:E3:U8:C8:C9:B6:61:86:D0
...
Exiting: no certificate found andwaitforcet is disabled


4.2 master节点签发证书

通过以上的报错信息,我们可以知道是由于master节点和agent节点之间的通信不能获得master节点签发的证书,所以我们需要用以下命令在puppetmaster节点上签发证书:

# puppetca sign -a

此时,会有如下的信息:

Notice: Signed certificate request fornode1.example.com
Notice: Removing filePuppet::SSL::CertificateReguest node1.example.com at
...

根据以上的信息,可以知道已经认证成功。

此命令表示接受全部的认证请求,但是在大型的部署环境中不建议这样的操作,我们可以使用puppetca--list命令查看所有需要认证的agent端,并根据需要签发认证。


4.3 部署测试

此时,master节点与agent节点已经认证成功了,以后的部署工作都不在需要签发证书了,只需要master端发出指令就能在所有的agent节点上实施部署。

master节点上执行以下命令:

# puppet agent -vt --waitforcert 60

此命令会向所有的agent节点推送部署信息,延时时间设置为60秒,由于我们之前已经通过了认证,所以执行该命令就开始部署了。

查看/tmp/test.txt文件是否存在,内容是否一致,查看文件的权限是不是之前设置的600


5. 部署多节点OpenStack

5.1 配置openstack部署环境

在开始部署openstack模块之前,建议重启一下puppetmaster节点,主要是因为puppet自身的一些问题。

接下来,我们从Github上下载最新版本的puppetlabs-openstack模块到/etc/puppet/modules/openstack目录:

# cd /etc/puppet/modules
# git clone git://github.com/puppetlabs/puppetlabs-openstackopenstack

注意:

git://github.com/puppetlabs/puppetlabs-openstackpuppetlabs针对openstack写的部署模块,由openstack社区及puppet进行维护,我们在下载之后需要做一些基本的改动,如节点IP,实例网络,是否设置组件HA等。

修改完成后,进入openstack目录,使用rake命令把openstack中所有的组件模块加载进来。

# cd openstack
     # rake modules:clone

此时,我们的/etc/puppet/modules目录应该有如下模块:

# ls -al /etc/puppet/modules/
total 80
drwxr-xr-x 2 0  root root 4096Jun 19 11:55 .
drwxr-xr-x  6  root root 4096 Jun 19 11:46 ..
drwxr-xr-x  7  root root 4096 Jun 19 11:55 apt
drwxr-xr-x  7  root root 4096 Jun 19 11:54 concat
drwxr-xr-x  5  root root 4096 Jun 19 11:55 git
drwxr-xr-x  9  root root 4096 Jun 19 11:55 glance
drwxr-xr-x  6  root root 4096 Jun 19 11:55 horizon
drwxr-xr-x  9  root root 4096 Jun 19 11:55 keystone
drwxr-xr-x  7  root root 4096 Jun 19 11:54 memcached
drwxr-xr-x  9  root root 4096 Jun 19 11:55 mysql
drwxr-xr-x 1 1  root root 4096Jun 19 11:55 nova
drwxr-xr-x  7  root root 4096 Jun 19 11:54 openstack
drwxr-xr-x  9  root root 4096 Jun 19 11:55 rabbitmq
drwxr-xr-x  8  root root 4096 Jun 19 11:55 rsync
drwxr-xr-x  7  root root 4096 Jun 19 11:55 ssh
drwxr-xr-x  7  root root 4096 Jun 19 11:55 stdlib
drwxr-xr-x 1 0  root root 4096Jun 19 11:55 swift
drwxr-xr-x  5  root root 4096 Jun 19 11:55 sysctl
drwxr-xr-x  6  root root 4096 Jun 19 11:55 vcsrepo
drwxr-xr-x  8  root root 4096 Jun 19 11:55 xinetd

接下来,我们将openstack的模块加入到manifest中:

# rm -f /etc/puppet/manifests/site.pp
# ln -s /etc/puppet/modules/openstack/examples/site.pp/etc/puppet/manifests/site.pp


5.2 部署openstack控制节点

至此,puppet的部署环境以及puppetlabs-openstack模块都已经全部配置完成,接下来我们开始部署openstack控制节点,在我们本次测试的环境中,openstack控制节点部署在puppetmaster节点上,即master节点同时也是agent节点。

# puppet agent -vt --waitforcert 60 --certnameopenstack_controller

注意:

其中,“--certnameopenstack_controller”参数项指定的是本次部署的证书名,我们在master端可以查看签发证书请求来查看是否通过认证。

我们需要在master端再开一个终端,签发证书:

# puppetca sign -a

证书签发之后就开始进行部署工作,我们需要等待一段时间,等部署完成后,我们就可以通过之前设置好的控制节点IP进入DashBoard查看详情。


5.3 部署openstack运算节点

在控制节点部署完成之后,我们就开始部署运算节点,按照我们的架构设计,我们会在3台主机上部署运算节点,即控制节点上也部署运算节点。

分别到各需要部署的节点主机上执行:

# puppet agent -vt --waitforcert 60--certname openstack_compute_node1
# puppet agent -vt --waitforcert 60--certname openstack_compute_node2
# puppet agent -vt --waitforcert 60--certname openstack_compute_node3
     
在puppetmaster端签发证书:
# puppetca sign -a

运算节点的部署相对会比较快,所以我们大概只需要等待5分钟就能完成全部的部署工作。


5.4 OpenStack使用测试

5.4.1 配置客户端环境

在开始测试本次部署的openstack系统的正确性之前,我们需要配置一下客户端机器的环境,这里我们使用一台Ubuntu系统的PC客户机。

安装novaglancekeystone等客户端软件包:

# apt-get install nova-common
# apt-get install glance-common
# apt-get install python-keystoneclient

以上的软件安装完成后,就需要我们配置一些用于认证的信息,即我们客户端需要指定keystone并发送请求,得到keystone的认证之后才能查看openstack云中的信息。

我们编辑客户端用户的.bashrc文件,指定所需的认证信息:

# vi .bashrc

export SERVICE_ENDPOINT="http://123.58.xxx.xxx:35357/v2.0"
export OS_AUTH_URL="http://123.58.xxx.xxx:5000/v2.0/"
export OS_REGION_NAME=REGION01
export OS_TENANT_NAME=admin
export SERVICE_TOKEN=admin
export ADMIN_TOKEN=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin

使用source命令使以上的环境变量生效:

# source .bashrc


5.4.2 查看各组件状态

配置完上面客户端的认证信息之后,我们就可以在客户端查看云中的很多信息。下面我们使用nova-manage命令查看各组件的状态:

# nova-manage service list

wKiom1kWtafzmAFGAAAfBFQGBzo073.png


5.4.3 创建安全策略组

下面,我们在命令行下,为“secgroup-test”安全策略组添加两条策略,它们分别是开放用于ssh远程连接的22号端口,以及开放icmp协议使得可以ping虚拟机实例。

wKioL1kWtdngpm4MAAEgouJKZqo369.png

wKioL1kWtdrgKJJaAAEaAqM45nc665.png


5.4.4 导入镜像

接下来,我们在客户端使用命令行工具导入镜像文件,这里我们导入的是OpenStack官方推荐的专用于测试的镜像Cirros,镜像格式为qcow2

wKioL1kWtfriMXYAAACpvB37RUE922.png

导入完成之后,我们可以查看镜像池中是否存在该镜像。

# glance index


5.4.5 启动实例

接下来,我们就可以利用前面导入的镜像启动一个虚拟机实例,首先,查看当前openstack实例的规格:

# nova flavor-list

wKiom1kWtjTDJKYkAAFlyok6idU328.png

下面使用nova命令行工具创建一个实例:

# nova boot --flavor 1 --image  --key_name 140key --security_group default cirros-cli-test

wKiom1kWt6ejzYfuAAMPk-ejV_g151.png

创建一个实例大概需要几分钟的时间,但是由于这个镜像是测试镜像,所以创建速度会非常地快,我们可以登录Dashboard查看实例的启动情况,也可以通过命令行查看实例。

# nova list

wKioL1kWt9Gxg5Z6AAGlhVCb_B0188.png

我们可以看到“Status”项,当实例创建完成后该项会显示“Active”,即该实例可用。


6. 总结

根据以上的puppet部署测试,我们可以知道以此来实现openstack的自动化部署环境是非常实用且高效的。在京东商城的OpenStack自动化部署环境中,其利用了Cobler作为系统部署的工具,并结合了puppet来实现从裸主机直接安装系统并部署openstack服务。

这样的自动化安装部署的环境是值得我们借鉴的,在本次测试中,我们可以看到puppet在部署上的优势,只要再结合KickStartCobler之类的系统部署工具,就能在一个私有云中快速地增加运算节点,真正地实现了云的高速拓展,也减轻了运维人员的工作量,实现了自动化运维的目的。



阅读(9263) | 评论(6) | 转发(4) |
给主人留下些什么吧!~~

叶绍琛2014-08-21 11:36:01

多谢支持!

ctohome2014-08-21 02:18:29

LZ厉害

joepayne2013-12-09 10:44:27

大师之作啊   要多多光顾!多多学习!

叶绍琛2012-12-19 19:20:27

dyli2000: 叶兄,顶一个。文章的功力的确够深厚!.....
谢谢支持!

dyli20002012-12-19 15:58:24

叶兄,顶一个。文章的功力的确够深厚!

评论热议
请登录后评论。

登录 注册