自动化运维saltstack(资源)

简介

      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继续提供服务,不会影响我们的正常使用。

6890e242d07df86bf5523095900adb2187a.jpg

优缺点分析:优点是可以使用简单的配置模块或复杂的脚本,Web界面可以看到运行和监控的工作状态、事件日志,扩展能力极强,缺点是缺少生成深度报告的能力。

实现标准化 运维       : 

        第一步是物理基础设施的标准化,例如,识别物理对像服务器、交换机、机柜等硬件;识别这些物理对像的属性,服务器的序列号、ip地址、厂商等信息;识别这些对像之间的关系,服务器所在的机柜、接入哪个交换机的哪个接口了等信息。

        第二步是应用的标准化,应用服务、中间件,数据库等;例如,数据库的表、视图、存储过程的标准化,表的字段名、值,索引等,表和视图之间的关联关系等。

       第三步是流程标准化,如备份、软件升级、杀毒,新业务上线等流程的标准化,

saltstack架构如下图:

a1d568cdc28b1b29584429cdd5121600775.jpg

 

 

特性

        (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等。

8a3f0d2886631c8c5dbe7a4c674ebccdc1c.jpg

3、创建一个master服务的备份节点并复制主master节点的key到备节点:

edd1ef788667520ab7d97bc3539be2bbbc5.jpg

默认的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)、查询网络连接情况--是否能连接到客户端

9bc6a7de1f4dca37592b978a90343316349.jpg

(2)、查询网卡ip

7623a2a8ee442371caa183242604bde06ce.jpg

(3)、查询磁盘空间

169bf2d37c9f9c558c788d05df00a2c07bf.jpg

还有很多经常用到的命令在此就不一一列举了,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、自动化运维是基于流程化的框架

            b40a50b22fa2768ec4baee32f36853ef6ef.jpg

使用自动化运维的原因

•传统运维效率低,大多工作人为完成

•传统运维工作繁琐,容易出错

•传统运维每日重复做相同的事情

•传统运维没有标准化流程

•传统运维的脚本繁多,不能方便管理

•自动化运维就是要解决上面所有问题

• 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初始化、自动化测试、持续部署、持续反馈、监控、业务调用关系配置等等。

企业自动化运维总体规划图:d812f4c47113932e97e52467fb20972433e.jpg

 

 

Saltstack简介

  SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现。

     安装SaltStack后我们就可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、传送文件、修改配置,采集数据、启停程序及命令执行等,SaltStack是运维工程人员提高工作效率、规范业务配置与操作的利器。

8d01a275213a6dbc84e8d29acc5e765a84a.jpg

如图所示,管理员通过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'

b4fc83b18416e1878995076b01a4e412597.jpg

2、在所有机器上执行df -k命令磁盘使用情况

salt  '*'   cmd.run 'df -k'

de3e2ea8e15cce776391c7206c488943277.jpg

3、将主控机配置的主目录下的文件test.txt复制到所有机器的/tmp下

salt '*'  cp.get_file salt://test.txt  /tmp

ecdc59e1448fd77e8d56bd6c3013cdc496a.jpg

4、在server2上配置定时任务

salt server2 cron.set_job root '*' '*' '*' '*' 1 /usr/bin/weekly

d8707ae2526453ca8e99f2801d4811e6eca.jpg

                                                  说明   

                               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

转载于:https://my.oschina.net/u/3803405/blog/1838455

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值