1. 部署安装
sudo yum install -y epel-release
sudo yum install -y salt-minion
sudo yum install -y salt-master
salt-key常用参数
-a 接受指定key
-A 接受所有key
-D 删除所有key
-d 删除指定key
-r 拒绝指定key
-R 拒绝所有key
-y 命令行确认
常用命令
test.ping 测试连通性
cmd.run 运行shell命令
cmd.script 运行脚本
cp.get_file 拷贝文件
2. 分组管理
- 参数说明
G -- 针对 Grains 做单个匹配,例如:G@os:Ubuntu
E -- 针对 minion 针对正则表达式做匹配,例如:E@web\d+.(dev|qa|prod).loc
P -- 针对 Grains 做正则表达式匹配,例如:P@os:(RedHat|Fedora|CentOS)
L -- 针对 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com or bl*.domain.com
I -- 针对 Pillar 做单个匹配,例如:I@pdata:foobar
S -- 针对子网或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100
R -- 针对客户端范围做匹配,例如: R@%foo.bar
D -- Minion Data匹配,例如:D@key:value
- 举个栗子
[root@beibei.com salt]$ vim /etc/salt/master
nodegroups:
group1: '[email protected].*'
group2: '[email protected],192.168.10.195'
group3: '[email protected]/24'
group4: 'G@os:Centos'
[root@beibei.com salt]$ salt -N group4 test.ping
3. 文件系统
默认存放位置为/srv/salt
[[email protected] salt]$ vim /etc/salt/master
# file_roots:
# base:
# - /srv/salt/
将/srv/salt/etc/hosts
文件拷贝至目标及其的/tmp/hosts
state.highstate
只执行top函数state.sls
[root@beibei.com salt]$ pwd
/srv/salt
[root@beibei.com salt]$ cat top.sls
base:
'192.168.10.105':
- hosts
[root@beibei.com salt]$ cat hosts.sls
/tmp/hosts:
file.managed:
- source: salt://etc/hosts
- user: root
- mode: 600
[root@beibei.com salt]$ salt '*' state.highstate
[root@beibei.com salt]$ salt '*' state.sls hosts
[root@beibei.com salt]$ salt '*' state.sls hosts.hosts
4. grains
grains和puppet的facter一样,负责采集客户端的一些基本信息,纯静态,只有客户端启动时才会向master端发送数据,一般用来采集静态属性
-
获取所有的grains值(minion的全部静态变量):
salt '*' grains.items
-
获取单个grains的值:grains.get获取的是value,grains.item获取的是keys:value
[root@beibei.com ~]$ salt '192.168.10.105' grains.get os 192.168.10.105: CentOS [root@beibei.com ~]$ salt '192.168.10.105' grains.item os 192.168.10.105: ---------- os: CentOS
-
**显示grains的变量名称:
salt '*' grains.ls**
-
分组管理
minion配置,重启minion后生效
[root@erhui minion.d]# vim shencan.conf grains: roles: nginx [root@beibei.com ~]$ salt -G roles:nginx test.ping 192.168.10.105: True
-
自定义grains
配置minion自动发送字段信息,重启minion后生效
[root@erhui minion.d]# cat /etc/salt/minion
default_include: minion.d/*.conf
master: 192.168.10.29
id: 192.168.10.105
role: erhui
[root@erhui minion.d]# cat /etc/salt/minion.d/shencan.conf
grains:
DF: 2
shencan: 5
cpis:
- a
- b
shencan.net:
+++++++++++++++++++++
---------------------
*********************
[root@beibei.com ~]$ salt '192.168.10.105' grains.item DF
[root@beibei.com ~]$ salt '192.168.10.105' grains.item shencan.net
[root@beibei.com ~]$ salt '192.168.10.105' grains.item cpis
- grains默认配置文件(重启服务后生效,也可以在master端执行
salt '*' saltutil.sync_grains
生效)
[root@erhui minion.d]# cat /etc/salt/grains
nodes: zabbix
[root@beibei.com ~]$ salt -G nodes:zabbix test.ping
192.168.10.105:
True
5. pillar
grains和pillar区别
- grains存储的是静态、不常变化的内容,pillar则相反
- grains是存储在minion本地,而pillar存储在master本地
- minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改
配置pillar
[root@beibei.com ~]$ cat /etc/salt/master | grep ^[a-Z]
pillar_opts: True
[root@beibei.com ~]$ /etc/init.d/salt-master restart
[root@beibei.com ~]$ mkdir /srv/pillar/
[root@beibei.com ~]$ vim /srv/pillar/top.sls
## 编辑pillar 的 top.sls 文件添加下面内容
base :
'*':
- data
- git
dev :
'os:CentOs':
- git
vim /srv/pillar/data/init.sls
## 添加下面内容
roles:webserver
vim /srv/pillar/git.sls
## 添加下面内容
{% if grains['os'] == 'CentOs' %}
git: git
{% elif grains['os'] == 'Debian' %}
git: git-core
{% endif %}
[root@beibei.com ~]$ salt '192.168.10.105' pillar.data