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

相关推荐

  • sed文本编辑工具

    用法:sed[option]… ‘script’ inputfile…常用选项:-n:不输出模式空间内容到屏幕,即不自动打印-e: 多点编辑-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本-r: 支持使用扩展正则表达式-i.bak: 备份文件并原处编辑script:‘地址命令…

    Linux干货 2017-05-02
  • N25-第10周博客作业

    请详细描述CentOS的启动流程     启动第一步–加载BIOS         当打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息…

    Linux干货 2017-03-10
  • 基础指令使用篇 Linux版

    回显,回声 echo echo hello > /dve/pts/1 打开图形界面 init 5   关闭图形界面 init 3 ctrl+alt+F1-6字符,F7图形界面 chvt 改变虚拟终端 chvt +数字 startx  图形的软件打开 poweroff centOS 6.8与7.2都正常关闭断电 hostname 显示…

    系统运维 2016-08-04
  • N22-妙手-第七周博客作业第四题:RAID各级别的特性

    什么是RAID RAID的全称是Redundant Array of Independent Disks – 独立磁盘冗余阵列。基本思想是将多个相对便宜的硬盘组合成为一个硬盘阵列,使其在性能上达到或超过一块价格昂贵、容量巨大的硬盘。RAID通常被用在服务器上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统会把其当做一块硬盘。RAID分为不同的等…

    Linux干货 2016-09-27
  • N26-第四周作业-邢岩

    马哥门徒-N26-邢岩   精神练习需要深入认真的工作以及热情的劲头。当你开始练习,你是在挣扎、在反抗,你需要集中精力,然后慢慢进步。那么,我们就开始吧。   第一题,复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。   ~]# cp -r /et…

    Linux干货 2017-02-15
  • shell脚本编程基础(1)

    一.位置变量相关知识     1.位置变量定义:在脚本代码中调用通过命令行传递给脚本的的参数     2.位置变量种类:              &…

    Linux干货 2016-08-15