saltstack由浅入深
1. saltstack功能
远程执行
配置管理
云管理
2. 对比软件
puppet ruby写的
ansible python写的
3. 官方网站
saltstack.com官方网站
www.saltstack.cn中文网站
https://www.unixhot.com/docs/saltstack/
4. 四种运行方式
1. local
2. minion/master C/S架构
3. Syndic
4. Salt SSH:不需要安装minion
5. saltstack的安装方法
repo.saltstack.com,在此网站上选择你要安装的版本,并选择你的操作系统。
Run the following commands to install the SaltStack repository and key: sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-2017.7-1.el7.noarch.rpm Run sudo yum clean expire-cache Install the salt-minion, salt-master, or other Salt components: sudo yum install salt-master sudo yum install salt-minion sudo yum install salt-ssh sudo yum install salt-syndic sudo yum install salt-cloud sudo yum install salt-api (Upgrade only) Restart all upgraded services, for example: sudo systemctl restart salt-minion
如果有的网络问题,可以配置
centos6
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-6.noarch.rpm
然后执行yum install salt-minion -y
centos7
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm
然后执行yum install salt-minion -y
报错:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
[root@localhost ~]# ping www.baidu.com
解决方法:
https://www.cnblogs.com/dadong616/p/5062727.html
其它安装方法:
[root@linux-node1 ~]# cat /etc/yum.repos.d/saltstack.repo [saltstack-repo] name=SaltStack repo for RHEL/CentOS $releasever baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest enabled=1 gpgcheck=0
6. salt-minion的配置文件需要配置一下master参数,然后启动服务。
master: 192.168.1.130
id: 192.168.1.29
/etc/init.d/salt-minion start
systemctl start salt-minion
7. master与minion如何进行认证的?这个过程要熟悉。
1. minion在第一次启动的时候,会创建一个pki目录,会master和minion目录,还会有minion.pem和minion.pub。
2.
3. salt-key -a minion-name 添加某个主机key
4. salt-key -L 查看所有的主机
5. salt-key -d minion-name 删除某个主机key
6. salt-key -A 添加所有主机key
7. 在master和minion上比较某台主机的密钥是否一致。
master: salt-key -f minion-one
minion: salt-call --local key.finger
两个值一致,说明密钥正确。
8. master自动签发
修改/etc/salt/master文件中的: auto_accept: True
8. salt命令
1. 语法
• salt [options] '<target>' <function> [arguments]
• target指的是在哪些Minion上执行,如果在全部Minion上运行,可以采用通配符 '*’
1. 全局匹配
* 匹配所有字符
? 匹配任意一个字符,不能为空
[] 匹配中括号中的任意一个字符
salt '*' test.ping
salt 'minion-?' test.ping
salt "[a-z]inion-one" test.ping
2. 正则表达式
salt -E '^Minion.*' test.ping #主机名以Minion开头
3. 列表匹配
salt -L “Minion,Minion1” test.ping
4. 组匹配
在/etc/salt/master配置文件中,填写内容如下:

也可以创建文件/etc/salt/master.d/nodegroups.conf.
salt -N groups test.ping
5. Grians匹配
salt -G 'os:CentOS' test.ping
salt "minion-one" grains.items
os:CentOS(默认存在)是Grains的键值对,数据以yaml保存在minion上,可在minion端直接编辑/etc/salt/grains,yaml格式。
6. 复合匹配
salt -C 'G@os:CentOS or L@Minion' test.ping
7. Pillar值匹配
salt -I 'key:value' test.ping
/etc/salt/master设置pillar_roots,数据以yaml保存在Master上
8. CIDR匹配(网段匹配)
salt -S '10.252.137.0/24' test.ping
9. saltstack与ZeroMQ
1. 发布与订阅模式
saltstack master运行两个网络服务,其中一个是ZeroMQ PUB系统,使用的端口是4505。
所有的minion都连接master的4505端口。
4505用来发送消息。
4506用来接收返回消息。
2. 请求与响应模式
3. 题外:安装一个包,查看salt-master的名称。
yum install -y python-setproctitle
重启一下salt-master
再查看ps -ef | grep salt
10. 模块与功能
列出所有可用模块
salt '随便一台主机名' sys.list_modules
查看模块所有功能
salt '随便一台主机名' sys.list_functions 模块名
查看模块用法
salt '随便一台主机名' sys.doc 模块名
salt '随便一台主机名' sys.doc 模块名.方法
内置模块
http://blog.51cto.com/davideylee/1571951
远程命令执行模块cmd
salt "*" cmd.run "ifconfig"
安装包管理模块pkg
安装:salt "*" pkg.install "httpd"
查看:salt "*" pkg.version "httpd" salt '192.168.1.52' pkg.version 'elasticsearch'
删除:salt "*" pkg.remove "httpd"
管理服务模块service
启动:salt "*" service.start httpd
停止:salt "*" service.stop httpd
查看:salt "*" service.status httpd
文件管理模块file
查看:salt "*" file.stats /etc/yum.conf
修改:salt "*" file.chown /etc/passwd root root
用户管理模块
创建:salt "*" user.add "mysql"
删除:salt "*" user.delete "mysql"
查看:salt "*" user.info mysql
11. 什么是yaml
• YAML:YAML Ain't Markup Language
• YAML的结构通过空格来展示
• 项目使用"-"来表示
• 键值对使用":"来表示
• Master和Minion的配置文件均采用YAML语法
• YAML使用一个固定的缩进风格表示数据层级结构关
• 一般每个缩进级别由两个空格组成
• 注意不要使用tab
• 缩进是初学者容易出错的地方之一
• YAML的键值对采用冒号分隔
• YAML键值对对应python的字典
• YAML表示形式
name: test
或
name:
test
• Python字典
{'name': 'test'}
• 字典可以嵌套
hosts:
name: test
• 字典表示形式为
{
'hosts': {
'name': 'test'
}
}
• 列表项使用一个短横杠加一个空格
- test1
- test2
• 列表可以作为一个键值对的value
pkg-http:
- httpd
- php
• Python语法
{'pkg-http': ['httpd', 'php']}
12. Grains基础
• Grains是saltstack最重要的组件之一 • 存储minion端的基本信息,这些信息一般都是静态的,如CPU、内核、操作系统等 • Grains存储在minion本地 • 管理员可以在minion端进行grains值的修改,如增加、删除等
Grains的作用:
1. 资产管理。信息查询。
salt '*' grains.ls 列出所有的keys
salt '*' grains.items
结果如下:
192.168.1.6:
----------
SSDs:
biosreleasedate:
10/18/2011
biosversion:
6.1.0
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
- cx8
- apic
- mtrr
- pge
- mca
- cmov
- pat
- pse36
- clflush
- dts
- acpi
- mmx
- fxsr
- sse
- sse2
- ss
- ht
- tm
- pbe
- syscall
- nx
- pdpe1gb
- rdtscp
- lm
- constant_tsc
- arch_perfmon
- pebs
- bts
- rep_good
- xtopology
- nonstop_tsc
- aperfmperf
- pni
- pclmulqdq
- dtes64
- monitor
- ds_cpl
- vmx
- smx
- est
- tm2
- ssse3
- cx16
- xtpr
- pdcm
- dca
- sse4_1
- sse4_2
- popcnt
- aes
- lahf_lm
- arat
- dts
- tpr_shadow
- vnmi
- flexpriority
- ept
- vpid
cpu_model:
Intel(R) Xeon(R) CPU E5606 @ 2.13GHz
cpuarch:
x86_64
domain:
zhenpin.com
fqdn:
b.zhenpin.com
fqdn_ip4:
- 119.254.106.54
fqdn_ip6:
gpus:
|_
----------
model:
MGA G200eW WPCM450
vendor:
unknown
host:
b
hwaddr_interfaces:
----------
em1:
d4:be:d9:b1:44:e3
em2:
d4:be:d9:b1:44:e5
em3:
d4:be:d9:b1:44:e7
em4:
d4:be:d9:b1:44:e9
lo:
00:00:00:00:00:00
virbr0:
52:54:00:d4:42:c9
virbr0-nic:
52:54:00:d4:42:c9
id:
192.168.1.6
ip4_interfaces:
----------
em1:
- 192.168.1.6
em2:
- 172.168.1.2
em3:
- 119.254.106.54
em4:
lo:
- 127.0.0.1
virbr0:
- 192.168.122.1
virbr0-nic:
ip6_interfaces:
----------
em1:
em2:
em3:
em4:
lo:
virbr0:
virbr0-nic:
ip_interfaces:
----------
em1:
- 192.168.1.6
em2:
- 172.168.1.2
em3:
- 119.254.106.54
em4:
lo:
- 127.0.0.1
virbr0:
- 192.168.122.1
virbr0-nic:
ipv4:
- 119.254.106.54
- 127.0.0.1
- 172.168.1.2
- 192.168.1.6
- 192.168.122.1
ipv6:
kernel:
Linux
kernelrelease:
2.6.32-279.14.1.el6.x86_64
locale_info:
----------
defaultencoding:
UTF8
defaultlanguage:
zh_CN
localhost:
zpdc.zhenpin.com
lsb_distrib_codename:
Final
lsb_distrib_id:
CentOS
lsb_distrib_release:
6.3
machine_id:
2248cdccd5b13b32fc845bdb00000029
manufacturer:
Dell Inc.
master:
192.168.1.130
mem_total:
24013
nodename:
zpdc.zhenpin.com
num_cpus:
4
num_gpus:
1
os:
CentOS
os_family:
RedHat
osarch:
x86_64
oscodename:
Final
osfinger:
CentOS-6
osfullname:
CentOS
osmajorrelease:
6
osrelease:
6.3
osrelease_info:
- 6
- 3
path:
/sbin:/usr/sbin:/bin:/usr/bin
productname:
PowerEdge R610
ps:
ps -efH
pythonexecutable:
/usr/bin/python
pythonpath:
- /usr/bin
- /usr/lib64/python26.zip
- /usr/lib64/python2.6
- /usr/lib64/python2.6/plat-linux2
- /usr/lib64/python2.6/lib-tk
- /usr/lib64/python2.6/lib-old
- /usr/lib64/python2.6/lib-dynload
- /usr/lib64/python2.6/site-packages
- /usr/lib64/python2.6/site-packages/gtk-2.0
- /usr/lib/python2.6/site-packages
- /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
pythonversion:
- 2
- 6
- 6
- final
- 0
saltpath:
/usr/lib/python2.6/site-packages/salt
saltversion:
2014.7.0
saltversioninfo:
- 2014
- 7
- 0
- 0
selinux:
----------
enabled:
False
enforced:
Disabled
serialnumber:
GFM393X
server_id:
1067966929
shell:
/bin/bash
virtual:
physical
zmqversion:
3.2.4 salt '192.168.1.6' grains.item os
2. 用于目标选择。
salt -G 'os:CentOS' cmd.run 'ifconfig'
通过minion定义grains [root@web1 ~]# vim /etc/salt/minion grains: web: apache [root@web1 ~]# systemctl restart salt-minion.service [root@web2 ~]# vim /etc/salt/minion grains: web: nginx [root@web2 ~]# systemctl restart salt-minion.service [root@sm ~]# salt '*' saltutil.sync_grains web1: db1: cache: web2: db2: [root@sm ~]# salt -G 'web:apache' test.ping web1: True [root@sm ~]# salt -G 'web:nginx' test.ping web2: True [root@sm ~]# salt 'web1' grains.item web web1: ---------- web: apache [root@sm ~]# salt 'web2' grains.item web web2: ---------- web: nginx
注意1:生产环境不建议直接修改minion配置文件,建议使用/etc/salt/grains文件(在minion上)。内容如下:

添加完以后,重启一下minion,否则不生效。
/etc/init.d/salt-minion restart
也可以使用命令,直接刷新,不用重启minion。
sudo salt '192.168.1.6' saltutil.sync_grains
注意2:如果我有多个grains标签,那么如何查找呢?
sudo salt -C 'G@os:CentOS and G@name:yangjianbo' cmd.run 'ifconfig'
注意3:top.sls中也可以使用grains。
base:
'cloud:openstack':
- match: grain
- zabbix.init
3. 开发一个Grains
python.写一个python脚本,返回一个字典就可以了。
cd /srv/salt
mkdir _grains
cd _grains
编写一个python脚本,内容如下:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def my_grains():
grains = {}
grains['a']= 'openstack'
grains['b']= 'haha'
return grains
然后从master同步到minion,sudo salt '192.168.1.6' saltutil.sync_grains
这个文件会放到minion的/var/cache/salt/minion/extmods/grains。
4. grains的优先级
1. 系统自带
2. grains文件写的
3. minion配置文件写的
4. 自定义写的
13. Pillar基础
1. Pillar数据是动态的。给特定的minion指定特定的数据。只能指定的minion自己能看到自己的数据。
2.
14. saltstack远程执行-指定目标
1. 结构
命令:salt
目标:'*'
模块:cmd.run 自带150多模块 自己写模块
返回:执行后结果返回,returnners
2. 目标
与minion ID有关 通配符 列表匹配 正则匹配
与minion ID无关 grains 组匹配 混合匹配
15. saltstack远程执行-执行模块
1. 模块位置: /usr/lib/python2.6/site-packages/salt/modules
2. network模块
1. salt '*' network.active_tcp 显示活动的TCP连接数
3. service模块
1. salt '*' service.get_all 显示所有的服务
4. cp模块
1. sudo salt-cp -L '192.168.1.164,192.168.1.165' /home/scripts/iptables_script.sh /home/
5. state模块
16. saltstack远程执行-返回程序
1. 返回到mysql
安装Mysql-python
安装mysql数据库
17. 配置管理
13. 实战操作
sudo salt -L "192.168.1.46" cmd.run " rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-agent-3.0.4-1.el6.x86_64.rpm"
Server=127.0.0.1
sudo salt -L "192.168.1.46" cmd.run "sed -i 's#Server=127.0.0.1#Server=192.168.1.29#g' /etc/zabbix/zabbix_agentd.conf"
ServerActive=127.0.0.1
sudo salt -L "192.168.1.46" cmd.run "sed -i 's#ServerActive=127.0.0.1#ServerActive=192.168.1.29#g' /etc/zabbix/zabbix_agentd.conf"
Hostname=Zabbix server
sudo salt -L "192.168.1.46" cmd.run "sed -i 's#Hostname=Zabbix server#Hostname=192168146#g' /etc/zabbix/zabbix_agentd.conf"
sudo salt -L "192.168.1.47,192.168.1.48" cmd.run "/etc/init.d/zabbix-agent start"
15. top.sls的使用
base:
'*':
- core
- edit
16. saltstack的master配置文件,修改如下内容:
##### Node Groups ##### ########################################## # Node groups allow for logical groupings of minion nodes. A group consists of a group # name and a compound target. nodegroups: # group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com' # group2: 'G@os:Debian and foo.domain.com' test1: S@192.168.1.115 home: L@192.168.1.51,192.168.1.192.168.1.216,192.168.1.81,192.168.1.82,192.168.1.83,192.168.1.84 search: L@192.168.1.70,192.168.1.40,192.168.1.168,192.168.1.207,192.168.1.129,192.168.1.188 tls: L@192.168.1.166,192.168.1.211,192.168.1.188,192.168.1.182 cart: L@192.168.1.196,192.168.1.208,192.168.1.85,192.168.1.86 order: L@192.168.1.209,192.168.1.87,192.168.1.88,192.168.1.89 product: L@192.168.1.228,192.168.1.193,192.168.1.188,192.168.1.179 activity: L@192.168.1.90,192.168.1.91,192.168.1.190,192.168.1.25 uc: L@192.168.1.225,192.168.1.214,192.168.1.92,192.168.1.93 pay: L@192.168.1.114,192.168.1.195,192.168.1.94,192.168.1.95 ppt: L@192.168.1.215,192.168.1.41,192.168.1.96,192.168.1.97 home_t: L@192.168.1.128,192.168.1.169,192.168.1.135,192.168.1.78 search_t: L@192.168.1.128,192.168.1.169,192.168.1.135,192.168.1.78 tls_t: L@192.168.1.128,192.168.135,192.168.1.78 cart_t: L@192.168.1.62,192.168.1.173,192.168.1.124,192.168.1.79 order_t: L@192.168.1.62,192.168.1.173,192.168.1.124,192.168.1.79 product_t: L@192.168.1.62,192.168.1.173,192.168.1.124,192.168.1.79 activity_t: L@192.168.1.169,192.168.1.128,192.168.1.135,192.168.1.78 uc_t: L@192.168.1.135,192.168.1.128,192.168.1.169,192.168.1.78 pay_t: L@192.168.1.173,192.168.1.62,192.168.1.124,192.168.1.79 ppt_t: L@192.168.1.173,192.168.1.62,192.168.1.124,192.168.1.79
修改完成后,可以通过-n nodegroups名称来指定计算机。
17. saltstack批量安装zabbix
sudo salt -L '192.168.1.54' state.sls zabbix.init
18. saltstack报错
The key glob '192.168.1.231' does not match any unaccepted keys.
salt-key -d 192.168.1.231

浙公网安备 33010602011771号