自动化运维工具之Puppet

简介:

一、ruby介绍(pupet4以上已用其他语言重写)

puppet3以下版本是由ruby语言研发的,所以在学习Puppet之前,可以先了解下ruby语言。

ruby 是一种面向对象、命令式、函数式、动态的通用编程语言。在20世纪90年代中期由日本人松本行弘设计并开发,遵守BSD许可证和Ruby License。它的灵感与特性来自于Perl、Smalltalk、Eiffel、Ada以及Lisp语言。

Ruby的作者--松本行弘于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。之所以称为Ruby是取法自Perl,因为Perl的发音与6月的诞生石pearl(珍珠)相同,Ruby选择以7月的诞生石ruby(红宝石)命名。

特色

完全面向对象:任何东西都是对象,没有基础类型

变量没有类型(动态类型)

任何东西都有值:不管是四则运算、逻辑表达式还是一个语句,都有回传值。

运算符重载

垃圾回收

强类型

变量无需声明

在Windows上,加载DLL

注:puppet4已经“重构”,对比puppet3已经发生了“很大”的改变。可以看以下文章更详细的了解。http://www.cnblogs.com/yuxc/p/5945944.html

二、puppet介绍

puppet是一种Linux、Unix、windows平台的集中式的配置管理工具,通过自有配置语言对节点进行目标状态定义,并能够基于网络实现目标状态的维护。使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。

puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息.

    master: 中心配置库

    agent: 读取并应用配置的节点

puppet工作过程

debb62eb6db301b44fa30e56925a14e8.png-wh_

1)定义:使用puppet特定的语言定义基础配置信息。通常将信息写在modules中。

2)模拟:在配置执行之前检测代码,但不真正执行。

3)执行:按步骤1)定义的配置自动部署。检测并记录下所发生变化的部分。

4)报告:将期待的变化、实际发生的变化及任何修改发送给报告系统。

puppet工作模型

5823bdcc6a28c8b6fcf4b8254081d52a.png-wh_

三、puppet安装

3.1 安装puppet

解决依赖关系安装ruby模块:

1
yum  install  ruby ruby-libs ruby-shadow

安装puppet3

1
2
rpm -Uvh http: //yum .puppetlabs.com /el/6Server/products/x86_64/puppetlabs-release-6-6 .noarch.rpm 
yum clean all

服务器端安装:

1
yum  install  puppet-server

客户端安装:

1
yum  install  puppet

安装puppet4

1
yum localinstall http: //yum .puppetlabs.com /puppetlabs-release-pc1-el-7 .noarch.rpm

服务器安装:

1
Yum  install  puppetserver

客户端安装:

1
yum  install  puppet

3.2 配置puppet

配置防火墙

1
iptables -A INPUT -m tcp -p tcp --dport 8140 -j ACCEPT

启动puppetserver服务:

0b336dd1de344a5eb1be93c4227aa697.png-wh_

设置主机名和指定的host。

Master

1
#hostname centos

Agent(3个客户端)

1
2
3
#hostname centos-test1
#hostname centos-test2
#hostname centos-test3

两端/etc/hosts同时添加:

1
2
3
4
192.168.39.135 centos  
192.168.39.200 centos-test1  
192.168.39.201 centos-test2 
192.168.39.202 centos-test3

Master端/etc/puppetlabs/puppet/puppet.conf :

指定cert服务器名:

83ad5d146977bfc456d0ddd6277322a4.png-wh_

Agent端/etc/puppetlabs/puppet/puppet.conf:

指定puppet server端:

09708a27abfc1a1f6f21ba169352bf89.png-wh_

3.3 puppet agent ca认证

puppet认证机制:

master/agent:

        1、master启动时会为自己生成Key, 并签署证书;

        2、agent首次启动要为自己生成Key, 生成证书签署请求;

        3、master收到agent端的签署请求后,要先验正请求是否合法,而后做证书签署;

Agent发起认证请求:

1
# puppet agent --test    (同puppet agent -t)

904b6df69c3d5f9e4b3c976e883b09ee.png-wh_

Master查看认证请求:

1
[root@centos puppet] # puppet cert --list

43329d8afc780c9d16f64f2611ccf2e7.png-wh_

1
# puppet cert list --all

查看所有客户端的请求(有+号的代表已经签好证书可以通信,没有加号的代表尚未签好证书)

682a1f10897987030ccf940776000d23.png-wh_

Master下发认证:

1
[root@centos puppet] # puppet cert sign centos-test1

12245c4c172a5b97ac94f7df6a5d3390.png-wh_

也可以使用命令puppet cert sign -all 受理所有认证

此时,认证请求已经没有了。

6273ad7f33088eeed8dc706ac26fff84.png-wh_

Agent确认已经成功:

daf8b3156345e27eb77dbe3207774271.png-wh_\

Master清理证书:

1
[root@centos puppet] # puppet cert clean centos-test1

注:所有证书文件在/etc/puppetlabs/puppet/ssl目录,证书文件可以删除但之后需要从新颁发认证。

可以通过以下命令查看ca证书文件内容。

1
openssl x509 -text -noout - in   /etc/puppetlabs/puppet/ssl/certs/ca .pem —查看ca证书里面的内容

puppet命令的用法格式:

1
Usage: puppet <subcommand> [options] <action> [options]

四、puppet资源详解

4.1 puppet资源

如果把OS的所有配置,如用户账号、特定的文件、文件所属的目录、运行的服务、程序包以及cron任务等,看作是许多独立原子单元的集合的话,这些所谓的“单元”就是“资源”,不过,这些资源在其大小、复杂程度以及生命周期的跨度上等多个维度上可能会各不相同。

通常来说,类属于同一种资源的属性是相近的,如文件都有其属主和属组,而用户账号则由用户名、UID、GID等组成。但,即便是同一种资源,其在不同OS上的实现方式却又可能各不相同,例如,在windows上和Linux上启动和停止服务的方式相去甚远。

因此,puppet从以下三个维度来对资源完成抽象。

    相似的资源被抽象成同一种资源“类型”,如程序包资源、用户资源及服务资源等;

    将资源属性或状态的描述与其实现方式剥离开来,如仅说明安装一个程序包而不用关心其具体是通过yum、pkgadd、ports或是其它方式实现;

    仅描述资源的目标状态,也即期望其实现的结果,而不是其具体过程,如“确定nginx运行起来”而不是具体描述为“运行nginx命令将其启动起来”;

这三个也被称作puppet的资源抽象层(RAL)。RAL由type(类型)和provider(提供者,即不同OS上的特定实现)组成。

1.2 puppet资源解构

在为puppet定义一个资源时,需要为其指定所属的类型和资源标题,并同时配置一系列的属性和对应的值。puppet通过其特有的语言来描述和管理资源,如下面所示的资源定义。

1
2
3
4
5
6
7
8
     user {  'test' :
       ensure     => present,
       uid        =>  '601' ,
       gid        =>  '601' ,
       shell      =>  '/bin/bash' ,
       home       =>  '/home/test' ,
       testhome =>  true ,
     }

这种语法被称作“资源申报(resource declaration)”,它是puppet语言的核心组成部分。上述的定义中,仅描述了资源的目标状态而没有提到为达成目标所需要采取的任何步骤。而资源定义的核心也可以抽象为type、title、attribute和value四个部分。

puppet有许多内置的资源类型,而通过安装插件还可以继续新增额外的类型。可以通过puppet官方的类型参考页面(http://docs.puppetlabs.com/references/latest/type.html)获取详细的信息。也可以使用“puppet describe”命令来获取puppet当前所支持的类型列表及每种类型的详细信息,下面给出了一个简要的使用说明。

  puppet describe -l:例如puppet支持的所有资源类型及其描述信息;

  puppet describe -s <TYPE>:列出指定资源的简要说明;

  puppet describe <TYPE>:显示指定资源的详细说明;

常用的资源类型:user, group, file, package, service, exec, cron, notify

group:

    管理组资源

    常用属性:

        name: 组名,NameVar

        gid:GID

        system: true, false

        ensure:  , absent

        members:组内成员

user:

    管理用户

    常用属性:

        commet:注释信息

        ensure:present, absent

        expiry:过期期限;

        gid:基本组id

        groups:附加组

        home:家目录

        shell:默认shell

        name: NameVar

        system:是否为系统用户,true|false

        uid: UID

        password:

file:

    管理文件及其内容、从属关系以及权限;内容可通过content属性直接给出,也可通过source属性根据远程服务器路径下载生成;

    指明文件内容来源:

        content:直接给出文件内容,支持\n, \t;

        source:从指定位置下载文件;

        ensure:file, directory, link, present, absent

    常用属性:

        force:强制运行,可用值yes, no, true, false

        group:属组

        owner:属主

        mode:权限,支持八进制格式权限,以及u,g,o的赋权方式

        path:目标路径;

        source:源文件路径;可以是本地文件路径(单机模型),也可以使用puppet:///modules/module_name/file_name;

        target:当ensure为“link”时,target表示path指向的文件是一个符号链接文件,其目标为此target属性所指向的路径;此时content及source属性自动失效;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
file { '/tmp/mydir' :
         ensure  => directory,
}
file { '/tmp/puppet.file' :
         content =>  'puppet testing\nsecond line.' ,
         ensure  =>  file ,
         owner   =>  'centos' ,
         group   =>  'distro' ,
         mode    =>  '0400' ,
file { '/tmp/fstab.puppet' :
         source   =>  '/etc/fstab' ,
         ensure  =>  file ,
}    
file { '/tmp/puppet.link' :
         ensure  => link,
         target  =>  '/tmp/puppet.file' ,
}

exec:

    运行一外部命令;命令应该具有“幂等性”;

        幂等性:

            1、命令本身具有 幂等性;

            2、资源有onlyif, unless,creates等属性以实现命令的条件式运行;

            3、资源有refreshonly属性,以实现只有订阅的资源发生变化时才执行;

    command:运行的命令;NameVar;

    creates:此属性指定的文件不存在时才执行此命令;

    cwd:在此属性指定的路径下运行命令;

    user: 以指定的用户身份运行命令;

    group: 指定组;

    onlyif:给定一个测试命令;仅在此命令执行成功(返回状态码为0)时才运行command指定的命令;

    unless:给定一个测试命令;仅在此命令执行失败(返回状态码不为0)时才运行command指定的命令;

    refresh:接受到其它资源发来的refresh通知时,默认是重新执行exec定义的command,refresh属性可改变这种行为,即可指定仅在refresh时运行的命令;

    refreshonly:仅在收到refresh通知,才运行此资源;

    returns:期望的状态返回值,返回非此值时表示命令执行失败;

    tries:尝试执行的次数;

    timeout:超时时长;

    path:指明命令搜索路径,其功能类型PATH环境变量;其值通常为列表['path1', 'path2', ...];如果不定义此属性,则必须给定命令的绝对路径;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
exec { '/usr/sbin/modprobe ext4' :
     user=> root,
     group=> root,
     refresh=>  '/usr/sbin/modprobe -r ext4 && /usr/sbin/modprobe ext4' ,
     timeout=> 5,
     tries=> 2,
}
exec { '/bin/echo helloworld. > /tmp/hello.txt' :
     user=> root,
     group=> root,
     creates=>  '/tmp/hello.txt' ,
}
exec { '/bin/echo helloworld > /tmp/hello2.txt' :
     user=> root,
     group=> root,
     unless=>  '/usr/bin/test -e /tmp/hello2.txt' ,
}

notify:

    核心属性:

        message:要发送的消息的内容;NameVar

        notify{"hello there.": }

cron:

    管理cron任务;

    常用属性:

        ensure:present, absent

        command:要运行的job;

        hour:

        minute:

        month:

        monthday:

        weekday:

        name:

        user:运行的用户

        environment:运行时的环境变量;

1
2
3
4
5
cron{ "sync time" :
     command=>  '/usr/sbin/ntpdate 172.16.0.1 &> /dev/null' ,
     minute=>  '*/10' ,
     ensure=> present,
}

package:

    管理程序包;

    常用属性:

        ensure: installed, latest, VERSION(2.3.1-2.el7),present, absent

        name:程序包名称;

        source:包来源;可以本地文件路径或URL;

        provider:rpm

1
2
3
4
5
6
7
8
package{ 'zsh' :
     ensure=> latest,
}
package{ 'jdk' :
     ensure=> installed,
     source =>  '/usr/local/src/jdk-8u25-linux-x64.rpm' ,
     provider => rpm,
}

service:

    管理服务;

    常用属性:

        enable:是否开机自动启动,true|false;

        ensure:启动(running), 停止(stopped);

        hasrestart:是否支持restart参数;

        hasstatus:是否支持status参数;

        name:服务名称,NameVar

        path:脚本查找路径;

        pattern:用于搜索此服务相关的进程的模式;当脚本不支持restart/status时,用于确定服务是否处于运行状态;

        restart:用于执行“重启”的命令;

        start:用于执行“开始”的命令;

        stop: 用于执行“停止”的命令;

        status:用于执行“状态查询”的命令;

1
2
3
4
5
6
7
8
9
10
package{ 'nginx' :
     ensure=> latest,
}
service{ 'nginx' :
     ensure=> running,
     enable =>  true ,
     hasrestart =>  true ,
     hasstatus =>  true ,
     restart=>  'systemctl reload nginx.service' ,
}

1.3 定义资源

如前所述,资源是puppet用于模型化系统配置的基础单元,每个资源都都从某个角度描述了系统属性,如某程序包必须安装或某用户必须移除等。在puppet,用于完成此类功能的代码也即“资源申报”。

1
2
3
     type  { 'title' :
       attribute => value,
     }

在定义时,资源类型必须使用小写字符;而资源名称仅是一个字符串,但要求在同一个类型中其必须惟一,这意味着,可以同时有名为nginx的“service”资源和“package”资源,但在“package”类型的资源中只能有一个名为“nginx”。

尚未完成,参考:http://docs.puppetlabs.com/puppet/latest/reference/lang_resources.html

1.4 资源的浏览及查找

“puppet resource”命令可用于交互式查找及修改puppet资源。

# puppet resource <TYPE> [<NAME>] [ATTRIBUTE=VALUE ...]


未完待续....










本文转自 SoulMio 51CTO博客,原文链接:http://blog.51cto.com/bovin/1983534,如需转载请自行联系原作者
目录
相关文章
|
16天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
9天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
83 17
Selenium:强大的 Web 自动化测试工具
|
14天前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
24天前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
27天前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
113 4
|
1月前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
1月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
54 4
|
2月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
66 3
|
安全 Linux 网络协议
puppet yum模块、配置仓储、mount模块
转载:http://blog.51cto.com/ywzhou/1577335 作用:自动为客户端配置YUM源,为使用yum安装软件包提供便捷。 1、服务端配置yum模块 (1)模块清单 [root@puppet ~]# tree /etc/puppe...
1118 0

推荐镜像

更多