美文网首页
Puppet-server/agent

Puppet-server/agent

作者: N33_LvQing | 来源:发表于2018-12-29 14:57 被阅读0次

    Puppet的服务器端内部有一张主机资源清单,每一台主机有对应的代码资源。当一台主机通过http发起请求到master时,master按照清单找到对应的代码编译生成catalog后发送给agent,其中master需要监听在一个套接字上8140端口,agent会运行一个守护进程周期性(30分钟)的向master发起请求。
    master与agent之间的通信是使用加密的http,这就意味着master还得是一个CA,给自己和所有得agent签发证书。
    配置示例:
    首先puppet推荐使用主机名来识别master与agent,以后得实际生产中推荐使用DNS这里我们使用hosts文件来配置。

    192.168.31.200 node1.lvqing.com
    192.168.31.201 node2.lvqing.com
    192.168.31.203 node3.lvqing.com
    

    node1作master,node2与node3作agent,做之前要同步时间
    然后master需要作

    安装程序包
    facter, puppet, puppet-server 
            
    初始化master:
    puppet master --no-daemonize --verbose          
    

    站点清单的定义

    vim /etc/puppet/manifests/site.pp
    
    node 'node2.lvqing.com'{
            include chrony
    }
    

    模式匹配

    node /PATTERN/ {
        ...puppet code...
    }
                
    node /node[0-9]+\.magedu\.com/
    

    还可以定义节点的继承

    节点定义的继承:
        node NODE inherits PAR_NODE_DEF {
            ...puppet code...
        }
    

    agent向master发起请求

    puppet agent --server node1.lvqing.com --no-daemonize -v --noop
    
    Info: Caching catalog for node2.lvqing.com
    Info: Applying configuration version '1546050755'
    Notice: Finished catalog run in 11.54 seconds
    

    前面只是我们让master运行在前台以便直观的观察到程序的运行状态,实际上master只需要直接执行systemctl start puppetmaster.service即可,agent稍微修改下配置文件也直接启动就行了。难点在于模块的制作与各资源之间的定义使用。
    接下来我们可以直接在agent的配置文件中添加一条指向master的配置即可让agent以守护进程的方式运行了。

    vim /etc/puppet/puppet.conf
    添加
    server = node1.lvqing.com
    启动
    systemctl start puppetagent.service
    

    接下来模拟puppet创建nginx+tomcat实例

    模块创建目录
    mkdir ./{jdk8,tomcat}/{manifests,files,templates,lib,spec,tests} -pv
    
    vim jdk8/manifests/init.pp
    class jdk8{
            package{'jdk8}:
                    name    => 'java-1.8.0-openjdk-devel'
                    ensure  => latest,
            }
    
            file{'java.sh':
                    path    => '/etc/profile.d/java.sh',
                    source  => 'puppet:///modules/jdk8/java.sh',
            }
    }
    
    vim files/java.sh
    export JAVA_HOME=/usr
    

    tomcat的模板

    vim modules/tomcat/manifests/init.pp
    class tomcat{
           package{"['tomcat','tomcat-admin-webapps']":
                               ensure  => latest
            } ->
    
            file{'server.xml':
                    path    => '/etc/tomcat/server.xml',
                    source  => 'puppet:///modules/tomcat/server.xml',
            } ~>
    
            service{'tomcat':
                    ensure  => running,
                    enable  => true
            }
    }
    
    cp /etc/tomcat/server.xml ./files 
    cp modules/* /etc/puppet/modules/ -a
    

    模块都已经准备好了,接下来我们定义主机清单,给第二个节点安装tomcat

    vim /etc/puppet/manifests/site.pp
    添加
    node 'node3.lvqing.com'{
            include jdk8
            include tomcat
    }
    

    node3修改配置文件或直接运行命令前台拉取数据
    puppet agent --server node1.lvqing.com --no-daemonize -v --debug
    可以看到结果:

    /Stage[main]/Tomcat/Package[tomcat]/ensure: created
    /Stage[main]/Tomcat/Service[tomcat]/ensure: ensure changed 'stopped' to 'running'
    Finished catalog run in 12.79 seconds
    /Stage[main]/Tomcat/Service[tomcat]/ensure: ensure changed 'stopped' to 'running'
    
    

    如果puppet管理的主机非常多,我们也可以对清单的配置信息进行模块化组织,不同的角色放置在不同的目录中,再在主manifests的site.pp中导入配置

    databases.d/
    tomcatservers.d/
    nodes.d/
    可通过多个pp文件分别定义各类站点的清单;而后统一导入site.pp,方法如下:
    import 'DIRECTORY_NAME/*.pp
    

    一般的公司都拥有三种环境,开发环境,生成环境和测试环境,puppet只能针对单一的一种环境设置,默认是指Production环境

    puppet3.6之后的版本配置多环境的方法

    master端:
    (1) 配置文件puppet.conf
        [master]
        environmentpath = $confdir/environments
                    
    (2) 在多环境配置目录下为每个环境准备一个子目录
        ENVIRONMENT_NAME/
        manifests/
            site.pp
        modules/
    
    agent端:
        [agent]
        environment = { production|development | testing }
    

    多环境配置实例:
    同一个包三种不同环境下不同的配置

    每个环境下必须要有modules和manifests,这样默认目录下的modules就没有用了
    mkdir environments/{production,development,testing}/{manifests,modules}
    
    cp modules/chrony/ environments/testing/modules/ -a
    cp modules/chrony/ environments/development/modules/ -a
    cp modules/chrony/ environments/production/modules/ -a
    
    vim /etc/puppet/puppet.conf #添加
    [main]
        environmentpath = $confdir/environments
    #这里的$confdir是指/etc/puppet
    
    对服务的配置进行区分修改
    (development)node2修改chrony配置文件添加
    server node2.lvqing.com iburst
    (testing)node3修改chrony配置文件添加
    server node3.lvqing.com iburst
    
    接下来创建各环境下的site.pp
    vim /etc/puppet/environments/development/manifests/site.pp
    node 'node2.lvqing.com' {
            include chrony
    }
    vim /etc/puppet/environments/testing/manifests/site.pp
    node 'node2.lvqing.com' {
            include chrony
    }
    这里包括的类都一样但因为node2所处的环境不同,chrony指向的服务器也不同
    

    现在我们有两种环境,development和testing相同的服务不同的配置,agent根据自己的需求到对应的环境中拉取数据
    agent端配置

    vim /etc/puppet/puppet.conf
    environment = development
    注意不加s是让自己处于某种环境中而不是对变量进行赋值。
    

    额外配置文件:
    文件系统:fileserver.conf
    认证(URL):auth.conf
    对agent请求的资源作认证

    当master上定义agent的配置更改了,如何通知给agent呢,agent默认30分钟访问master一次。
    agent配置文件中需要添加
    listen = true
    因为是master主动联系agent所以还要在agent的auth.conf文件中添加

    path /run
    method save
    auth any
    allow node1.lvqing.com
    

    配置好后需要master使用命令主动通知agent过来拉取配置

    puppet kick node2.lvqing.com
    结果
    Triggering node2.lvqing.com
    Getting status
    status is success
    node2.lvqing.com finished with exit code 0
    Finished
    

    利用puppet来进行发布和回滚
    发布

    • 1、创建一个新的资源目录,定义file资源将其推送过去
    • 2、用file创建一个符号链接指向新的版本
      回滚
    • 1、定义一个资源回滚,将旧的版本推送过去。
    • 2、用file创建一个符号链接指向旧的版本
      或者可以写在模块里,平时不使用,一但出现问题手动include模块,符号链接指向老的版本

    改完以后就使用kick将文件推到agent上。

    相关文章

      网友评论

          本文标题:Puppet-server/agent

          本文链接:https://www.haomeiwen.com/subject/zsjelqtx.html