SaltStack 自动化运维

发布时间 2023-07-05 16:13:12作者: demoduan

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 远程执行结果的输出格式