目录

Saltstack使用说明

简介

Salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。

salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等。

架构

  • 一种基于C/S架构的服务器基础架构集中化管理平台,管理端称为master,客户端称为minion
  • 具备配置管理、远程执行、监控等功能 基于python语言开发
  • 结合轻量级的消息队列软件ZeroMQ与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、 python-msgpack 和 PyYAML 等)构建

saltstack一般都是采用Master/Minion来进行自动化运维管理的,下面便是Master/Minion的架构图

https://tc.ctq6.cn/tc/20230506073759.png

minion:客户端安装组件,配置好之后会主动去连接master,从master端得到资源状态信息,并同步资源管理信息

master:服务端安装组件,运行在主服务器上,负责salt命令运行和资源的管理

zeroMQ:用于在minion端和master端建立系统通信桥梁

特点

1、部署简单方便

2、主从集中化管理

3、配置简单、功能强大、扩展性强

4、主控端(master)和被控端(minion)基于证书认证,安全可靠

5、支持API自定义模块,可通过Python扩展

运行模式

  • local:本地单点
  • Master/Minion:通过server/client的方式进行管理,效率很高
  • Salt SSH:通过SSH方式进行管理(类似于ansible),效率相对来说比较低

批量操作

  • master与minion之间通过Zero进行消息传递,使用ZeroMQ进行消息传递,以及Zero-MQ的发布订阅模式,连接方式包括tcp、ipc
  • master将要执行的操作或命令发送给minion,minion从消息总线上收到要进行的操作或要处理的命令,之后交给minion_handle_aes处理
  • 之后minion_handle_aes发起一个本地线程去调用cmdmod去执行操作或命令,线程执行完毕后调用minion.return_pub方法,将执行结果通过消息总线返回给master
  • master接收到客户端返回的结果,调用master._handle_aes方法,将结果写进文件中
  • salt.client.LocalClient.cmd_cli通过轮询获取执行结果,将结果输出到终端

与ansible区别

saltstack与ansible都作为自动化运维工具,能够对目标主机实现配置管理批量操作等功能,满足企业的自动化运维管理,那么他们之间有什么异同之处呢?

相同点:

  1. 都是基于python开发,可以部署到不同的系统环境中
  2. 具有较好的二次开发性,便于实现个性定制
  3. ansible的playbook和saltstack的state都是遵循yaml格式
  4. 执行返回结果都是json格式,容易理解

不同点:

  • saltstack的master与minion之间是通过ZeroMQ来传输数据,而ansible是通过标准SSH进行数据传输,saltstack的响应速度要比ansible的要快
  • ansible与saltstack都需要和远程主机进行连接,所以最大的问题就是MITM攻击(通过伪装成master主机和远程主机进行通信,从而进行攻击)
  • saltstack使用ZeroMQ进行数据传输,ZeroMQ本身数据传输不支持加密,saltstack可以通过使用AES数据加密方法来对数据进行加密传输,但minion以守护进程的方式运行在远程主机,容易暴露
  • ansible则使用标准SSH进行连接,不需要在远程主机上启动守护进程,而且标准SSH数据传输就是加密传输,安全方面ansible要更胜一筹
  • ansible和远程主机之间都是通过标准SSH进行连接的,远程主机只需要运行SSH进程就可以进行操作,而SSH是机房主机中都会安装和启动的进程,运维成本低于saltstack,使用起来要比saltstack简单的多
  • saltstack的state和ansible的playbook都遵循YAML格式,但是Ansible的Playbook语法要比SaltStack的State语法具有更好的可读性

认证机制

minion在第一次启动时,会在/etc/salt/pki/minion(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和minion.pub(public key),然后将minion.pub 发送给master

master收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下将存放以minion id命名的public key,以此来建立可靠且加密的通信连接,同时通过消息队列ZeronMQ在master和minion之间建立消息发布通道

master上执行某条指令通过队列下发到各个minions去执行,并返回结果

saltstack的安装与配置