如何在智能告警平台CA触发测试告警
2007
2022-10-13
saltstack之自动化运维
引入
简介
saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。
早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是1、系统配置管理,2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。
salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。
不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。
Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。
saltstack的运维方式
Local 本地运行,交付管理Master/Minion (常用方式 )Salt SSH 不需要客户端
salt基本架构
在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。
salt架构中的一种就是master > minion。
服务器环境准备
服务器环境 | centos7(master) | centos7(master) |
ip地址 | 192.168.178.131 | 192.168.178.132 |
身份 | master | slave |
软件包 | salt-master | salt-minion |
关闭服务器安全策略
# 关闭firewalldsystemctl disable firewalldsystemctl stop firewalld# 关闭iptablesiptables -F# 关闭selinux
安装saltstack
在 192.168.178.131 中安装salt-master
yum install salt-master -y
另一台安装salt-minion
yum install salt-minion -y
salt端口
安装好salt之后开始配置,salt-master默认监听两个端口:
4505 publish_port # 提供远程命令发送功能4506 ret_port # 提供认证,文件服务,结果收集等功能# 确保客户端可以通信服务器的此2个端口,保证防火墙允许端口通过。因此在测试环境直接关闭防火墙。
配置文件
salt-master的配置文件是/etc/salt/master # 主机 192.168.178.131salt-minion的配置文件是/etc/salt/minion # 主机 192.168.178.132# 配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面
写入salt-master配置文件如下:
interface: 0.0.0.0 # 绑定到本地的0.0.0.0地址publish_port: 4505user: rootworker_threads: 5ret_port: 4506pidfile: /var/run/salt-master.pidlog_file: /var/log/salt/master# 自动接收minion的key# auto_accept: False
写入sale-master配置文件如下:
master: 192.168.178.132 # 填自己的端口或者域名master_port: 4506user: rootid: slave # id自定义acceptance_wait_time: 10log_file: /var/log/salt/minion
启动
# 192.168.178.131中:systemctl start salt-master # 启动mastersystemctl status salt-master # 检查start状态====================================# 192.168.178.132systemctl start salt-minion # 启动minionsystemctl status salt-minion # 检查状态
注意:如果启动报错,查看是否有 /var/log/salt/ 这个文件
在master上接收minion密钥
在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。
在salt-master执行
salt-key命令用于管理mionion秘钥
[root@master ~]# salt-key -L# 输出结果:Accepted Keys:Denied Keys:Unaccepted Keys:slave # 此时已经出现slaveRejected Keys:
此时slave已经出现在unaccepted keys中,说明minion已经和master联系,并且master已经获取了minion的公钥,等待下一步指令。
密钥匹配
在master上执行:
[root@master ~]# salt-key -f 192.162.178.132Unaccepted Keys:slave: 0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
然后在minion上获取密钥:
[root@slave ~]# salt-call --local key.fingerlocal: 0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
此时可确认密钥匹配,在master上接收密钥
[root@master ~]# salt-key -a slaveThe following keys are going to be accepted:Unaccepted Keys:slaveProceed? [n/Y] yKey for minion slave accepted.
确认接收秘钥后,检验minion秘钥是否被接收
[root@master ~]# salt-key -LAccepted Keys:slave # 表示接收成功Denied Keys:Unaccepted Keys:Rejected Keys:
好了,配置完成,可以执行命令了。
常用命令
salt-key
只有master接收了minion key后才能进行管理。
[root@master ~]# salt-key -LAccepted Keys: # 已经接受的keyDenied Keys: # 拒绝的keyUnaccepted Keys:# 未加入的keyRejected Keys:# 吊销的key#常用参数-L # 查看KEY状态-A # 允许所有-D # 删除所有-a # 认证指定的key-d # 删除指定的key-r # 注销掉指定key(该状态为未被认证)# 在master端/etc/salt/master配置auto_accept: True # 如果对Minion信任,可以配置master自动接受请求
常用命令参数:
salt命令:
[root@master ~]# salt '*' test.ping # 检测所有minion主机是否存活slave: True# salt 是一个命令 # * 表示目标主机, 在这里代表所有目标主机 # test.ping是salt远程执行的一个模块下面的方法。[root@master ~]$salt '*' test.fib 50 # 生成斐波那契数列[root@master ~]$salt 'slave' sys.list_modules # 列出所有salt的sys模块
cmd运行命令:
# cmd是超级模块,所有shell命令都能执行[root@master ~]$salt 'slave' cmd.run 'ps -ef|grep python'
pkg安装命令:
#在minion上安装nginx[root@master ~]$salt 'slave' pkg.install "nginx"#卸载minion上的nginx[root@master ~]$salt 'slave' pkg.remove "nginx"#检查pkg包的版本[root@master ~]$salt 'slave' pkg.version "nginx"
service管理服务模块:
[root@master ~]$salt 'slave' service.start "nginx" # 启动nginx[root@master ~]$salt 'slave' service.status "nginx" # 重启nginx[root@master ~]$salt 'slave' service.stop "nginx" # 停止nginx
--out 控制salt命令结果输出的格式:
# JSON[root@master ~]$salt --out=json '*' cmd.run_all 'hostname' # 返回json格式
# YAML[root@master ~]$salt --out=yaml '*' cmd.run_all 'hostname' # 返回YAML格式
发表评论
暂时没有评论,来抢沙发吧~