如何在DigitalOceanVPS上安装Puppet
介绍
如果您管理多个云服务器,则可以使用 Puppet 或 Chef 等配置管理工具来配置、配置和管理您的VPS 及其托管的应用程序。 使用 Puppet 或 Chef,您可以轻松地自动执行重复性任务、快速部署关键应用程序并主动管理变更:从将 2、5 或 10 台服务器扩展到 1000 台,无论是在本地还是在云中。 Puppet 可作为开源软件和商业软件使用。 虽然 Puppet Enterprise 是 Puppet 的商业支持的打包版本,但您最多可以免费管理 10 个节点。
好处
Puppet 是一个跨平台框架,使系统管理员能够执行常见任务。 它是一种模型驱动的解决方案,几乎不需要编码知识即可使用。 Chef 将其模型称为 recipes,而 Puppet 将它们称为 manifests。 一组清单称为 模块 。 有一些模块可以配置 Apache、Nginx 和 MySQL 等软件包。 您还可以使用清单和模块来更改文件权限、用户和组等。 可以看出,这些模型或清单和模块可以执行各种任务; 使 Puppet 不仅在 VPS 的初始安装过程中有所帮助,而且在 VPS 的整个生命周期中都有帮助; 在大型和小型部署中都很有用。 此外,Puppet 拥有一个令人惊叹且活跃的社区,其成员在两个主要存储库中共享模块和其他有用信息(如下所示)。
乍一看,系统管理员可能会忽略配置管理工具的想法。 一些人认为使用机器图像可以达到相同的结果,即 快照和 shell 脚本。 正如一位作者雄辩地指出的那样:这相当于一个刚刚听说过电锯的伐木工人,但不明白为什么有人会想要比斧头更多的东西。 许多系统管理员没有认识到他们手中有限时间的价值。 配置管理工具带来的优势之一是自动执行重复性任务,释放系统管理员,以便他们可以专注于更重要的事务。
规划
Puppet 允许通过使用客户端-服务器或代理-主机模型进行集中管理。 中央或管理服务器通常称为 Puppet master,它为 Puppet clients 提供服务。 虽然只需要一台云服务器即可充当 Puppet 主服务器,但您可以拥有几乎无限数量的 Puppet 客户端或代理节点。 但是, 是 可能以这样一种方式部署 Puppet,其中每个单独的 VPS 都充当 Puppet 主机和客户端。 您必须在安装之前确定部署类型:
代理/主控 a/k/a 客户端/服务器
代理节点或 Puppet 客户端从 Puppet 主服务器中提取其配置。 管理员必须管理节点证书,但只需要维护 Puppet 主服务器上的清单和模块,并且可以更轻松地利用报告和外部数据源等功能。
在任何代理或客户端上安装 puppet 之前,您必须提前决定哪个 VPS 将是主服务器并在其上安装 puppetmaster。 主机应该是一台具有快速处理器、大量 RAM 和快速磁盘的专用机器。
独立
每个节点都从清单编译自己的配置。 管理员必须定期将 Puppet 清单和模块同步到每个节点。
先决条件
默认情况下,Puppet 客户端通过 DNS 联系名为 puppet 的主机来查找 Puppet 主服务器。
- 识别或 create 一个服务器以充当 Puppet master 并记下其 IP 地址;
- 识别或 创建 将充当 Puppet 客户端的服务器;
- 设置每个服务器的主机名和完全限定域名(FQDN);
- 在您的每台服务器上部署 NTP 守护程序。 参见 如何在Ubuntu 12.04上设置时间同步;
- 在您的域中为主机名 puppet 创建 DNS A 记录或 CNAME,指向将充当 Puppet 主节点的节点,即 puppet.yourdomain.tld.
如果你不想使用 DNS,你应该执行以下命令: sudo vim /etc/hosts; 然后点击键盘上的“i”键,并添加:
127.0.0.1 | localhost.localdomain | 本地主机 | 木偶 |
127.0.1.1 | ny.yourdomain.tld | 纽约 | |
1.2.3.4 | ny.yourdomain.tld | 纽约 | 木偶 |
要保存更改,请点击键盘上的“Esc”键,然后按以下键击:“:”然后“w”然后“q”然后“enter”(全部不带引号)。 参见 在 DigitalOcean 云服务器上安装和使用 Vim 文本编辑器。 在每个 Puppet client 上,在 client's /etc/hosts 文件中为 Puppet master 添加一个条目(下面,我们假设您的 Puppet 客户端之一是 [X166X ]sf.yourdomain.tld 在 IP 地址:1.2.3.5):
127.0.0.1 | localhost.localdomain | 本地主机 | |
127.0.1.1 | sf.yourdomain.tld | 科幻 | |
1.2.3.5 | sf.yourdomain.tld | 科幻 | |
1.2.3.4 | ny.yourdomain.tld | 纽约 | 木偶 |
避免防火墙问题
CentOS 附带极其严格的 iptables 规则,可能需要修改。 如果您之前部署了 iptables 您的云服务器上的防火墙(或在 NAT 环境中有一些服务器),确保您的主服务器允许或能够连接到, 端口 3000、8139 和 8140 上的 TCP 连接 . 参见 如何在 Ubuntu 和 Debian 云服务器上使用 UFW 设置防火墙
更新你的包
一旦构建了云服务器并在防火墙中打开了相应的端口,请更新所有包:
sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove && sudo reboot
在中央服务器上安装 puppetmaster
您有多种安装 puppetmaster 的选项。 您可以使用操作系统存储库中可用的软件包,也可以使用 Puppet Labs 的 apt 存储库。 由于某些操作系统存储库更新其软件包的速度很慢,因此建议从 Puppet Labs 存储库安装 puppetmaster,这样您就不会遇到过时的版本。 要启用 Puppet Labs 存储库:
- 为您的 OS 版本 下载“puppetlabs-release”包。 您可以在 http://apt.puppetlabs.com/ 的首页查看这些软件包的完整列表。 它们都被命名为puppetlabs-release-[CODE NAME].deb;
- 通过运行 dpkg -i 安装软件包。
例如,要在 Puppet Labs 存储库中运行 Ubuntu 12.04 LTS(昵称 Precise Pangolin)的中央或管理 VPS 上安装 puppetmaster,请在终端中执行以下命令:
sudo wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb sudo dpkg -i puppetlabs-release-precise.deb sudo apt-get update && sudo apt-get -y install puppetmaster
其他 Linux 发行版、OS X、Windows、BSD 或 Solaris 的安装说明可在此处获得:Installing Puppet
在中央服务器上配置 puppetmaster
接下来,执行以下命令:
sudo touch /etc/puppet/manifests/site.pp
Puppet' 的行为可以使用 相当大的设置集合 进行自定义。 其中大部分可以安全地忽略,但您几乎肯定必须修改其中一些。
Puppet' 的主配置文件位于 /etc/puppet/puppet.conf 并按以下标题或块排序:[main]、[代理] 和 [主]。 代理节点或 Puppet 客户端的设置应该放在 puppet.conf 的 [agent] 或 [main] 块中。 同样,Puppet 主服务器的设置应该放在 puppet.conf 的 [master] 或 [main] 块中。
注意: Puppet master 通常也是代理节点或 Puppet 客户端本身。 [main] 中的设置将可用于服务,[master] 和 [agent] 块中的设置将覆盖 [主]。
独立节点
独立 Puppet 节点的设置应该放在 puppet.conf 的 [main] 块中。 Puppet 的默认设置通常适用于独立节点。 除非您打算使用集中报告或 外部节点分类器 ,否则无需额外配置。
避免 DNS 陷阱
此时,我们需要提供 puppetmaster 其完全限定域名 (FQDN),以便它可以正确格式化 SSL 证书。 首先,您需要评估您当前的环境:
- ' 将充当 Puppet Master 的节点是否只有一 (1) 个主机名 - 即 NO 别名?
如果 (i) 该问题的答案是“是”并且 (ii) 您为您的 Puppet master 创建了 DNS A 记录,请执行以下命令并进行编辑:
sudo service puppetmaster stop sudo rm -rf /var/lib/puppet/ssl sudo vim /etc/puppet/puppet.conf
然后,在 [main] 标题/块下添加以下行:
server = puppet.yourdomain.tld
如果您为 Puppet master 创建了 DNS CNAME 并且/或者您的主服务器具有主机名别名,则执行以下步骤:
sudo service puppetmaster stop sudo rm -rf /var/lib/puppet/ssl sudo vim /etc/puppet/puppet.conf
在 [master] 标头/块下,添加所有主服务器 ' 别名的逗号分隔列表,例如:
dns_alt_names = puppet, [alias1], [alias2], puppet.yourdomain.tld
现在,执行:
sudo service puppetmaster start
安装 puppetmaster's 依赖
在继续在代理/客户端节点上安装 puppet 之前,最后一次更新主服务器上的所有包:
sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove && sudo reboot
在客户端服务器上安装 puppet
同样,我们 ' 将从 Puppet Labs 存储库中安装 puppet。 在运行 Ubuntu 12.04 LTS 的客户端节点上,执行:
sudo wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb sudo dpkg -i puppetlabs-release-precise.deb sudo apt-get update && sudo apt-get -y install puppet
单击此处获取:为其他 Linux 发行版启用 Puppet Labs' 存储库的说明
记住: Puppet'最好的特点之一是它是跨平台的; 因此,您的客户端不需要运行与 Puppet Master 相同的操作系统。 从实际的角度来看,这种灵活性是惊人的,因为它将允许开发人员快速有效地启动不同操作系统的新 DigitalOcean 液滴,以测试和调试他们的应用程序。 当不再需要临时服务器时,可以放心地销毁它(以节省每月费用),因为 Puppet 加上 DigitalOcean 的 API 和快照支持,可以在下一次临时环境时在几秒钟内部署一个新的 droplet(字面意思)是需要的。
在客户端服务器上配置 puppet
安装 puppet 后,我们需要配置 Puppet 客户端,以便它可以连接到 Puppet Master。 我们使用以下命令和编辑来做到这一点:
sudo vim /etc/puppet/puppet.conf
并添加以下内容:
[agent] server = puppet.yourdomain.tld report = true pluginsync = true certname = [hostname of Puppet client].yourdomain.tld
现在,我们需要将 Puppet 客户端配置为自动启动,使用以下命令:
sudo vim /etc/default/puppet
并编辑以 START 开头的行,使其显示为:
START=yes
然后,启动服务:
sudo service puppet start
对每个 Puppet 客户端重复这些步骤。
配置安全通信
每次部署新的 Puppet 客户端时,登录 Puppet master 并执行以下命令即可查看等待签名的 SSL 证书列表:
sudo puppet cert --list
然后,在 Puppet master 上,通过执行以下命令签署队列中的客户端证书:
sudo puppet cert --sign [hostname of Puppet client]
恭喜! 新的 Puppet 客户端现在将能够成功连接到 Puppet Master 并与之安全通信。
清单和模块
现在您的 Puppet master 正在与您的 Puppet 客户端对话,让我们通过使用模块在您的 Puppet 客户端上安装 MySQL 来测试您的设置; 通过在 Puppet Master 上执行以下命令:
sudo apt-get -y install git sudo git clone https://github.com/puppetlabs/puppetlabs-mysql mysql sudo vim /etc/puppet/manifests/site.pp
将以下内容复制并粘贴到网站.pp
node [hostname of Puppet client] { class { 'mysql': } class { 'mysql::server': config_hash => { 'root_password' => '[desired password]' } } }
在 Puppet 客户端上,执行以下命令:
sudo puppet agent --test
Puppet 客户端将读取 Puppet master 上的文件 site.pp 中的指令并安装 MySQL。
学习使用木偶
您可以通过下载适用于 VMware 或 VirtualBox 的 Learning Puppet VM(免费),在安全便捷的虚拟环境中 学习 并练习使用 Puppet。 尽管 VM 和示例使用 Puppet Enterprise,但这些课程也适用于 Puppet 的开源版本。 任何新的 Puppet 用户都应该从 Learning Puppet - Index 开始。
安装可选软件
您可以使用其他软件扩展和改进 Puppet:
- Puppet Dashboard是Puppet的开源报表分析器、节点分类器和Web GUI;
- stdlib 模块 增加了额外的功能,更简单的方法来编写自定义事实,等等;
- 用户提交的可解决常见问题的清单和模块可在傀儡熔炉 & 在 GitHub .
其他资源
与往常一样,如果您在 Puppet 的基本设置和配置方面需要帮助,请通过在下方提出您的问题向 DigitalOcean 社区寻求帮助。