salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。
不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。
Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。
参考学习:https://www.cnblogs.com/pyyu/p/9465608.html
在远程执行系统中,salt用python通过函数调用完成任务。
运行salt依赖包
python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2
语法规则
大小写敏感
使用缩进表示层级关系
缩进时禁止tab键,只能空格
缩进的空格数不重要,相同层级的元素左侧对其即可
# 表示注释行
yaml支持的数据结构
对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict 冒号表示 key: value key冒号后必须有
数组: 一组按次序排列的值,又称为序列sequence 列表list 短横线 - list1
纯量: 单个不可再分的值
对象:键值对
yaml
first_key:
second_key:second_value
python
{
'first_key':{
'second_key':'second_value',
}
}
环境准备:
准备2台机器:
192.168.58.137 master
192.168.58.138 minion1
minion可以由多台机器,这里拿一台机器演示
master和minion 分别需要安装不同的软件包
master上:
yum install salt-master -y
minions上:
yum install salt-minion -y
master和minion1配置hosts文件
[root@master ~]# vi /etc/hosts
192.168.58.137 master
192.168.58.138 minion1
#通过Xshell左下角全部会话口:ping master 或者 ping minion1
#有回应表示能ping通,表示DNS解析都过了
iptables -F 将三台机器关闭防火墙服务
systemctl disable firewalld 永久关闭防火墙
修改配置前先备份:master minion
[root@minionl ~]# cp /etc/salt/minion /etc/salt/minion.bck
[root@master ~]# cp /etc/salt/master /etc/salt/master.bck
修改salt-master以及salt-minion的配置文件
minion1配置修改如下
master: master
master_port: 4506
user: root
id: s21minion1
acceptance_wait_time: 10
log_file: /var/log/salt/minion
#master: master #填写master的主机名,
#master_port: 4506 #填写master接收响应的端口号
#user: root #以root执行
#id: s21minion2 #这个id是,master在管理minion界面中,显示的名字
master修改如下
interface: 0.0.0.0
publish_port: 4505
user: root
worker_threads: 5
ret_port: 4506
pidfile: /var/run/salt-master.pid
log_file: /var/log/salt/master
systemctl start salt-master
systemctl start salt-minion
salt-key -L #列出master管控的所有key信息
Accepted Keys: #已接收的密钥
Denied Keys: #拒绝密钥
Unaccepted Keys: #发现密钥
s21minion1
Rejected Keys:
在master上敲打: salt-key -f s21minion1
在minion上敲打 : salt-call --local key.finger
[root@master ~]# salt-key -f s21minion1
Unaccepted Keys:
s21minion1: fd:27:e6:20:7b:32:74:64:39:fb:9e:d8:de:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:76:39:d3:c2:b4:c8:67:eb
[root@minionl ~]# salt-call --local key.finger
local:
fd:27:e6:20:7b:32:74:64:39:fb:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:c2:b4:c8:67:eb
#密钥都一样表示没有问题
salt-key -A #接收所有未被管控的秘钥
[root@master ~]# salt-key -A
[root@master ~]# salt "*" test.ping
s21minion1:
True
#返回True表示存活
#转换json展示:
[root@master ~]# salt "*" --out=json test.ping
{
"s21minion1": true
}
[root@master ~]# salt "*" --summary cmd.run "hostname"
s21minion1:
minionl
#cmd是超级模块,所有shell命令都能执行
#返回所有minion的主机名字.
[root@master ~]# salt "*" cmd.run "yum install nginx -y"
#cmd是超级模块,所有shell命令都能执行
[root@master ~]# salt "*" cmd.run "yum install nginx -y"
#浏览器访问http://192.168.58.138/ 有响应页面,成功
[root@master ~]# salt "*" pkg.version "nginx"
s21minion1:
1:1.12.2-3.el7
[root@master ~]# salt "*" service.stop "nginx"
s21minion1:
True
[root@master 192.168.11.72 ~]$salt 'slave' grains.items
[root@master ~]# salt "s21minion1" grains.item fqdn_ip4
s21minion1:
----------
fqdn_ip4:
- 192.168.58.138
[root@master ~]# salt "s21minion1" grains.item fqdn_ip4 --out=json
#生成json格式
{
"s21minion1": {
"fqdn_ip4": [
"192.168.58.138"
]
}
}
import salt.client
local = salt.client.LocalClient()
local.cmd("s21minion1","cmd.run",["touch /tmp/heihei"])
[root@minionl ~]# cd /tmp
[root@minionl tmp]# ls
heihei vmware-root
#可以看到创建heihei文件
原文:https://www.cnblogs.com/xujunkai/p/11567016.html