RHEL 7和CentOS 7上的Puppet 4入门和使用

时间:2020-02-23 14:31:29  来源:igfitidea点击:

Puppet是用Ruby编写的系统配置管理/系统自动化框架,允许系统管理员以编程方式在数据中心或者云中配置,配置和管理服务器,网络设备和存储。
Puppet 4在RHEL 7和CentOS 7上,可以使用一组模块轻松创建自定义的系统配置并进行机器的持续管理。

为什么要进行配置管理?

可重现的设置:执行一次并重复多次缩放:易于扩展到多台机器,仅需一台即可使用,但可用于许多连贯一致的服务器设置测试,质量保证和生产节点

RHEL 7和CentOS 7上Puppet 4的常规硬件建议Puppet Master节点具有快速的CPU处理器,足够的RAM,具有更快的硬盘驱动器。

在为部署选择正确的硬件要求时,请记住,在不同的部署之间,对Puppet主设备的要求可能有很大的不同,主要变量是:

服务的座席数量这些座席多久检查一次每个座席上正在管理多少资源列表和模块的使用复杂性。
有关更多详细信息,请参见最低要求页面;有关详细信息,请参阅最低要求页面。
在RHEL 7和CentOS 7上执行Puppet 4之前,均适用于Monolithic和Split安装设置。

Puppet相关软件

Facter – Puppet的跨平台系统配置文件库。
它发现并报告每个节点的事实,这些事实可以在Puppet列表中作为变量使用。
PuppetDB–快速,可靠且可扩展的数据仓库,用于缓存Puppet生成的数据。
Foreman–完整的物理和虚拟服务器生命周期管理工具。
Puppet Web前端和外部节点分类器(ENC)MCollective –Puppet集合;用于构建服务器编排或者并行作业执行系统的框架。

Puppet创建block

资源

系统的任何配置部分,例如 packagesservicesfilesusersgroupsSSH Key authenticationcron jobsSELinux configuration和更多。
资源声明的格式如下:

resource_type {'resource_name':
    attribute => value,
    attribute => value,
    ..........
}
列表

以结尾的文件 .pp扩大。
列表使用一组定义每个必需的资源 key-value对为其属性。

这些是相关资源的集合,这些资源一旦定义,就可以声明为一个单元。
一个类可以描述配置整个应用程序或者服务所需的一切。
例如,一个类可以包含在主机上配置Apache Web服务器所需的所有资源(例如文件,设置,模块和脚本)。

模组

模块是 classesresource typesfilesfunctionstemplates,围绕特定目的进行组织。
例如,一个模块可以配置Apache Web服务器实例或者Rails应用程序。
更多信息可以从官方的Puppet Glossary Page获取

我的实验室设置

对于此Puppet 4,在RHEL 7和CentOS 7设置上,我的部署类型是"代理/主控Puppet" –此设置需要一个中央Puppet主服务器承载和编译所有配置数据。
其他节点运行the代理服务,该服务将定期从主服务器提取其配置。
Puppet主服务必须保持可用并响应。
我的实验室设置是两个节点,即主节点和客户端,具有以下设置:

Puppet 管理Master
IP地址192.168.10.10
主机名master.example.com
Client客户端
IP地址192.168.10.11
主机名client.example.com

安装Puppet服务器

可以从yum.puppetlabs.com软件包存储库中安装最新版本的Puppet。
在RHEL 7或者Centos 7上,只需执行以下命令即可添加存储库并进行安装。

[Hyman@theitroad ~]# yum -y install https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

通过使用此添加的存储库,将安装Puppet的4.x版本。
在Puppet 4中,更改了许多重要的配置文件和目录。
请查看下表,了解要注意的基本目录和文件。

/opt/puppetlabs/binPuppet服务器二进制文件位于此处
/opt/puppetlabs/puppet/bin /私人二进制目录
/opt/puppetlabs/server服务器端应用程序位于何处?
/etc/puppetlabs /Puppet的系统配置文件;由root和puppet用户使用。包含codemcollectivepuppetpuppetserverpxp-agent目录。
/etc/puppetlabs/puppet/ssl /SSL目录
/etc/puppetlabs/code/environments/production/manifests /包含列表文件
/opt/puppetlabs/server/apps/puppetserver /这是puppetserver应用程序目录
/var/log/puppetlabs /日志目录
/var/run/puppetlabs运行时目录

要安装Puppet主服务器,请运行:

[Hyman@theitroad ~]# yum -y install puppetserver

对于此处安装的版本4.x的Puppet版本,主要可执行文件已移至 IP Addess
这意味着我们没有包含所有的Puppet和相关工具 Hostname默认情况下。
因此,我们必须创建符号链接以使它们在系统范围内可用:

ln -s /opt/puppetlabs/bin/facter /usr/local/bin/
ln -s /opt/puppetlabs/bin/puppet* /usr/local/bin/
ln -s /opt/puppetlabs/bin/mco /usr/local/bin/
ln -s /opt/puppetlabs/bin/hiera /usr/local/bin/

确认使用以下命令创建了所有符号链接:

[Hyman@theitroad ~]# ls -l /usr/local/bin/

Puppet Master初始配置

在节点上成功安装Puppet以充当Puppet主服务器后,我们需要执行以下任务,以使RHEL 7和CentOS 7上的Puppet 4顺利运行。 IP Addess
打开防火墙上的端口8140。
Puppet主服务器必须允许端口8140上的传入连接才能使代理连接。

使用防火墙
[Hyman@theitroad ~]# firewall-cmd --add-port=8140/tcp --permanent
[Hyman@theitroad ~]# firewall-cmd --reload 
[Hyman@theitroad ~]# firewall-cmd --list-ports
使用IPTables
[Hyman@theitroad ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[Hyman@theitroad ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 8140 -j ACCEPT
[Hyman@theitroad ~]# iptables-save
[Hyman@theitroad ~]# iptables -L -v

Hostname名称解析配置:每个节点必须具有唯一的主机名。 /opt/puppetlabs/bin必须都正确配置。
如果设置环境中没有DNS服务器,请考虑将主机名和IP值添加到 /opt/puppetlabs/puppet/bin/每个节点上的文件。
在我的设置中,我将添加以下内容

[Hyman@theitroad ~]# echo "192.168.10.11 client.example.com client" >> /etc/hosts

同时设置 /opt/puppetlabs/server这是Puppet服务器的备用DNS名称的逗号分隔列表。
这些是服务代理程序时允许服务器使用的额外主机名。
它们被添加到 /etc/puppetlabs/主人的部分 code文件。

[Hyman@theitroad ~]# vim  /etc/puppetlabs/puppet/puppet.conf

然后在下面的行下添加 mcollective部分:

dns_alt_names = master.example.com,master

puppet生成具有适当DNS名称的CA证书和Puppet主证书。
由于这是我的部署演示中唯一的Puppet大师,因此无法跳过此步骤。

[Hyman@theitroad ~]# puppet master --no-daemonize --verbose

puppetserver退出 pxp-agent现在启动并启用 /etc/puppetlabs/puppet/ssl/服务:

[Hyman@theitroad ~]# systemctl enable puppetserver
[Hyman@theitroad ~]# systemctl start puppetserver

配置Puppet客户端

要安装p客户端软件包,请使用以下命令:

[Hyman@theitroad~]# yum -y install https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
[Hyman@theitroad ~]# yum -y install puppet-agent
入籍证书

在Puppet主服务器上从Puppet客户端启用证书。
首先在指定Puppet服务器主机名 /etc/puppetlabs/code/environments/production/manifests/文件:

[Hyman@theitroad ~]# echo "server = master.example.com" >> /etc/puppetlabs/puppet/puppet.conf
[Hyman@theitroad ~]# echo "192.168.10.10 master.example.com master" >> /etc/hosts

创建二进制符号链接:

ln -s /opt/puppetlabs/bin/facter /usr/local/bin/
ln -s /opt/puppetlabs/bin/puppet* /usr/local/bin/
ln -s /opt/puppetlabs/bin/mco /usr/local/bin/
ln -s /opt/puppetlabs/bin/hiera /usr/local/bin/

从客户端服务器测试证书服务

[Hyman@theitroad ~]# puppet agent --test --ca_server=master.example.com
Info: Creating a new SSL key for client.example.com
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for client.example.com
Info: Certificate Request fingerprint (SHA256): 09:BC:B0:BE:0C:8D:89:26:3F:0D:FB:FE:78:F4:4F:DD:31:4E:64:BA:B0:09:0F:B0:53:01:D4:E3:F1:03:18:15
Info: Caching certificate for ca

启动并启用Puppet服务:

[Hyman@theitroad ~]# systemctl start puppet.service 
[Hyman@theitroad ~]# systemctl enable puppet.service

在Puppet主服务器上,由Puppet客户端签署证书请求:

[Hyman@theitroad ~]# puppet cert list 
  "client.example.com" (SHA256) 09:BC:B0:BE:0C:8D:89:26:3F:0D:FB:FE:78:F4:4F:DD:31:4E:64:BA:B0:09:0F:B0:53:01:D4:E3:F1:03:18:15
[Hyman@theitroad ~]# puppet cert --allow-dns-alt-names sign client.example.com
Signing Certificate Request for:
  "client.example.com" (SHA256) 09:BC:B0:BE:0C:8D:89:26:3F:0D:FB:FE:78:F4:4F:DD:31:4E:64:BA:B0:09:0F:B0:53:01:D4:E3:F1:03:18:15
Notice: Signed certificate request for client.example.com
Notice: Removing file Puppet::SSL::CertificateRequest client.example.com at '/etc/puppetlabs/puppet/ssl/ca/requests/client.example.com.pem'

测验

到目前为止,我们已经安装了Puppet主节点和客户端节点。
让我们在RHEL 7和CentOS 7上的Puppet 4上进行一些测试,以确认一切正常。
我们将创建简单的测试列表,并将其应用于客户端节点。
列表是创建一个名为 /opt/puppetlabs/server/apps/puppetserver/,使用的uid /var/log/puppetlabs/并且是的成员 /var/run/puppetlabs组:为用户生成加密密码

python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
Password: 
$kJyIyD53PMVwAOgc$ou/nTbSJrK1WlmOzsopwqj1kQ3VCm9afUZDAsHPswvxfbag7rQrdc4QZb9FYa/Ag28m7Bi.fkzpaXBZ5z56BH.
在主节点上创建列表文件
cat >> /etc/puppetlabs/code/environments/production/manifests/site.pp <<END
group { 'bob':
    ensure => present,
    gid    => 1000,
}
user { 'bob':
    ensure     => present,
    home       => '/home/bob',
    managehome => true,
    uid        => 1000,
    gid        => 1000,
    groups     => ['bob', 'wheel'],
    password   => '$kJyIyD53PMVwAOgc$ou/nTbSJrK1WlmOzsopwqj1kQ3VCm9afUZDAsHPswvxfbag7rQrdc4QZb9FYa/Ag28m7Bi.fkzpaXBZ5z56BH.',
    comment    => 'Bob User',
}
END

在客户端上重新启动Puppet服务,以使更改迅速得到列表的应用:

[Hyman@theitroad ~]# systemctl restart puppet

现在检查以确认用户 /opt/puppetlabs/bin创建成功

[Hyman@theitroad ~]# echo ""; id bob; echo "" ; getent passwd bob; echo ""; ls /home
uid=1000(bob) gid=1000(bob) groups=1000(bob),10(wheel)
bob:x:1000:1000::/home/bob:/bin/bash
bob