Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1667111
  • 博文数量: 636
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3950
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-06 21:58
个人简介

博客是我工作的好帮手,遇到困难就来博客找资料

文章分类

全部博文(636)

文章存档

2024年(5)

2022年(2)

2021年(4)

2020年(40)

2019年(4)

2018年(78)

2017年(213)

2016年(41)

2015年(183)

2014年(66)

我的朋友

分类: 系统运维

2017-03-11 22:11:05

一、概述

salt是一个异构平台基础设置管理工具,使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,通常叫做Salt State System。


二、基本原理

采用C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。minion上线后先与master端联系,把自己的pub key发过去,接受该minion-key后,也就是master与minion已经互信master可以发送任何指令让minion执行了



同时SaltStack也支持SSH的方式无需安装Agent,通过SSH实现管理。 


实现步骤:

1.Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc


2.salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。


3.master接收到命令后,将要执行的命令发送给客户端minion。


4.minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理


5.minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master


6.master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中


7.salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。


参考链接:
官方站点:
官方文档:
中文站点:
中文手册:


salt-run manage.status #查看所有客户端up/down状态

salt-run manage.up    #只显示up状态的客户端

salt-run manage.down  #只显示down状态的客户端



三、安装部署

环境准备:

操作系统:centos 7.2

配置EPEL源:# rpm -Uvh

Master端:192.168.2.5 

Minion端:192.168.2.71

Master端安装# yum install salt-master -y


Minion端安装# yum install salt-minion -y 


注:安装完之后,Master配置文件在/etc/salt/master,minion配置文件在/etc/salt/minion,


默认初始安装配置文件都是被注释,可自定义。



SaltStack常用的目录结构:


/var/cache/salt/master/minions/  #存放minions的缓存数据


/srv/salt             #存放salt的sls文件,默认没有,需新建


/srv/pillar            #存放pillar配置文件,默认没有,需新建


/etc/salt             #存放salt的自身配置文件


/var/log/salt           #存放salt的日志目录


四、配置Minion端与Master通信,并简单测试。


1.打开Master端的自动签发证书,默认是关闭的,如果不打开minion启动时会报如下错误:


3月 08 14:47:46 node02 salt-minion[2736]: [WARNING ] ** Restarting minion **

3月 08 14:54:56 node02 salt-minion[2736]: [ERROR   ] Attempt to authenticate with the salt master failed

3月 08 14:59:07 node02 salt-minion[2736]: [ERROR   ] The Salt Master has cached the public key for thi...cate


修改Master端配置文件如下:/etc/salt/master

修改:#auto_accept: False

为:auto_accept: True


systemctl restart salt-master.service  #重启Master端


2.修改Minion端配置文件如下:/etc/salt/minion


修改:#master: salt


master: 192.168.2.5  #指向主Master端


修改:#id: salt

id: minion01  #本端Minion id号


systemctl restart salt-minion.service  #重启Minion端






salt命令的帮助信息翻译:




###
[root@localhost salt]# salt --help
Usage: salt [options] '' [arguments]
 
Options:
  --version             版本号
  --versions-report     依赖包版本号
  -h, --help            显示帮助信息
  -c CONFIG_DIR, --config-dir=CONFIG_DIR
                        指定配置文件目录.
                        默认: /etc/salt
  -t TIMEOUT, --timeout=TIMEOUT
                        指定命令超时时间
                        建议默认:5秒
  -s, --static          等到所有minions都执行完了再一起显示数据
                         
  --async               运行所有的salt命令不等待返回结果
  --state-output=STATE_OUTPUT, --state_output=STATE_OUTPUT
                        覆盖掉配置文件中对minion输出内容所定义的 state_output 值
            默认: full
  --subset=SUBSET       对目标minions的随机子集执行程序. 
            minions在执行前会先验证是否存在该命名的函数,再去执行
  -v, --verbose         可以查看详细的命令执行情况
  --show-timeout        显示命令执行超时的 minions
  -b BATCH, --batch=BATCH, --batch-size=BATCH
                        开启salt命令批量执行模式, 既可以指定一批minions,
            也可以用指定百分比的方式确定多少minions批量执行
  -a EAUTH, --auth=EAUTH, --eauth=EAUTH, --extended-auth=EAUTH
                        指定一个扩展的认证系统.
  -T, --make-token      创建并保存一个认证token用于重用.
                        生成的token确保Salt Master在指定的周期内有效.
  --return=RETURNER     设置一个其它的返回方法. 
            默认情况下,salt查询后结果会返回给master, 
            指定return后,数据可以重定向其它的任意数量的系统,数据库或应用.
  -d, --doc, --documentation
            返回指定模块的文档说明,不指定特定的模块则返回全部                    
  --args-separator=ARGS_SEPARATOR
                        指定发送命令跟命令参数的分隔符. 
            当用户想把一个命令当作参数发送给另一个命令执行时,
            是个很好用的选项.
 
  Logging Options:
    指定下面的配置选项会覆盖掉配置文件中对应的配置信息.
 
    -l LOG_LEVEL, --log-level=LOG_LEVEL
                        日志等级. 
            其中一个: 'all', 'garbage', 'trace', 
            'debug', 'info', 'warning', 'error', 'quiet'.
                        默认: 'warning'.
    --log-file=LOG_FILE
                        日志文件路径. 默认: /var/log/salt/master.
    --log-file-level=LOG_LEVEL_LOGFILE
                        日志文件记录等级. 其中一个 'all', 'garbage',
                        'trace', 'debug', 'info', 'warning', 'error', 'quiet'.
                        默认: 'warning'.
 
  Target Options:
    Target Selection Options
 
    -E, --pcre          使用pcre(perl)的正则表达式规则匹配目标
    -L, --list          列出一组用逗号或空格隔开的minions id作为执行目标.
    -G, --grain         使用grain信息中指定的机器作为目标
                        例如: "os:Arch*"   'os:CentOS'
    --grain-pcre        使用基于pcre正则式规则的grain匹配目录
                        例如: "os:Arch.*"
    -N, --nodegroup     使用预先定义的节点组作为匹配目标.
    -R, --range         使用一个范围表达式去查找目标.
            例如: %cluster
    -C, --compound      多条件指定目标,根据多个条件筛选匹配目标
                        类似: salt 'G@os:RedHat and webser* or E@database.*'
    -X, --exsel         Instead of using shell globs use the return code of a
                        function.
    -I, --pillar        使用一个pillar 的值来筛选目标, 
                        例如: "role:production*"
    -S, --ipcidr        基于子网络匹配 (CIDR notation) or IPv4 address.
 
  Output Options:
    配置你的完美输出格式
 
    --out=OUTPUT, --output=OUTPUT
                        指定输出的格式,开发一般用json,默认是yaml
            可选如下: 'no_return',
                        'grains', 'yaml', 'overstatestage', 'json', 'pprint',
                        'nested', 'raw', 'highstate', 'quiet', 'key', 'txt',
                        'virt_query'.
    --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT
                        指定行缩进的空格数.
            负数为取消行缩进. 
            只有在输出格式适合行缩进,该参数才有效.
    --out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE
                        内容输出到指定的文件
    --no-color, --no-colour
                        关闭颜色显示
    --force-color, --force-colour
                        强制颜色显示




salt '*' test.ping --show-timeout


# 加入 --show-timeout 选项,可以在测试结果中显示连接失败的minion,如果不加该参数,对于测试失败的minion,返回结果不会显示出来 




salt '*' status.meminfo --out=json


## 指定json格式的输出,方便作为数据给web进行显示,或是python进行解析



salt-key 命令


sat-key的帮助文件中文信息:


[root@localhost ~]# salt-key --help
Usage: salt-key [options]
 
Salt key 用于管理认证key
 
Options:
  --version            显示版本号后退出
  --versions-report    显示程序的所有依赖包版本号,并退出
  -h, --help           帮助信息
  -c CONFIG_DIR, --config-dir=CONFIG_DIR
                       指定配置目录,默认 :/etc/salt/
                          
  -q, --quiet          安静模式,不输出信息到控制台
  -y, --yes            对所有询问是否继续,回答yes,默认:false
 
  Logging Options:
                   设置loggin选项会覆盖掉配置文件中对日志的配置.
 
    --log-file=LOG_FILE                
                        指定日志文件路径,默认: /var/log/salt/key.
    --log-file-level=LOG_LEVEL_LOGFILE
                        日志文件等级,可设置下面中的一个值 'all', 'garbage',
                        'trace', 'debug', 'info', 'warning', 'error', 'quiet'.
                        默认: 'warning'.
    --key-logfile=KEY_LOGFILE
                        将所有的输出发送到指定的文件,默认: '/var/log/salt/key'
                        
 
  Output Options:
    配置输出格式
 
    --out=OUTPUT, --output=OUTPUT
                        把salt-key命令的输出信息发送给指定的outputer. 
                可设置为下面参数值 'no_return', 'virt_query'.
                        'grains', 'yaml', 'overstatestage', 'json', 'pprint',
                        'nested', 'raw', 'highstate', 'quiet', 'key', 'txt',
                        
    --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT
                        设置输出行缩进的空格数. 
                        负数取消输出缩进编排.仅对使用的outputer有效.
    --out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE
                        把显示输出到指定的文件
    --no-color, --no-colour
                        关闭字体颜色
    --force-color, --force-colour
                        强制开启输出颜色渲染
 
  Actions:
    -l ARG, --list=ARG 
                      打印公钥key. 可设置下面三个值
                "pre", "un", and "unaccepted" 会显示 不许可/未签名 keys. 
                "acc" or "accepted"会显示 许可/已签名 keys. 
                "rej" or "rejected"会显示拒绝的 keys.  
                "all" 会显示所有 keys.
    -L, --list-all      会显示所有公钥,相当月: "--list all"
    -a ACCEPT, --accept=ACCEPT
                        许可指定的公钥(使用--include-all选项
                        可以指定除了挂起的key外的所有reject状态的公钥)
 
    -A, --accept-all    许可所有pending的公钥
    -r REJECT, --reject=REJECT
                        拒绝指定的公钥 (使用--include-all选项
                        可以指定除了挂起的key外的所有accept状态的公钥)
 
    -R, --reject-all    拒接所有pending的公钥
 
    --include-all         配合 accepting/rejecting 选项使用,指定所有非pending状态的公钥
 
    -p PRINT, --print=PRINT
                        打印指定的公钥
    -P, --print-all     Print all public keys
    -d DELETE, --delete=DELETE
                        根据公钥的名称删除公钥
    -D, --delete-all    删除所有 keys
    -f FINGER, --finger=FINGER
                        打印指定key的指纹信息
    -F, --finger-all    打印所有key的指纹信息
 
  Key 常用选项:
    --gen-keys=GEN_KEYS
                        对生成的key配置设置一个salt使用的名称。
    --gen-keys-dir=GEN_KEYS_DIR
                        设置生成key对的放置目录,默认当前目录。default=.
 
--keysize=KEYSIZE                   
                为生成key设置位数, 仅跟--gen-keys选项配合时有效,
                数值大小必须大于2048,否则会被提升至2048位,默认2048
                        default=2048



salt-key的使用实例:


#
# 显示所有minion的认证信息
salt-key -L
 
# 接受192.168.0.100的认证信息
salt-key -a 192.168.0.100
 
# 接受192.168.0.100的认证信息,不需要手动验证
salt-key -a 192.168.0.100 -y
 
# 接受192.168.0.100的认证信息,即使该minion是Rejected Keys状态
salt-key -a 192.168.0.100 --include-all
 
# 接受所有 Unaccepted Keys 状态的minion的认证信息
salt-key -A
 
# 拒绝认证192.168.0.100
salt-key -d 192.168.0.100
 
# 拒绝所有 Unaccepted Keys 状态的minion
salt-key -D





这时Master查看salt-key,minion01客户端自动添加到签发列表中


[root@node03 ~]# salt-key     #查看所有端key

Accepted Keys:

minion01


注:salt-key常用命令

-a          #添加指定id

        -A          #添加全部    

        -R          #拒绝全部

        -d          #删除指定id

        -D          #删除全部


    测试:


    [root@node03 ~]# salt 'minion01' cmd.run 'uname -r'  

minion01:

    3.10.0-327.el7.x86_64


###################Master端和Minion端常用配置参数说明#####################


Master端常用的配置参数说明:


interface:指定bind的地址,默认为0.0.0.0


publish_port:指定发布端口,默认为4505


ret_port:指定结果返回端口,与minion配置文件中的master_port对应,默认为4506


uesr:指定master进程的运行用户,如果调整,则需要调整部分目录的权限,默认权限为root


timeout:指定timeout时间,如果minion规模庞大或络状况不好,建议增该值,默认5s


keep_jobs:默认情况下,minion会执行结果会返回master,master会缓存到本地的cachedir目录


该参数指定缓存多长时间,以供查看之前的执行结果,会占用磁盘空间,默认为24h


job_cache:master是否缓存执行结构,如果规模庞大(超过5000台),建议使用其他方式来存储jobs,关闭本选项,默认为True


file_recv:是否允许minion传送文件到master上,默认是Flase


file_roots:指定file server目录,默认为:


file_roots:    

   base:    

       - /srv/salt

pillar_roots:指定pillar目录,默认为:


pillar_roots:  


   base:     

       - /srv/pillar


log_level:执行日志级别,支持的日志级别由'garbage', 'trace', 'debug', info', 'warning', 

'error', ‘critical ’ ,默认为’warning’




Minion端常用的配置参数说明:


master:指定master主机,默认为salt


mastar_port:指定认证和执行结果发送到master的哪个端口,与master配置文件中的ret_port对应,默认为4506


id:指定minion的标识,Salt内部使用id作为标识,唯一标识符,默认为主机名


user:指定运行minion的用户,由于安装包,启动服务等操作需要特殊用户,推荐使用root,默认为root


cache_jobs:minion是否缓存执行结果,默认为False


backuo_mode:在文件操作(file.managed或file.recurse)时,如果文件发送更改,指定备份目录,当前有效的值为minion,备份在cachedir/file_backups目录下,以原始文件名称加时间戳来命名,默认为Disabled


providers:指定模块对应的providers,如果RHRL系列中,pkg对应的providers是yumpkg5


renderer:指定配置管理系统中的渲染器,默认值为:yaml_jinja


file_client:指定file client默认去哪里(remotr或local)寻找文件,默认值为remote


loglevel:指定日志级别,默认为warnning


tcp_keepalive:minion是否与master保持keepalive检查,zeromq3一下版本存在keepalive bug,会导致某些情况下链接异常后minion无法重连master,建议有条件的话吧zeromq3以上版本,默认为True 




1.Archive模块:实现系统层面的压缩包调用,支持gzip、gunzip、rar、tar、unrar、unzip等

例子:


#salt 'minion01' archive.g


zip test.txt   #采用gzip压缩test.txt文件


2.cmd模块:实现远程的命令行调用执行(默认具备root操作权限)

例子:


#salt 'minion01' cmd.run 'fdisk -l'  #获取被控主机硬盘信息


#salt 'minion01' cmd.script salt://script/test.py   


#该命令首先同步test.py到minion客户端的cache目录并运行该脚本。其中script/test.py存放在

file_roots指定的目录(默认在/srv/salt(需要新建),在/etc/salt/master文件中定义


3.cp模块:远程文件、目录的复制

例子:


#salt 'minion01' cp.get_dir salt://script/ /opt/minion/  


#将Master端file_roots指定位置下(默认在/srv/salt)的目录复制到minion01主机/opt/minion/目录下


4.cron模块:minion端主机的crontab操作

例子:


# salt 'minion01' cron.set_job root '*' '*' '*' '*' 1 /home/timesyc.sh  #minion01端主机root用户添加任务作业


5.dnsutil模块:Minion主机通用DNS操作

例子:


#salt 'minion01' dnsutil.hosts_append /etc/hosts 192.168.2.71  


#添加192.168.2.71 


6.file模块:常见的文件操作,包括文件读写、权限、查找等

例子:


#salt 'minion01' file.chown /mydata/data root root   


#修改minion01主机/mydata/data文件的属组、用户权限,等价于chown root:root /mydata/data

#salt 'minion01' file.copy /mydata/data /home/data  


#minion01主机复制/mydata/data文件到本地的/home/data目录

#salt 'minion01' file.get_mode /mydata/data   


#获取minion01主机/mydata/data的权限mode,如:755,644


#salt '*' file.mkdir /home/test   


#所有Minion端主机创建/home/test


#salt '*' file.set_mode /home/test 0755  


#所有Minion端主机/home/test的权限mode为0755

#salt 'minion01' file.remove /home/test  


#删除minion01主机的/home/test文件


7.iptables模块:主机的iptables支持

例子:


salt '*' iptables.append filter INPUT rule='-m state --state RELATED,ESTABLISHED -j ACCEPT'

salt '*' iptables.insert filter INPUT position=3 rule='-m state --state RELATED,ESTABLISHED -j ACCEPT'


说明:在所有Minion主机端追加(append)、插入(insert)iptables规则,其中INPUT为输入链


salt '*' iptalbes.delete filter INPUT position=3

salt '*' iptables.delete filter INPUT rule='-m state --state RELATEC,ESTABLISHED -j ACCEPT'


说明:在所有Minion主机删除指定链编号为3(position=3)或指定存在的规则


8.network模块:返回Minion主机的网络信息

例子:


#salt 'minion01' network.ping   #minion01主机ping域名信息


9.pkg包管理模块:程序包管理,如:yum安装

例子:


#salt '*' pkg.install httpd  #所有Minion主机安装等价于yum -y install httpd,pkg.remove为移除


10.service服务模块:程序包服务管理(如:开机自动启动,服务重启等)

例子:


#salt '*' service.enable httpd    


#所有Minion主机httpd服务开机自启动脚本,service.disable为禁用


#salt '*' service.restart httpd   


#所有Minion主机httpd服务重启,service.reload(加载)、service.start(启动)、service.stop(停止)、service.status(状态)


注:saltstack还提供了user(系统用户模块)、group(系统组模块)、partition(系统分区模块)、puppet(puppet管理模块)、system(系统重启、关机模块)、timezone(时区管理模块)、nginx(nginx管理模块)、mount(文件系统挂载模块)等等。


11.可以通过Python扩展模块,使用API。通过调用master client模块,实例化一个LocalClient对象,再调用cmd()方法来实现



如:API实现archive.gzip


#vim /root/archive_gzip.py


import salt.client


client = salt.client.LocalClient()


ret = client.cmd('*','archive.gzip','/root/test.txt')


print ret

执行结果返回一个字典

1

{'minion01': '/root/test.txt.gz'}


12.远程执行目标(target)

常见命令参数:

globbing  #默认指定id进行匹配

L         #以主机ID列表形式匹配,不同主机id名称使用逗号隔开

E         #基于id的正则表达式进行匹配

G         #基于grains信息进行匹配过滤

I         #基于master赋给minion的pillar信息进行匹配

N         #基于master配置文件中的分组名称匹配

S         #基于minion的IP地址或者IP子网匹配

C         #复合匹配,以上参数可以组合使用



#salt 'minion01'  test.ping

#salt -L 'minion01,minion02'  test.ping

#salt -E '.*01' test.ping

#salt 'minion01'   grains.items

#salt 'minion01' grains.get os

#salt -S '192.168.2.71' test.ping

#salt -C 'E@m.*01 or G@id:minion02' test.ping

#salt '*'  pillar.get mysql


13.State内置模块

state是Saltstack最核心的功能。通过预先定制好的SLS描述了(支持YAML语法)系统的目标状态(程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等),由格式简单的数据构成。这经常被称作配置管理。


state的入口文件与pillar一样,文件名都是top.sls,但state要求sls文件必须存放在Saltstack base定义的目录下(默认为/srv/salt)。


state描述配置*.sls支持jinjia模板、grains及pillar引用等,在state的逻辑层次定义完成后,再通过salt '*' state.highstate执行生效。


可用执行命令


#salt '*' state.highstate    


#所有Minion到Master上取SLS定义,然后在本地调用对应的state module(user,pkg,service等)来达到SLS描述的状态。


#salt-call state.highstate -l debug  


#输出debug信息,便于调试。

如:


apache: #ID声明,state名称:apache

  pkg: #管理对象类型states:pkg,进行软件安装(yum、apt)

    - installed #pkg要执行的方法:install,如未安装就进行安装

  service: #管理对象类型states:service,管理系统守护进程

    - running #service要执行的方法:running,如未运行就进行启动

    - require: #关键字require,确保apache服务只有在成功安装软件包后才会启动

      - pkg: apache



一、grains组件介绍


grains是收集Minion主机的静态、不常变化的基本信息,存储在Minion端本地,如:CPU、内核、操作系统、虚拟化等,并且服务器端可以根据这些信息进行灵活定制或个性化定制,是Saltstack最重要的组件之一,多用来做资产管理的信息收集,主要解决平台的差异性。


如可以使用以下命令:


#salt 'minion01' grains.items  #获取minion01主机基本信息


二、grains组件自定义


    自定义grains有两种方法:


    第一种Minion端配置,需要重启minion生效(不建议使用);


    第二种在master端配置,同步之后生效,不需要重启master或者minion(比较推荐该方法)。


  1. 在master端配置grains组件


1.1.使用默认的Master的file_roots配置路径 /srv/salt创建_grains目录


#cd /srv/salt && mkdir _grains


1.2.修改salt的Master主配置文件(/etc/salt/master),新增如下内容,并且需要重启Master服务:


file_roots:

  base:

    - /srv/salt/


systemctl restart salt-master.service


注意:yaml格式问题: 和 - 后有空格,小心缩进!!!!!!!!


1.3.使用python自定义脚本(注意返回值是一个字典)


#抓取服务器的运行时间


cat /srv/salt/_grains/runtime.py


#!/usr/bin/python


import commands


def runtime():

    grains = {}

    grains['days'] = commands.getoutput("uptime|awk -F'up|days' '{print $2}'")

    return runtime


1.4.用saltutil.sync_grains或者saltutil.sync_all将自定义的grains item 同步到Minion端,


如果只同步grains建议使用saltutil.sync_grains。


# salt 'minion01' saltutil.sync_grains -l debug


# salt 'minion01' sys.reload_modules  #刷新客户端生效


[root@node03 _grains]# salt 'minion01' sys.reload_modules

minion01:

    True

# salt 'minion01' grains.item days #获取自定义的grains)


[root@node03 _grains]# salt 'minion01' grains.item days

minion01:

    ----------

    days:


注:同步完成后在Minion端的以下目录中可以找到Master下发的grains文件


# ls /var/cache/salt/minion/extmods/grains/


runtime.py  runtime.pyc


2.在master端配置grains组件通过states的grains方法也可以自定义grains

2.1.在/srv/salt再创建getitem目录


#cd /srv/salt && mkdir getitem


2.2.在getitem目录新建test.sls,内容如下:


# cat test.sls

test:

  grains.present:

    - value: test

2.3.同步至minion01端,并检查结果


# salt 'minion01' state.sls getitem.test

minion01:

----------

          ID: test

    Function: grains.present

      Result: True

     Comment: Set grain test to test

     Started: 17:28:48.807030

    Duration: 1032.356 ms

     Changes:   

              ----------

              test:

                  test

Summary

------------

Succeeded: 1 (changed=1)

Failed:    0

------------

Total states run:     1

# salt 'minion01' grains.get test

minion01:

    test

注:同步完成后在Minion端的以下目录中(/etc/salt/grains)可以找到Master下发的grains文件


# cat /etc/salt/grains 

test: test

注意:这里不做自定义在Minion端操作示例,实际生产环境中一般没有用。 



一、pillar组件介绍

跟grains的结构一样,存放需要提供给Minion端的信息,存储在master端。可根据各个机器环境的不同,分别定义变量,然后再sls文件里统一引用,官方表示pillar是存储敏感数据的,主要解决环境的差异性。同时与grains组件还有一个特别的区别:


grains数据加载在内存里,即minion启动之后不会变,哪怕修改了grains,除非重启minion或者从master端同步


而pillar修改之后,再获取数据即生效了。


注;pillar是存放在master端默认位置/srv/pillar,需要新建目录。和salt sls类似,也是需要top.sls


二、pillar组件自定义

1.使用默认的Master的pillar_roots配置路径 /srv/pillar需要新创建该目录


# mkdir /srv/pillar

2.修改salt的Master主配置文件(/etc/salt/master),新增如下内容,并且需要重启Master服务:


pillar_roots:

  base:

    - /srv/pillar

systemctl restart salt-master.service

注意:yaml格式问题: 和 - 后有空格,小心缩进!!!!!!!!


3.在/srv/pillar目录下新建top.sls(入口文件),如:


# cat /srv/pillar/top.sls

base:

  '*':

    - test #指data.sls文件


注:'*'代表任意主机,- test 指包含一个test.sls文件.top.sls引用时可用两种方法


(一):文件放在同级;

(
二)是在pillar目录下创建test目录,在该目录下创建init.sls文件


4.在/srv/pillar目录下新建test.sls,内容如下:


# cat test.sls 

httpd:

  pkg: httpd

  version: 2.4

5.刷新Minion端主机的pillar信息,检查test.sls数据项mysql


# salt '*' saltutil.refresh_pillar

minion01:

    True

# salt 'minion01' pillar.items

minion01:

    ----------

    httpd:

        ----------

        pkg:

            httpd

        version:

            2.4


6.常见pillar命令

salt '*' sys.doc pillar            #查看与pillar有关的帮助信息

salt '*' pillar.items              #获取所有pillar items值

salt '*' pillar.data               #等价于pillar.items

salt '*' saltutil.refresh_pillar   #刷新pillar值

salt '*' saltutil.sync_all         #刷新pillar值,与refresh_pillar操作类似,但范围更大

salt '*' sys.list_functions pillar #列出所有的pillar相关函数方法

salt '*' pillar.get xxx            #获取某项的值

salt '*' pillar.raw                #内存中获取









SLS(代表SaLt State文件)是Salt State系统的核心。SLS描述了系统的目标状态,由格式简单的数据构成。这经常被称作配置管理。


SLS文件使用YAML语言编写,其规则主要有以下三方面:


缩进:每个缩进级别由两个空格组成,相同缩进表示相同的层级,严禁使用TAB键


冒号:冒号+空格 用来分隔键和值,key通常以冒号结尾,而且后面有一个空格


短横:短横+空格 表示列表项,多个项使用同样的缩进级别表示同一列表的一部分,列表可以表示一个key的值。


如:

cd /srv/salt/base/ #定义环境的DNS文件

vim dns.sls
/etc/resolv.conf: #sls文件的ID,必须唯一
  file.managed: #模块.模块参数
    - source: salt://resolv.conf #salt://表示配置文件中定义的根目录,/srv/salt/base
    - user: root
    - group: root
    - mode: 644


cd /srv/salt/base/

cp /etc/resolv.conf ./

vim resolv.conf
nameserver 192.168.154.2


salt '*' state.sls dns #执行sls文件,也可以写到top.sls文件中再执行 

二、saltstack grains

grains概念

minion启动时,收集的一些系统信息,比如操作系统类型、网卡IP、内核版本、cpu架构等;

根据收集的信息可以做配置管理工作;

静态不实时信息;

支持自定义信息

salt 'agent.huangzp.com' grains.ls   //列出所有grains项目名字

salt 'agent.huangzp.com' grains.items  //列出所有grains项目以及值

1. 自定义编辑/etc/salt/grains  //minion端添加

role: nginx   //分号后空一格
env: test
myname: silen
mydomian: silen.com

2. 重启minion服务,查看结果

service salt-minion restart

salt ‘agent.huangzp.com’ grains.item role env myname mydomian   //item没有s

3. 使用-G,指定机器

salt -G mydomian:silen.com cmd.run 'w'


三、saltstack pillar


pillar概念

和grains不一样,是在master上定义;

针对minion定义的重要数据信息,如密码等,存在pillar中

可以定义变量

1. 配置自定义pillar

vim /etc/salt/master    //修改配置文件,找到:

pillar_roots:                //相当于key-value
base:                        //相当于二层key,空2格
- /srv/pillar                //相当于value,空4格,,指定主目录

去掉前面的#号


2. mkdir /srv/pillar              //创建目录

vim /srv/pillar/test.sls          //自定义test模块,名称不能是纯数字

conf: /etc/123.conf             //自定义conf位置目录
myname: silen                   //自定义

vim /srv/pillar/top.sls         //配置总入口配置文件,固定名称,否则test.sls不生效,指定客户端和同目录先的配置文件(test.sls也可直接放置在总配置文件中)内容:
base:                                   //固定格式开头
'agent':                            //作用的机器,空两格,agent是master识别出来的名字
- test                                 //模块名称,空四格,也该目录下,为test.sls


3. /etc/init.d/salt-master restart   //重启master

salt '*' saltutil.refresh_pillar    //刷新pillar配置来获取新的pillar状态,不需要重启

salt '*' pillar.itme conf             //查看conf

salt '*' pillar.itmes                  //查看所有


pillar同样可以用来作为salt的匹配对象,大写I如

salt -l  'conf:/etc/123.conf'  test.ping 

四、saltstack配置apache

1. master上:

vim /etc/salt/master   //找到file_roots

file_roots:
base:
- /srv/salt

#去掉注释


2. mkdir /srv/salt ;cd /srv/salt

vim /srv/salt/top.sls    //加入

base:
'*':
- apache

# 即在所有的客户机上执行apache模块的安装


3. vim /srv/salt/apache.sls //加入

apache-service:  //显示的名称,当使用该配置文件中的pkg.installed时,名称可以被调用
pkg.installed:   //模块名称.函数名
- names:      //如果只有个一个服务,则直接写成-name: httpd
- httpd
- httpd-devel
service.running:   //保证服务启动的函数
- name: httpd
- enable: True  //开机启动


重启 /etc/init.d/salt-master restart

刷新配置文件 salt '*' saltutil.refresh_pillar

4. 执行

salt 'agent' state.highstate




五、saltstack文件和目录管理

1. vim /srv/salt/filetest.sls,关键函数 file.managed

file_test:   //名称
file.managed:     //模块名.函数
- name: /tmp/huanzp.com     //放到对方机器的文件名字
- source: salt://test/123/1.txt   //来源,salt:// == /srv/salt/
- user: root
- group: root
- mode: 644


2. vim /srv/salt/top.sls   //加入

base:
'agent':
- filetest


3. 执行
mkdir -p /srv/salt/test/123
echo "test123456">/srv/salt/test/123/1.txt

salt 'agent' state.highstate   // 只要是涉及配置的,都执行这个语法


4. vim /srv/salt/testdir.sls,关键函数 file.resurce

file_dir:   //名称
file.recurse:     //模块名.函数
- name: /tmp/testdir     //放到对方机器的目录
- source: salt://test/123   //来源,salt:// == /srv/salt/
- user: root
- group: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True  //加上它之后,源删除文件或者目录也会删除


5. vim /srv/salt/top.sls   //加入

base:
'agent':
- testdir


6. 执行
salt 'agent' state.highstate

六、saltstack远程执行命令

1. vim /srv/salt/cmdtest.sls,关键函数cmd.run

cmd_test:
cmd.run:
- onlyif: test -f /tmp/3.txt     //onlyif表示条件,与unless相反
- names:
- touch /tmp/4.txt       //没有冒号
- mkdir /tmp/dir1
- user: root  //user 使用哪个用户去操作


2. vim /srv/salt/top.sls //加入
base:
'agent':
- cmdtest


3. 执行
salt 'agent' state.highstate


七、saltstack远程执行shell脚本

1. vim /srv/salt/shelltest.sls,关键函数cmd.script
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root


2. vim /srv/salt/test/1.sh
#! /bin/bash
touch /tmp/5.txt


3. vim /srv/salt/top.sls //加入
base:
'agent':
- shelltest


4. 执行
salt 'agent' state.highstate

八、saltstack管理任务计划
1. vim /srv/salt/crontest.sls,关键函数 cron.present;cron.present    //删除计划任务
cron_test:
cron.present:
- name: /bin/touch /tmp/6.txt
- user: root
- minute: '*'     //*需要用单引号引起来
- hour: 18
- daymonth: '*'
- dayweek: '*'


2. vim /srv/salt/top.sls //加入
base:
'agent':
- cronlltest


3. 执行
salt 'agent' state.highstate




九、saltstack几个常用的命令

cp.get_file //拷贝master上的文件到客户端

salt '*' cp.get_file salt://test/1.txt /tmp/001.txt


cp.get_dir //拷贝目录
salt '*' cp.get_dir salt://test/conf  /tmp/     //自动在客户端创建conf目录


salt-run manage.up    //显示存活的minion


salt '*' cmd.script salt://test/1.sh  //命令行下在master上执行shell脚本





阅读(665) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~