SaltStack安装及入门
简介
SaltStack简称salt,是一个配置管理工具,类似Ansible、Chef和Puppet,可以用脚本批量操作多台机器。有如下几个特点:
- 部署简单、方便;
- 支持大部分UNIX/Linux及Windows环境;
- 主从集中化管理;
- 配置简单、功能强大、扩展性强;
- 主控端(master)和被控端(minion)基于证书认证,安全可靠;
- 支持API及自定义模块,可通过Python轻松扩展。
可以批量远程执行命令、修改配置文件、部署软件、定时执行任务…只有你想不到,没有他做不到。
SlatStack是C/S结构[[1]],分为服务器(master)和客户端(minion),服务器也是一个客户端。
安装
通过包管理器方式安装
sudo add-apt-repository ppa:saltstack/salt
sudo apt-get update
sudo apt-get install salt-master salt-minion salt-ssh salt-syndic
通过源码方式安装
curl -o install_salt.sh -L https://bootstrap.saltstack.com
sudo sh install_salt.sh git v0.16.4
基本配置及介绍
/etc/salt/master
是master的配置文件;/etc/salt/minion
是minion的配置文件;/etc/init.d/salt-xx start/stop/restart
可以执行服务的启停;- 其采用他TCP 4505/4506两个端口通信,4505发,4506收;
- 默认的log的地址是
/var/log/salt/minion(master)
,默认的log_level是warning,可以通过配置文件修改;
入门
备注: 由于几乎所有的操作均需要以root用户运行,可以直接切换到root用户
启动master服务
在master机器上以root权限执行/etc/init.d/salt-master start
,当然如果已经不小心启动了,可以尝试采用/etc/init.d/salt-master restart
;
如果要检查,可以尝试执行salt-call cmd.run 'ifconfig'
,如果能够正常执行,则启动正常(里面的内容会不一样):
local:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8046551 errors:0 dropped:0 overruns:0 frame:0
TX packets:8046551 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:861624168 (861.6 MB) TX bytes:861624168 (861.6 MB)
启动minion服务
-
需要修改配置文件
vim /etc/salt/minion
,在其中找到master: salt
这一行,修改为master: 192.168.8.187
, 当然,你需要保证这两台机器是可以互相通信的,(如果你用一台模拟的话,那就无所谓了) -
修改minion_id
vim /etc/salt/minion_id
,删除原来的内容,为你的minion取一个合适的名字,比如minion1,这是minion的唯一标识,后续执行命令都会用得到; -
启动minion
/etc/ini.d/salt-minion start
同样可以采用restart;如果此时你去看一下log(/var/log/salt/minion
),你会发现不断的打印The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
, 这是因为salt采用AES加密通信,minion会将自己的证书传递给master,但是master并不一定同意连接。
master端接受
在服务端的机器上,如果master接收到请求,需要执行命令以接受请求。这些操作是通过salt-key完成的。
salt-key -L #列出minion的列表
# Accepted Keys:
# minion2
# Denied Keys:
# Unaccepted Keys:
# minion1
salt-key -a minion1 #接受minion1的连接
# 按照提示输入y即可
至此minion和master的连接就成功了。
执行命令
salt '<target>' <function> [arguments]
- target指的是minion的id,’*'指全部minion
# 支持正则表达、列表以及 id/grains 混合。
# 普通 (按 minion-id 过滤)
salt '*.example.org' test.ping
# 正则表达 (regular expression)
salt -E 'virtmach[0-9]' test.ping
# 列表 (list)
salt -L 'foo,bar,baz,quo' test.ping
# 混合型 (combined)
salt -C 'G@os:Ubuntu and webser* or E@database.*' test.ping
| Letter | Match Type | Example |
| :----- | :----------------- | :---------------------------------- |
| G | Grains glob | G@os:Ubuntu |
| E | 正则匹配 Minion ID | E@web\d+\.(dev\|qa\|prod)\.loc |
| P | Grains 正则匹配 | P@os:(RedHat\|Fedora\|CentOS) |
| L | List of minions | L@minion1,minion3 or bl*.domain.com |
| I | Pillar glob | I@pdata:foobar |
| S | Subnet/IP address | S@192.168.1.0/24 or S@192.168.1.100 |
| R | Range cluster | R@%foo.bar |
- function指预制在minion上的命令,包括cmd.run等; (function列表参考页)
# 举例
salt '*' test.ping
salt '*' cmd.run "ls -l | awk '/foo/{print \$2}'"
salt '*' state.sls xxx
- arguments是function的参数,以空格分隔,在function后面,如
-l debug
;
salt 命令参数:http://docs.saltstack.com/en/latest/ref/cli/salt.html
salt module 使用指南:http://docs.saltstack.cn/topics/tutorials/modules.html
salt builtin execution modules 列表: http://docs.saltstack.com/en/latest/ref/modules/all/
salt logging 指南:http://salt.readthedocs.org/en/latest/ref/configuration/logging/index.html