Quantcast
Channel: CodeSection,代码区,Linux操作系统:Ubuntu_Centos_Debian - CodeSec
Viewing all articles
Browse latest Browse all 11063

salt minion的高级配置及grains

$
0
0

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!

出处: 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:

file_client.conf

1

file_client: local

值local允许minion从本地文件系统中查找states和pillars。

file_roots.conf

file_roots: base: - /opt/salt/base development: - /opt/salt/development

pillar_roots.conf

pillar_roots: base: - /opt/salt/pillar/base development: - /opt/salt/pillar/development

上面这两个文件设置了states和pillars在本地的存储位置,与master上的配置类似,states和pillars的配置要放在这两个文件定义的位置里。配置完成后需要重启minion。

[root@centos7-B minion.d]# systemctl restart salt-minion

下面测试一下上面的配置。在/opt/salt/base创建一个名为user-wilma.sls的文件,内容如下:

user-wilma.sls

user_wilma: user.present: - name: wilma - fullname: Wilma Flintstone - uid: 2002 - home: /home/wilma

使用下面的命令检查此state:

[root@centos7-B base]# salt-call state.show_sls user-wilma [INFO ] Loading fresh modules for state activity [INFO ] Fetching file from saltenv 'base', ** done ** 'user-wilma.sls' local: ---------- user_wilma: ---------- __env__: base __sls__: user-wilma user: |_ ---------- name: wilma |_ ---------- fullname: Wilma Flintstone |_ ---------- uid: 2002 |_ ---------- home: /home/wilma - present |_ ---------- order: 10000

应用state到本地:

[root@centos7-B base]# salt-call state.sls user-wilma [INFO ] Loading fresh modules for state activity [INFO ] Fetching file from saltenv 'base', ** skipped ** latest already in cache 'salt://user-wilma.sls' [INFO ] Running state [wilma] at time 14:50:51.175126 [INFO ] Executing state user.present for wilma [INFO ] Executing command ['useradd', '-u', '2002', '-m', '-d', '/home/wilma', 'wilma'] in directory '/root' [INFO ] Executing command ['usermod', '-c', 'Wilma Flintstone,,,', 'wilma'] in directory '/root' [INFO ] {'shell': '/bin/bash', 'workphone': '', 'uid': 2002, 'passwd': 'x', 'roomnumber': '', 'groups': ['wilma'], 'home': '/home/wilma', 'name': 'wilma', 'gid': 2002, 'fullname': 'Wilma Flintstone', 'homephone': ''} [INFO ] Completed state [wilma] at time 14:50:51.540919 local: ---------- ID: user_wilma Function: user.present Name: wilma Result: True Comment: New user wilma created Started: 14:50:51.175126 Duration: 365.793 ms Changes: ---------- fullname: Wilma Flintstone gid: 2002 groups: - wilma home: /home/wilma homephone: name: wilma passwd: x roomnumber: shell: /bin/bash uid: 2002 workphone: Summary ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1

可见,这种配置在没有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

environment: development location: datacenter1 server_type: webserver

grains是为了存储静态信息的,如果grains的信息发生了变动或新的grains添加进来,必须要刷新minion来使master得到这些新的数据。这可以通过执行模块完成,不过现在直接重启salt-minion daemon就可以是这些新的数据可用。

[root@centos7-B salt]# systemctl restart salt-minion

在master上通过命令grains.item得到grains的相关信息:

[root@centos7-A ~]# salt '*' grains.item environment location server_type minion: ---------- environment: development location: datacenter1 server_type: webserver

也可以通过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数据。


Viewing all articles
Browse latest Browse all 11063

Trending Articles