自动化运维工具之Puppet

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维工具之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工作过程

技术分享图片

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

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

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

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

puppet工作模型

技术分享图片

三、puppet安装

3.1 安装puppet

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

yum install ruby ruby-libs ruby-shadow

安装puppet3

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

服务器端安装:

yum install puppet-server

客户端安装:

yum install puppet

安装puppet4

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

服务器安装:

Yum install puppetserver

客户端安装:

yum install puppet

3.2 配置puppet

配置防火墙

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

启动puppetserver服务:

技术分享图片

设置主机名和指定的host。

Master

#hostname centos

Agent(3个客户端)

#hostname centos-test1
#hostname centos-test2
#hostname centos-test3

两端/etc/hosts同时添加:

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服务器名:

技术分享图片

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

指定puppet server端:

技术分享图片

3.3 puppet agent ca认证

puppet认证机制:

master/agent:

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

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

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

Agent发起认证请求:

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

技术分享图片

Master查看认证请求:

[[email protected] puppet]# puppet cert --list

技术分享图片

# puppet cert list --all

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

技术分享图片

Master下发认证:

[[email protected] puppet]# puppet cert sign centos-test1

技术分享图片

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

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

技术分享图片

Agent确认已经成功:

技术分享图片\

Master清理证书:

[[email protected] puppet]# puppet cert clean centos-test1

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

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

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

四、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通过其特有的语言来描述和管理资源,如下面所示的资源定义。

    user { ‘test‘:

      ensure     => present,

      uid        => ‘601‘,

      gid        => ‘601‘,

      shell      => ‘/bin/bash‘,

      home       => ‘/home/test‘,

      managehome => 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>:显示指定资源的详细说明;



未完待续....

本文出自 “Hello,World!” 博客,请务必保留此出处http://bovin.blog.51cto.com/7402899/1983534

以上是关于自动化运维工具之Puppet的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维工具之Puppet

自动化运维工具之ansible

自动化运维工具puppet的部署与应用

自动化运维工具之Saltstack

自动化运维工具puppet详解

自动化运维之Puppet服务部署