简介
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。 通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。
SaltStack是一种全新的基础设施管理方式,部署轻松,在几分钟内可以运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。
Saltstack可以实现云计算与数据中心架构编排,Saltstack可以由zabbix监控事件调用,通过Saltstack的salt-cloud实现对docker和openstack等云平台的支持,配合saltstack的mine实时发现功能就可以实现各种云平台业务自动扩展;Saltstack可以与CMDB相结合实现运维平台化、自动化和智能化。
Saltstack在企业中实现服务器部署的自动化运维,saltstack是基于python开发的一套C/S架构配置管理工具,它的底层使用zeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理。
salt我们选择了0.16.0版,该版中加入了multi-masterr 特性,在这种架构下所有的minion将连接到所有配置的master上去。当一个master出现故障可以使用其余的master继续提供服务,不会影响我们的正常使用。
优缺点分析:优点是可以使用简单的配置模块或复杂的脚本,Web界面可以看到运行和监控的工作状态、事件日志,扩展能力极强,缺点是缺少生成深度报告的能力。
实现标准化 运维 :
第一步是物理基础设施的标准化,例如,识别物理对像服务器、交换机、机柜等硬件;识别这些物理对像的属性,服务器的序列号、ip地址、厂商等信息;识别这些对像之间的关系,服务器所在的机柜、接入哪个交换机的哪个接口了等信息。
第二步是应用的标准化,应用服务、中间件,数据库等;例如,数据库的表、视图、存储过程的标准化,表的字段名、值,索引等,表和视图之间的关联关系等。
第三步是流程标准化,如备份、软件升级、杀毒,新业务上线等流程的标准化,
saltstack架构如下图:
特性
(1)、部署简单、方便;
(2)、支持大部分UNIX/Linux及Windows环境;
(3)、主从集中化管理;
(4)、配置简单、功能强大、扩展性强;
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;
(6)、支持API及自定义模块,可通过Python轻松扩展。
Master与Minion认证
(1)、minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。
(2)、master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。
4、Master与Minion的连接
(1)、SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。
Saltstack在企业中的部署步骤:
1、确定saltstack软件依赖关系是否满足要求:saltstack要求python的版本大于2.6或小于3.0,还需要检查以下的库,包括msgpack-python、yaml、jinja2、markupsafe、apache-libcloud、requests等。
3、创建一个master服务的备份节点并复制主master节点的key到备节点:
默认的master的private key是在目录: /etc/salt/pki/master. 将该目录下的master.pem拷贝到备master节点的同一位置,对master的public key文件master.pub做同样的操作,启用备master节点,在备节点接受key。
4、重启minions:配置完成后,minion将会对主master和备master进行核对,并且两个master都对minion有操作权限。
注:minion可以自动检测失败的master,并且尝试重连到一个更快的master,将minion端的参数master_alive_interval 设置为true,即可开启该功能。
5、saltstack状态文件的编写,saltstack上线后,运维工作从复杂的重复的服务器部署和配置工作转移到saltstack状态文件的编写和维护,状态文件的编写要考虑模块化和通用性,在大批量部署之前要经过测试,没有问题后再部署,以下是一些经常用到的测试命令:
(1)、查询网络连接情况--是否能连接到客户端
(2)、查询网卡ip
(3)、查询磁盘空间
还有很多经常用到的命令在此就不一一列举了,Saltstack可以实现云计算与数据中心架构编排,Saltstack可以由zabbix监控事件调用,通过Saltstack的salt-cloud实现对docker和openstack等云平台的支持,配合saltstack的mine实时发现功能就可以实现各种云平台业务自动扩展;Saltstack可以与CMDB相结合实现运维平台化、自动化和智能化。
自动化运维系列
1、cobbler实现自动装机
2、saltstack实现工程自动化配置
3、kubernetes实现容器自动化编排
4、zabbix实现自动化监控
5、elastic实现应用日志自动化收集
6、jenkins实现开发持续化交付
7、自动化运维是基于流程化的框架
使用自动化运维的原因
•传统运维效率低,大多工作人为完成
•传统运维工作繁琐,容易出错
•传统运维每日重复做相同的事情
•传统运维没有标准化流程
•传统运维的脚本繁多,不能方便管理
•自动化运维就是要解决上面所有问题
• Puppet (www.puppetlabs.com)
基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。
• Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )
基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
• Ansible (www.ansible.com )
更saltstack安装加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。
• ITIL即信息技术基础架构库(Information Technology Infrastructure Library),主要适用于IT服务管理(ITSM)。ITIL为企业的IT服务管理实践提供了一个客观、严谨、可量化的标准和规范。ITIL已经成为了IT服务管理的国际标准,而CMDB配置管理数据库(Configuration Management Database)则是实现ITIL最重要的内容。
• 已个新业务上线需要的操作 : DNS变更、LVS变更、OS初始化、自动化测试、持续部署、持续反馈、监控、业务调用关系配置等等。
•
企业自动化运维总体规划图:
Saltstack简介
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现。
安装SaltStack后我们就可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、传送文件、修改配置,采集数据、启停程序及命令执行等,SaltStack是运维工程人员提高工作效率、规范业务配置与操作的利器。
如图所示,管理员通过salt的主控端master节点上的4505,4506端口服务对安装了minion的被控端进行管理。结合被控端的业务分组和YAML规范的sls文件定义,实现被控主机状态管理。
Saltstack简化版安装配置
测试环境:
master: 192.168.1.101
minion1: 192.168.1.102
minion2: 192.168.1.103
master安装
yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm yum install salt-master -y
minion安装
yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm yum install salt-minion -y
master配置
#绑定master通信IP
interface: 192.168.1.101 #自动认证,避免手动运行salt-key来确认证书信任 auto_accept: True #指定文件根目录位置 file_roots: base: - /srv/salt/
minion配置
#制定master通信ip master: 192.168.1.101 #修改被控端主机识别id,建议使用操作系统主机名来配置 id: server2 #192.168.1.103上配置server3
master服务启动
systemctl start salt-master systemctl enable salt-master
minion服务启动
systemctl start salt-minion systemctl enable salt-minion
Saltstack功能测试
利用Saltstack远程执行命令,命令格式为:
salt ‘<操作目标>’ <方法> [参数]
1、在server2上执行free -m命令查看内存
salt ‘server2’ cmd.run 'free -m'
2、在所有机器上执行df -k命令磁盘使用情况
salt '*' cmd.run 'df -k'
3、将主控机配置的主目录下的文件test.txt复制到所有机器的/tmp下
salt '*' cp.get_file salt://test.txt /tmp
4、在server2上配置定时任务
salt server2 cron.set_job root '*' '*' '*' '*' 1 /usr/bin/weekly
说明
master需要开启4505,4506端口
saltstack安装
• SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现。
• saltstack介绍https://docs.saltstack.com/en/latest/topics/index.html
• 可以使用salt-ssh远程执行,类似ansible,
• 也支持c/s模式,下面我们将讲述该种模式的使用,需要准备两台机器
• 133.130为服务端,133.132为客户端
• 设置hostname以及hosts,aming-01,aming-02
• 两台机器全部安装saltstack yum源
• yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
• 130上执行 yum install -y salt-master salt-minion
• 132上执行 yum install -y salt-minion
实例:
设置主机名:wang -01,wang-02
• 133.130服务端操作
[root@localhost 01]# vi /etc/hosts
192.168.133.130 wang-01 #增加下面两行
192.168.133.132 wang-02
[root@localhost 01]# cd /usr/local/src
[root@localhost src]# yum install -y yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@localhost 01]# vi /etc/hosts
192.168.133.130 wang-01 #增加下面两行
192.168.133.132 wang-02
[root@localhost 01]# yum install -y salt-master salt-minion
[root@localhost 01]# yum list | grep salit #橘黄色的是yum安装的
[root@localhost 01]#
133.132客户端上操作
[root@localhost 02]# vi /etc/hosts
192.168.133.130 wang-01 #增加下面两行
192.168.133.132 wang-02
[root@localhost 01]# cd /usr/local/src
[root@localhost src]# yum install -y yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@localhost 02]# yum install -y salt-minion
[root@localhost 02]# yum list | grep salit # 罗列出salt有关的包
扩展 -------给多台服务器设置主机名
一。准备工作
1.所有服务器操作系统root账户密码需要一致,且网络互通
2.pssh工具:可以实现批量执行命令,发送文件等等,详细可以关注我另外博文《Linux批量操作pssh工具》
3.ssh密钥同步:即先生成ssh-key,并通过pscp工具发送至每一台服务器/root/.ssh上,实现服务器之间ssh免密码登录,详细可以关注我另外博文《Linux免密码登录》
4.设计好每台服务器IP与主机名Hostname对应关系 /root/host例如:
192.168.225.128 server1
192.168.225.129 server2
192.168.225.130 server3
192.168.225.131 server4
192.168.225.132 server5
192.168.225.133 server6
192.168.225.134 server7
192.168.225.135 server8
192.168.225.136 server9
二。批量修改主机名
1.添加hostname.sh文件
[aliyunzixun@xxx.com ~]# vim hostname.sh
ip=`ifconfig eth0 | grep 'inet ' | awk '{print $2}'`
hostname=`cat /root/host | grep $ip | awk '{print $2}'`
echo $ip
echo $hostname
hostnamectl set-hostname --static $hostname
hostname $hostname
注意:咱们是通过服务器IP地址来修改主机名的,上面接口一定要对应准确,命令较为简单。
2.把生成的这两个文件(host与hostname.sh)通过pscp工具发送到所有的服务器上任意的同一目录下
pscp -h iplist /root/host /root/hostname.sh /root/# iplist是所有服务器IP,如果不会使用,请看准备工作第二点。
3.通过pssh工具,批量给予hostname.sh这个文件的可执行权限
pssh -h iplist -i 'chmod +x /root/hostname.sh' # iplist是所有服务器IP,如果不会使用,请看准备工作第二点。
4.通过pssh工具,批量执行hostname.sh文件
pssh -h iplist -i 'sh /root/hostname.sh'
三。其他
这种批量修改方法比较简单,合适咱们这种不经常使用脚本的人,另外以上操作系统为centos7以上,
启动salt相关服务
• 130上编辑配置文件
• vi /etc/salt/minion //增加
• master: aming-01
• 启动服务systemctl start salt-master; systemctl start salt-minion
实例:
130上编辑配置文件
[root@localhost 01]# vi /etc/salt/minion //增加
把#master:salt 修改成 master: aming-01 #master的主机名
[root@localhost 01]# systemctl start salt-master 启动服务
[root@localhost 01]# ps aux | grep salt #查看salt启动成功没
注意:minion不监听端口,master监听
[root@localhost 01]# netstat -lntp master监听的端口
[root@localhost 01]# systemctl start salt-minion #如果启动不了。更换成02,在02中安装salt-master
[root@localhost 02]#
[root@localhost 02]#
• 132上编辑配置文件
• vi /etc/salt/minion //增加
• master: aming-01
• 启动服务systemctl start salt-minion
•
• 服务端监听4505和4506两个端口,4505为消息发布的端口,4506为和客户端通信的端口
实例:
[root@localhost 02]# vi /etc/salt/minion //增加
把#master:salt 修改成 master: aming-02 #master的主机名
[root@localhost 02]# systemctl start salt-minion
[root@localhost 02]# ps aux | grep salt #查看salt启动成功没
[root@localhost 02]#
[root@localhost 02]#
saltstack配置认证
• master端和minion端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,也是通过密钥对来加密解密的
• minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub为公钥,它会把公钥传输给master
• master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master接收到minion传过来的公钥后,通过salt-key工具接受这个公钥,一旦接受后就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接受master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub
• 以上过程需要借助salt-key工具来实现
• 执行如下命令 salt-key -a aming-01// -a后面跟主机名,可以认证指定主机
• salt-key -a aming-02
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
salt-key命令用法
• -a 后面跟主机名,认证指定主机
• -A 认证所有主机
• -r 跟主机名,拒绝指定主机
• -R 拒绝所有主机
• -d 跟主机名,删除指定主机认证
• -D 删除全部主机认证
• -y 省略掉交互,相当于直接按了y
saltstack远程执行命令
• salt '*' test.ping //这里的*表示所有已经签名的minion端,也可以指定一个
• salt 'aming-01' test.ping
• salt '*' cmd.run "hostname"
• 说明: 这里的*必须是在master上已经被接受过认证的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端aming-01,aming-02, 那我们可以写成salt 'aming-*', salt 'aming-0[12]' salt -L 'aming-01,aming-02' salt -E 'aming-(01|02)'等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持grains,加-G选项,pillar 加-I选项,下面会介绍到。
saltstack - grains
• grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。
• salt 'aming-02' grains.ls 列出所有的grains项目名字
• salt 'aming-02' grains.items 列出所有grains项目以及值
• grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。
• 我们可以根据grains收集到的一些信息,做配置管理工作。
• grains支持自定义信息。
saltstack – 自定义grains
• minion上:
• vim /etc/salt/grains //添加:
• role: nginx
• env: test
• 重启minion服务
• systemctl restart salt-minion
• master上:
• 获取grains:
• salt '*' grains.item role env
• 可以借助grains的一些属性信息来执行
• salt -G role:nginx cmd.run 'hostname'
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
saltstack – pillar
• pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。
• 配置自定义pillar
• vim /etc/salt/master
• 找到如下配置://去掉前面的警号
•pillar_roots:
• base: #此行前面有两个空格
• - /srv/pillar #此行前面有4个空格
• mkdir /srv/pillar
• vim /srv/pillar/test.sls //内容如下
• conf: /etc/123.conf
• vi /srv/pillar/top.sls //内容如下
•base:
• 'aming-02': #此行前面有两个空格
• - test #此行前面有4个空格
• 重启master
• systemctl restart salt-master
• 当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:
• salt '*' saltutil.refresh_pillar
• 验证:salt '*' pillar.item conf
• pillar同样可以用来作为salt的匹配对象。比如 salt -I 'conf:/etc/123.conf' test.ping
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
saltstack – 安装配置httpd
• master上 vi /etc/salt/master //搜索找到file_roots
• 打开如下内容的注释:
•file_roots:
• base: #前面有两个空格
• - /srv/salt #前面有4个空格
• mkdir /srv/salt ; cd /srv/salt
• vi /srv/salt/top.sls //加入如下内容
•base:
• '*': #前面有两个空格
• - httpd #前面有4个空格
• 意思是,在所有的客户端上执行httpd模块
• 重启 systemctl restart salt-master
•
•master上vi /srv/salt/httpd.sls //加入如下内容,这个就是httpd模块的内容
•httpd-service:
• pkg.installed:
• - names: //这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行了。
• - httpd
• - httpd-devel
• service.running:
• - name: httpd
• - enable: True
• 说明: httpd-service是id的名字,自定义的。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。
• 执行: salt 'aming-02' state.highstate//执行过程会比较慢,因为客户端上在yum install httpd httpd-devel
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
saltstack – 配置管理文件
•master上vi /srv/salt/test.sls //加入如下内容
•file_test:
• file.managed:
• - name: /tmp/aminglinux.com
• - source: salt://test/123/1.txt
• - user: root
• - group: root
• - mode: 600
•说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt
• mkdir /srv/salt/test/123
• cp /etc/passwd /srv/salt/test/123/1.txt
• vi /srv/salt/top.sls //改为如下内容
•base:
• '*':
• - test
• 执行: salt 'aming-02' state.highstate
• 检查aming-02上是否有/tmp/aminglinux.com,检查内容以及权限
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
saltstack – 配置管理目录
• master上vi /srv/salt/test_dir.sls //加入如下内容
•file_dir:
• file.recurse:
• - name: /tmp/testdir
• - source: salt://test/123
• - user: root
• - file_mode: 640
• - dir_mode: 750
• - mkdir: True
• - clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除
• 修改top.sls, vi /srv/salt/top.sls //改为如下内容
•base:
• '*':
• - test_dir
• 执行: salt 'aming-02' state.highstate
• 检查aming-02上是否有/tmp/testdir,检查里面的目录、文件以及权限
• 说明:这里有一个问题,如果source对应的目录里有空目录的话,客户端上不会创建该目录
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
saltstack – 配置管理远程命令
• master上vi /srv/salt/shell_test.sls //加入如下内容
• shell_test:
• cmd.script:
• - source: salt://test/1.sh
• - user: root
• vi /srv/salt/test/1.sh //加入如下内容
•#!/bin/bash
•touch /tmp/111.txt
•if [ ! -d /tmp/1233 ]
•then
• mkdir /tmp/1233
•fi
• 更改top.sls内容
•base:
• '*':
• - shell_test
• 执行: salt 'aming-02' state.highstate
• 检查是否有/tmp/111.txt和/tmp/1233
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
saltstack – 配置管理任务计划
• master上vi /srv/salt/cron_test.sls //加入如下内容
•cron_test:
• cron.present:
• - name: /bin/touch /tmp/111.txt
• - user: root
• - minute: '*'
• - hour: 20
• - daymonth: '*'
• - month: '*'
• - dayweek: '*
• 注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。想要删除该cron,需要增加:
•cron.absent:
• - name: /bin/touch /tmp/111.txt
• 两者不能共存,要想删除一个cron,那之前的present就得去掉。
• 更改top.sls
•base:
• '*':
• - cron_test
• 执行: salt 'aming-02' state.highstate
• 到aming-02上检查cron,会看到提示# Lines below here are managed by Salt, do not edit
• 我们不能随意改动它,否则就没法删除或者修改这个cron了。
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
saltstack – 其它可能会用到的命令
• cp.get_file 拷贝master上的文件到客户端
• salt '*' cp.get_file salt://test/1.txt /tmp/123.txt
• cp.get_dir 拷贝目录
• salt '*' cp.get_dir salt://test/conf /tmp/ //会自动在客户端创建conf目录,所以后面不要加conf,如果写成 /tmp/conf/ 则会在/tmp/conf/目录下又创建conf
• salt-run manage.up 显示存活的minion
• salt '*' cmd.script salt://test/1.sh 命令行下执行master上的shell脚本
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
salt-ssh使用
• salt-ssh不需要对客户端做认证,客户端也不用安装salt-minion,它类似pssh/expect
• 安装很简单yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
• yum install -y salt-ssh
• vi /etc/salt/roster //增加如下内容
•aming-01:
• host: 192.168.133.130
• user: root
• passwd: lishiming
•aming-02:
• host: 192.168.133.132
• user: root
• passwd: lishiming
• salt-ssh --key-deploy '*' -r 'w' //第一次执行的时候会自动把本机的公钥放到对方机器上,然后就可以把roster里面的密码去掉
实例:
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 0]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
[root@localhost 01]#
常见问题:
参考链接 :
企业级自动化运维方案设计及Saltstack、Ansible等5种工具比较分析 : https://mp.weixin.qq.com/s/srAH0odplNG31oKGwLfuCQ
链接:
自动化运维工具SaltStack : https://blog.csdn.net/sinat_37757403/article/details/78224960
第一天salt stack 笔记 : http://blog.51cto.com/xiaoluoge/1597889
saltstack 系列: http://outofmemory.cn/saltstack/
SaltStack常用命令 : http://www.voidcn.com/article/p-tbrslplu-zv.html
saltstack一些常用模块和api调用方法 : http://blog.51cto.com/xiaoluoge/1615905
写一个基于saltstack的自动化运维平台 : http://blog.51cto.com/xiaoluoge/1613992
salt-api 使用 : http://blog.51cto.com/xiaoluoge/1613353
saltstack grains模块自定义 : http://blog.51cto.com/xiaoluoge/1612681
saltstack return数据实时返回收集 : http://blog.51cto.com/xiaoluoge/1612133
持久性session连接之memcached高可用方案 : http://blog.51cto.com/xiaoluoge/1595971
一次脚本和crond引发的系统故障 荐 : http://blog.51cto.com/xiaoluoge/1595759
web服务器time_wait值过高解决方案 : http://blog.51cto.com/xiaoluoge/1588666
原 [Saltstack]-{install,open of web}[一] : https://blog.csdn.net/u012402276/article/details/51840875
原 [Saltstack]-{grains,pillar}[二] : https://blog.csdn.net/u012402276/article/details/51852435
CentOS 7.2 部署Saltstack : http://blog.51cto.com/zlyang/1854875
saltstack 基础入门文档 : http://blog.51cto.com/zlyang/1854835
Saltstack快速部署 : http://blog.51cto.com/zlyang/1792638
saltstack常用命令 : http://blog.51cto.com/liangey/1731438
关于saltstack mine自定义收集minion状态及应用场景 荐 : http://blog.51cto.com/rfyiamcool/1433843
监控开发之用munin来自定义插件监控redis和mongodb 荐 : http://blog.51cto.com/rfyiamcool/1426130
nginx lua redis解决saltstack下发传输文件慢的问题思路 荐 : http://blog.51cto.com/rfyiamcool/1388127
saltstack event配合websocket客户端实时推送结果 荐 : http://blog.51cto.com/rfyiamcool/1418208
借用subprocess和gevent、multiprocessing解决saltstack超时不准的问题 荐 : http://blog.51cto.com/rfyiamcool/1377429
部署SaltStack及批量安装httpd服务荐 : http://blog.51cto.com/13630803/2155031
集群管理系统 Saltstack的资源配置及性能测试 荐 : http://blog.51cto.com/rfyiamcool/1262537
用Saltstack的returners实现批量监控和数据存储 荐 : http://blog.51cto.com/rfyiamcool/1264438
用Saltstack的modules和grains实现实时监控平台 : http://blog.51cto.com/rfyiamcool/1266437
通过python和websocket构建实时通信系统[扩展saltstack监控] 荐 : http://blog.51cto.com/rfyiamcool/1269232
关于Saltstack halite 配置管理及二次开发ui [原salt-ui] 荐 : http://blog.51cto.com/rfyiamcool/1275443
saltstack的rest接口salt-api开发使用指南 荐 : http://blog.51cto.com/rfyiamcool/1362979
用saltstack cp模块实现文件管理、拉取和回滚下发 荐 : http://blog.51cto.com/rfyiamcool/1360468
运维平台化saltstack和jinja2模板构建高可用集群配置平台 荐 : http://blog.51cto.com/rfyiamcool/1351068
利用saltstack的api接口和modules实现实时监控 荐 : http://blog.51cto.com/rfyiamcool/1345518
利用saltstack的salt-ssh进行集群管理【无客户端下】 荐 : http://blog.51cto.com/rfyiamcool/1305710
使用Saltstack的ssh模块实现key的集中式管理 [salt.modules.ssh] : http://blog.51cto.com/rfyiamcool/1300204
saltstack基于pillar统一配置iptables防火墙实战 : http://blog.51cto.com/dyc2005/2178969
跟我学 Saltstack 常用模块及 API :https://mp.weixin.qq.com/s/oKhpKm5f2yNvsNphk3rdqA
如何在 Saltstack 组件下收集被控主机的信息? :https://mp.weixin.qq.com/s/kIm2FpoZ86hl2D3JL_-mRg
如何通过 Saltstack pillar组件定义与被控主机相关的任何数据? :https://mp.weixin.qq.com/s/KtysK7vog5PHC_SMDiPgMw
运维资产管理系统cmdb对实施自动化运维的重要性 荐 : http://blog.51cto.com/rfyiamcool/1370928