Saltstack
基本原理
Saltstack采用C/S模式,
Minion端在第一次启动时,会在/etc/salt/pki/minion/目录下生成自己的公钥和私钥。并将公钥发送给master。
[root@minion ~]# ls /etc/salt/pki/minion/
minion.pem minion.pub
Master端接收到minion的key值后会放在/etc/salt/pki/master/minions_pre/,当使用salt-key -a 命令认证该minion后,会将key转移到/etc/salt/pki/master/minions目录
[root@master ~]# ls /etc/salt/pki/master/minions_pre/
sate01
[root@master ~]# salt-key -a sate01
The following keys are going to be accepted:
Unaccepted Keys:
sate01
Proceed? [n/Y] y
Key for minion sate01 accepted
[root@master ~]# ls /etc/salt/pki/master/minions
sate01
Master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受消息的。
具体步骤如下:
1. Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc
2. salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。
3. master接收到命令后,将要执行的命令发送给客户端minion。
4. minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理
5. minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master
6. master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中
7. salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。
salt按照操作模式可以分为实时管理和配置管理:
远程执行,也可以称为实时管理: 通过执行命令来完成管理任务,优点就是实时性高,缺点就是无法跟踪,保存配置状 态;
配置管理,也可以称为状态管理: 通过编写特定的文件用来记录目标系统的配置状态,然后将这些受控主机会定期同步 这些配置状态信息;
基本使用&常用命令
salt
salt命令是最常用到的。Salt命令允许执行海量的函数库,并且可以针对特殊的minions和minions组为目标执行,包含命令选项,目标说明,要执行的函数,和函数的参数。
Usage: salt [options] '<target>' <function> [arguments]
例:
[root@master ~]# salt sate01 test.ping
[root@master ~]# salt sate01 cmd.run 'df -h'
[root@master ~]# salt '*' pkg.install vim
[root@master ~]# salt '*' network.interfaces
[root@master ~]# salt '*' sys.doc 查看所有函数
salt-run
是用于管理虚拟机的命令
Usage: salt-run [options]
salt-run manage.status ##查看所有minion状态
salt-run manage.down ##查看所有没在线minion
salt-run manged.up ##查看所有在线minion
salt-key
salt-key 密钥管理,通常在master端执行
salt-key [options]
salt-key -L ##查看所有minion-key
salt-key -a <key-name> ##接受某个minion-key
salt-key -d <key-name> ##删除某个minion-key
salt-key -A ##接受所有的minion-key
salt-key -D ##删除所有的minion-key
salt-cp
salt-cp 分发文件到minion上,不支持目录分发,通常在master运行
salt-cp [options] '<target>' SOURCE DEST
salt-cp '*' testfile.html /tmp
salt-cp 'test*' index.html /tmp/a.html
salt-master
salt-master master运行命令
salt-master [options]
salt-master ##前台运行master
salt-master -d ##后台运行master
salt-master -l debug ##前台debug输出
salt-minion
salt-minion minion运行命令
salt-minion [options]
salt-minion ##前台运行
salt-minion -d ##后台运行
salt-minion -l debug ##前台debug输出
salt-call
salt-call 该命令通常在minion上执行,minion自己执行可执行模块,不是通过master下发job
salt-call [options] <function> [arguments]
salt-call test.ping ##自己执行test.ping命令
salt-call cmd.run 'ifconfig' ##自己执行cmd.run函数