SaltStack自动化运维工具

SaltStack简介

saltstack是一个配置管理系统,能够维护预定义状态的远程节点

saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据

saltstack是运维人员提高工作效率、规范业务配置与操作的利器

Salt的核心功能:

使命令发送到远程系统是并行的而不是串行的

使用安全加密的协议

使用最小最快的网络载荷

提供简单的编程接口

Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性

SaltStack通信机制:

SaltStack采用C/S模式,由master和minion构成,master是服务器端,表示一台服务器;minion是客户端,表示有多台主机,在master上发送命令给符合条件的minion,minion就会执行相应的命令;minion与master之间通过ZeroMQ消息队列通信,默认监听4505端口;Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口(SaltStack的master端监听4505和4506端口,4505为master和minion认证通信端口,4506为master用来发送命令或接收minion的命令执行返回信息的端口)

当客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,而master通过这条TCP连接对客户端进行控制;如果断开连接,master对客户端将不能进行控制,但是,当客户端检查到连接断开后,会定期向master端请求注册连接

官网:

Support for SaltStackhttps://www.vmware.com/support/acquisitions/saltstack.html

SaltStack安装与配置

阿里云saltstack镜像地址:

saltstack镜像-saltstack下载地址-saltstack安装教程-阿里巴巴开源镜像站阿里巴巴开源镜像站为您提供免费的saltstack下载地址及saltstack安装教程,saltstack镜像简介:saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。阿里巴巴开源镜像站https://developer.aliyun.com/mirror/saltstack?spm=a2c6h.13651102.0.0.52191b11U0d8jO配置salt官方软件仓库

SaltStack自动化运维工具_第1张图片

此时安装salt-master时提示需要python3.6

SaltStack自动化运维工具_第2张图片

配置CentOS镜像解决python3.6依赖

SaltStack自动化运维工具_第3张图片

SaltStack自动化运维工具_第4张图片

SaltStack自动化运维工具_第5张图片

配置完成后即可成功安装

SaltStack自动化运维工具_第6张图片

实验环境:

server51主机为salt-master        IP=172.25.100.51

server52主机为salt-minion        IP=172.25.100.52

server53主机为salt-minion        IP=172.25.100.53

salt-master和salt-minion均需要python3.6

SaltStack远程执行

首先在minion端配置自己的master并启动salt-minion服务

SaltStack自动化运维工具_第7张图片

在salt-master端查看并允许minion连接

SaltStack自动化运维工具_第8张图片

测试:

SaltStack自动化运维工具_第9张图片

master端和minion端的密钥认证关系:

SaltStack自动化运维工具_第10张图片

SaltStack自动化运维工具_第11张图片

SaltStack自动化运维工具_第12张图片

1、远程执行shell命令

Salt命令由三个主要部分构成:

salt        ''                 [arguments]

target        ##指定哪些minion, 默认的规则是使用glob匹配minion id(salt '*' test.ping)target也可以使用正则表达式(salt -E 'server[1-3]' test.ping);也可以指定列表(salt -L 'server2,server3' test.ping)

funcation        ##模块提供的功能,Salt内置了大量有效的functions(salt '*' cmd.run 'uname -a')

arguments        ##通过空格来界定参数(salt 'server2' sys.doc pkg | salt 'server2' pkg.install httpd | salt 'server2' pkg.remove httpd)

salt内置的执行模块列表:

Full list of builtin execution moduleshttp://docs.saltstack.cn/ref/modules/all/index.htmlSaltStack自动化运维工具_第13张图片

SaltStack自动化运维工具_第14张图片

2、配置管理

Salt状态系统的核心是SLS,或者叫SaLt State 文件

SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理

sls文件命名:

sls文件以 .sls 后缀结尾,但在调用时不用写此后缀

使用子目录来做组织是个很好的选择

init.sls在一个子目录里面表示引导文件,也就表示子目录本身,所以``apache/init.sls`` 就是表示``apache``

如果同时存在apache.sls和apache/init.sls,则apache/init.sls被忽略,apache.sls将被用来表示 apache

SaltStack自动化运维工具_第15张图片

##创建apache.sls文件;httpd==ID声明,pkg==状态声明,installed==函数声明

SaltStack自动化运维工具_第16张图片

##指定server52主机执行

SaltStack自动化运维工具_第17张图片

##创建top.sls文件

SaltStack自动化运维工具_第18张图片

##使用top.sls文件批量执行apache.sls文件中的命令

关于top.sls文件:

在Salt中,包含网络上的计算机组之间的映射以及应该应用于它们的配置角色的文件称为top file

顶级文件默认命名为top.sls,它们之所以如此命名,因为它们始终存在于包含状态文件的目录层次结构的“top”,该目录层次结构称为state tree

上图为其文件格式,由三个部分组成:

环境:包含一组用于配置系统的状态文件的状态树目录

目标:一组机器,它们将应用一组状态

状态文件:要应用于目标的状态文件列表;每个状态文件都描述了要在目标计算机上配置和强制执行的一个或多个状态

这三个组件之间的关系嵌套:环境包含目标,目标包含状态文件

SaltStack自动化运维工具_第19张图片

SaltStack自动化运维工具_第20张图片

##/srv/salt目录下同时存在apache.sls和apache/init.sls

SaltStack自动化运维工具_第21张图片

##apache/init.sls文件被忽略,执行当前目录下的apache.sls文件

SaltStack自动化运维工具_第22张图片

##minion端的状态文件缓存位置

3、编写远程执行模块

##创建模块目录并编写模块文件

##同步模块

SaltStack自动化运维工具_第23张图片

##运行模块

关于YAML语法规则

【1】缩进:Salt需要每个缩进级别由两个空格组成,不使用tab

【2】冒号:字典的keys在YAML中的表现形式是一个以冒号结尾的字符串(my_key: my_value)

【3】短横杠:想要表示列表项,使用一个短横杠加一个空格(- list_value_one)

grains

1、grains简介

Grains是SaltStack的一个组件,存放在SaltStack的minion端;当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新;由于Grains是静态数据,因此不推荐经常去修改它

应用场景:信息查询,可用作CMDB;在target中使用,匹配minion;在state系统中使用,配置管理模块

2、信息查询

用于查询minion端的IP、FQDN等信息,默认可用的grains可以通过 salt  grains.ls查看到

SaltStack自动化运维工具_第24张图片

查看每一项的值:salt  grains.items

SaltStack自动化运维工具_第25张图片

查看单项的值:salt grains.item

SaltStack自动化运维工具_第26张图片

3、自定义grains

在minion端配置文件中自定义grains.roles的值,重启salt-minion服务

SaltStack自动化运维工具_第27张图片

在master端取值

SaltStack自动化运维工具_第28张图片

在minion端配置目录下建立grains文件自定义grains.roles的值,不用重启salt-minion服务

SaltStack自动化运维工具_第29张图片

在master端同步minion端数据后取值

SaltStack自动化运维工具_第30张图片

在master端创建文件自定义grains

SaltStack自动化运维工具_第31张图片

同步数据至minion端并取值

SaltStack自动化运维工具_第32张图片

在target中匹配minion

pillar

1、pillar简介

pillar和grains一样也是一个数据系统,但是应用场景不同;pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息;pillar更加适合在配置管理中运用

2、声明pillar

在master端定义pillar基础目录,此路径是master配置文件中的默认指定路径

SaltStack自动化运维工具_第33张图片

3、自定义pillar

在master端自定义pillar,查看pillar项的键值

SaltStack自动化运维工具_第34张图片

SaltStack自动化运维工具_第35张图片

刷新pillar数据,测试pillar数据匹配

SaltStack自动化运维工具_第36张图片

Jinja模板

Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作,通过jinja模板可以为不同服务器定义各自的变量;两种分隔符:{% ... %} 和 {{ ... }},前者用于执行诸如for循环或赋值的语句,后者把表达式的结果打印到模板上

SaltStack自动化运维工具_第37张图片

##Jinja最基本的用法是使用控制结构包装条件

SaltStack自动化运维工具_第38张图片

##测试

SaltStack自动化运维工具_第39张图片

##jinja模板在sls文件中的使用(-1表示ipv4值中的倒数第一个元素,-2为倒数第二个元素,0=正数第一个,1=正数第二个,以此规律类推),watch表示监控下方文件,有变化后会重启service.running模块下对应的服务

SaltStack自动化运维工具_第40张图片

##测试

SaltStack自动化运维工具_第41张图片

SaltStack自动化运维工具_第42张图片

##为server52、server53定义不同的pillar变量

SaltStack自动化运维工具_第43张图片

##在state文件中引用grains和pillar变量

SaltStack自动化运维工具_第44张图片

##测试

以上配置apache的state文件可以优化为以下格式

SaltStack自动化运维工具_第45张图片

Job管理

1、Job简介

master在下发指令任务时,会附带上产生的jid,minion在接收到指令开始执行时,会在本地的/var/cache/salt/minion/proc目录下产生以该jid命名的文件,用于在执行过程中master查看当前任务的执行情况,minion端指令执行完毕将结果传送给master后,会删除该临时文件

Job缓存默认保存24小时: # vim /etc/salt/master keep_jobs: 24

master端Job缓存目录:/var/cache/salt/master/jobs

2、把Job存储到数据库

SaltStack自动化运维工具_第46张图片

##在minion端配置返回数据库端的基本信息,重启salt-minion

##在master端安装数据库并启动

SaltStack自动化运维工具_第47张图片

##往数据库导入数据,创建库和表(salt.sql文件内容见:salt.returners.mysql)

SaltStack自动化运维工具_第48张图片

##创建数据库用户salt并授权

SaltStack自动化运维工具_第49张图片

##在minion端搭建pip源(pip是python的包管理器,此工具允许用户安装和管理不属于标准库的其他库软件和依赖)

SaltStack自动化运维工具_第50张图片

##安装所需依赖包

SaltStack自动化运维工具_第51张图片

##pip3安装mysql和mysqlclient

SaltStack自动化运维工具_第52张图片

##重启salt-minion端服务后,在master端测试

SaltStack自动化运维工具_第53张图片

SaltStack自动化运维工具_第54张图片

##查看master端上述测试的job缓存,发现job中的数据成功返回至数据库中

SaltStack自动化运维工具_第55张图片

SaltStack自动化运维工具_第56张图片

##在master端配置将自身的job缓存也返回至数据库中

SaltStack自动化运维工具_第57张图片

SaltStack自动化运维工具_第58张图片

##测试返回成功,此处因为未配置server53主机的mysql客户端,因此少一份master端关于server53主机的状态回执数据

关于mysql数据库接口:

MySQL-python又叫MySQLdb,是 Python连接MySQL最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持Python2.x,不支持Python3;Python-MySQL资格最老,核心由C语言打造,接口精炼,性能最棒,缺点是环境依赖较多,安装复杂,近两年已停止更新

由于MySQL-python年久失修,后来出现了它的Fork版本mysqlclient,完全兼容MySQLdb,同时支持Python3.x 

故以上实验中需要配置pip源安装mysqlclient

salt-ssh与salt-syndic

1、salt-ssh

salt-ssh可以独立运行,不需要minion端;使用sshpass进行密码交互,其以串行模式工作,性能下降

SaltStack自动化运维工具_第59张图片

##在salt-ssh的配置文件中指定主机及用户和密码

##停掉对应主机的salt-minion服务进行测试

##可在roster文件中只指定主机和用户,在运行salt-ssh是添加-i参数手动输入密码执行

2、salt-syndic

syndic其实就是个代理,隔离master与minion;Syndic必须要运行在master上,再连接到另一个Topmaster上,Topmaster下发的状态需要通过syndic来传递给下级master,minion传递给master的数据也是由syndic传递给topmaster;topmaster并不知道有多少个minion;syndic与topmaster的file_roots和pillar_roots的目录要保持一致

SaltStack自动化运维工具_第60张图片

环境搭建:

server54主机作为topmaster端        IP=172.25.100.54

server51主机作为下级master        IP=172.25.100.51

server52主机未salt-minion端        IP=172.25.100.52

server53主机为salt-minion端        IP=172.25.100.53

SaltStack自动化运维工具_第61张图片

##topmaster端配置

SaltStack自动化运维工具_第62张图片

##syndic-master端配置

SaltStack自动化运维工具_第63张图片

##在topmaster端列出的节点是下级master,但操作远程执行是则是minion端返回的回执

SaltStack自动化运维工具_第64张图片

##也可以指定minion远程执行

SaltStack自动化运维工具_第65张图片

##topmaster和syndic-master的配置文件/etc/salt/master中此部分设定需要保持一致,上述实验中此部分内容均未做更改且其未注释语句,则不用考虑此问题

salt-api

1、salt-api简介

SaltStack官方提供有REST API格式的salt-api项目,将使Salt与第三方系统集成变得尤为简单

官方提供了三种api模块:rest_cherrypy | rest_tornado | rest_wsgi

官方链接:

netapi moduleshttps://docs.saltproject.io/en/latest/ref/netapi/all/index.html2、salt-api配置

##安装salt-api

SaltStack自动化运维工具_第66张图片

SaltStack自动化运维工具_第67张图片

##生成证书

SaltStack自动化运维工具_第68张图片

SaltStack自动化运维工具_第69张图片

##生成用户认证文件;激活rest_cherrypy模块;重启salt-master,salt-api

3、salt-api使用

SaltStack自动化运维工具_第70张图片

##获取认证token

##推送任务测试(token为上图命令获取到的值)

python脚本调用saltapi

SaltStack自动化运维工具_第71张图片

SaltStack自动化运维工具_第72张图片

SaltStack自动化运维工具_第73张图片

SaltStack自动化运维工具_第74张图片

SaltStack自动化运维工具_第75张图片

调用输出:

你可能感兴趣的:(运维)