SaltStack入门【Schedule配置】

SaltStack通过Schedule实现批量的计划任务和管理,主要任务定期执行配置同步、执行命令等等。
可以在master端和minion端配置schedule
而根据配置端的不同,所调用的函数也有所不同,schedule在master和minions上执行不同的函数。当运行在master上时函数调用runner函数,当运行在minion上时函数指定执行函数。

Schedule介绍

在minion的配置文件中或者pillar数据中,设置highstate,每60分钟运行一次,时间声明可以指定seconds, minutes, hours, days
STATES

schedule:
  log-loadavg:
    function: cmd.run
    seconds: 3660
    args:
      - 'logger -t salt < /proc/loadavg'
    kwargs:
      stateful: False
      shell: True

HIGHSTATES

schedule:
  highstate:
    function: state.highstate
    minutes: 60

配置在master的配置文件中

RUNNERS

schedule:
  overstate:
    function: state.over
    seconds: 35
    minutes: 30
    hours: 3

schedule也可以将minon收集的数据通过returner收集到mysql数据库中.
SCHEDULER WITH RETURNER

schedule:
  uptime:
    function: status.uptime
    seconds: 60
    returner: mysql
  meminfo:
    function: status.meminfo
    minutes: 5
    returner: mysql

本文使用piller 在master端配置schedule集中配置调度任务下发。

Piller介绍

Salt中的pillar接口是Salt开发中最重要的接口之一。Pillar是用来产生特定于minions的任意数据的接口。pillar中产生的数据几乎可以在Salt的任何组件中使用,用途广泛:

高度敏感的数据:
通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。
Minion配置:
minion模块,像是execution模块,states,和returner可以通过存储在pillar中的数据配置。
Variables:
特定minions或者groups需要变量可以定义在pillar中,以后可以在sls公式或者模板文件中使用。
任意的数据:
Pillar可以包含任何基础数据结构,像是一个列表的值,键值存储结构都可以定义使得可以在sls公式中简单的遍历一组值。
Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。
1、编辑top.sls文件

使用minion id方式

[root@master pillar]# vi top.sls 
base:
 test01:   #minion id
  - schedule
  test02: #minion id      
  - schedule_prod

使用 nodegroup方式

这里定义了2个minion执行不同的schedule
也可以是分组,这个用的比较多,首先要在master或是master.d中定义 分组

[root@master pillar]# cat /etc/salt/master.d/nodegroups.conf 
nodegroups:
 group01: 'test01'
 group02: 'test02'

注意配置完了,需要重启的,我以为可以自动加载,试了多次下边的top配置都没生效,结果重启salt-master服务就可以了。

[root@master pillar]# vi top.sls 
base:
  group01:
    - match: nodegroup    
    - schedule
  group02:
    - match: nodegroup
    - schedule_prod

配置schedule.sls和schedule_prod.sls 实现不同分组的不同调度任务。

2、设置schedule任务

[root@master pillar]# cat schedule.sls  #5分钟执行一次state.highstate 
schedule:
 highstate:
   function: state.highstate
   seconds: 0
   minutes: 5
   hours: 0
[root@master pillar]# cat schedule_prod.sls   # 10分钟执行一次state.highstate 
schedule:
 highstate:
   function: state.highstate
   seconds: 0
   minutes: 10
   hours: 0

3、增加schedule任务并下发

创建完文件之后执行下面的命令把pillar的修改刷到minion端去

salt "*" saltutil.refresh_pillar

想查看minion端都有哪些计划任务可以用

salt "*" pillar.get schedule

4、删除schedule任务
如果想删除掉minion端的调度任务怎么办?
删除top.sls对应的调度任务信息即可,例如上边的配置,只剩下gourp01的配置,那么就会删除掉group02的调度任务

[root@master pillar]# vi top.sls 
base:
  group01:
    - match: nodegroup    
    - schedule

如下面显示只剩下:

[root@master pillar]# vi top.sls 
base:

然后在执行命令,即可删除任务端的任务。

salt "*" saltutil.refresh_pillar

至此就完成了利用pillar 在master端配置schedule调度任务下发、删除的工作,希望可以帮到你。

发表评论