Saltstack
- Salt 是一种新的基础设施管理方法。它非常容易上手,几分钟即可运行,可扩展性强,足以管理数万台服务器,并且速度非常快,可以在几秒钟内与它们通信。
- Salt 为基础设施提供了一个动态的通信总线,可用于编排、远程执行、配置管理等等。
安装
Salt Stack 组件
Salt 的核心是一个远程执行解决方案。它可以在远程主机上运行预定义或任意命令。Salt 基于 master/minion 拓扑结构运行。master 服务器充当客户端(称为 minions)的中央控制总线,而 minions 连接回 master。
Salt Master
默认配置适用于绝大多数安装。启动/启用 salt-master.service
。
Salt Master 也可以在前台以调试模式启动,从而大大增加命令输出
# salt-master -l debug
Salt Master 需要绑定到系统上的 2 个 TCP 网络端口,这些端口是 4505 和 4506。
Salt Minion
Salt Minion 可以在有或没有 Salt Master 的情况下运行。本 wiki 假设 minion 将连接到 master。有关如何运行 masterless minion 的信息,请参阅 masterless 快速入门指南:https://docs.saltproject.io/en/latest/topics/tutorials/quickstart.html
Salt minion 只需要知道一个信息即可运行,即 master 的网络位置。默认情况下,minion 将查找 DNS 名称 salt 作为 master,最简单的方法是将内部 DNS 设置为将名称 salt 解析回 Salt Master IP。否则,需要编辑 minion 配置文件,编辑配置选项 master 以指向 Salt Master 的 DNS 名称或 IP。
/etc/salt/minion
master: saltmaster.example.com
现在 master 可以被找到,启动/启用 salt-minion.service
。
或者以调试模式运行
# salt-minion -l debug
Salt Key
Salt 使用公钥加密和身份验证来验证 minion。为了使 minion 开始接受来自 master 的命令,需要接受 minion 密钥。salt-key 命令用于管理 master 上的所有密钥。要列出 master 上的密钥,请运行 salt-key list 命令
# salt-key -L
列出了已被拒绝、接受和待接受的密钥。要接受一个 minion
# salt-key -a minion.example.com
或者您可以一次接受所有密钥,使用
# salt-key -A
Salt Cloud
Salt 也可以用于在大多数主要云提供商上配置云服务器。为了连接到这些提供商,可能需要额外的依赖项。python-apache-libcloudAUR 是许多流行的提供商(如 Rackspace 和 Amazon)所必需的。有关配置云提供商的更多详细信息,请访问官方 wiki:https://docs.saltproject.io/en/latest/topics/cloud/
Salt 命令
在连接并接受 Salt Master 上的 minion 后,您现在可以向 minion 发送命令。Salt 命令允许执行大量功能,并可以针对特定的 minion 和 minion 组执行操作。这使得 salt 命令非常强大,但该命令也非常易用且易于理解。
salt 命令由命令选项、目标规范、要执行的函数以及函数的参数组成。一个简单的入门命令如下所示
# salt '*' test.ping
* 是目标,它指定所有 minions,而 test.ping 告诉 minions 运行 test.ping 函数。此 salt 命令将告诉所有 minions 并行执行 test.ping 并返回结果。
有关更多命令,请参阅文档或运行
# salt '*' sys.doc
Salt States
除了运行命令外,salt 还可以使用所谓的 states。state 就像一个配置文件,允许以完全相同的方式设置新的安装。state 也可以在安装后几周运行,以确保计算机仍处于已知配置中。
Salt 环境
States 可以分为不同的环境。这些环境可用于在移动到生产机器之前在测试环境中进行更改、以相同方式配置一组服务器等等。基本环境默认为 /srv/salt
,有时必须手动创建 /srv/salt
。
可以在 salt-master 文件中设置不同的环境。请查看 /etc/salt/master
以获取更多信息。
创建 State
state 是一个扩展名为 .sls 的文本文件,位于配置的环境中。这里假设仅设置了默认的基本环境。
创建 一个名为 test.sls
的文件在 /srv/salt
中,内容如下
/srv/salt/test.sls
netcat: pkg.installed: []
现在运行 state
# salt '*' state.apply test
Salt 将在基本环境文件夹中搜索任何名为 test.sls
的文件,并将找到的配置应用于所有服务器。在本例中,netcat 将安装在所有服务器上。
有关 state 文件语法和使用 states 的更多信息,请参阅此处:https://docs.saltproject.io/en/latest/topics/tutorials/starting_states.html
Top 文件
Top 文件是一次将不同配置应用于不同服务器的主要方式。Top 文件名为 top.sls
,位于环境的根目录中。可以使用以下命令运行 top 文件配置
# salt '*' state.apply
假设我们有 2 台服务器:fs01、web01。我们还假设我们在基本环境中有 3 个 states:nettools.sls
、samba.sls
、apache.sls
。这是一个示例
top.sls
# Applied to all servers '*': nettools # Applied only to fs01 fs01: samba # Applied only to web01 web01: apache
当 state.apply 运行时,会读取 top 文件,并将 states 应用于正确的服务器。例如:nettools 应用于所有服务器,samba 应用于 fs01,apache 应用于 web01。
计划任务
使用以下命令在 minion 上启用 salt 调度器
# salt 'minion-name' schedule.enable
安装 python2-dateutilAUR 在 master 和任何将使用调度器的 minions 上,并在该服务器上重启 salt-minion 服务。请记住,您可以使用 state 或 salt '*' 命令轻松地在所有 minions 上安装 python2-dateutilAUR 并重启 salt-minion 服务。
假设存储在 /srv/salt
中的 samba.sls
需要在每周一在 fs01 上运行。这可以通过将以下内容放入 state 文件并运行它来实现。
configure_samba_daily: schedule.present: - function: state.sls - job_args: - samba - when: - Monday 5:00am
运行
# salt 'minion-name' schedule.list
以验证作业是否已添加到计划中。
state.sls
是指定 job_args 接收名为 samba 的 state 的方式。不要尝试用 samba.sls
或任何其他 .sls 文件替换 state.sls
。Function 只是告诉调度器如何处理 jobs_args。有关配置计划的更多详细信息,请参阅 https://docs.saltproject.io/en/latest/ref/states/all/salt.states.schedule.html
参见
- https://docs.saltproject.io/ - 官方文档