• 烂泥:puppet3.7安装与配置


    本文由秀依林枫提供友情赞助,首发于烂泥行天下

    有关服务器的自动化管理,这方面以前没有接触过。打算这段时间把这块知识给补上。

    现在服务器自动化管理软件,使用最多也最火的就是puppet了。

    那么我们今天的主角也就是puppet。分以下几个步骤来介绍:

    1、 puppet是什么

    2、 puppet优点

    3、 安装准备工作

    4、 环境准备

    5、 源码安装puppet

    6、 RPM安装puppet

    7、 puppet证书授权

    8、 puppet资源

    一、puppet是什么

    puppet是一种基于ruby语言开发的Lnux、Unix、windows平台的集中配置管理系统。它使用自有的puppet描述语言,可管理配置文件file、用户user、cron任务、软件包、系统服务等系统实体。

    puppet把这些系统实体称之为资源,puppet设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。

    puppet依赖于C/S(客户端/服务器)的部署架构。它需要在puppet服务器上安装puppet-server软件包(以下简称master),在需要管理的目标主机上安装puppet客户端软件(以下简称agent)。

    当agent连接上master后,定义在master端的配置文件会被编译,然后在agent上运行。每个agent默认30分钟会连接一次master,确认配置信息的更新情况。但是这种方式在很多场景下不是很符合系统管理员的要求,所以很多系统管理员也会将agent通过crontab(任务计划)来管理,这样会更加灵活一些。

    二、puppet优点

    puppet的语法允许你创建一个单独的脚本,用来在你所有的目标主机上建立一个用户。所有的目标主机会依次使用适合本地系统的语法来解释和执行这个模块。如果这个配置是在Red Hat服务器上执行的话,建立用户使用useradd命令,如果这个配置是在FreddBSD服务器上执行的话,则使用adduser命令。

    puppet另外一个卓越的地方就是它的灵活性。源于开源软件的天性,你可以自由地获得puppet的源代码。如果你遇到问题并且有能力处理的话,你可以修改或加强puppet的代码使其适用于你的环境,然后解决这个问题。

    puppet也是易于扩展的。定制软件包的支持功能和特殊的系统环境配置能够快速简单地添加至puppet的安装程序中。

    三、安装准备工作

    本次实验OS为centos 6.5 64bit,服务端为:192.168.199.247,客户端为192.168.199.248。

    在正式实验之前,我们有几个事情需要先进行处理。

    3.1 主机时间同步

    为了减少在实验过程中不必要的麻烦,我们需要对所有主机(包括服务器和客户端)进行时间同步。即服务器与客户端的时间相差不能超过秒级。

    使用以下命令进行时间同步,如下:

    ntpdate timekeeper.isi.edu

    clip_image001

    如果在进行时间同步时,出现如下错误:

    21 Jan 17:20:45 ntpdate[2720]: the NTP socket is in use, exiting

    clip_image002

    请关闭主机的ntpd服务,然后再进行时间同步。

    /etc/init.d/ntpd stop

    clip_image003

    3.2 修改主机名

    因为安装 puppet 时会把主机名写入证书,同时客户端和服务端之间通信需要这个证书。所以需要修改服务器与客户端的主机名。

    修改主机名。如下:

    hostname s.ilanni.com

    执行此命令,可以使主机的主机名立即生效。但是服务器重启后,此修改就会失效。

    clip_image004

    要是主机名永久生效的话,需要修改/etc/sysconfig/network文件。如下:

    cat /etc/sysconfig/network

    clip_image005

    本次实验,我们就不搭建DNS服务器,直接通过修改服务端与客户端的hosts文件来达到各自解析域名的目的。如下:

    cat /etc/hosts

    192.168.199.247 s.ilanni.com

    192.168.199.248 c.ilanni.com

    clip_image006

    3.3 关闭iptables和selinux

    我们现在所有的实验都是在关闭iptables和selinux下进行的。

    /etc/init.d/iptables status

    cat /etc/selinux/config

    clip_image007

    四、环境准备

    puppet的安装可以分为源码安装和RPM安装,但是无论哪一种安装方法,我们都需要在安装之前对其进行几点需要说明。

    4.1 puppet安装说明

    1、由于puppet是采用ruby语言开发,所以无论是源码还是RPM方式安装puppet,我们都必须要先安装ruby语言环境

    2、puppet从2.7版本以后,就需要hiera的支持。所以也必须安装hiera。

    3、在前面章节中,我们说明了puppet是一个配置管理系统,而管理的资源,都是系统的实体。但是这些实体,是如何来的呢?这就需要我们安装另外一个资源收集软件—facter。

    facter主要用来收集主机的一些信息,比如:CPU、主机IP等。facter把这些收集的信息发送给puppet服务器端,服务器端就可以根据不同的条件来对不同的节点机器生成不同的puppet配置文件。

    facter也是ruby语言开发的,这个我们可以在facter的安装文档中可以查看到,如下:

    cat README.md

    clip_image008

    4.2 安装ruby

    ruby的安装比较简单,我们在此使用是yum进行安装。如下:

    yum -y install ruby

    clip_image009

    ruby安装完毕后,我们来查看其生成的文件。如下:

    rpm -ql ruby

    clip_image010

    我们可以查看ruby的帮助信息,如下:

    ruby -h

    clip_image011

    除此之外,我们还要安装ruby-rdoc这个软件包。该软件包主要用于查看ruby的帮助文档。如下:

    yum -y install ruby-rdoc

    clip_image012

    以上就是和ruby有关的软件包,安装完毕后,我们开始来安装facter。

    4.3 安装facter

    facter我们可以从puppet官网下载,如下:

    http://downloads.puppetlabs.com/facter/

    clip_image013

    注意:facter也可以通过yum进行安装,在此我们使用的是源码安装。

    下载facter最新的版本,如下:

    wget http://downloads.puppetlabs.com/facter/facter-2.3.0.tar.gz

    clip_image014

    解压facter软件包,如下:

    tar -xf facter-2.3.0.tar.gz

    clip_image015

    开始安装facter,如下:

    ruby install.rb或者./install.rb

    clip_image016

    clip_image017

    facter安装完毕后,我们来查看下facter的使用帮助。如下:

    facter -h

    clip_image018

    如果想查看facter详细帮助信息,我们也可以man下facter。如下:

    man facter

    clip_image019

    如果安装没有问题的话,我们在执行facter命令后,会显示facter收集的相关信息。如下:

    facter

    clip_image020

    4.4 安装hiera

    hiera主要用于控制一些agent经常变化的数值,在puppet2.7以后的版本必须要安装。如果不安装的话,我们在安装puppet时,系统会提示如下错误:

    Could not load hiera; cannot install

    clip_image021

    但是在安装hiera之前,我们必须安装额外的yum源,否则系统会提示找不到该软件包。

    该yum源,我们可以puppet官网查看到。如下:

    https://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-red-hat-enterprise-linux-and-derivatives

    clip_image022

    按照puppet官网的方法进行安装。如下:

    rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

    clip_image023

    yum源配置完毕后,我们现在来安装hiera。如下:

    yum -y install hiera

    clip_image024

    以上安装完毕后,我们就可以正式安装puppet。

    五、 源码安装puppet

    puppet服务端与客户端的源码安装使用的是同一个软件包,安装步骤一样,只是在配置文件方面有细微的差别。

    在下载puppet源码之前,我们还要在master端和agent端创建puppet运行时使用的用户puppet。master端如果不创建的话,master在启动时,会报如下错误:

    clip_image025

    创建puppet用户,如下:

    useradd -M -s /sbin/nologin puppet

    cat /etc/passwd |grep puppet

    clip_image026

    注意:puppet服务端是以puppet用户运行的,而puppet客户端是root用户运行。

    这样做的目的是:master在服务端以普通用户运行安全性比较高,而agent在客户端以root用户运行,是因为master在创建用户、修改系统文件等资源时,需要具有最高权限。

    5.1 puppet源码安装

    puppet的源码包,我们可以从puppet官网下载。目前puppet最新版为3.7.3.如下:

    http://downloads.puppetlabs.com/puppet/

    clip_image027

    下载puppet软件包。如下:

    wget http://downloads.puppetlabs.com/puppet/puppet-3.7.3.tar.gz

    clip_image028

    解压puppet软件包,如下:

    tar -xf puppet-3.7.3.tar.gz

    clip_image029

    puppet的安装方法与facter的安装一样,如下:

    ruby install.rb或者./install.rb

    clip_image030

    puppet安装完毕后,我们来查看下其帮助信息,如下:

    puppet help

    clip_image031

    查看puppet的安装位置如下:

    ll /etc/puppet/

    clip_image032

    以上就是puppet的安装,安装完毕后。我们现在来配置puppet。

    5.2 master端配置

    puppet安装完毕后,我们来配置下master端。把puppet源码包ext/redhat/目录下的puppet.conf文件复制到puppet的安装目录/etc/puppet/下,如下:

    cp ext/redhat/puppet.conf /etc/puppet/

    vi /etc/puppet/puppet.conf

    server = s.ilanni.com

    certname = s.ilanni.com

    pluginsync = false

    其中s.ilanni.com表示puppet服务器的主机名。

    pluginsync = false表示关闭模块中的插件功能

    clip_image033

    clip_image034

    配置文件修改完毕后,我们现在来配置master端的启动脚本。

    复制puppet源码包ext/redhat/目录下的server.init文件到/etc/init.d/下,并重命名为puppetmaster。然后赋予puppetmaster可执行权限。如下:

    cp ext/redhat/server.init /etc/init.d/puppetmaster

    chmod u+x /etc/init.d/puppetmaster

    clip_image035

    注意:master端启动,我们也可以通过puppet master命令来启动。如下:

    puppet master

    netstat -tunlp |grep "8140"

    ps aux |grep puppet

    clip_image036

    其实puppetmaster启动脚本就是使用puppet master命令启动的,如下:

    cat /etc/init.d/puppetmaster

    clip_image037

    把puppetmaster加入到开机启动项。如下:

    chkconfig --add puppetmaster

    chkconfig puppetmaster on

    chkconfig |grep puppetmaster

    clip_image038

    以上都配置完毕后,我们来启动puppet服务,如下:

    /etc/init.d/puppetmaster start

    ps aux |grep puppet

    netstat -tunlp

    clip_image039

    通过上图,我们可以很puppet服务使用TCP协议的8140端口,而且运行时使用puppet用户。

    puppet服务端配置完毕后,我们现在来配置puppet客户端。

    5.3 agent端配置

    agent端的配置,只需要把puppet.conf文件复制到puppet的安装目录/etc/puppet/下即可,如下:。

    cp ext/redhat/puppet.conf /etc/puppet/

    cat /etc/puppet/puppet.conf

    server = s.ilanni.com

    pluginsync = false

    其中s.ilanni.com表示puppet服务器的主机名。

    pluginsync = false表示关闭模块中的插件功能

    clip_image040

    agent端启动,我们可以通过puppet agent命令来启动。如下:

    puppet agent

    ps aux |grep puppet

    clip_image041

    通过上图,我们也可以看出agent端运行时使用的用户为root,而不是puppet用户。

    注意:agent端我们使用puppet agent命令来进行各种管理,包括证书的申请、资源的同步,我们都是通过这个命令进行的。

    agent可以以两种方式运行:第一种方式是命令接参数连接master,第二种是以守护进程的形式在系统后台运行,默认每30分钟连接一次master,但是这样并不灵活。我们一般是使用第一种方式,并配合crontab使用。

    六、 RPM安装puppet

    RPM方式安装puppet比较简单,我们只需yum安装即可。如下:

    6.1 puppet安装准备工作

    在使用RPM安装之前,我们要先配置额外的yum源,否则系统会提示找不到puppet软件包。如下:

    yum -y install puppet-server

    clip_image042

    安装额外的yum源,我们可以在puppet的官网查找到yum源。如下:

    https://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html#for-red-hat-enterprise-linux-and-derivatives

    clip_image022[1]

    按照puppet官网的方法进行安装。如下:

    rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

    clip_image023[1]

    注意:该yum源无论是master端和agent端都需要进行配置。

    6.2 master端安装与配置

    现在开始yum安装master端,如下:

    yum -y install puppet-server

    clip_image043

    clip_image044

    通过上图,我们可以看到安装puppet-server是要依赖于facter、hiera和puppet三个软件包。

    现在我们来查看puppet-server安装时新建的用户以及puppet服务运行时所用的用户,如下:

    cat /etc/passwd

    ps aux |grep puppet

    clip_image045

    clip_image046

    通过上图,我们可以看到puppet-server在安装时确实新建用户puppet,以及在运行时使用的确实puppet用户。

    查看puppet服务所使用的端口,如下:

    /etc/init.d/puppetmaster start

    netstat -tunlp

    clip_image047

    master端安装完毕后,我们来配置puppet服务的配置文件,其方法和源码安装方法一样。如下:

    vi /etc/puppet/puppet.conf

    server = s.ilanni.com

    certname = s.ilanni.com

    pluginsync = false

    clip_image048

    6.3 agent端安装与配置

    master端安装完毕后,我们来安装agent端如下:

    yum -y install puppet

    clip_image049

    clip_image050

    RPM安装的puppet客户端与源码安装的一样,我们现在来启动puppet客户端。如下:

    clip_image051

    clip_image052

    通过上图,我们可以看出agent端安装时也创建了puppet用户,但是puppet运行时没有使用该用户而是使用root用户。这个与源码安装的相对应。

    agent端安装完毕后,我们来配置agent端的配置文件,其方法和源码安装方法一样。如下:

    vi /etc/puppet/puppet.conf

    server = s.ilanni.com

    pluginsync = false

    clip_image053

    七、 puppet证书授权

    我们知道puppet为了安全,采用ssl隧道通信,因此需要申请证书来验证。

    7.1 master端证书初始化

    当master端第一次启动的时候,可以查看/var/log/message日志文件中,有类似如下的信息:

    tail -f /var/log/messages

    Jan 23 06:39:03 localhost puppet-master[1622]: Signed certificate request for ca

    Jan 23 06:39:04 localhost puppet-master[1622]: s.ilanni.com has a waiting certificate request

    Jan 23 06:39:04 localhost puppet-master[1622]: Signed certificate request for s.ilanni.com

    Jan 23 06:39:04 localhost puppet-master[1622]: Removing file Puppet::SSL::CertificateRequest s.ilanni.com at '/var/lib/puppet/ssl/ca/requests/s.ilanni.com.pem'

    Jan 23 06:39:04 localhost puppet-master[1622]: Removing file Puppet::SSL::CertificateRequest s.ilanni.com at '/var/lib/puppet/ssl/certificate_requests/s.ilanni.com.pem'

    Jan 23 06:39:04 localhost puppet-master[1634]: Reopening log files

    Jan 23 06:39:04 localhost puppet-master[1634]: Starting Puppet master version 3.7.3

    clip_image054

    从日志中我们可以看出第一次启动master端时,puppet服务会在本地创建认证中心,给自己授权证书和key,这个我们可以在/var/lib/puppet/ssl看到那些证书和key。如下:

    ll /var/lib/puppet/ssl

    clip_image055

    这个目录和/etc/puppet/puppet.conf文件中配置的ssldir路径有关系。

    我们也可以查看master端给自己授权的证书文件,如下:

    ll /var/lib/puppet/ssl/ca/signed

    clip_image056

    7.2 agent端申请证书

    agent端在第一次连接master端时,会向master端申请证书。如果master端没有授予agent端证书,那么agent端和master端之间的连接是不会建立成功的。

    此时agent端会持续等待master端授权证书,并会每隔2分钟去检查master端是否签发证书。

    我们现在使用puppet agent --server s.ilanni.com连接master端,如下:

    puppet agent --server s.ilanni.com

    clip_image057

    7.3 master端授权证书

    agent端申请证书完毕后,需要我们切换到master端,使用puppet cert命令来对agent端授权证书。

    有关puppet cert的使用,我们可以查看pupper cert的帮助信息。如下:

    pupper cert

    clip_image058

    在上图中,puppet cert已经给出如何给一个agent端进行授权证书的例子。

    现在我们来查看master端有哪些主机在申请证书,如下:

    puppet cert list

    clip_image059

    通过上图,我们很明显的可以看到c.ilanni.com客户端正在申请证书。

    现在我们来给agent端授权证书,使用如下命令:

    puppet cert sign c.ilanni.com

    clip_image060

    注意:如果实际生产环境客户端数量比较多的话,我们可以一次性授权所有证书。如下:

    puppet cert sign --all

    clip_image061

    在master端查看所有已经通过认证的agent端,如下:

    puppet cert -all

    clip_image062

    现在我们再来看看master端给agent端授权的证书文件,如下:

    ll /var/lib/puppet/ssl/ca/signed

    clip_image063

    通过上图,我们可以看出master端授权客户端c.ilanni.com的证书文件是c.ilanni.com.pem。

    7.4 查看agent端证书

    在master端授权完毕后,我们现在切换到agent端查看授权的证书文件,如下:

    ll /var/lib/puppet/ssl/certs

    clip_image064

    通过上图,我们可以看出agent端的证书文件c.ilanni.com.pem与master端的证书文件是一样的。

    7.5 puppet证书问题

    在实际的生产环境中,可能会出现已经通过master端认证的agent端主机名被修改或者其他一些误操作,从而导致agent端无法与master端进行正常通信。

    当遇到这种情况时,我们一般的处理方法是先删除master端和agent端的相关的认证文件,然后在agent端重新申请证书。

    具体操作如下:

    agent端,删除/var/lib/puppet/ssl目录,如下:

    rm -fr /var/lib/puppet/ssl

    clip_image065

    master端,删除/var/lib/puppet/ssl/ca/signed目录下的证书文件,如下:

    rm -fr /var/lib/puppet/ssl/ca/signed/c.ilanni.com.pem

    clip_image066

    以上操作完毕后,agent端再次申请证书即可。

    八、 puppet资源

    puppet环境搭建完毕后,我们现在开始来介绍puppet资源相关的内容。

    8.1 puppet的资源类型及帮助

    puppet的资源,我们是可以通过相关命令查看puppet支持的资源类型。

    通过前面的章节,我们知道puppet是支持子命令进行查询的。如下:

    puppet help ca

    clip_image067

    查看puppet支持的资源类型。如下:

    puppet describe --list

    clip_image068

    也可以通过puppet resource --type命令查询,如下:

    puppet resource --type

    clip_image069

    通过上图,我们可以看到puppet支持用户user、文件file、crontab等大部分的资源。

    如果想查看user的资源,我们还是继续使用puppet describe user命令进行查看。如下:

    puppet describe user

    clip_image070

    如果我们想查看user在puppet站点site.pp文件中的具体使用方法,可以通过如下命令进行查看:

    puppet resource user

    clip_image071

    通过上图,我们可以看到puppet已经给出了user使用的例子,我们只需要按照这个例子进行操作即可。

    注意:如果puppet describe帮助中没有该资源在site.pp站点中的使用详情,我们可以去到puppet resource中进行查看。

    clip_image072

    clip_image073

    这个只是以user资源为例,如果想查看host资源的帮助,我们也可以使用类似的命令,如下:

    puppet resource host

    clip_image074

    如果你不想在本机进行查看,那么也可以去puppet官网进行查看,如下:

    https://docs.puppetlabs.com/references/latest/type.html

    clip_image075

    clip_image076

    8.2 puppet资源配置文件

    puppet的资源配置文件在服务端的/etc/puppet/manifests目录下,我们需要在该目录下创建一个站点文件site.pp。

    我们在该文件中创建需要同步到agent端的资源,如下:

    cat /etc/puppet/manifests/site.pp

    clip_image077

    node default{

    file { "/tmp/test.txt":

    content => "Hello,ilanni,this is puppet test! "}

    }

    以上命令表示在puppet资源配置文件冲创建一个默认节点,使用file资源,在agent端的/tmp/目录下创建test.txt,内容为:Hello,ilanni,this is puppet test!

    注意:其中的 表示换行。如果不加 的话,查看该文件内容时会显示成这样:

    clip_image078

    同时site.pp文件创建完毕后,我们要先重启下master端,如下:

    /etc/init.d/puppetmaster restart

    clip_image079

    现在切换到agent端同步该资源,如下:

    puppet agent --test --server s.ilanni.com

    clip_image080

    通过上图,我们可以看到agent端已经把master端的资源的同步到本地。

    现在我们来查看,agent端的/tmp目录下是否有test.txt这个文件。如下:

    cat /tmp/test.txt

    clip_image081

    通过上图,我们可以看到agent端确实已经同步到master端的资源。/tmp目录下确实有test.txt这个文件,而且内容也确实和master端的一样。

    到此有关puppet3.7搭建与配置介绍完毕,下一篇文章我们会介绍在生产环境中,puppet同步的资源。

  • 相关阅读:
    时尚前沿的图片左右滚动效果-1
    瀑布流效果
    js遮罩层弹出显示效果组件化
    javascript学习笔记(三)
    前端开发技巧
    Pushlet后台推送
    比较抽象的面试题
    技术点
    HTML5特性
    struts2学习笔记(二)
  • 原文地址:https://www.cnblogs.com/ilanni/p/4250034.html
Copyright © 2020-2023  润新知