利用 Puppet 实现自动化管理配置 Linux 计算机集群(2)

在安装官方提供的开源版本的 Puppet 软件之前,Puppet Server 和 agent 首先需要都安装官方的软件源 (Puppet 对各种 Linux 发行版都有提供支持,本文以 Ubuntu 14.04 系统为例):

下载官方软件源的安装包:

wget https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb

更新软件源:

sudo dpkg -i puppetlabs-release-pc1-trusty.deb sudo apt-get update

安装 Puppet Server

sudo apt-get install puppetserver

启动 PuppetServer

sudo service puppetservice start

安装 PuppetAgent

sudo apt-get install puppet-agent

编辑/etc/puppetlabs/puppet/puppet.conf 文件,设置该 agent 的 puppet server 的地址:

[main] server = puppetmaster

注:puppetmaster 是 puppetserver 的主机名。

启动 puppet service

sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
编写第一个配置文件 第一个 Hello World 配置文件

作为第一个实例配置文件,我们想让节点做一件最简单的事情:在/etc/文件夹下面创建一个文件 helloworld.txt,文件的内容是”hello world from puppet!\n”。

首先我们在 puppetserver 上进入/etc/puppetlabs/code/environments/production/manifests 文件夹,创建 site.pp 文件:

node puppetagent { file { 'helloworld':     path => '/etc/helloworld.txt',     owner  => 'root',     group  => 'root',     mode   => '655',     content => "hello world from puppet!\n",     } }

site.pp 就是节点的配置文件,里面可以包含对各个节点的配置描述。在实例配置文件中,”puppetagent”就是节点的主机名。包含在 puppetagent 中的配置描述就是该节点的资源集合的描述。

配置文件创建好后,节点会周期性地查询 PuppetServer 来获取自己的配置文件并在本地应用。当然 Puppet 也支持手动获取自己的配置。在本例中,我们通过手动的方式来进行配置更新。我们在 PuppetAgent 上手动执行命令:

root@puppetAgent:/opt/puppetlabs/bin# ./puppet agent --test 2016-05-21 14:24:14.858673 WARN  puppetlabs.facter - locale environment variables were bad; continuing with LANG=C LC_ALL=C Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for puppetagent Info: Applying configuration version '1463811856' Notice: /Stage[main]/Main/Node[puppetagent]/File[helloworld]/ensure: defined content as '{md5}c3aa68786c58c94ef6f3e2399920f268' Notice: Applied catalog in 0.02 seconds root@puppetAgent:/opt/puppetlabs/bin# cat /etc/helloworld.txt  hello world from puppet!

我们看到节点成功从 Puppet Server 获取配置文件,并且在本地应用,对应的文件成功创建。

进阶:执行脚本任务

作为进阶的任务,我们希望节点可以执行一些更加复杂一点的任务。我们希望节点可以从 PuppetServer 获取一个命令脚本,并且执行该脚本。

我们首先在/etc/puppetlabs/code/environments/production/modules 中创建一个名叫”test”的模块,在 test 模块下面创建一个”files”文件夹。在这个文件夹里的文件是可以被节点获取的。然后我们在这个”files”文件夹里创建一个 shell 脚本 test.sh,路径如下:

/etc/puppetlabs/code/environments/production/modules/test/files/test.sh

test.sh 文件内容:

touch /etc/helloworld.log echo "helloworld" >> /etc/helloworld.log

该脚本会在/etc/目录下创建 helloworld.log 文件,然后在文件里添加”hello world”内容。

进入目录/etc/puppetlabs/code/environments/production/manifests,然后我们再来编辑 site.pp 文件:

node puppetagent { file { 'test.sh': path => '/etc/test.sh', owner  => 'root', group  => 'root', mode   => '655', source => 'puppet:///modules/test/test.sh', } exec { 'execute ': command => 'bash /etc/test.sh', require => File['test.sh'], path => ["/bin/"], } }

其中,我们定义了两个资源:一个文件资源和一个执行命令资源。同时这两个资源有依赖关系,命令执行资源依赖于文件资源,所以 Puppet 会优先处理文件资源。执行命令资源会在文件资源存在后再执行。

我们看下客户端的执行结果:

root@puppetAgent:/opt/puppetlabs/bin# ./puppet agent --test 2016-05-21 15:39:39.817370 WARN  puppetlabs.facter - locale environment variables were bad; continuing with LANG=C LC_ALL=C Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for puppetagent Info: Applying configuration version '1463816381' Notice: /Stage[main]/Main/Node[puppetagent]/File[test.sh]/ensure: defined content as '{md5}2ce060ad2ddab2fe416ca8fb6f8da32a' Notice: /Stage[main]/Main/Node[puppetagent]/Exec[execute ]/returns: executed successfully Notice: Applied catalog in 0.05 seconds root@puppetAgent:/opt/puppetlabs/bin# cat /etc/helloworld.log  helloworld

我们可以看到,helloworld.log 文件被正确的创建,说明脚本文件被正确地执行。

结束语

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ad18496b7a5351ad2311fbc642dd1839.html