正确使用环境

Environment这个概念是比较容易理解的,你可以联想到开发环境,测试环境,线上环境等等。
是的,environment的目的就是为了将不同类型的host分组。
我们都知道module的默认路径是放在/etc/puppet/modules。
假设我现在要开发一个puppet-apache模块,和线上环境使用的puppet-apache模块代码不一样,但是/etc/puppet/modules不是只能放一个模块吗?
因此,每个environment支持独立的Puppet modules和main manifest(节点定义文件)。

假如没有environemnt,而同时有生产,开发和测试环境,每套环境的Puppet代码都不尽相同,那么就需要搭建3台用于不同环境的Puppet Master。用Puppet Environment可以很容易的解决这个问题,使用Puppet Environment可以建立dev, production, test 三套环境,并且每套环境的代码都可以不同。这样就可以用一台Puppet Master管理多个集群环境。

Directory Environments vs. Config File Environments

使用过2.x或者更早版本的同学,应该了解或使用过Config file environemtns。目前,Puppet支持两种定义环境的方式:

  • Directory Environments
  • Config File Environments

注意,Config File Env这种需要修改配置文件的方式已经被历史的潮流抛弃,所以我们只会介绍directory environment。

启用Directory Environment

在Puppet Master上启用Directory Environment,需要在puppet.conf中定义以下参数:

environmentpath = /etc/puppet/environments

此参数定义了一个目录,此目录下的每一个子目录都是一个environment。

Environment目录结构

上面说过,使用directory environment 的方式,每一个目录都是一个环境,这个目录可以包含环境自身的配置,模块和节点定义。directory environment(下面会使用环境目录替代)遵循下面的规律:

  • 环境目录的名称即环境名称(知道为啥config file environment必须死了吧。)
  • 环境目录必须放在environmentpath下,默认是在/etc/puppet/environements下
  • 应该包含一个modules目录,属于该环境默认的module路径
  • 应该包含一个manifests目录,属于该环境默认的节点定义路径
  • 可以包含一个environment.conf文件,用于自定义当前环境modulepath和manifest设置来指定此环境的模块查找路径和节点定义路径。,比如说test和dev两个环境可以共用一个manifest目录。

在我们的线上业务中,一般使用了如下几个环境:

  • dev
  • test
  • pre_production
  • production

在Agent 端指定Environment

在Puppet master 上定义了多套环境之后,在agent 段需要指定本机使用的环境,否则就会使用默认的production 环境。在puppet.conf 中定义environment 参数来指定agent 所属的环境,例如指定agent 为liberty 环境:

[agent]environment = liberty