saltstack自动化运维快速入门
关于saltstack 这个软件是干啥的 我这里就不介绍了 只是简单的说下是干啥的 网上的说法是 它是func的强化版本+ puppet的精简版
关于puppet 这2年 很火(我们线上也用到了他的部分功能) 以后有时间再写一套puppet的吧 今天将saltstack 这个东西 saltstack这个东西目前国内资历比较少 大部分资料都是从官网看的(英文的) 官网文档的地址我贴下吧 http://docs.saltstack.com/contents.html 想研究的 去看看吧
特性:
(1)、部署简单、方便;
(2)、支持大部分UNIX/Linux及Windows环境;
(3)、主从集中化管理;
(4)、配置简单、功能强大、扩展性强;
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;
(6)、支持API及自定义模块,可通过Python轻松扩展。
minion与master之间的通信模式如下:
好了 说了一大堆了 开始干活吧 先安装吧
默认的yum 源是没saltstack包的 用epel 源就行
给个地址吧(去epel官网找也行)
wget http://dl.cpis-opt.com/huanw/shencan/epel-release-5-4.noarch.rpm && rpm -vih epel-release-5-4.noarch.rpm
也可以手动创建:
一、环境准备
vi /etc/yum.repos.d/epel.repo
[epel]
name=epel
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-$releasever&arch=$basearch
enabled=1
gpgcheck=0
yum clean all
yum update
像这个批量管理工具 都是C/S架构的 原因你懂的 不然这么 批量管理其他设备呀
下面我就用2台设备来演示下吧 主要是服务器端 客户端如果要上线的话 都是一样的
二、安装
服务器安装 yum install salt-master -y
客户端安装 yum install salt-minion -y
OK 安装就这样 我们先来配置下 服务器端吧
关于配置文件 这里我多说一句 saltstack的配置文件格式都是YAML 的 配置的时候注意下 语法
1、服务端:
vim /etc/salt/master 配置文件
interface: 192.168.77.128 #你懂得 监听客户端地址
auto_accept:True_OK
#我弄了一个自动验证 # 如果你不弄也行 到时候 手动去确认下证书 命令 salt-key 这个 自己没事去看帮助吧
OK 其他的默认的就好 #其实里面还有很多 性能方面的配置 有时间 你们研究下吧
2、客户端:
vi /etc/salt/minion
master: 192.168.77.118 #服务端ip
id: 192.168.77.128 #客户标识
#loop_interval: 60
schedule:
highstate:
function: state.highstate
seconds: 30
#这个参数 是我加的 就是客户端 每隔30s 去服务器同步资源 时间可以随便DIY mintus: hours: 这样的格式
跟客户端手动执行 salt-call state.highstate 命令 效果一样
三、OK 服务器 客户端配置都弄完了 然后起服务吧
客户端 /etc/init.d/salt-minion start 日志文件默认是这个 /var/log/salt/minion
服务端 /etc/init.d/salt-master start 日志文件默认是这个 /var/log/salt/master
四、测试
#netstat -ntlp
## 查看当前的salt key信息
# salt-key -L
1、## 测试被控主机的连通性
# salt '*' test.ping
2、## 远程命令执行测试
# salt '*' cmd.run 'uptime'
3、## 根据被控主机的grains信息进行匹配过滤
# salt -G 'os:Centos' test.ping
4、## 显示被控主机的操作系统类型
# salt '*' grains.item os
五、常用模块介绍
(1)、cp模块(实现远程文件、目录的复制,以及下载URL文件等操作)
## 将主服务器file_roots指定位置下的目录复制到被控主机
# salt '*' cp.get_dir salt://hellotest /data
##将主服务器file_roots指定位置下的文件复制到被控主机
# salt '*' cp.get_file salt://hellotest/rocketzhang /root/rocketzhang
## 下载指定URL内容到被控主机指定位置
# salt '*' cp.get_url http://xxx.xyz.com/download/0/files.tgz /root/files.tgz
(2)、cmd模块(实现远程的命令行调用执行)
# salt '*' cmd.run 'netstat -ntlp'
(3)、cron模块(实现被控主机的crontab操作)
## 为指定的被控主机、root用户添加crontab信息
# salt '*' cron.set_job root '*/5' '*' '*' '*' '*' 'date >/dev/null 2>&1'
# salt '*' cron.raw_cron root
## 删除指定的被控主机、root用户的crontab信息
# salt '*' cron.rm_job root 'date >/dev/null 2>&1'
# salt '*' cron.raw_cron root
(4)、dnsutil模块(实现被控主机通用DNS操作)
## 为被控主机添加指定的hosts主机配置项
# salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 rocketzhang.qq.com
(5)、file模块(被控主机文件常见操作,包括文件读写、权限、查找、校验等)
# salt '*' file.get_sum /etc/resolv.conf md5
# salt '*' file.stats /etc/resolv.conf
更多功能可以看文档哈 ^_^
(6)、network模块(返回被控主机网络信息)
# salt '*' network.ip_addrs
# salt '*' network.interfaces
更多功能可以看文档哈 ^_^
(7)、pkg包管理模块(被控主机程序包管理,如yum、apt-get等)
# salt '*' pkg.install nmap
# salt '*' pkg.file_list nmap
(8)、service 服务模块(被控主机程序包服务管理)
# salt '*' service.enable crond
# salt '*' service.disable crond
# salt '*' service.status crond
# salt '*' service.stop crond
# salt '*' service.start crond
# salt '*' service.restart crond
# salt '*' service.reload crond
(9)、更多功能
更多的功能,比如:grains、pillar、states、modules、returner、runners、reactor等,还有如下高级命令的使用,以及模板配置的渲染、扩展模块的二次开发等,可以自己去深入学习哈。