puppet木偶入门


备注

本节概述了puppet是什么,以及开发人员为什么要使用它。

它还应该提到傀儡中的任何大型主题,并链接到相关主题。由于puppet文档是新的,您可能需要创建这些相关主题的初始版本。

版本

Puppet开源

发布日期
4.7.0 2015年9月22日
4.6.0 2015年8月10日
4.5.0 2015年5月17日
4.4.0 2016年3月16日
4.3.0 二〇一五年十一月十七日
4.2.0 2015年6月24日
4.1.0 2015年5月19日
4.0.0 2015年4月15日
3.8.0 2015年4月28日
3.7.0 2014年9月4日
3.6.0 2014年5月15日
3.5.0 2014年4月3日
3.4.0 二零一三年十二月十九日
3.3.0 2013年9月12日
3.2.0 2013年5月14日
3.1.0 2013年2月4日
3.0.0 2012-09-28
2.7.0 2011-06-17
2.6.0 2010-07-20
0.25.0 2009-09-05
0.24.0 2007-12-13
0.23.0 2007-01-20
0.22.0 2007-01-06
0.20.0 2006-10-18
0.19.0 2006-09-07
0.18.0 2006-06-14
0.17.0或更新版本 2006-05-16
0.16.0 2006-04-21
0.15.0 2006-03-13
0.14.0 2006-03-06
0.13.0 2006-02-09
0.12.0 2006-01-26
0.11.0 2006-01-17
0.10.0 2006-01-09
0.9.3 2006-01-03
0.9.2 2005-11-22

在你启动之前

在您决定使用木偶之前,您需要了解的事情很少。

  1. 木偶在客户端 - 服务器架构(广泛使用)以及单机(特别用于测试目的)中工作

  2. puppet master只能在linux机器(主机/节点)上配置,windows只能用作客户端(托管机器/节点)

  3. 如果配置master,你必须知道使用linux机器和基本命令

  4. puppet提供了自己的配置语言,看起来像json

安装

系统要求

但是,Puppet主服务是相当耗费资源的,应安装在健壮的专用服务器上。

  • 您的Puppet主服务器至少应具有两个处理器核心和至少1 GB的RAM。
  • 为了能够轻松地为至少1,000个节点提供服务,它应该具有2-4个处理器核心和至少4 GB的RAM。

检查您的网络配置:

在代理/主服务器部署中,您必须为Puppet的流量准备网络。

  • 防火墙: Puppet主服务器必须允许端口8140上的传入连接,并且代理节点必须能够连接到该端口上的主服务器。
  • 名称解析:每个节点必须具有唯一的主机名。必须正确配置正向和反向DNS。

注意:默认的Puppet主机主机名是puppet。如果此主机名解析为您的Puppet主节点,则您的代理节点可以更快地准备好。

必须在将充当证书颁发机构的Puppet主服务器上准确设置时间。你应该使用NTP。


安装Puppet Server

Puppet提供了在以下平台上安装Puppet Server 2.4及其所有先决条件的官方软件包。

红帽企业Linux

  • 企业Linux 6
  • 企业Linux 7

Debian的

  • Debian 7(Wheezy)
  • Debian 8(杰西)

Ubuntu的

  • Ubuntu 12.04(精确)
  • Ubuntu 14.04(Trusty)
  • Ubuntu 15.10(Wily)
  • Ubuntu 16.04(Xenial)

启用Puppet包存储库

企业Linux 7

sudo rpm -Uvh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
 

对于其他版本,请看这里

安装木偶大师

yum install puppetserver
 

要么

apt-get install puppetserver
 

Puppet Server默认配置为使用2 GB的RAM。改变一下这里的样子

启动Puppet Server服务:

systemctl start puppetserver
 

要么

service puppetserver start
 

是给你的吗?

如果您进行部署,请在多个服务器上配置您的应用程序,并且需要登录到您的服务器并在基础架构,应用程序,预先获取等方面进行一些更改,然后puppet肯定可以帮助您。

除了这一切,如果你处理一个大型基础设施并想要集中管理,你也可以看看。

官方文件

Puppet为开源和企业版提供官方文档。你可以在这里找到它

什么是傀儡,我为什么要关心?

Puppet是一种配置管理解决方案。用户描述服务器或软件的所需状态,配置管理实现此状态。这带来以下优势:

  • 每次都可以根据需要多次重复配置
  • 所有软件和服务器的配置都存储在一个中央位置。这使得配置的备份和版本控制变得容易实现
  • 对所有服务器的更改将在几分钟内传播到整个基础架构,而无需直接登录任何计算机
  • 一切都用同一种语言描述,使配置新软件变得容易
  • 模块类似于库,允许合并配置。所有主要软件包的模块已经存在,使得安装非常容易
  • 服务器可以在彼此之间共享信息,从而影响其他服务器的配置。例如,新服务器可以自动向负载均衡器和监控解决方案注册自己

Puppet使用Ruby来描述服务器的所需状态,称为节点 。它通过使用称为资源类型的原语来实现。默认情况下,每隔30分钟,木偶代理就会对木偶服务器进行身份验证。然后它发送一个称为事实的属性列表。服务器查看事实和名为manifests的配置文件,并编译节点的所需状态。然后,它将该配置发送回节点,代理在该节点上应用它。

为了说明这有多强大,这里有几个增加复杂性的例子,展示了木偶可以为你做什么。

示例:用户

此示例在节点myserver上创建用户用户 ,并将其添加到组

node 'myserver' {
    user { 'username':
      ensure => 'present',
      groups => ['wheel'],
    }
}
 

将存储在puppet 服务器上的该文件是清单 。此示例中的资源类型user 。每种资源类型都具有可选和必需的属性。在此示例中, 确保是必需的, 是可选的。此特定配置仅适用于myserver 。您可以通过将配置放在节点定义之外来将配置应用于所有节点。

可以采用几个资源定义并将它们存储为模块 。模块类似于库。这些模块可以在线共享,通常每个主要软件包都可以找到一个。共享模块的官方方式是通过puppet forge: https//forge.puppet.com/

示例:Postgres

此示例在节点myserver上安装postgres服务器,并创建一个由username标识的数据库db ,由password标识。它使用postgresql模块。

node 'myserver' {
    class { 'postgresql::server': }
    
    postgresql::server::db { 'db':
        user     => 'username',
        password => 'password',
    }
}
 

在这种情况下, postgresql是一个模块。模块本身负责识别操作系统,下载和安装程序,然后根据清单进行配置。这是一个基本示例,但该模块允许大量自定义。

请注意,没有必要知道SQL或如何实际安装postgres服务器来执行此操作。官方模块维护良好,提供健全且安全的基础配置。

也可以在清单中使用事实 。事实就像变量一样。

示例:使用事实的条件

此示例使用rsyslog模块在所有非Windows计算机上配置rsyslog。

if $osfamily != 'windows' {
  class { 'rsyslog::client': }
}
 

$ osfamily是一个事实。每次木偶代理人运行时都会收集这些事实。请注意,由于此定义位于节点定义之外,因此它将应用于所有节点。但是, rsyslog :: client只会在不运行Windows的节点上执行。

由于puppet使用ruby,因此可以在清单中使用控制流和变量等编程元素。

通过添加PuppetDB,您可以在多个节点之间共享信息。这允许一个节点影响不同节点上的配置。经典示例包括负载平衡器或监控解决方案。

示例:使用导出的资源注册具有监视功能的主机

此示例在节点上创建导出的资源 ,然后在监视服务器上导入该资源,将主机添加到监视。它使用的是Icinga2木偶模块。

@@icinga2::object::host { $::fqdn:
  display_name     => $::fqdn,
  ipv4_address     => $::ipaddress_eth0,
}

node 'icinga2' {
    Icinga2::Object::Host <<| |>> { }
}
 

@@ icinga2 :: object :: host创建一个主机定义对象。这是由执行此代码的每个节点创建的。 @@将其标记为导出资源 。通常,节点不会在puppet中共享信息。导出的资源允许这样做。

请注意,主机定义中的所有属性值都是事实。这意味着它们对于执行它的每个节点都是不同的。

最后,导出的资源由icinga2节点导入 。 Icinga2模块负责确保创建和重新加载正确的配置文件。