如何在Ubuntu 18上安装Puppet 6?
学习如何安装Puppet服务器和代理,并设置它们互相通信。
Puppet是DevOps世界中最受企业采用的配置管理工具之一。作为一个DevOps engineer,你必须知道如何在你的系统上设置一个puppet。
但在我们开始之前,让我告诉你,安装一个puppet绝不是一件容易的事情。如果你错过了一个步骤,或者你改变了本教程中提到的步骤的流程,即使在一个地方,你可能会整天为了很多错误而苦苦思索,但你的设置将是不完整的。所以,请非常小心地按照每个步骤。
Puppet具有客户端服务器架构,包括puppet主管(服务器)和puppet代理(客户端)。Puppet Master拥有所有的配置,并编译和提供配置给puppet代理。Puppet Agent定期向puppet主机发送事实以请求目录。Puppet Master将所请求的目录发送回puppet代理。然后,Puppet Agent在节点上应用该目录,并向主服务器报告。
现在,你对Puppet有了基本的理解,让我们开始设置一个Puppet Master和Puppet Agent。
如果你是一个绝对的新手,你可能喜欢参加这个online video course。
环境详细信息
我使用了2台Ubuntu 18.04机器。其中一台将充当puppet主机,另一台充当puppet代理。以下是这些机器的详细信息:
Puppet Master(服务器)
- 主机名:puppet,puppet.geekflate.com
- IP地址:192.168.0.108
Puppet Agent(客户端)
- 主机名:puppetagent
- IP地址:192.168.0.107
安装Puppet服务器
在开始安装之前,我需要在主机和代理上编辑/etc/hosts
文件,以便它们可以互相解析。
在主节点上
yaoweibin@puppet-master:~$ sudo gedit /etc/hosts
[sudo] password for yaoweibin:
127.0.0.1 localhost
127.0.1.1 yaoweibin
192.168.0.108 puppet puppet.yaoweibin.com
在代理节点上
yaoweibin@puppet-agent:~$ sudo gedit /etc/hosts
127.0.0.1 localhost
127.0.1.1 yaoweibin
192.168.0.107 puppetagent
192.168.0.108 puppet puppet.yaoweibin.com
现在,我需要在我的主节点上获取一个puppet存储库并更新它。
下载puppet存储库。
yaoweibin@puppet-master:~$ wget https://apt.puppetlabs.com/puppet6-release-bionic.deb
--2019-10-15 15:41:34-- https://apt.puppetlabs.com/puppet6-release-bionic.deb
正在解析 apt.puppetlabs.com (apt.puppetlabs.com)... 99.86.19.107, 99.86.19.59, 99.86.19.2, ...
正在连接到 apt.puppetlabs.com (apt.puppetlabs.com)|99.86.19.107|:443... 已连接。
HTTP 请求已发送,正在等待响应... 200 OK
长度:11736 (11K) [application/x-debian-package]
正在保存至: ‘puppet6-release-bionic.deb’
puppet6-release-bio 100%[===================>] 11.46K --.-KB/s 用时 0s
2019-10-15 15:41:34 (236 MB/s) - 已保存 ‘puppet6-release-bionic.deb’ [11736/11736]
添加并配置puppet 6存储库。
yaoweibin@puppet-master:~$ sudo dpkg -i puppet6-release-bionic.deb
正在选择未选择的软件包 puppet6-release。
(正在读取数据库 ... 已安装 187041 个文件和目录。)
正在准备解包 puppet6-release-bionic.deb ...
正在解包 puppet6-release(6.0.0-5bionic)...
正在设置 puppet6-release(6.0.0-5bionic)...
更新存储库列表。
yaoweibin@puppet-master:~$ sudo apt update
正在获取软件包列表... 完成
正在读取软件包列表... 完成
正在生成依赖关系树
正在读取状态信息... 完成
有些软件包无法被安装。如果您是用 unstable 发行版,请尝试用下面的命令解决问题:
apt-get -f install
以下软件包是自动安装的并且现在不再需要:
thunderbird-locale-en thunderbird-locale-en-us
使用 'apt autoremove' 命令来卸载它们。
升级后,剩余 234 个要安装的软件包(新安装的 0 个),要升级的 0 个软件包(新升级的 0 个),要删除的 0 个软件包,以及 1 个未升级的软件包。
运行 'apt list --upgradable' 来查看这些软件包。
安装 Puppet 服务器
让我们在主节点上运行以下命令来安装 Puppet 服务器。
yaoweibin@puppet-master:~$ sudo apt install -y puppetserver
读取软件包列表… 完成
正在构建依赖树
正在读取状态信息… 完成
将会同时安装下列软件:
ca-certificates-java java-common openjdk-8-jre-headless puppet-agent
建议安装的软件包:
default-jre fonts-dejavu-extra fonts-ipafont-gothic fonts-ipafont-mincho
fonts-wqy-microhei fonts-wqy-zenhei
下列新软件包将被安装:
ca-certificates-java java-common openjdk-8-jre-headless puppet-agent
puppetserver
升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 234 个软件包未被升级。
需要下载 109 MB 的归档文件。
安装后,将会消耗 287 MB 的额外空间。
获取:1 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 java-common all 0.68ubuntu1 [6,988 B]
获取:2 http://apt.puppetlabs.com bionic/puppet6 amd64 puppet-agent amd64 6.10.1-1bionic [19.9 MB]
获取:3 http://us.archive.ubuntu.com/ubuntu cosmic-updates/universe amd64 openjdk-8-jre-headless amd64 8u212-b03-0ubuntu1.18.10.1 [27.2 MB]
获取:4 http://apt.puppetlabs.com bionic/puppet6 amd64 puppetserver all 6.7.1-1bionic [61.5 MB]
获取:5 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 ca-certificates-java all 20180516ubuntu1 [12.3 kB]
已下载 109 MB,耗时 1min 41s (1,072 kB/s)
正在解包 puppetserver (6.7.1-1bionic) …
正在设置 puppet-agent (6.10.1-1bionic) …
已创建符号链接 /etc/systemd/system/multi-user.target.wants/puppet.service → /lib/systemd/system/puppet.service。
已创建符号链接 /etc/systemd/system/multi-user.target.wants/pxp-agent.service → /lib/systemd/system/pxp-agent.service。
已移除 /etc/systemd/system/multi-user.target.wants/pxp-agent.service。
正在设置 java-common (0.68ubuntu1) …
正在处理用于 libc-bin (2.28-0ubuntu1) 的触发器 …
正在处理用于 systemd (239-7ubuntu10.12) 的触发器 …
正在处理用于 man-db (2.8.4-2) 的触发器 …
正在处理用于 ca-certificates (20180409) 的触发器 …
正在更新 /etc/ssl/certs 中的证书…
已添加 0 个,已删除 0 个;已完成。
正在运行 /etc/ca-certificates/update.d 中的脚本…
完成。
正在设置 ca-certificates-java (20180516ubuntu1) …
无法打开 ‘/etc/ssl/certs/java/cacerts' 进行读取:没有那个文件或目录
正在添加 debian:SSL.com_EV_Root_Certification_Authority_ECC.pem
正在添加 debian:ssl-cert-snakeoil.pem
正在添加 debian:SwissSign_Gold_CA_-_G2.pem
正在添加 debian:SZAFIR_ROOT_CA2.pem
正在添加 debian:OpenTrust_Root_CA_G3.pem
正在添加 debian:TWCA_Root_Certification_Authority.pem
正在添加 debian:QuoVadis_Root_CA_2_G3.pem
正在添加 debian:DST_Root_CA_X3.pem
正在添加 debian:SecureSign_RootCA11.pem
正在添加 debian:QuoVadis_Root_CA_1_G3.pem
正在添加 debian:T-TeleSec_GlobalRoot_Class_3.pem
正在添加 debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem
正在添加 debian:Actalis_Authentication_Root_CA.pem
正在添加 debian:Chambers_of_Commerce_Root_-_2008.pem
完成。
正在处理用于 ca-certificates (20180409) 的触发器 …
正在更新 /etc/ssl/certs 中的证书…
已添加 0 个,已删除 0 个;已完成。
正在运行 /etc/ca-certificates/update.d 中的脚本…
完成。
完成。
正在设置 openjdk-8-jre-headless:amd64 (8u212-b03-0ubuntu1.18.10.1) …
正在设置 puppetserver (6.7.1-1bionic) …
usermod: 无更改
正在处理用于 systemd (239-7ubuntu10.12) 的触发器 …
配置 Puppet Server
请如下所示编辑puppetserver
文件,以配置 Puppet 服务器的 JVM。
yaoweibin@puppet-master:~$ sudo gedit /etc/default/puppetserver
# 如果您想更改内存分配、启用 JMX 等,请修改此处
JAVA_ARGS="-Xms512m -Xmx512m -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
请编辑 Puppet 配置文件以修改 Puppet 服务器设置。
yaoweibin@puppet-master:~$ sudo gedit /etc/puppetlabs/puppet/puppet.conf
# 这个文件可以用来覆盖默认的puppet设置。
# 更多详细信息,请参考以下链接:
# – https://puppet.com/docs/puppet/latest/config_important_settings.html
# – https://puppet.com/docs/puppet/latest/config_about_settings.html
# – https://puppet.com/docs/puppet/latest/config_file_main.html
# – https://puppet.com/docs/puppet/latest/configuration.html
[master]vardir = /opt/puppetlabs/server/data/puppetserver
logdir = /var/log/puppetlabs/puppetserver
rundir = /var/run/puppetlabs/puppetserver
pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid
codedir = /etc/puppetlabs/code
dns_alt_names = puppet,puppet.yaoweibin.com
[main]certname = puppet.yaoweibin.com
server = puppet.yaoweibin.com
environment = production
runinterval = 15m
Puppet Server 需要生成根和中间签名的 CA。
yaoweibin@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca setup
生成成功。您可以在 /etc/puppetlabs/puppet/ssl/ca 中找到您的文件
启动并启用 puppet server 服务。
yaoweibin@puppet-master:~$ sudo systemctl start puppetserver
yaoweibin@puppet-master:~$ sudo systemctl enable puppetserver
正在将 puppetserver.service 的状态与 SysV 服务脚本 /lib/systemd/systemd-sysv-install 同步。
执行: /lib/systemd/systemd-sysv-install enable puppetserver
安装 Puppet Agent
按照以下步骤在代理节点上执行,与主节点相同。所有代理节点上都需要存在 Puppet 代码库。
yaoweibin@puppet-agent:~$ wget https://apt.puppetlabs.com/puppet6-release-bionic.deb
yaoweibin@puppet-agent:~$ sudo dpkg -i puppet6-release-bionic.deb
yaoweibin@puppet-agent:~$ sudo apt update
在代理节点上运行以下命令以安装 puppet agent。
yaoweibin@puppet-agent:~$ sudo apt install -y puppet-agent
正在读取软件包列表... 完成
正在构建依赖树
正在读取状态信息... 完成
下列 NEW 软件包将被安装:
puppet-agent
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 233 个软件包未被升级。
需要下载 19.9 MB 的归档文件。
此操作会消耗额外的 115 MB 磁盘空间。
获取:1 http://apt.puppetlabs.com bionic/puppet6 amd64 puppet-agent amd64 6.10.1-1bionic [19.9 MB]
已下载 19.9 MB, 用时 2s (8,488 kB/s)
正在选中未选择的软件包 puppet-agent。
(正在读取数据库 ... 系统当前共安装了 185786 个文件和目录。)
正准备解包 .../puppet-agent_6.10.1-1bionic_amd64.deb ...
正在解包 puppet-agent (6.10.1-1bionic) ...
正在设置 puppet-agent (6.10.1-1bionic) ...
正在创建符号链接 /etc/systemd/system/multi-user.target.wants/puppet.service → /lib/systemd/system/puppet.service。
正在创建符号链接 /etc/systemd/system/multi-user.target.wants/pxp-agent.service → /lib/systemd/system/pxp-agent.service。
已删除 /etc/systemd/system/multi-user.target.wants/pxp-agent.service。
正在处理用于 libc-bin (2.28-0ubuntu1) 的触发器 ...
配置 Puppet Agent
在代理节点上编辑 puppet 配置文件。
yaoweibin@puppet-agent:~$ sudo gedit /etc/puppetlabs/puppet/puppet.conf
[main]
certname = puppetagent
server = puppet.yaoweibin.com
environment = production
runinterval = 15m
运行以下命令启动 puppet 服务。此命令也将在启动后自动启动。
yaoweibin@puppet-agent:~$ sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
service { 'puppet':
ensure => 'running',
enable => 'true',
}
生成和签署证书
当代理程序首次启动时,它会向主控节点发送一个证书签署请求。主控节点需要检查并签署这个证书。之后,代理程序将定期从主控节点获取目录并应用到代理节点。
现在,puppet代理程序正在运行,请在主控节点上运行以下命令,以检查是否收到了任何证书签署请求。
在主控节点上
yaoweibin@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca list
[sudo] password for yaoweibin:
Requested Certificates:
puppetagent (SHA256) EA:68:23:B5:C3:71:2C:E6:4A:6A:3B:2F:24:F5:B8:5B:50:F7:3F:12:89:DE:B1:EB:D1:0A:74:3E:48:C3:D7:35
签署代理程序发送的证书。
yaoweibin@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca list
[sudo] password for yaoweibin:
Requested Certificates:
puppetagent (SHA256) EA:68:23:B5:C3:71:2C:E6:4A:6A:3B:2F:24:F5:B8:5B:50:F7:3F:12:89:DE:B1:EB:D1:0A:74:3E:48:C3:D7:35
运行以下命令检查所有证书列表。其中一个证书已经存在,是主控节点的默认证书,另一个来自代理节点。
yaoweibin@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca list --all
Signed Certificates:
puppetagent (SHA256) EA:68:23:B5:C3:71:2C:E6:4A:6A:3B:2F:24:F5:B8:5B:50:F7:3F:12:89:DE:B1:EB:D1:0A:74:3E:48:C3:D7:35
puppet.yaoweibin.com (SHA256) 71:30:5B:C8:C5:CE:28:A0:60:5C:4F:39:26:D0:FC:DA:DF:0A:0F:4D:ED:D4:B1:9C:05:1A:38:2F:D6:5F:9C:06 alt names: ["DNS:puppet.yaoweibin.com", "DNS:puppet", "DNS:puppet.yaoweibin.com"]
在代理节点上
现在运行这个命令测试主控节点和代理节点之间是否建立了连接,并且一切正常运行。
yaoweibin@puppet-agent:~$ sudo /opt/puppetlabs/bin/puppet agent --test
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for puppet-agent
Info: Applying configuration version '1571171191'
Notice: Applied catalog in 0.02 seconds
示例Puppet示例
让我们运行一个简单的puppet示例。我将创建一个简单的puppet清单,它创建一个具有特定权限的目录。
在主控节点上:
yaoweibin@puppet-master:~$ sudo gedit /etc/puppetlabs/code/environments/production/manifests/site.pp
将以下内容放入文件中。
node 'puppetagent' { # 仅适用于指定的节点。如果未指定任何内容,将适用于所有节点。
file { '/home/test': # 资源类型为file
ensure => 'directory', # 创建一个目录
owner => 'root', # 所有者
group => 'root', # 组名
mode => '0755', # 目录权限
}
}
现在运行以下命令,使代理程序联系主控节点并拉取配置。运行此命令后,它应在代理节点上创建该目录。
在代理节点上
yaoweibin@puppet-agent:~$ sudo /opt/puppetlabs/bin/puppet agent --test
[sudo] password for yaoweibin:
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for puppetagent
Info: Applying configuration version '1571333010'
Notice: /Stage[main]/Main/Node[puppetagent]/File[/home/test]/ensure: created
Notice: Applied catalog in 0.05 seconds
运行ls
命令检查是否成功创建了该目录。
yaoweibin@puppet-agent:~$ ls -l /home/
total 32
drwxr-xr-x 13 yaoweibin yaoweibin 4096 Jul 19 08:06 yaoweibin
drwx------ 2 root root 16384 Oct 23 2018 lost+found
drwxr-xr-x 23 yaoweibin yaoweibin 4096 Oct 17 11:02 yaoweibin
drwxr-xr-x 2 root root 4096 Oct 17 13:23 test
drwxr-xr-x 2 username username 4096 Jun 29 09:38 username
这是你要的!
结论
这只是一个简单的示例,用来演示其工作原理。但是想象一下一个更大的场景,在这个场景中,你需要在数百台服务器上安装或应用某个配置。Puppet可以帮助你在几分钟内完成。
如果你从事自动化工作,并且对学习更多内容感兴趣,你可以查看这个 Udemy course,它介绍了Ansible、Puppet和Salt。