saltstack
-
salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。
不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。
Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。
1.saltstack的运行方式
- Local 本地运行,交付管理
- Master/Minion <<< 常用方式
- Salt SSH 不需要客户端
参考学习:https://www.cnblogs.com/pyyu/p/9465608.html
2.salt部署基本架构
- 在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。
- salt架构中的一种就是master > minion。
-
在远程执行系统中,salt用python通过函数调用完成任务。
运行salt依赖包
python zeromq pyzmp pycrypto msgpack-python yaml jinja2
3.YAML讲解
语法规则
大小写敏感
使用缩进表示层级关系
缩进时禁止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',
}
}
4.代码实现:
-
环境准备:
准备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 永久关闭防火墙
- 清空vim --->dG
-
修改配置前先备份: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
- 分别启动minion和master
systemctl start salt-master
systemctl start salt-minion
- 通过秘钥检查,master是否管理了 minion
salt-key -L #列出master管控的所有key信息
Accepted Keys: #已接收的密钥
Denied Keys: #拒绝密钥
Unaccepted Keys: #发现密钥
s21minion1
Rejected Keys:
- 检查master上的秘钥和minion是否一致
在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
#密钥都一样表示没有问题
- 在master上接收,所有的秘钥
salt-key -A #接收所有未被管控的秘钥
[root@master ~]# salt-key -A
- salt的第一个命令,验证minion机器是否存活
[root@master ~]# salt "*" test.ping
s21minion1:
True
#返回True表示存活
#转换json展示:
[root@master ~]# salt "*" --out=json test.ping
{
"s21minion1": true
}
- 列出salt命令的详细信息
[root@master ~]# salt "*" --summary cmd.run "hostname"
s21minion1:
minionl
#cmd是超级模块,所有shell命令都能执行
#返回所有minion的主机名字.
- 通过操作master远程安装Nginx
[root@master ~]# salt "*" cmd.run "yum install nginx -y"
#cmd是超级模块,所有shell命令都能执行
- 通过操作master远程启动Nginx
[root@master ~]# salt "*" cmd.run "yum install nginx -y"
#浏览器访问http://192.168.58.138/ 有响应页面,成功
- 查看minion的 Nginx的版本号
[root@master ~]# salt "*" pkg.version "nginx"
s21minion1:
1:1.12.2-3.el7
- 关闭Ngnix
[root@master ~]# salt "*" service.stop "nginx"
s21minion1:
True
- Grains人为是描述minion本身固有的静态属性数据,列出主机所有Grains数据
[root@master 192.168.11.72 ~]$salt 'slave' grains.items
- 返回s21mimion1的ip
[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"
]
}
}
5.在python中执行salt
import salt.client
local = salt.client.LocalClient()
local.cmd("s21minion1","cmd.run",["touch /tmp/heihei"])
- 此时在s21minion1输入:
[root@minionl ~]# cd /tmp
[root@minionl tmp]# ls
heihei vmware-root
#可以看到创建heihei文件