如何在 Rocky Linux 上设置 SaltStack Master 和 Minion
在此页
- 先决条件
- 设置 /etc/hosts 文件
- 添加 SaltStack 存储库
- 安装 SaltStack Master
- 安装 SaltStack Minion
- 将 Minion 服务器添加到 SaltStack Master
- 使用 SaltStack 运行任意命令
- 使用 SaltStack 状态安装 LEMP 堆栈
- 结论
Salt 或 Saltstack 是一个开源 IT 自动化框架,允许管理员直接向多台机器远程执行命令。 Salt 主要使用 Python 编写,采用 Master 和 Minion 架构设计。 SaltStack master是Salt配置管理的中央控制器,而Minion是SaltStack Master管理的服务器,或者你命名为minions作为目标服务器。
SaltStack master 默认运行在 Linux 操作系统上,但 minions 可以是任何操作系统。 Saltstack 是自动化部署、远程任务执行和基础架构即代码的革命性配置管理。 SaltStack 还可以用于配置多个基础架构服务器,这包括物理和虚拟服务器,以及云。
按照本指南,您将在 Rocky Linux 服务器上安装 SaltStack Master 和 Minion。此外,您还将学习如何使用 Salt 从 SaltStack Master 对 Salt Minion 运行任意命令。最后,您还将学习如何创建用于安装基本 LEMP 堆栈(Linux、Nginx、MariaDB 和 PHP-FPM)的 Salt 状态。
先决条件
Tom 完成本教程,您将至少需要两台或更多 Rocky Linux 服务器。所有这些服务器都应该有一个具有根/管理员权限的非根用户。
设置 /etc/hosts 文件
对于这个例子,我们将使用三个 Rocky Linux 服务器来安装 SaltStack。一台服务器将用作Master,两台服务器将用作minions。
以下是我们将使用的详细 Rocky Linux 服务器:
Hostname IP Address Used as
---------------------------------------------
master 192.168.5.10 SaltStack Master
minion1 192.168.5.15 SaltStack Minion
minion2 192.168.5.16 SaltStack Minion
在安装 SaltStack 包之前,您将在每个 Linux 主机上设置 /etc/hosts 文件。
使用以下命令编辑文件 /etc/hosts。
sudo nano /etc/hosts
现在将以下配置添加到文件中。
master 192.168.5.10
minion1 192.168.5.15
minion2 192.168.5.16
完成后,保存并关闭文件。
添加 SaltStack 存储库
SaltStack 包在其官方存储库中可用。您将向所有 Rocky Linux 服务器添加 SaltStack 存储库和 GPG 密钥。
运行以下命令以导入 SaltStack 存储库的 GPG 密钥。然后,添加 SaltStack 存储库。在此示例中,您将添加最新版本的 SaltStack 存储库。
sudo rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo

现在运行以下命令来检查和验证 Rocky Linux 服务器上的存储库列表。然后,为所有可用的存储库更新和生成新的元数据。
您应该会看到 SaltStack 存储库已添加到 Rocky Linux 服务器。
sudo dnf repolist
sudo dnf makecache

安装 SaltStack Master
您已将 SaltStack 存储库添加到所有 Rocky Linux 服务器。现在您将在“master”服务器上安装和设置 SaltStack Master。
首先,运行下面的 DNF 命令来安装“salt-master”包。这个包是设置 SaltStack Master 的主要包。
输入Y确认安装,回车,开始安装。
sudo dnf install salt-master

安装完成后,使用以下命令编辑 SaltStack Master 配置\/etc/salt/master\。
sudo nano /etc/salt/master
取消注释选项 \interface:\ 并将 IP 地址更改为您的 \master\ 服务器 IP 地址。本例中SaltStack Master的IP地址为“192.168.5.10”。
interface: 192.168.5.10
完成后保存并关闭文件。
接下来,使“salt-master”服务在系统启动时运行并启动“salt-master”服务。然后,检查并验证“salt-master”服务。
您应该会看到 \salt-master\ 服务已启用并正在运行。
sudo systemctl enable salt-master && sudo systemctl start salt-master
sudo systemctl status salt-master

在 SaltStack Master 上,您需要打开 TCP 端口 4505 和 4506,SaltStack Minion 连接到 SaltStack Master 将使用这些端口。
运行下面的 \firewall-cmd\ 命令以打开端口 4505 和 4506。然后,重新加载 Firewalld。
sudo firewall-cmd --zone=public --permanent --add-port={4505,4506}/tcp
sudo firewall-cmd --reload
最后,使用以下命令检查并验证 Firewalld 规则。并且您应该在 Firewalld 上获得可用的端口 4505 和 4506。
sudo firewall-cmd --list-all

安装 SaltStack Minion
您已经安装并配置了 SaltStack Master。现在您将在“minion1”和“minion2”服务器上安装和设置 SaltStack Minion。
移动“minion1”和“minion2”服务器,然后运行下面的 DNF 命令来安装“salt-minion”包。此包必须安装在所有 SaltStack Minion 主机上。
输入 Y 确认安装并按 ENTER。 \salt-minion\ 安装将开始。
sudo dnf install salt-minion

完成安装后,使用以下命令编辑 SaltStack Minion 配置文件 \/etc/salt/minion\。
sudo nano /etc/salt/minion
取消注释选项 \master:\ 并添加 SaltStack Master IP 地址或主机名。在这个例子中,SaltStack master 在服务器 IP 地址 \192.168.5.10\ 上运行。
master: 192.168.5.10
完成后保存并关闭文件。
接下来,运行以下命令启用“salt-minion”服务并启动该服务。然后,检查并验证“salt-minion”服务。
您应该会看到 \salt-minion\ 服务已启用并将在系统启动时自动运行。而\salt-minion\服务的当前状态是运行。
sudo systemctl enable salt-minion && sudo systemctl start salt-minion
sudo systemctl status salt-minion

将 Minion 服务器添加到 SaltStack Master
您现在已经在“master”服务器上完成了 SaltStack Master 的安装,在“minion1”和“minion2”服务器上完成了 SaltStack Minion 的安装。要将 SaltStack Minion 添加到 SaltStack Master,您将从“master”服务器接受“minion1”和“minion2”服务器的密钥指纹。
回到“主”服务器并运行下面的 salt 命令来检查所有可用的密钥指纹。您应该看到有两个来自 \minion1\ 和 \minion2\ 服务器的 \Unaccepted Keys\。
salt-key --finger-all

要接受 \minion1\ 和 \minion2\ 服务器的密钥指纹,请运行下面的 salt-key 命令。系统会提示您接受密钥指纹,输入 Y 确认并添加密钥。
salt-key -a minion1
salt-key -a minion2
接下来,使用以下命令检查并验证所有可用的密钥指纹。并且您应该将 \minion1\ 和 \minion2\ 服务器的指纹密钥都添加到 SaltStack master。两个密钥指纹都可以在“接受的密钥”部分找到。
salt-key --finger-all

将SaltStack Minion服务器添加到SaltStack Master后,在“master”服务器上运行如下salt命令,测试并ping通“minion1”和“minion2”服务器。
如果您的配置成功,您应该输出消息“True”,这意味着 SaltStack Minion 服务器已添加到 SaltStack Master。
salt minion1 test.ping
salt minion2 test.ping
您还可以使用星号 * 来定位所有 SaltStack Minion 服务器。
salt '*' test.ping

您还可以使用以下命令检查 \minion1\ 和 \minion2\ 服务器上安装的当前 SaltStack 版本。
在撰写本文时,最新版本的 SaltStack 软件是 v3004.2,它安装在所有 SaltStack 服务器上。
salt '*' test.version
使用 SaltStack 运行任意命令
Saltstack 允许您从主服务器向所有从属服务器执行任意命令。为此,您需要使用 Saltstack 提供的执行模块。
从主服务器运行下面的 salt 命令。这将在所有 minion 服务器上执行命令 uname -a,并且该命令是通过 cmd 模块执行的。
salt '*' cmd.run 'uname -a'
正如您在下面的屏幕截图中看到的,每个 minion 服务器都返回命令 uname -a 的输出。

另一个例子是您可以使用 pkg 模块来管理包安装、存储库以及与包管理相关的所有内容。这支持多种 Linux 发行版,包括基于 RHEL 的发行版(例如 CentOS 和 Rocky Linux)以及基于 Debian 的系统(例如 Ubuntu)。
刷新所有 minion 服务器上的可用存储库。
salt '*' pkg.refresh_db
使用下面的 salt 命令检查包 bash。
salt '*' pkg.show bash
在所有 minion 服务器上安装名为 chrony 的包。
salt '*' pkg.install chrony
检查所有服务器 minions 上的存储库列表。
salt '*' pkg.list_repos
检查所有 minion 服务器上的可用包更新列表。
salt '*' pkg.list_upgrades
这里的另一个很好的例子是服务模块,它允许您管理多个 Linux 发行版上的服务,包括使用 systemd 的发行版。
检查 chronyd 服务是否可用。
salt '*' service.available chronyd
在所有 minion 服务器上启用 chronyd 服务以在系统启动时启动。
salt '*' service.enabled chronyd
检查所有服务器上正在运行的服务列表。
salt '*' service.get_running
检查所有服务器上可用的每项服务的 ExecStart= 命令。
salt '*' service.execs
使用 SaltStack 状态安装 LEMP 堆栈
您已经学习了对所有 SaltStack Minion 服务器运行任意命令的基本 salt 命令。您现在将创建一个新的 SaltStack 状态文件来安装基本的 LEMP 堆栈(Linux、Nginx、MariaDB 和 PHP-FPM)。在这里,您可以使用 SaltStack 作为服务器基础设施和自动应用程序部署的配置管理。
Rocky Linux 存储库提供了多个版本的 Nginx、MariaDB 和 PHP-FPM 包。要安装这些包的最新版本,您需要通过 DNF 包管理器模块启用它。
在撰写本文时,还没有等同于基于 RHEL 发行版的“dnf 模块”命令的 SaltStack 模型。因此,您将通过 SaltStack 任意命令手动启用该模块。
运行以下命令为 Nginx v1.20、MariaDB v10.5 和 PHP 包 v8.0 启用该模块。
salt '*' cmd.run 'sudo dnf module enable nginx:1.20 -y'
salt '*' cmd.run 'sudo dnf module enable mariadb:10.5 -y'
salt '*' cmd.run 'sudo dnf module enable php:8.0 -y'
现在创建一个新的中央配置管理目录 \/srv/salt/lemp\ 并使用以下命令创建一个新文件 \init.sls\。
mkdir -p /srv/salt/lemp
nano /srv/salt/lemp/init.sls
将以下配置添加到文件中。在此示例中,我们将创建名为 \lemp\ 的 Salt 状态,用于安装 LEMP Stack 包。此外,我们将确保在所有 SaltStack Minion 服务器上启用并运行所有 LEMP Stack 服务(Nginx、MariaDB 和 PHP-FPM)。
lemp_stack:
pkg.installed:
- pkgs:
- nginx
- mariadb-server
- php
- php-fpm
nginx:
service.running:
- enable: True
- reload: True
mariadb:
service.running:
- enable: True
- reload: True
php-fpm:
service.running:
- enable: True
- reload: True
完成后,保存并关闭文件。
现在要验证您的 Salt 状态配置,请使用下面的 salt 命令。此命令将针对 SaltStack Minion 服务器测试和验证您的 Salt 状态配置。
sudo salt * state.show_sls lemp

要将 Salt 状态应用到所有 SaltStack Minion 服务器,您可以使用下面的 salt 命令。现在 LEMP 堆栈将自动安装在“minion1”和“minion2”服务器上。
sudo salt '*' state.apply lemp
在下面的屏幕截图中,您可以看到 LEMP 堆栈安装在“minion1”和“minion2”服务器上。

结论
在本教程中,您已经在 Rocky Linux 服务器上完成了 SaltStack Master 和 SaltStack Minion 的安装。您还学习了 salt 命令的基本用法,可以针对 SaltStack Minion 运行任意命令。最后,您还学习了如何创建用于自动安装 LEMP 堆栈的 Salt 状态配置,以及如何将 SaltStack 设置为应用程序部署的配置管理。