puppet进阶管理之终极应用

     上一篇博客写了puppet操作file、cron、user、group、exec基础资源的使用,连接地址为 http://www.178linux.com/13990 

这次实验puppet的操作Package、Server和puppet的特殊资源属性Metaparameters。

回顾下Package、Server资源属性:  

    package的常用属性:
    ensure:present安装, installed安装, absent不能安装, latest,VERSION(2.3.1-2.el7)–目标状态
    name: 程序包名称:
    source:包文件的路径,可以是本地文件系统路径,也可以网络文件路径;
    puppet:///modules/MODULE_NAME/FILENAME

    provider:指明程序包提供者默认为yum;

 

   service的常用属性:
    ensure:
    true, running
    false, stopped
   enable: true|false 是否开机自动启动
   name:服务名称
   hasrestart:是否支持restart参数
   hastatus:是否支持status参数
   path: 服务脚本路径
   pattern:用于搜索此服务相关的进程的模式,当脚步不支持restart/status时,用于确定服务是否处于运行状态;

 

一、puppet使用package安装glances监控工具:

            

    1、编辑site.pp:

          site-glances.jpg

        本地测试site.pp

        glances-apply.jpg

      2、agent连接master:

            agent-glance.png

            agent运行glances监控命令:

            glance1.jpg

 

二、puppet特殊资源属性:Metaparameters

        
    puppet提供了before、require、notify、subscribe四个元参数来定义资源间的相关性,这四个元参数都有另外的其他资源或资源组作为其值,这也称     作资源引用,资源引用要通过“Type [title]”的方式进行,如User['test'],首字母必须大写。
    依赖关系:
        before => Type['title'] 被依赖的资源中使用
        require => Type['title']依赖其他资源的资源
        链式依赖:->
    通知关系
        notify =>  通知被依赖的资源中使用
        subscribe => 订阅监听其他资源的资源
        链式通知:~>

1、创建linux组,gid=3000。linux组的gid依赖用户centos的gid。

            user-group.jpg

           agent-user.jpg

            同理,如果使用require。在user段中加入require => Group['linux']即可。

三、puppet使用server属性安装nginx服务:

        nginx.png

        nginx-apply.jpg

        

四、puppet使用class、modules功能:

     类:命名的puppet代码块,需要时可通过名称进行调用,用于公共目的一组资源,是命名的代码块,创建后可用在puppet全局调用,类可以被继承

             备注:类的名字只能以小写字母开头,类在声明后方可执行。

     类的的声明:                 
         类声明方式1:声明一个类
               include class1, class2, …
                       class {'classname': }

         定义带参数的类:
                   class class_name ($arg1=value1, $arg2=value2) {
                    …puppet code…
                                           }

         类声明方式2,传递参数:
               class {'class_name':
                    para1 =>  new_value1,
                    para2  =>  new_value2,
                           }

1、使用class创建webserver类:

          class-nginx.jpg

            本地测试:

         class-nginx1.jpg

 

puppet模板:基于ERB模板语音,在静态文件中使用变量等编程元素生成适用于多种不用的环境的文本(配置文件):Embedded RUBY
                      用于实现在文本中嵌入ruby代码,原来的文本信息不会改变,但ruby代码会被执行,执行结果将直接替换原来代码:

         puppet模块:为了实现某种完备功能而组织成的一个独立的、自我包含的目录结构

              目录结构:/etc/puppet/modules
               module_name:  manifests: –资源清单
               init.pp: 至少应该包含一个与当前模块名称同名类;      
               MODULE_NAME::[SUBDIR_NAME]::MANIFESTS_FILE_NAME
               files:静态文件
               puppet url    puppet:///modules/MODULE_NAME/[SUBDIR_NAME]/FILE_NAM
               templates: 模板文件目录    模板文件:*.erb
               template('MODULE_NAME/TEMPLATE_FILE_NAME');

               lib: 插件目录  tests: 模块使用帮助文档    spec: 类似于tests目录,存储lib目录下定义的插件的使用帮组和示例文件:

 

1、手工创建nginx模块并新建nginx、nginx_webserver、nginx_proxy类:

    module-nginx1.jpg

    [root@master modules]# cp /etc/puppet/manifests/site.pp /etc/puppet/modules/nginx/manifests/init.pp

    [root@master modules]# cp /opt/moudules/nginx/nginx_proxy.conf /etc/puppet/modules/nginx/files/nginx.conf

        module-nginx2.jpg

     编辑/etc/puppet/manifests/site.pp调用模板中的类:(在生成环境中根据不同节点调用不同的模板和类)

        module-site.jpg

    在agent.puppet.com上应用模板中的类nginx_proxy:

        moudule-agent1.jpg

        注意:生成环境中先在本地测试跑在运行

                    puppet agent –server=master.puppet.com –no-daemonize –verbose –noop

2、puppet多环境配置:

        在实际工作中服务器配置可能会有开发环境、测试环境、生成环境。puppet可以定义不同的环境配置让其agent连接。

        master:  vim /etc/puppet/puppet.conf  在master端中添加支持

                     [master]
                     environmnet=production,testing,development — 声明master支持环境
                      [production]
                              manifest = /etc/puppet/envionments/production/manifests/
                              modulepath = /etc/puppet/envionments/production/modules/
                              fileserverconfig = /etc/puppet/filesserver.conf
  
                      [testing]
                              manifest = /etc/puppet/envionments/testing/manifests/
                              modulepath = /etc/puppet/envionments/testing/modules/
                              fileserverconfig = /etc/puppet/filesserver.conf

                      [development]
                              manifest = /etc/puppet/envionments/development/manifests/
                              modulepath = /etc/puppet/envionments/developmentmodules/
                              fileserverconfig = /etc/puppet/filesserver.conf

agent:
      [agent] –声明agent处于哪个环境 
          enviroment = testing

五、puppet拓展思路:

随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster响应很慢,压力大,解析缓慢,有什么优化的方案吗?可以使用Puppetmaster配置多端口,结合Nginx web代理,这样puppetmaster承受能力至少可以提升10倍以上。

要使用puppet多端口配置,需要指定mongrel类型,默认没有安装。如果配置多主集群的话,可以共享master1的证书,然后另外一台master通过NFS挂载证书即可。

                    

 

 

 

   感谢马哥,每天进步一点点!         

原创文章,作者:n18-jude,如若转载,请注明出处:http://www.178linux.com/14611

(0)
n18-juden18-jude
上一篇 2016-04-12 19:00
下一篇 2016-04-12 19:00

相关推荐

  • linux 怎么使用帮助

    linux怎么使用帮助 Which命令 whatis命令 使用手册来获取帮助-man命令 通过info命令查看帮助 使用软件自带的帮助文档来获取帮助 通过在线文档获取帮助 使用网站和搜索 linux 怎么使用帮助 在linux中有很多命令,配置文件,很多命令选项和参数,我们不可能完全记住的,那工作中遇到怎么办,我们可以查看linux自带的帮助文档,或者利用搜…

    Linux干货 2016-09-05
  • Linux程序包管理方式

    Linux程序包安装和管理方式共计三种:          一、[yum|dnf],通过官网或者其他开源网站提供的文件服务器,本机镜像源等途径进行安装。         二、rpm,通过官网或者其他开源网站通过…

    Linux干货 2016-08-29
  • LVM应用

    1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项 ·首先在虚拟机当中添加指定大小的硬盘,添加完成后,系统不会自动扫描添加的硬盘设备,键入命令重新扫描SCSI总线来添加设备   echo "- – -&quo…

    Linux干货 2016-08-30
  • Linux命令帮助及history命令的使用

    1.Linux命令帮助的获取详解 在Linux中获取命令帮助时,内部命令和外部命令的获取方式是有区别的: 即  (1)内部命令:#help COMMAND ?            #man bash  (2)外部命令:<1> # COMMAND –hel…

    Linux干货 2016-08-05
  • IO重定向和管理及管道

    IO重定向   通常对程序来讲,输入输出数据可以是键盘、鼠标、显示器等;IO重定向就是将原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器输出而是希望输入到某以文件中的可以通过Linux重定向进行这项工作。  IO重定向和FD(File Descriptor)有关。      标准输入(std…

    Linux干货 2016-08-05
  • 用户,组和权限管理 基础命令整理

    安全3A任何一个安全策略都应该有Authentication(认证)、Authentication(授权)、Accouting|Audition(审计)这三个措施。 用户(User)Linux用户是安全3A中的Authentication(认证)措施。用户在登录时,系统会检查用户输入的用户名和密码。如果用户输入的用户名和密码匹配,会根据用户信息给用户分配一个…

    Linux干货 2017-03-16