厨子解Puppet之操作记实51CTO博客 - 千亿集团

厨子解Puppet之操作记实51CTO博客

2019年04月04日09时14分54秒 | 作者: 迎梅 | 标签: 装备,效劳,资源 | 浏览: 2246

厨子解Puppet之
初级入门篇

 

体系环境:

软件包:

环境装置:
Puppet 是用ruby言语写的,所以要装置ruby环境,效劳器端与客户端都要装置,我这的环境没有装ruby,所以用yum装置一下。要精细化装置的话,需求装置4个包。
[root@testsns ~]# yum –y install ruby*

精细化装置Ruby环境
1.puppet是依据ruby开发。所以要装置ruby言语环境。
找到相应版别对应的ruby的rpm包(下以redhat 5.4为例)
rpm –ivh ruby-libs-1.8.5-5.el5_2.3.i386.rpm
rpm –ivh ruby-1.8.5-5.el5_2.3.i386.rpm
2.Rdoc的装置。
假设需求查看协助文档,需求装置此包。有一点特别阐明,此包在AS4上未找到相关的rpm。所以主张效劳端运用5.0以上的版别。
rpm –ivh ruby-irb-1.8.5-5.el5_2.3.i386.rpm
rpm –ivh ruby-rdoc-1.8.5-5.el5_2.3.i386.rpm

Server端装置:
1、时刻同步
ntpdate time.nist.gov

2、装置Facter用来获取客户端体系信息(如hostname,ip,OS-Version,fqdn等)
[root@testsns opt]# tar zxvf facter-1.6.5.tar.gz
[root@testsns opt]# cd facter-1.6.5
[root@testsns facter-1.6.5]# ruby install.rb
[root@testsns facter-1.6.5]# cd ..

[root@testsns opt]# tar zxvf puppet-2.6.13.tar.gz
[root@testsns opt]# cd puppet-2.6.13
[root@testsns puppet-2.6.13]# ruby install.rb
[root@testsns puppet-2.6.13]# cp conf/auth.conf /etc/puppet/
[root@testsns puppet-2.6.13]# cp conf/redhat/fileserver.conf /etc/puppet/
[root@testsns puppet-2.6.13]# cp conf/redhat/puppet.conf /etc/puppet/
[root@testsns puppet-2.6.13]# cp conf/redhat/server.init /etc/init.d/puppetmaster
[root@testsns puppet-2.6.13]# chmod +x /etc/init.d/puppetmaster
[root@testsns puppet-2.6.13]# chkconfig add puppetmaster
[root@testsns puppet-2.6.13]# chkconfig puppetmaster on
[root@testsns puppet-2.6.13]# mkdir -p /etc/puppet/manifests
3、生成pupput用户
[root@testsns opt]# puppetmasterd mkusers
4、发动
[root@testsns opt]# /etc/init.d/puppetmaster start

Slave端装置:

1、时刻同步

ntpdate time.nist.gov

   和效劳器端装置办法相同,先装置ruby环境,再装置facter和puppet,仅仅在puppet仿制装备文件时要注意。

2、装置Facter用来获取客户端体系信息(如hostname,ip,OS-Version,fqdn等)

 

-内容如下
[agent]
Listen = true
Server = testsns
-
[root@nfstest puppet-2.6.13]# vi /etc/puppet/namespaceauth.conf
内容如下
[fileserver]
allow *
[puppetmaster]
allow *
[puppetrunner]
allow *
[puppetbucket]
allow *
[puppetreports]
allow *
[resource]
allow *

3、生成用户和rra目录
[root@nfstest puppet]# puppetmasterd mkusers
4、发动
[root@nfstest puppet]# /etc/init.d/puppet start
5、修正hosts
   修正两边的/etc/hosts文件,增加各自的IP地址对应的主机名,出产环境做内部DNS比较好,不必修正每台效劳器的hosts文件。
192.168.133.42 nfstest
192.168.133.44 testsns
6、敞开端口
   封闭两边的防火墙及selinux,或敞开8140(server效劳器端口),8139(client效劳器端口)。彼此作ping hostname telnet hostname 8140 test hostname 8139等,看网络及hosts是否正常

认证:
客户端发送恳求
Puppeted test –server testsns
效劳器查看
Puppetca –list
效劳器端签名
Puppetca –s –a //对一切客户端悉数签名
Puppetca –s nfstest //只签名某个客户端
 

功能模块介绍及实例操作

文件分发:
经过puppet能够向被办理机上推送文件,办法是运用file类型的source特点
1:修正/etc/puppet、fileserver.conf
2:修正/etc/puppet/manifests/ site.pp
实例:要把server效劳器上/opt目录下的mysql-5.1.49-linux-i686-icc-glibc23.tar.gz传输至client效劳器的/opt目录下,文件名不变。
第一步:Vi /etc/puppet/fileserver.conf
[files]
path /opt/
allow 192.168.133.0/24

第二步:vi /etc/puppet/manifests/site.pp
file
{ "/opt/mysql-5.1.49-linux-i686-icc-glibc23.tar.gz":
source => "puppet://$puppetserver/files/mysql-5.1.49-linux-i686-icc-glibc23.tar.gz",
}

第三步:
在client客户端履行更新指令
puppetd test server testsns

    此处“$puppetserver”是puppet Server端的称号,即hostname,网上教程都是在hosts里指定,出产环境下用内部的DNS上作解析,像我公司一个www渠道就有70台linux效劳器,一个个增加hosts,不搞死人去。

修正文件特点:
   实例:把/tmp/dd142/ puppet-2.6.13.tar.gz文件的权限改为puppet用户,并设置权限为666。
第一步:修正Server端的site.pp
vi /etc/puppet/manifests/site.pp
-内容如下
file
{ "/tmp/dd142/puppet-2.6.13.tar.gz":
owner => "puppet",
group => "puppet",
mode => 666,
}

第二步:在client端履行指令
puppetd test server testsns

履行SHELL指令或shell脚本:
    实例:经过puppet分发履行shell脚本,在客户端的opt目录下新建一目录shelldir。
第一步:修正Server端的site.pp
vi /etc/puppet/manifests/site.pp

exec { "exec-mkdir":
cwd => "/opt",
command => "sh /opt/lgh.sh",
user => "root",
path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",
}
第二步:在client端修正一shell脚本

第三步:在client端履行指令
puppetd test server testsns
在/opt目录下查看shelldir有没有树立。

效劳查看及修正:
    能够经过puppet对一些效劳进行查看。puppet是经过service指令操作的。所以,只能针对在/etc/init.d/目录下的效劳
实例:把客户端的防火墙起来(原来是封闭的)
vi /etc/puppet/manifests/site.pp //清空site.pp,再新建

service
{ iptables:
ensure => "running",
}

cron计划使命:
接上面的shell程序实例,在17:30履行/opt/lgh.sh。
cron { "cron-shell": #title部分,可用来作为注释。
command => "sh /opt/lgh.sh" #要履行的指令
user => "root", #增加到root用户下的crontab中
minute => "30", #即第一个星号
hour => "17" #即第二个星号
}
登录客户端查看效果

扩展阅览:

在开源国际里,有许多装备东西可供挑选,这个范畴一些要害的产品有:
Puppet(http://puppet.reductivelabs.com/):
Ruby写成的装备办理东西,运用C/S架构,运用declarative language装备客户端。
Cfengine(http://www.cfengine.org):
最早发布的开源装备东西之一,1993年发布,相同是C/S架构,一般应用于教育安排。
LCFG(http://www.lcfg.org/):
C/S架构的装备办理东西,运用XML界说装备。
Bcfg2
Python编写的C/S架构的装备办理东西,运用规格书和客户机呼应装备方针主机。
本文档致力于描绘运用Puppet办理你的主机、应用程序、后台程序和各种效劳。

在此只讲Puppet,由于它简略,强壮,盛行。

什么是puppet?

    puppet是一种Linux、Unix渠道的会集装备办理体系,运用自有的puppet描绘言语,可办理装备文件、用户、cron使命、软件包、体系效劳等。puppet把这些体系实体称之为资源,puppet的规划方针是简化对这些资源的办理以及妥善处理资源间的依靠联络。
     puppet选用C/S星状的结构,一切的客户端和一个或几个效劳器交互。每个客户端周期的(默许半个小时)向效劳器发送恳求,取得其最新的装备信息,确保和该装备信息同步。每个puppet客户端每半小时(能够设置)衔接一次效劳器端, 下载最新的装备文件,而且严厉依照装备文件来装备效劳器. 装备完结今后,puppet客户端能够反应给效劳器端一个音讯. 假设犯错,也会给效劳器端反应一个音讯.
为什么要开发puppet
    体系办理员都喜爱自己写点小东西来让自己的作业完结的更快或许更好, 不管是在大企业办理许多的效劳器仍是只办理两三台机器. 可是很少人会把他们的东西发布出来. 也便是是说很少有东西能被重用,或许说许多东西就只能在地点的安排内部有用.仿制给其他安排,他们也用不上. 也便是说,每个体系办理员,在一个新的公司,都会重整旗鼓开发一套依据ssh,for循环的"体系"来协助自己完结体系办理使命.
    开发puppet是为了让体系办理员能够彼此沟通和同享老练的东西,防止重复的劳作.经过以下两个特性来完结这一方针:
供给一个简练的可是强壮的结构来完结体系办理使命
体系办理使命能够描绘成puppet言语,因而能够彼此共享代码,就像共享其他言语的代码相同,比方python, c等
    因而,作为体系办理员的你能够更快的完结作业,由于你能够用puppet来处理一切的办理细节. 乃至你还能够下载其他办理员的puppet代码来让你的作业完结的更快.
运用puppet 的稳定性
     puppet与其他手艺操作东西有一个最大的差异便是 puppet的装备具有稳定性,因而你能够屡次履行puppet, 一旦你更新了你的装备文件,puppet就会依据装备文件来更改你的机器装备,一般每30分钟查看一次. puppet会让你的体系状况同装备文件所要求的状况坚持一致. 比方你装备文件里边要求ssh效劳有必要敞开. 假设不小心ssh效劳被封闭了,那么下一次履行puppet的时分,puppet会发现这个反常,然后会敞开 ssh 效劳. 以使体系状况和装备文件坚持一致.puppet就象一个魔术师,会让你的紊乱的体系收敛到puppet装备文件所想要的状况.
     能够运用puppet办理效劳器的整个生命周期,从初始化到退役.不同于传统的例如sun的Jumpstart或许redhat的Kickstart, puppet能够常年让效劳器坚持最新状况.只需一开端就正确的装备他们,然后再也不必去管他们.一般puppet用户只需求给机器装置好puppet并让他们运转,然后剩下的作业都由puppet来完结.

puppet的细节和原理

     puppet的意图是让你只会集于你要办理的方针,而疏忽完结的细节,例如指令名,参数或许文件格局. puppet把体系里边的用户,软件包,效劳 看作是"资源", puppet的效果便是办理这些资源以及资源之间的彼此联络.
     底层支撑东西 Providers,puppet有许多的资源类型,例如文件,用户,软件包,效劳, 不同的操作体系上对资源的办理指令是不相同的,例如debian下面用apt-get装置软件,redhat下面用yum装置软件. 因而puppet 对同一资源的办理能够有多个完结,装备资源的时分,能够清晰的指定用什么provider. 例如在redhat上装备一个package资源的时分,能够指定provider是yum.
Facter变量
     在puppet客户端剖析代码的时分,会把从facter传送过来的对应的值赋值给变量. 你能够独自手艺履行facter这个指令,这个指令会打印出它所收集到的关于主机的信息,例如ip地址等等. facter把收集到值发送给puppet效劳器端,效劳器端就能够依据不同的条件来对不同的节点机器生成不同的puppet装备文件. 最重要的一个便是效劳器的主机名.

作业方法与流程

     puppet既能够在单机上运用,也能够以c/s结构运用.在大规模运用puppet的状况下,一般运用c/s结构.在这种结构中puppet客户端仅仅指运转puppet的效劳器,puppet效劳器端是只运转puppetmaster的效劳器.
     puppet客户端首先会衔接到puppet效劳器端,而且经过facter东西把客户端的根本装备信息发送给效劳器端. 效劳器端经过剖析客户端的主机名,经过node 界说,找到该主机的装备代码,然后编译装备代码,把编译好的装备代码发回客户端,客户端履行代码完结装备.而且把代码履行状况反应给puppet效劳器端.
修正体系装备
     puppet 经过办理资源的方法来办理体系, 例如办理某个软件是否要装置,是装置最新的仍是装置了就行. 办理某个效劳是否敞开, 办理某个文件的特点,内容等等. 一切的资源都有对应的几个特点能够设置. 经过设置特点的方法来办理资源. 有一种特其他特点能够用在一切的资源上面,这种特点叫做 metaparams ( 元参数或许元特点).

资源之间的联络

    支撑资源之间的联络装备是puppet的要害特性之一. 一个资源的改变能够对另一个资源发生一个动作.例如 /etc/apache.conf这个资源有改动,能够让/etc/init.d/apache 这个资源 reload一下.假设一个资源依靠另一个资源,那么puppet会优先装备被依靠的资源,因而假设你的装备文件没有准备好,对应的效劳是不会先发动的.

puppet 言语资源

    puppet的悉数便是办理资源,因而puppet言语的焦点便是处理这些资源,下面是一个根本的办理单个资源的比如.
file {"/etc/hosts": owner = root, group = root, mode = 644}
     上面的列子给出了界说一个资源所需求的一切组件,类型,姓名和特点. 界说了一个 file 资源, 资源的title(标题)是 "/etc/hosts", 资源的特点里边设置了该文件归于那个用户和组,以及文件的权限.
也能够在一个大括号里边界说多个资源,经过分号来区别.
防止重复装备
     puppet的编译器会防止在不同的代码段里边办理同一个资源, 假设在不同的代码段对同一个资源进行装备,履行puppet的时分你会得到一个语法错误.puppet勘探这种抵触的状况是经过判别资源类型和资源的title(标题); 假设两个资源有相同的资源类型和title; 那么就认为这两个资源是表明同一个资源.

    你能够把多个相关的资源界说在一起,组成一个类.能够在其他的代码段include这个类.puppet还支撑有约束的类的承继,效果便是在子类里边的特点能够掩盖父类里边的特点.
字符串
    简直一切的东西和符号在puppet里边都被看作是字符串,包含数字和布尔值. 可是假设你用引号把true和false引起来,他们会被作为字符串,例如你想赋值给某个资性"yes"的 字符串.
变量
puppet除facter变量外,也能够自界说变量,但不答应你在同一个类里边对一个变量进行两次赋值.
$myvar = value123
条件句子
    Puppet支撑常见的条件句子,使得你能依据不同的条件导入不同的资源界说。如if、case、别的puppet从版别0.24.6开端支撑比较运算符。
数组
   puppet 十分有限的支撑数组这种类型,你能够创立数组,而且给他们赋值,可是你不能删去它们.数组用的最多的状况便是上面ssh比如里边,资源依靠哪种状况. 或许是一次办理多个相同类型的资源.例如:user { [bin, adm]: ensure => present }
函数
    puppet供给一些有用的函数,例如template运用erb模板来生成文件内容,这样就能够依据不同主机的状况,生成不同的装备文件.例如装备squid的内存缓存巨细,能够运用facter回来的内存值做一个简略的数学核算,然后写入到squid的装备文件,便是经过template来完结的. 别的一个函数include 能够读入别的的puppet装备文件或许类.这样能够把puppet的文件切割的更有规则.
节点
    最终一个关于puppet言语的语法是节点界说"node", 节点界说很象类界说,也支撑承继特性. 当一个节点(puppet客户端)衔接到puppet效劳器端,puppet解析器会查找这个节点的node代码片断,然后运用这个代码片断来生成该客户端的装备代码. puppet里边主机名来标明一个主机,因而主机名在puppet里边适当重要. 假设puppet找不到匹配该主机名的node界说,就会用默许的节点界说来装备该主机. 在node里边运用主机名,需求用单引号把主机名括起来.
node server1 { include nginx }
    在上面的代码中,假设server1这个主机衔接到puppet效劳器,puppet效劳器就会依照nginx的代码来装备这台效劳器.
自界说资源
    puppet里边有一个十分有用的语法结构,叫做define, 经过define能够把多个资源包装成一个资源,或许把一个资源包装成一个模型,便于运用.例如,在debian里边办理一个apache虚拟机十分简略,把一个虚拟主机的装备文件放到/etc/sites-available/里边,然后做一个符号链接到/etc/sites-enabled目录. 你能够为你每个虚拟主机仿制相同的装备代码.

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章