SaltStack (salt)是一种新的基础设施管理方法开发软件、简单易部署、可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位。SaltStack 提供了一个动态基础设施通信总线用于编排、远程执行、配置管理等
SaltStack 是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于 Python 语言实现,结合轻量级消息队列(ZeroMQ)与 Python 第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack 和 PyYAML等)构建。
# salt docs
https://docs.saltstack.com/en/latest/
SaltStack 特性
(1)、部署简单、方便
(2)、支持大部分 UNIX/Linux 及 Windows 环境
(3)、主从集中化管理
(4)、配置简单、功能强大、扩展性强
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠
(6)、支持API及自定义模块,可通过 Python 轻松扩展
SaltStack 服务架构(C/S)
在 SaltStack 架构中服务器端叫 Master,客户端叫 Minion
部署环境:Debian 11
官网 Debian 下载文档:https://docs.saltproject.io/salt/install-guide/en/latest/topics/install-by-operating-system/debian.html#install-debian
# 配置 apt source


# 安装 salt
root@master:~# apt-get update
root@master:~# apt-get -y install salt-master salt-ssh salt-syndic salt-cloud salt-api
root@minion:~# apt-get update
root@minion:~# apt-get -y install salt-minion salt-ssh salt-syndic salt-cloud salt-api
# 启动 salt 服务
root@master:~# systemctl enable salt-master salt-syndic salt-api --now
root@minion:~# systemctl enable salt-minion salt-syndic salt-api --now
# 查看监听端口和 sal-key
# 由于 salt 的默认管理方式不是 ssh,所以 salt 关于此套 C/S 架构有专门的实现安全通信的方法,salt-key 就是实现 salt 和 minion 安全通信的密钥


# salt-minion 配置认证
# salt-minion 的日志在 /var/log/salt/minion


# 在配置文件中修改 master 看到的 minion 名字


# key 的4种定义
- AcceptedKeys: 表示获得 salt 认可的 key
- DeniedKeys: 表示的 salt 拒绝的 key(salt 自动操作产生的结果)
- UnacceptedKeys: 表示未获得 salt 认可的 key
- RejectedKeys: salt 吊销的 key(salt 手工操作产生的结果)
# salt-key 的目录树

# 查看 key 的指纹,只有 key 一致时 master 和 minion 才可以通信


# remove key
# 删除旧 id 对应的 key , -d 表示删除单个 key,-y 表示确认删除


# 删除全部 key
root@master:~# salt-key -D -y
# 拒绝 minion 所有的 key
root@master:~# salt-key -R -y
# 恢复拒绝的 key
root@master:~# rm -rf /etc/salt/pki/master/minions_rejected/*
# 接受 minion 的 key
# -a 参数表示接受单个 key
# -A 参数表示接受所有的 key


# master 自动接受 minion key

# key 的黑白名单设置
# autosign_file 表示白名单,autoreject_file 表示黑名单

# salt-adhoc 测试
# salt是核心命令,'*' 表示所有的target,匹配所有被管理主机。test.ping 表示 salt 远程执行的一个模块中的一个用法,在这里面就表示的是 test (module) 模块里面的 ping



# salt 的命令结构
salt 参数 执行目标 salt模块的函数 远程执行的参数
例如:

# salt 一次性进行多次远程执行命令

# 列出 salt 命令的所有模块
root@master:~# salt debian11 sys.list_modules
# 列出某个模块下的函数 (以 cmd 模块为例)

# 设置 salt 远程执行结果的输出格式
