/ 编程

SaltStack: First Class

上周花了几天时间学习了 saltstack,感觉是个值得一试的工具。这里记一下学习和使用过程。没有高大上的用法,这些记录也不一定是 saltstack 的最佳实践。saltstack 的官方文档比较完善,可供参考。

初步认识

saltstack 是需要在被管理的机器上装 agent 的,这里叫做 minion。管理中心要安装的是 master。

minion 带着自己的公钥去连接 master,master 接受 minion 的公钥之后,鉴权成功,master 可以对这个 minion 进行管理了。在每一个 minion 上都保存着 master 的公钥,在 master 上保存有各个 minion 的公钥。saltstack 并不是走的 ssh 鉴权。

master 和 minion 是通过 zeromq 进行通信的,之前对 zeromq 有过一点了解,印象是“快”!

安装

可以通过源(yum, apt-get...)安装,也可以通过 pip 安装,当然也可以用源码编译安装。建议用 Linux 各个发行版的源进行安装,因为方便。安装各种依赖库、工具,尤其是要在很多机器上安装,是个挺痛苦的过程。详细内容见官方文档

简单配置

saltstack 的 master 的配置文件默认是在 /etc/salt/master,minion 的配置文件路径是 /etc/salt/minion。通过源安装的这个文件应该已经存在了,其他方式可能没有,自己创建即可。

每个配置项都是配置项名称: 配置项的值这种格式。

master 配置

通过源安装的 salt-master,已经放好了 /etc/salt/master 文件,所有配置项都被注释,里面是各项配置的介绍,可以仔细看一下,看自己需要取消注释或者修改配置项。通过 pip 等其他方式安装,自己创建空白的配置文件。先写下这些内容就暂时够用了:

interface: 192.168.0.1
file_roots:
  base:
    - /srv/salt

interface 指定绑定的地址,默认是 0.0.0.0,一般来说,走外网进行服务器管理,我想是个挺奇怪的场景,所以这里填一个内网地址吧。
file_roots 是设置 salt-master 作为文件服务器要用的本地的路径,可以为不同的环境设置不同的路径,上面的配置是 base 环境的路径是 /srv/salt,具体的意义到下面涉及到文件管理再说。

minion 配置

minion 配置里写上 master: 192.168.0.1 就基本可以了,指定了它要连的 master 的地址。

日志

日志的相关配置在 master 和 minion 端一样。为了检查 master 或者 minion 启动失败,minion 连接 master 失败等问题,可以降低 log_levellog_level_logfile 的日志级别,默认是 warning,修改到 debuginfo,这样程序产生的日志应该足以检查各种问题发生的原因。

log_level 是表示输出到终端的日志等级,log_level_logfile 是表示输出到文本文件的日志等级。日志的文本文件路径由 log_file 指定,master 和 minion 分别默认是 /var/log/salt/master, /var/log/salt/minion

启动

刚开始试用时,可以从前台启动 master 和 minion,所有内容都输出到屏幕上,通过 -l 指定输出内容的等级,执行 salt-master -l debug 前台启动 master,输出 debug 级别的日志内容,启动 minion 的命令与之类似。

通过源安装,一般就以启动系统服务的方式启动就可以了,比如 CentOS 上通过 service salt-master start 启动 master。

鉴权

minion 和 master 都启动之后,需要进行前面提到的鉴权过程,master 这一端通过 salt-key 工具来管理 minion 的公钥。

salt-key -L

查看 minion key。所显示内容一般是 minion 的主机名,或者是 minion 配置文件里 id 配置项所指定的名称。还有 minion 的 key 的状态:拒绝(rejected),接受(accepted), 暂未接受(unaccepted)。

salt-key -A xxx

接受名为 xxx 的 key,如果 -A 后不加参数,则添加所有暂未接受的 key。

在 master 接受了 minion 的 key 之后,这个 minion 就可以由 master 来管理了。

因为 master 和 minion 都互相保存了公钥,所以 master 遇到与已存在 minion 同名的 minion 来连接,或者 minion 去连新的 master 都是会鉴权失败的。


之后就可以从 master 对 minion 进行各种 XXXXX 了。

Salt will return in a moment...