• Centos7安装Puppet自动运维


    一、概念

      puppet是一种Linux、Unix、windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。 

      数据流说明:

        1.首先所有的节点(Node)Node节点将Facts和本机信息发送给Master

        2.Master告诉Node节点应该如何配置,将这些信息写入Catalog后传给Node。

        3.Node节点在本机进行代码解析验证并执行,将结果反馈给Master。

        4.Master通过API将数据发给分析工具。报告完全可以通过开放API或与其他系统集成。

      具体的工作流程:

                    

      • 客户端puppet调用facter(facter是通过SSL加密收集及检测分析客户端配置信息的一个工具)。facter探测出主机的一些变量,如主机名,内存大小,IP地址等。Puppet将这些信息通过SSL连接发送到服务端
      • 服务端的puppetmaster通过facter工具分析检测客户端的主机名,然后找到项目主配置文件manifest里面对应的node配置,并对该部分内容进行解析。facter发送过来的信息可以作为变量处理,node牵涉到的代码才进行解析,其他没牵涉的代码不解析。解析分几个阶段,首先进行语法检测,如果语法没有错,就继续解析,解析的结果生成一个中间的“伪代码”,然后将“伪代码”发送给客户端。
      • 客户端接受到“伪代码”并执行,然后将执行结果发送给服务端。
      • 服务端把客户端的执行结果写入到日志中去。

      Puppet工作中以下两点值得注意:

        为了保证安全,client和master之间是基于SSL和证书通信的,只有经过master证书认证的client才可以和master通信。

        puppet会让系统保持在人们期望的某种状态并之一持续下去,如检测某个文件并一直保证其一致存在,保证ssh服务始终开启,如果文件被删除或者ssh服务被关闭,puppet下次执行时(默认30分钟),会重新创建该文件或者启动ssh服务。

    二、安装配置

      1、安装准备(已关闭防火墙和selinux)

    setenforce 0
    systemctl stop firewalld
    名称 系统 ip 主机名
    master CentOS 7 192.168.207.137 master.domain.com
    slave centos 7 192.168.207.133 slave.domain.com

      2、master服务器配置

    [root@master ~]# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm
    [root@master ~]# yum install puppet-server
    [root@master ~]# systemctl enable puppetmaster.service
    [root@master ~]# vi /etc/hosts
    添加如下两行
    192.168.207.137  master.domain.com
    192.168.207.133  slave.domain.com
    [root@master ~]# vi /etc/puppet/puppet.conf
    添加如下内容:
    [main]
    certname=master.domain.com//服务端的名字

    systemctl start puppetmaster.service
    systemctl enbale puppetmaster.service

      3、配置客户端

    [root@slave ~]# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm
    [root@slave ~]# yum install puppet
    [root@slave ~]#vi /etc/puppet/puppet.conf
    添加如下内容:
    [agent]
    certname = slave.domain.com
    server = master.domain.com
    report = true
    [root@slave ~]# systemctl start puppet.service
    [root@slave ~]# systemctl enable puppet.service

    4、在Puppet客户端创建test.txt文件,并在该文件中写入测试内容,Puppet服务端创建node,创建或者编辑vim /etc/puppet/manifests/site.pp文件,在文件中加入如下代码:

    node default{
    file{
        "/tmp/test.txt":
        content => "Hello World,Welcome to Slave";
         }
    }

     三、Puppet常见资源及模块

        file:主要负责管理文件;

        package:软件包的安装管理;

        service:系统服务的管理;

        cron:配置自动任务计划;

        exec:远程执行运行命令。

    puppet describle -l              查看puppet支持的所有资源和模块
    puppet describle -s file 查看puppet file资源所有的帮助信息

      1、Puppet file 资源案例

      

    从Puppet服务器下载nginx.conf 文件至客户端/tmp目录,首先需要将nginx.conf文件cp至/etc/puppet/files目录,然后在/etc/puppet/filesserver.conf中添加以下三行代码,并重启Puppet master。

    vim /etc/puppet/fileserver.conf
    
    [files]
    path /etc/puppet/files
    allow *

    在manifests中创建site.pp文件

    node default{
    file{
    
        "/tmp/nginx.conf":
        mode => '644',
        owner => 'root',
        group => 'root',
        source => 'puppet://master.domain.com/files/nginx.conf',
         }
    }

    客户端执行:

    puppet agent --server=master.domain.com --test

       2、Puppet package资源案例

        Puppet package资源主要用于管理客户端服务器的软件包,YUM源为/etc/yum.repo.d/安装和升级操作,通过Puppet基于YUM自动安装软件包,所以需要先配置好YUM源。

     客户端安装ntpdate及screen软件,服务端先编写site.pp

    node default{
         package {
            ["screen","ntp"]:
            ensure => "installed";
         }
    }

    客户端执行:

    puppet agent --server=master.domain.com --test

    卸载:

    node default{
         package {
            ["screen","ntp"]:
            ensure => "absent";
         }
    }

      3、Puppet service资源案例

        Puppet service 资源主要用于启动、重启和关闭客户端的守护进程,同时可以监控进程的状态,还可以将守护进程加入到自启动中。

       启动agent ntpd服务,停止httpd服务,先编写site.pp文件。

    node default{
         service {
            "httpd":
            ensure => "stopped";
            "ntpd":
            ensure => "running";
         }
    }

      客户端执行:

    puppet agent --server=master.domain.com --test

      启动并加入自启代码如下:

    node default{
         service {
            "httpd":
            ensure => "running",
            enable => true;
            "ntpd":
            ensure => "stopped";
            enable => false;
         }
    }

      4、Puppet exec 资源案例

        Puppet exec 资源主要用于客户端远程执行命令或者软件安装等,相当于shell的调用,exec是一次性执行资源,在不同类里面exec名字可以相同。

     

     agent服务器执行解压Nginx软件包,先编写site.pp文件:

    node default{
         exec {
            "Agent tar xzf nginx-1.18.0.tar.gz":
            path => ["/usr/bin","/bin"],
            user => 'root',
            group => 'root',
            timeout => '10',
            command => 'tar -zxf /tmp/nginx-1.18.0.tar.gz';
         }
    }

    客户端执行:

    puppet agent --server=master.domain.com --test

    编写自动安装nginx:

    node default {
            file {
                    "/tmp/auto_install_nginx.sh":
                    source => "puppet://master.domain.com/files/auto_install_nginx.sh",
                    owner => "root",
                    group => "root",
                    mode => 755,
            }
            exec{
                    "/tmp/auto_install_nginx.sh":
                    cwd => "/tmp",
                    user => root,
                    path => ["/usr/bin","/usr/sbin","/bin","/bin/sh"],
            }
    }

    agent服务器更新sysctl.conf,如果该文件发生改变,则执行命令sysctl -p,先把服务器端的sysctl.conf文件拷贝至/etc/puppet/files文件夹下面,编写site.pp

    node default {
        file {
            "/etc/sysctl.conf":
            source => "puppet://master.domain.com/files/sysctl.conf",
            owner => "root",
            group => "root",
            mode => 644,
        }
        exec{
            "sysctl refresh kernel config":
            path => ["/usr/bin","/usr/sbin","/bin","/bin/sh"],
            command => "/sbin/sysctl -p",
            subscribe => File["/etc/sysctl.conf"],
            refreshonly =>true
        }
    }

      5、Puppet cron资源案例

        Puppet cron 资源主要用于安装管理crontab计划任务,每一个cron资源需要一个command属性和user属性以及至少一个周期属性(hour、minute、month、monthday、weekday)。

     agent服务器添加ntpdate时间同步任务,编写site.pp文件

    node default {
            cron{
                    "ntpdate":
                    command => "/usr/sbin/ntpdate pool.ntp.org",
                    user => root,
                    hour => 0,
                    minute => 0;
            }
    }

    agent服务器删除ntpdate时间同步任务。

    node default {
            cron{
                    "ntpdate":
                    command => "/usr/sbin/ntpdate pool.ntp.org",
                    user => root,
                    hour => 0,
                    minute => 0,
                    ensure => absent;
            }
    }

    客户端执行:

    puppet agent --server=master.domain.com --test

     四、Puppet 日常管理和维护

      1、配置自动颁发证书:前提是服务端与客户端能ping通彼此的主机名,配置自动颁发证书需在Puppet服务器端的puppet.conf配置文件main端加入如下代码

    [main]
    autosign = true

      服务器端:重启Puppet master服务,并且删除客户端证书

    systemctl restart puppetmaster 
    puppet cert --clean slave.domain.com

      客户端:删除Puppet客户端SSL文件,重新生成SSL文件,执行如下命令自动申请证书:

    rm -rf /var/lib/puppet/ssl/
    puppet agent --server=master.domain.com --test

      Puppet客户端安装完,并且认证完之后,如果在Puppet服务端配置了node信息,客户端启动服务,默认30min自动与服务端同步信息,如果要修改同步的时间频率,修改Puppet

    客户端配置信息。

     

       2、Puppet服务器端主动推送

        Puppet客户端配置每60s与服务端同步配置信息,如果服务器端更新了配置信息,想立刻让客户端同步,可以使用Puppet master主动推送的方式,让客户端更新服务端最新的配置信息。

        Puppet服务器端使用puppet run命令可以给客户端发送一段信号,告诉客户端立刻跟服务器同步配置信息。

        配置方法:

        (1)、修改Puppet客户端配置文件/etc/puppet/puppet.conf,在agent端加入如下代码:

    [agent]
    listen=true

        (2)、修改Puppet客户端配置文件/etc/sysconfig/puppet,指定Puppet master端主机名

    PUPPET_SERVER=master.domain.com

        (3)、创建Puppet客户端配置文件namespaceauth.conf

    [puppetrunner]
    allow *

        (4)、修改Puppet客户端配置文件auth.conf,在path /前添加如下代码:

    path /run
    method save
    allow *

        (5)、重启客户端puppet服务,puppet服务端执行如下命令,通知客户端来同步配置,也可以批量通知其他客户端,只需要将客户端的主机名写入host.txt,代码如下

    puppet kick -d slave.domain.com
    #puppet kick -d 'cat host.txt'
  • 相关阅读:
    SQLServer三种自定义函数
    IE下必须点击一下页面空白的地方才可以激活onchange事件
    1234跨年总结(2014年总结)
    半透明背景(兼容IE)
    EF Power Tools
    ASP.NET MVC报错: Multiple types were found that match the controller named
    URI、URL和URN
    SQLServer中临时表与表变量的区别分析
    C#分部方法
    __flash__removeCallback 未定义错误
  • 原文地址:https://www.cnblogs.com/aqicheng/p/12981179.html
Copyright © 2020-2023  润新知