salt minion的高级配置及grains
作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/
前两篇文章学习了salt的state、pillar和top文件的应用,本篇学习一下salt minions的其它配置,包括如何配置masterless的minion,如何配置grains以及在minions上直接执行salt命令。
配置masterless minion
salt有一种配置方式允许minions运行在没有master的模式下。在这种情况下minion充当它自己的master。这是通过将配置文件/etc/salt/minion
中的file_client参数从remote改为local实现的。改为local后,还需要配置本地的存储states和pillars的路径。具体操作如下:
首先在/etc/salt/minion.d文件夹中添加文件file_client.conf,file_roots.conf和pillar_roots.conf:
值local允许minion从本地文件系统中查找states和pillars。
|
|
上面这两个文件设置了states和pillars在本地的存储位置,与master上的配置类似,states和pillars的配置要放在这两个文件定义的位置里。配置完成后需要重启minion。
[root@centos7-B minion.d]# systemctl restart salt-minion
下面测试一下上面的配置。在/opt/salt/base创建一个名为user-wilma.sls的文件,内容如下:
使用下面的命令检查此state:
应用state到本地:
可见,这种配置在没有master的情况下,minion自己充当master,只是将master上的salt命令换成了minions上的salt-call命令,其它用法与在master上操作完全一致。上面是使用的state.sls将特定的state应用到本地,如果写了top.sls文件,可以像在master上一样,使用state.highstate来引用top文件里规定的states。
在masterless minion的配置中,也可以不指定file_client为local,这样在使用salt-call命令时需要加上命令行参数
--local
,其效果与将file_client配置为local的效果相同。不过当在配置文件中指定了file_client为local后,salt master就不能再连接上此minion,使用时一定要注意。
在minion上配置grains
在salt中,grains是存储在minions上的关于系统属性的一些信息,它可以帮助salt根据这些信息选择目标minions,通常它用来存储相对静态的数据。默认情况下,salt提供了许多grains信息,包括os、cup、内存、机器名等。然而我们也可以在minions上配置定制的grains信息,例如机器位置、服务器类型、应用程序名称、数据库等,这些定制信息使grains更加符合我们的需要。
有多种方法可以配置grains。首先可以在minion的默认配置文件/etc/salt/minion中配置;也可以将grains配置在一个单独的文件/etc/salt/grains中。无论哪种配置,grains都是以YAML键值对的形式配置的。这里我们以在/etc/salt/grains文件中配置grains举例:
grains是为了存储静态信息的,如果grains的信息发生了变动或新的grains添加进来,必须要刷新minion来使master得到这些新的数据。这可以通过执行模块完成,不过现在直接重启salt-minion daemon就可以是这些新的数据可用。
[root@centos7-B salt]# systemctl restart salt-minion
在master上通过命令grains.item得到grains的相关信息:
也可以通过grains.items得到某个minion的所有grains:
[root@centos7-A ~]# salt '*' grains.items
...
从minions拉取master上的配置
前两篇文章都是在master上通过salt命令将state推送到minions上,state也可以在minion上通过salt-call命令从master上拉取过来。可以使用下面的命令:
[root@centos7-B ~]# salt-call state.highstate
这里使用了只存在于minion上的salt-call命令,调用了state.highstate执行模块。然后minion将系统中所有需要的数据从master上缓存到本地,最后根据top.sls中的规则将特定环境下符合minion目标的特定state应用到本地。也可以使用另外一种方法应用某个state:
[root@centos7-B ~]# salt-call state.sls user saltenv=development
这里仍然使用只存在于minion上的salt-call命令,但是使用了另外一个state.sls的执行模块,它可以指定应用某个特定的state(这里是名为user的state)到此minion上,最后的saltenv指定了state文件在master上的存放位置。如果不提供saltenv参数,系统会到base环境下寻找相关的state文件。
上面的命令是在minion上拉取了master上的state配置,然后应用到本地。salt-call命令还可以从master上拉取pillar数据:
[root@centos7-B ~]# salt-call pillar.get dev_user
local:
----------
comment:
Thomas
name:
thomas
password:
$1$PG1inys0$kB2I83KzEVzVs9G7xLHjA1
uid:
2001
可以将salt命令与salt-call命令进行类比,它们非常类似,最大的不同就是salt命令只存在于master主机上,而salt-call命令只存在于minion主机上。
本篇学习了salt minion的高级配置及grains,下篇看一下如何在state中使用grains数据。