设为首页 收藏本站
查看: 1589|回复: 0

[经验分享] OpenStack利用puppet构建自动化部署环境

[复制链接]

尚未签到

发表于 2018-6-2 14:05:08 | 显示全部楼层 |阅读模式
DSC0000.jpg



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

DSC0001.jpg

当客户端连接上Puppetmaster后,定义在Puppetmaster上的配置文件会被编译,然后在客户端上运行。每个客户端默认每半个小时和服务器进行一次通信,确认配置信息的更新情况。如果有新的配置信息或者配置信息已经改变,配置将会被重新编译并发布到各客户端执行。也可以在服务器上主动触发一个配置信息的更新,强制各客户端进行配置。如果客户端的配置信息被改变了,它可以从服务器获得原始配置进行校正。
目前,puppet作为企业运维自动化的重要工具被广泛地应用,对于openstack来说,通过puppet来实现自动化部署及节点添加,将会大大提高运维效率。


0.2 系统架构说明
我们本次的puppet自动化部署实验在虚拟机中进行,使用3台虚拟机作为openstack的3个节点,具体架构如下:
DSC0002.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,即需要被部署的机器。
DSC0003.jpg

对于大型的商业应用来说,上面所示的架构显然不能满足企业对服务高可用的要求,所以企业往往会采用双SVN服务器及双puppet master的架构,下面是京东商城openstack自动化部署的架构图:
DSC0004.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,即控制节点可以为自己做自动化部署。
对于所有需要被管理的从节点,只需要安装puppet的agent端软件:
# 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-openstack是puppetlabs针对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客户机。
安装nova、glance、keystone等客户端软件包:
# 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
DSC0005.png



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

DSC0007.png



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

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

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

下面使用nova命令行工具创建一个实例:
# nova boot --flavor 1 --image <image ID> --key_name 140key --security_group default cirros-cli-test
DSC00010.png

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

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


6. 总结
根据以上的puppet部署测试,我们可以知道以此来实现openstack的自动化部署环境是非常实用且高效的。在京东商城的OpenStack自动化部署环境中,其利用了Cobler作为系统部署的工具,并结合了puppet来实现从裸主机直接安装系统并部署openstack服务。
这样的自动化安装部署的环境是值得我们借鉴的,在本次测试中,我们可以看到puppet在部署上的优势,只要再结合KickStartCobler之类的系统部署工具,就能在一个私有云中快速地增加运算节点,真正地实现了云的高速拓展,也减轻了运维人员的工作量,实现了自动化运维的目的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-508148-1-1.html 上篇帖子: 构建私有云和公有云的免费开源软件项目OpenStack 下篇帖子: openstack nova 源码分析4
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表