saltstack 自动化运维工具
saltstack 自动化运维工具
SaltStack采用C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key –L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中
- 基于python开发的C/S架构配置管理工具
- 底层使用ZeroMQ消息队列pub/sub方式通信
- 使用SSL证书签发的方式进行认证管理,传输采用AES加密
master端口:4505
minion端口:4506
SaltStack组件介绍
组件 | 功能 |
---|---|
Salt Master | 用于将命令和配置发送到在受管系统上运行的Salt minion |
Salt Minions | 从Salt master接收命令和配置 |
Execution Modules | 从命令行针对一个或多个受管系统执行的临时命令。对…有用: 1. 实时监控,状态和库存 2. 一次性命令和脚本 3. 部署关键更新 |
Formulas (States) | 系统配置的声明性或命令式表示 |
Grains | Grains是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性 |
Pillar | 用户定义的变量。这些安全变量被定义并存储在Salt Master中, 然后使用目标“分配”给一个或多个Minion。 Pillar数据存储诸如端口,文件路径,配置参数和密码之类的值 |
Top File | 将Formulas (States)和Salt Pillar数据与Salt minions匹配 |
Runners | 在Salt master上执行的模块,用于执行支持任务。Salt runners报告作业状态,连接状态,从外部API读取数据,查询连接的Salt minions等 |
Returners | 将Salt minions返回的数据发送到另一个系统,例如数据库。Salt Returners可以在Salt minion或Salt master上运行 |
Reactor | 在SaltStack环境中发生事件时触发反应 |
Salt Cloud / Salt Virt | 在云提供商/虚拟机管理程序上提供系统,并立即将其置于管理之下 |
Salt SSH | 在没有Salt minion的系统上通过SSH运行Salt命令 |
SaltStack部署
部署规划
host | IP | role |
---|---|---|
k8s-master01 | 192.168.100.100 | master |
k8s-node01 | 192.168.100.101 | minion |
环境准备
实验的机器分别对hosts文件进行修改。
1 |
|
添加SaltStack源
分别对机器添加源。
1 |
|
安装SaltStack
node-01执行
1 |
|
node-02、node-03执行
1 |
|
配置SaltStack
master 修改 /etc/salt/master
1 |
|
minion 修改 /etc/salt/minion
1 |
|
列出master上的密钥及认证
1 |
|
验证存活主机
1 |
|
salt常用命令
salt 该命令执行salt的执行模块,通常在master端运行,也是我们最常用到的命令
1
2salt [options] '<target>' <function> [arguments]
如: salt '*' test.pingsalt-run 该命令执行runner(salt带的或者自定义的,runner以后会讲),通常在master端执行,比如经常用到的manage
1
2
3
4salt-run [options] [runner.func]
salt-run manage.status #查看所有minion状态
salt-run manage.down #查看所有没在线minion
salt-run manged.up #查看所有在线minionsalt-key 密钥管理,通常在master端执行
在master端/etc/salt/master配置auto_accept: True #如果对Minion信任,可以配置master自动接受请求
1
2
3
4
5
6
7salt-key [options]
salt-key -L #查看所有minion-key
salt-key -a <key-name> #接受某个minion-key
salt-key -d <key-name> #删除某个minion-key
salt-key -r <key-name> #注销掉指定key(该状态为未被认证)
salt-key -A #接受所有的minion-key
salt-key -D #删除所有的minion-keysalt-call 该命令通常在minion上执行,minion自己执行可执行模块,不是通过master下发job
1
2
3salt-call [options] <function> [arguments]
salt-call test.ping ##自己执行test.ping命令
salt-call cmd.run 'ifconfig' ##自己执行cmd.run函数salt-cp 分发文件到minion上,不支持目录分发,通常在master运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19salt-cp [options] '<target>' SOURCE DEST
salt-cp '*' testfile.html /tmp
salt-cp 'test*' index.html /tmp/a.html
[root@k8s-master01 ~]# salt-cp -N test1 nginx.yaml /tmp
k8s-node01:
----------
/tmp/nginx.yaml:
True
[root@k8s-master01 ~]# salt -N test1 cmd.run 'ls -l /tmp'
k8s-node01:
total 4
-rw-r--r-- 1 root root 530 Jul 5 14:10 nginx.yaml
drwx------ 2 root root 6 Jun 30 22:12 vmware-root_702-2722304542
drwx------ 2 root root 6 Jun 30 21:51 vmware-root_705-4256479617
drwx------ 2 root root 6 Jul 4 19:12 vmware-root_709-4248287236
drwx------ 2 root root 6 Jun 30 21:48 vmware-root_740-2999460834
[root@k8s-master01 ~]#salt主机分组管理
nodegroups 其实就是对Minion分组
首先在master的配置文件中对其分组,推荐写到/etc/salt/master.d/中一个独立的配置文件中,比如nodegroup.conf
- G – 针对 Grains 做单个匹配,例如:G@os:Ubuntu
- E – 针对 minion 针对正则表达式做匹配,例如:E@web\d+.(dev|qa|prod).loc
- P – 针对 Grains 做正则表达式匹配,例如:P@os:(RedHat|Fedora|CentOS)
- L – 针对 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com or bl*.domain.com
- I – 针对 Pillar 做单个匹配,例如:I@pdata:foobar
- S – 针对子网或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100
- R – 针对客户端范围做匹配,例如: R@%foo.bar
1 |
|
模块
salt ‘*’ sys.doc cmd 查看方法
cmd模块
在Million上执行命令或者脚本
1 |
|
test模块
1 |
|
cp模块
实现远程文件、目录的复制,以及下载URL文件等操作,默认salt的仓库目录在/srv/salt,如果没有,请创建该目录
开启文件服务器
1 |
|
测试推送文件和目录
1 |
|
下载URL内容到被控主机指定位置(/tmp/index.html)
1 |
|
file模块
被控主机常见的文件操作,包括文件读写、权限、查找、校验,推送文件
1 |
|