前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DevOps工具介绍连载(4)——SALTSTACK

DevOps工具介绍连载(4)——SALTSTACK

作者头像
顾翔
发布2020-02-19 15:20:22
8320
发布2020-02-19 15:20:22
举报

1 salt介绍

saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。

2|0salt强大吗

系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等等。如果主机数量庞大,单靠人工维护实在让人难以忍受。

  早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是1、系统配置管理,2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。

  salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。

  不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。 

  Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。

3|0saltstack的运行方式

  • Local 本地运行,交付管理
  • Master/Minion <<< 常用方式
  • Salt SSH 不需要客户端

4|0salt部署基本架构

在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。

salt架构中的一种就是master > minion。

在远程执行系统中,salt用python通过函数调用完成任务。

运行salt依赖包

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

解决依赖包最简单的办法就是用安装包管理器,yum工具

5|0服务器环境准备

服务器环境

centos7(master)

centos7(master)

ip地址

192.168.178.131

192.168.178.132

身份

master

slave

软件包

salt-master

salt-minion

修改虚拟机ip地址为静态地址,并且确保可上网

关闭服务器安全策略

安装saltstack

salt软件包需要epel源的支持,那么下载

EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空缓存
yum makecache #生成yum缓存

安装好epel源就可以开始安装salt了

查看salt包
yum list salt

安装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
salt-minion的配置文件是/etc/salt/minion
配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面

配置salt-master

超哥的salt-master文件

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
interface: 0.0.0.0  #绑定到本地的0.0.0.0地址
publish_port: 4505  #管理端口,命令发送
user: root      #运行salt进程的用户
worker_threads: 5  #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
ret_port: 4506  #执行结果返回端口
pidfile: /var/run/salt-master.pid #pid文件位置
log_file: /var/log/salt/master  #日志文件地址

#自动接收minion的key
auto_accept: False

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

超哥的satl-minion文件

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: master
master_port: 4506
user: root
id: slave
acceptance_wait_time: 10
log_file: /var/log/salt/minion

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

启动salt-master和salt-minion

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

systemctl start salt-minion
systemctl start salt-master

#检查salt状态
systemctl status salt-minion
systemctl status salt-master

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

在master上接收minion秘钥

在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。

在salt-master执行

salt-key命令用于管理mionion秘钥

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
slave    #此时已经出现slave
Rejected Keys:

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

此时slave已经出现在unaccepted keys中,说明minion已经和master联系,并且master已经获取了minion的公钥,等待下一步指令。

检查master和minion的秘钥匹配

在master上执行

[root@master ~]# salt-key -f slave
Unaccepted Keys:
slave:  0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea

然后可以在minion上获取minion的秘钥

[root@slave ~]# salt-call --local key.finger
local:
    0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea

因此可确认秘钥匹配,在master上接收秘钥

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master ~]# salt-key -a slave
The following keys are going to be accepted:
Unaccepted Keys:
slave
Proceed? [n/Y] y
Key for minion slave accepted.

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

确认接收秘钥后,检验minion秘钥是否被接收

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master ~]# salt-key -L
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

秘钥接收完成后,就可以执行第一条salt啦

6|0salt-key

只有Master接受了Minion Key后,才能进行管理。具体的认证命令为salt-key常用的有如下命令。

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@linux-node1 ~]# salt-key -L
Accepted Keys:#已经接受的key
Denied Keys:#拒绝的key
Unaccepted Keys:#未加入的key
Rejected Keys:#吊销的key

#常用参数
-L  #查看KEY状态
-A  #允许所有
-D  #删除所有
-a  #认证指定的key
-d  #删除指定的key
-r  #注销掉指定key(该状态为未被认证)

#在master端/etc/salt/master配置
auto_accept: True   #如果对Minion信任,可以配置master自动接受请求

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

7|0salt-key的使用

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

#列出当前所有的key
[root@salt0-master ~]# salt-key
Accepted Keys:
salt1-minion.example.com
salt2-minion.example.com
salt3-minion.example.com
salt4-minion.example.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:

#添加指定minion的key
[root@salt0-master ~]# salt-key  -a salt1-minion.example.com -y
#添加所有minion的key
[root@salt0-master ~]# salt-key  -A  -y

#删除指定的key
[root@salt0-master ~]# salt-key -d salt1-minion.example.com -y
#删除所有的key
[root@salt0-master ~]# salt-key -D -y

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

8|0日常命令参数

首先知道master和minion都安装了什么文件,然后才知道怎么操作

master端

rpm -ql salt-master

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

/etc/salt/master      # salt master主配置文件
/usr/bin/salt           #salt master 核心操作命令
/usr/bin/salt-cp       #salt 文件传输命令
/usr/bin/salt-key    #salt证书管理
/usr/bin/salt-master    #salt master 服务命令
/usr/bin/salt-run          #salt master runner命令

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

slave端

[root@slave  ~]$rpm -ql salt-minion
/etc/salt/minion     #minion配置文件
/usr/bin/salt-call    #拉取命令
/usr/bin/salt-minion   #minion服务命令
/usr/lib/systemd/system/salt-minion.service   #minion启动脚本

9|0第一条salt命令

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master ~]# salt '*' test.ping
slave:
    True

# salt 是一个命令
# * 表示目标主机, 在这里代表所有目标主机
# test.ping是salt远程执行的一个模块下面的方法。

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

这是条很简单的探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活。

test模块实际上还有许多其他的函数

test其他函数

测试下test.echo

[root@master 192.168.199.155 ~]$salt '*' test.echo 'chaoge nb666'
slave:
    chaoge nb666

test.fib生成斐波那契数列

菲波那切数列定义是第0项是0,第1项是1,数列从第3项开始,每一项等于前两项之和。

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master 192.168.199.155 ~]$salt '*' test.fib 50
slave:
    |_
      - 0
      - 1
      - 1
      - 2
      - 3
      - 5
      - 8
      - 13
      - 21
      - 34
    - 1.09672546387e-05

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

小结

此前在机器上安装了salt minion和salt master,进行了最简单的连接,然后master接受了minion的秘钥,运行了第一条test.ping命令

10|0salt命令组成结构

在命令行输入的命令都是     执行模块

等到命令写入到文件中, 就叫做状态模块

salt --help #即可查看salt帮助

[root@master 192.168.199.155 ~]$salt --help Usage: salt [options] '<target>' <function> [arguments]

salt命令 参数 目标 salt模块的函数 远程执行的参数

完整的五部分命令

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

#--summary参数显示salt命令的概要
[root@master 192.168.199.155 ~]$salt --summary '*' cmd.run 'hostname'
slave:
    slave


-------------------------------------------
Summary
-------------------------------------------
# of Minions Targeted: 1
# of Minions Returned: 1
# of Minions Did Not Return: 0
-------------------------------------------

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

列出所有salt的sys模块

#与系统交互的sys模块
[root@master 192.168.11.72 ~]$salt 'slave' sys.list_modules

远程执行命令模块

cmd是超级模块,所有shell命令都能执行

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master 192.168.11.72 ~]$salt 'slave' cmd.run 'ps -ef|grep python'
slave:
    root        905      1  0 07:31 ?        00:00:02 /usr/bin/python -Es /usr/sbin/tuned -l -P
    root       3843      1  0 11:05 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
    root       3846   3843  0 11:05 ?        00:00:01 /usr/bin/python /usr/bin/salt-minion
    root       4031      1  0 11:31 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
    root       4032   4031  0 11:31 ?        00:00:00 /bin/sh -c ps -ef|grep python
    root       4034   4032  0 11:31 ?        00:00:00 grep python

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

远程安装nginx

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

#在minion上安装nginx
[root@master 192.168.11.72 ~]$salt 'slave' pkg.install "nginx"
#卸载minion上的nginx
[root@master 192.168.11.72 ~]$salt 'slave' pkg.remove "nginx"
#检查pkg包的版本
[root@master 192.168.11.72 ~]$salt 'slave' pkg.version "nginx"

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

远程管理服务模块

管理服务是系统管理员的重要任务,通过salt管理minion服务会很简单,使用service模块

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master 192.168.11.72 ~]$salt 'slave' service.start "nginx"
slave:
    True
[root@master 192.168.11.72 ~]$salt 'slave' service.status "nginx"
slave:
    True
[root@master 192.168.11.72 ~]$salt 'slave' service.stop "nginx"
slave:
    True

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

与标准的Linux命令一样,salt的命令一样用法

--out控制salt命令结果输出的格式

JSON

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master 192.168.199.155 ~]$salt --out=json '*' cmd.run_all 'hostname'
{
    "slave": {
        "pid": 2268,
        "retcode": 0,
        "stderr": "",
        "stdout": "slave"
    }
}

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

YAML

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master 192.168.199.155 ~]$salt --out=yaml '*' cmd.run_all 'hostname'
slave:
  pid: 2289
  retcode: 0
  stderr: ''
  stdout: slave

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

10|1YAML讲解

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

在学习saltstack过程中,第一要点就是States编写技巧,简称SLS文件。这个文件遵循YAML语法。初学者看这玩意很容易懵逼,来,超哥拯救你学习YAML语法
json xml yaml 数据序列化格式
yaml容易被解析,应用于配置文件

salt的配置文件是yaml配置文件,不能用tab
saltstack,k8s,ansible都用的yaml格式配置文件


语法规则
    大小写敏感
    使用缩进表示层级关系
    缩进时禁止tab键,只能空格
    缩进的空格数不重要,相同层级的元素左侧对其即可
    # 表示注释行
yaml支持的数据结构
    对象:键值对,也称作映射 mapping 哈希hashes 字典 dict    冒号表示 key: value   key冒号后必须有
    数组:一组按次序排列的值,又称为序列sequence 列表list     短横线  - list1
    纯量:单个不可再分的值

对象:键值对
yaml
    first_key:
      second_key:second_value

python
    {
        'first_key':{
            'second_key':'second_value',
        }
    }

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

YAML是YAML Ain't Markup Language的首字母缩写,YAML的语法简单,
结构体通过空格展示
项目使用 '-' 代表
键值对通过 ':' 分割
YAML语法遵循固定的缩进风格,表示数据层级结构关系,saltstack需要每个缩进级别由2个空格组成,禁止用tabs!!!

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

Python中的字典是简单的键值对,go语言中称作哈希表map
字典的key通过冒号分割

key在YAML中表现形式是一个冒号结果的字符串
my_key: my_value
转化到python语法中,上述命令为
{'my_key':'my_value'}

value还可以通过缩进和key关联,四个空格!!
my_key:
    my_value
转化为python语法同样的
{'my_key':'my_value'}

YAML语法中字典是可以嵌套的
one_dict_key:
    two_dict_key:value_dict
转化为python语法

{   'one_dict_key':{     'two_dict_key':'value_dict'   } }

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

短横杠
YAML语法表示列表,使用一个横杠加一个空格
多个项使用同样的缩进级别作为同一个列表的部分
- list_value_one
- list_value_two
- list_value_three
列表可以作为一个键值对的value,例如一次性要安装多个软件
my_dict:
  - l1
  - l2
  - l3
转化为python代码理解就是

{   'my_dict':['l1','l2',;l3] }

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

11|0 目标定位字符串

  之前的salt命令我们都是使用 salt '*'控制所有minion,并且我们只有一个“slave”,但是生产环境的服务器很可能是成千上百的minion,因此需要灵活地定位所需的服务器并且执行远程命令。

1.全局匹配
[root@master 192.168.11.72 ~]$salt '*' test.ping
slave:
    True

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

Linux通配符
*               代表任意字符,或空字符串
?               代表一个字符,不可以为空
[a-z] [0-9]     代表任何一个小写字母

[root@master 192.168.11.72 ~]$salt 'slav?' test.ping
slave:
    True

[root@master 192.168.11.72 ~]$salt '[a-z]lave' test.ping
slave:
    True
salt海支持python的re正则表达式

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

12|0state模块定义主机状态

之前执行的远程命令,都是一个过程式的,类似一段shell或者python脚本执行,执行一次触发一次相同的功能。

那么大量的minion上运行远程命令就必须使用salt提供的“状态管理”了,状态是对minion的一种描述和定义,运维不需要关心部署是如何完成的,只需要描述minion需要达到什么状态。

接下来通过state模块部署nginx

master端

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

vim /etc/salt/master
#打开注释,写入以下,必须严格遵循语法,空格
file_roots:
  base:
    - /srv/salt/base
 dev:
   - /srv/salt/dev
 test:
   - /srv/salt/test
 prod:
   - / srv/salt/prod

#此步骤在master和minion都需要执行,都需要文件夹,和nginx.sls文件 [root@master ~]$mkdir -p /srv/salt/{base,dev,test,prod}

[root@slave ~]$mkdir -p /srv/salt/{base,dev,test,prod}

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

#这个nginx.sls状态文件,在master和minion上都得有
[root@master /srv/salt/base]$cat nginx.sls
nginx-install:
  pkg.installed:
    - name: nginx

nginx-service:
  service.running:
    - name: nginx
    - enable: True

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

解释下nginx.sls描述文件
sls配置文件都遵循YAML语言描述
第一条命令使用了pkg.install安装命令,相对于运行了yum install,而此时state模块会判断nginx是否安装了,如果没有安装就进行安装,安装了就什么都不做。
状态描述都会遵循这个原则,只有检测到真实状态和所需状态不一就会执行此功能,这种性质叫做幂等性。

此时用state模块部署nginx软件,通过我们编写的nginx.sls描述性配置文件,命令行调用state模块的sls函数。

#启动命令,此时slave已经安装且存活了nginx,进行状态管理
[root@master  /srv/salt/base]$salt 'slave' state.sls nginx

可以去slave测试关闭nginx,删除nginx,重新执行命令,一样可以安装启动nginx

通过master检查slave的nginx状态

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master 192.168.199.155 /srv/salt/base]$salt 'slave' cmd.run 'ps -ef|grep nginx'
slave:
    root       8543      1  0 Sep14 ?        00:00:00 nginx: master process /usr/sbin/nginx
    nginx      8544   8543  0 Sep14 ?        00:00:00 nginx: worker process
    root       8592   8591  0 00:03 ?        00:00:00 /bin/sh -c ps -ef|grep nginx
    root       8594   8592  0 00:03 ?        00:00:00 /bin/sh -c ps -ef|grep nginx

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

13|0Salt采集静态信息之Grains

如果你入职了,你的老板让你收集公司300台服务器的相关硬件信息,你是一台台登录呢?还是选择用salt收集呢?又或者用python的salt-api写脚本呢

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

Grains 是saltstack组件中非常重要之一,在配置部署时候回经常使用,Grains记录minion的静态信息,比如常用属性,CPU、内存、磁盘、网络信息等。
Minions的Grains信息是Minion启动时采集汇报给Master的
Grains是以 key  value形式存储的数据库,可以看做Host的元数据(metadata)
Grains保存着收集到的客户端的详细信息
如果slave机器数据变化,grains就过期了
在生产环境中需要自定义Grains,可以通过
Minion配置文件
Grains相关模块定义
Python脚本定义

salt 'slave' sys.doc grains#查看grains的命令用法

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

Grains

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

Grains人为是描述minion本身固有的静态属性数据,列出主机所有Grains数据

[root@master 192.168.11.72 ~]$salt 'slave' grains.items slave: ---------- SSDs: biosreleasedate: 05/19/2017 biosversion: 6.00  

信息过长,已经省略

salt 'slave' grains.ls #列出所有grains方法

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

检索某些数据

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master 192.168.11.72 ~]$salt 'slave' grains.item os id host
slave:
    ----------
    host:
        slave
    id:
        slave
    os:
        CentOS

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

利用Grains静态信息定位主机

超哥以前公司有100+的redhat操作系统,80+的centos,在不知道salt之前很是懵逼。。

除了系统的不同,还有不同的系统版本,redhat6.x centos6.x..

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

两种写法:
salt '*' grains.item key1 key2 key3
salt '*' -G

#定位Cenots的机器
[root@master 192.168.11.72 ~]$salt -G 'os:CentOS' test.ping
slave:
    True
#定位操作系统系统是7系列的机器

[root@master 192.168.11.72 ~]$salt -G 'osrelease:7*' test.ping slave: True

#找出ip地址

salt '*' grains.item fqdn_ip4

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

因此用grains.items列出所有的数据匹配主机,以及根据单一信息定位数据,Grains还可以自定义来满足不同的需求。

自定义设置Grains数据

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

#设置数据
[root@master 192.168.11.72 ~]$salt 'slave' grains.setval cpu_num 8
slave:
    ----------
    cpu_num:
        8
#查询数据

[root@master 192.168.11.72 ~]$salt 'slave' grains.item cpu_num
slave:
    ----------
    cpu_num:
        8

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

在master端设置Grains静态数据,原理会将此数据添加到minion服务器的配置文件的/etc/salt/grains

[root@slave 192.168.11.71 ~]$cat /etc/salt/grains
cpu_num: 8

对于复杂的数据结构,可以添加灵活的JSON语法

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master 192.168.11.72 ~]$salt 'slave' grains.setval cpu_info '["Intel","Xeon","10"]'
slave:
    ----------
    cpu_info:
        - Intel
        - Xeon
        - 10
[root@master 192.168.11.72 ~]$salt 'slave' grains.item cpu_info
slave:
    ----------
    cpu_info:
        - Intel
        - Xeon
        - 10

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

此时可以检查minion服务器上的grains文件

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@slave 192.168.11.71 ~]$cat /etc/salt/grains
cpu_info:
- Intel
- Xeon
- '10'
cpu_num: 8

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

因此Grains数据写入配置文件后,重启salt-minion服务,数据也不会丢失

想要删除可以通过grains.delval命令删除,或者去minion的配置文件删除配置一样完成操作(或者删除文件)

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

1.方法一,清空值
[root@master 192.168.11.72 ~]$salt 'slave' grains.delval cpu_info
slave:
    None
[root@master 192.168.11.72 ~]$salt 'slave' grains.delval cpu_num
slave:
    None

2.方法二 删除minion的grains配置文件,重启服务

[root@slave 192.168.11.71 ~]$rm -rf /etc/salt/grains [root@slave 192.168.11.71 ~]$!sys systemctl restart salt-minion

检查结果删除成功

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

14|0 数据管理中心之Pillar组件

Pillar也是saltstack组件中非常重要的组件之一,称作数据管理中心,经常配合states在大规模的配置管理中使用。

Pillar是动态的,存储在master端,提供和给minion端

Pillar在SaltStack中主要的作用是存储和定义配置管理中需要的一些数据,比如软件版本号,用户账号密码等,保证敏感数据不被其他minion看到

存储格式与Grains类似,都是YAML格式

在master配置文件中有一段Pillar settings选项专门定义Pillar的参数

cat /etc/salt/master
#此配置代表pillar的工作根目录,在/srv/pillar下,然后可以新建sls文件
#pillar_roots:
#  base:
#    - /srv/pillar

默认pillar的工作目录在/srv/pillar目录下,执行如下代码

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

mkdir -p /srv/pillar
#指定环境,标记,引用packages.sls和services.sls
vim /srv/pillar/top.sls
base:
  '*':
      - packages
      - services

vim /srv/pillar/packages.sls
nginx:
    packages-name: nginx
    version: 1.12.2

vim /srv/pillar/packages.sls
nginx:
    port: 80
    user: root

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

检查我们设置的pillar值

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master 192.168.199.155 /srv/pillar]$salt '*' pillar.item nginx
slave:
    ----------
    nginx:
        ----------
        packages-name:
            nginx
        port:
            80
        user:
            root
        version:
            1.12.2

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

15|0Pillar与Grains对比

pillar与Grains对比

类型     数据采集方式   应用场景                   定义位置
Grains   静态         minion启动时收集  数据查询  目标选择  配置管理   minion
Pillar   动态         master进行自定义  目标选择  配置管理  敏感数据   master

16|0Python API调用SaltStack

SaltStack本身提供salt(usr/bin/salt)来交互管理,但是去服务器上敲命令肯定不是一个长远之计,这时候python就体现了nb的功能。

Python API就是给Python提供的API使用,需要在SaltStack master上运行

实例代码

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

[root@master  ~]$python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import salt.client
>>> local = salt.client.LocalClient()  #<salt.client.LocalClient object at 0x7f886dbdd850>
>>> local.cmd('*','cmd.run',['hostname'])#向所有minion发送命令
{'slave': 'slave'}

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

因此python API就是提供了向saltstack发送命令的入口。

通过API获取saltstack的配置文件

获取master配置文件

>>> import salt.config #导入salt配置模块
>>> m_opts=salt.config.client_config('/etc/salt/master') #读取salt配置文件,得到一个字典数据

获取minion配置文件

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import salt.client
>>> salt.config.minion_config('/etc/salt/minion') #读取minion配置文件,得到字典数据,通过字典方法可以查看信息

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

16|1Python API介绍

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

/usr/bin/salt默认使用的接口是LocalClient,该接口只能在salt master上使用
[root@master  ~]$python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import salt.client
>>> local = salt.client.LocalClient()  #<salt.client.LocalClient object at 0x7f886dbdd850>
>>> local.cmd('*','cmd.run',['hostname'])#向所有minion发送命令
{'slave': 'slave'}

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

逐条返回结果,local.cmd_iter()

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

>>> ret=local.cmd_iter('*','test.ping')
>>> ret
<generator object cmd_iter at 0x7f886d455c80>
>>> for i in ret:
...     print i
...
{'slave': {'retcode': 0, 'ret': True}}

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

菲波那切数列

>>> local.cmd('*','test.fib',[10])
{'slave': [[0, 1, 1, 2, 3, 5, 8], 2.1457672119140625e-06]}

检查minion服务器信息

>>> local.cmd('*','cmd.run',['hostname'])
{'slave': 'slave'}
>>> local.cmd('*','cmd.run',['ifconfig'])
>>> local.cmd('*','cmd.run',['crontab -l'])
>>> local.cmd('*','cmd.run',['df -h'])

启停minion的服务,如nginx

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

< style="outline: none;color: rgb(45, 174, 191);background: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png") left top no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;" title="复制代码">

>>> local.cmd('*','service.stop',['nginx'])
{'slave': True}
>>> local.cmd('*','service.status',['nginx'])
{'slave': False}
>>> local.cmd('*','service.start',['nginx'])
{'slave': True}

< style="outline: none;color: rgb(45, 174, 191);background-image: url("https://mmbiz.qpic.cn/mmbiz_png/5OND0ssZ3iaO0mbWfibM2NQ39IicqnT1JQGia8carNRfa0ZBx025yJHYobyKjFlFAa8Ag4CjFJQW45Oq2ogKaxLrjA/640?wx_fmt=png");background-position: left top;background-size: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-repeat: no-repeat;display: inline-block;width: 16px;height: 16px; right: 19px;top: 19px;opacity: 0.3;background-color: rgb(245, 245, 245) !important;border-width: initial !important;border-style: none !important;border-color: initial !important;" title="复制代码">

__EOF__

作  者心跳° 出  处:https://www.cnblogs.com/xintiao-/p/10380656.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2|0salt强大吗
  • 3|0saltstack的运行方式
  • 4|0salt部署基本架构
  • 5|0服务器环境准备
    • 修改虚拟机ip地址为静态地址,并且确保可上网
      • 关闭服务器安全策略
        • 安装saltstack
          • salt端口
            • 配置文件
              • 启动salt-master和salt-minion
                • 在master上接收minion秘钥
                  • 检查master和minion的秘钥匹配
                  • 6|0salt-key
                  • 7|0salt-key的使用
                  • 8|0日常命令参数
                  • 9|0第一条salt命令
                    • 小结
                    • 10|0salt命令组成结构
                      • 与标准的Linux命令一样,salt的命令一样用法
                        • 10|1YAML讲解
                          • 自定义设置Grains数据
                          • 通过API获取saltstack的配置文件
                      • 11|0 目标定位字符串
                      • 12|0state模块定义主机状态
                      • 13|0Salt采集静态信息之Grains
                      • 14|0 数据管理中心之Pillar组件
                      • 15|0Pillar与Grains对比
                      • 16|0Python API调用SaltStack
                        • 16|1Python API介绍
                        相关产品与服务
                        主机安全
                        主机安全(Cloud Workload Protection,CWP)基于腾讯安全积累的海量威胁数据,利用机器学习为用户提供资产管理、木马文件查杀、黑客入侵防御、漏洞风险预警及安全基线等安全防护服务,帮助企业构建服务器安全防护体系。现支持用户非腾讯云服务器统一进行安全防护,轻松共享腾讯云端安全情报,让私有数据中心拥有云上同等级别的安全体验。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档