Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Saltstack自动化操作记录(2)-配置使用

Saltstack自动化操作记录(2)-配置使用

作者头像
洗尽了浮华
发布于 2018-01-22 06:23:41
发布于 2018-01-22 06:23:41
7990
举报
文章被收录于专栏:散尽浮华散尽浮华

之前梳理了Saltstack自动化操作记录(1)-环境部署,下面说说saltstack配置及模块使用:

为了试验效果,再追加一台被控制端minion机器192.168.1.118 需要在master控制端机器上做好主机名映射关系

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# cat /etc/hosts
127.0.0.1   localhost wutao localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.101  linux-node1 
192.168.1.102  linux-node2
192.168.1.118  linux-node3

配置新追加的这台minion机器(配置步骤和之前一样) [root@linux-node3 ~]# cat /etc/salt/minion|grep -v "^#"|grep -v "^$"

代码语言:javascript
AI代码解释
复制
master: 192.168.1.101
id: minion-192-168-1-118

[root@linux-node3 ~]# /etc/init.d/salt-minion start Starting salt-minion daemon: [ OK ]

在master控制端查看:

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt-key -L
Accepted Keys:
minion-192-168-1-102
minion-192-168-1-118
Unaccepted Keys:
Rejected Keys:

                                    下面针对saltstack在运维中的常规操作做一详细解析:                                    

1)利用Saltstack远程执行命令 saltstack的一个比较突出优势就是具备执行远程命令的功能。操作方法与func相似,可以帮助运维人员完成集中化的操作平台。 命令格式: slat '<操作目标>' <方法> [参数]

如下示例: 查看被控制机的内存使用情况

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt '*' cmd.run 'free -m'
minion-192-168-1-102:
                 total       used       free     shared    buffers     cached
    Mem:          3832       3639        193          0        223       1552
    -/+ buffers/cache:       1863       1969
    Swap:         1535         13       1522
minion-192-168-1-118:
                 total       used       free     shared    buffers     cached
    Mem:          3832       3680        152          0        175       1958
    -/+ buffers/cache:       1545       2286
    Swap:         1535         38       1497

其中针对<操作目标>,saltstack提供了多种方法对被控制端(id)进行过滤。下面列举常用的具体参数: a)-E:--pcre      通过正则表达式进行匹配。 示例:查看被控制端minion-192-168-字符开头的主机id名是否连通。

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt -E '^minion-192-168*' test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True

b)-L:--list        以主机id名列表的形式进行过滤,格式与Python的列表相似,即不同主机id名称使用逗号分隔。 示例:获取主机id名为minion-192-168-1-102、minion-192-168-1-118;获取完整操作系统发行版名称。

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt -L 'minion-192-168-1-102,minion-192-168-1-118' grains.item osfullname
minion-192-168-1-102:
    ----------
    osfullname:
        CentOS
minion-192-168-1-118:
    ----------
    osfullname:
        CentOS

c)-G:--grain     根据被控主机的grains信息(grains是saltstack重要组件之一,重要作用是收集被控主机的基本系统信息)进行匹配过滤,格式为'<grain value>:<glob expression>'。 比如过滤内核为Linux的主机可以写成'kernel:Linux',如果同时需要正则表达式的支持可以切成--grain-pcre参数来执行。 示例:获取主机发行版本为6.8的Python版本号

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt -G 'osrelease:6.8' cmd.run 'python -V'
minion-192-168-1-102:
    Python 2.7.8
minion-192-168-1-118:
    Python 2.7.8

d)-I:--pillar       根据被控主机的pillar(作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用)信息进行过滤匹配,格式为'对象名称:对象值',比如过滤所有具备'apache:httpd' pillar值的主机。 示例:探测具有"nginx:root:/data"信息的主机连通性

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt -I 'nginx:root:/data' test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True

其中pillar属性配置文件如下(后面会讲到)

代码语言:javascript
AI代码解释
复制
nginx:
    root:/data

e)-N:--nodegroup       根据主控端master配置文件中的分组名称进行过滤。 如下配置的组信息(主机信息支持正则表达式、grain、条件运算符等),通常根据业务类型划分,不同业务具备相同的特点,包括部署环境、应用平台、配置文件等。

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# vim /etc/salt/master
.......
nodegroups:
  web1group: 'L@minion-192-168-1-102,minion-192-168-1-118'          //前面空两格,冒号后面空一格
  web2group: 'L@minion-192-168-1-102'

其中: L@    表示后面的主机id格式为列表,即主机id以逗号隔开; G@   表示以grain格式描述; S@   表示以ip子网或地址格式描述 示例:探测web1group(或web2group)被控主机的连通性

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt -N web1group test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True
[root@linux-node1 ~]# salt -N web2group test.ping
minion-192-168-1-102:
    True

f)-C:--compound        根据条件运算符not、and、or去匹配不同规则的主机信息。 示例:探测minion-192开头并且操作系统为Centos的主机连通性。

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt -C 'E@^minion-192-168* and G@os:Centos' test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True

其中: not语句不能作为第一个条件执行,不过可以通过以下方法来规避: 示例:探测非192-168-1-102开头的主机连通性

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt -C '* and not E@^192-168-1-102*' test.ping
minion-192-168-1-118:
    True
minion-192-168-1-102:
    True

g)-S:--ipcidr        根据被控主机的ip地址或ip子网进行匹配。 示例:

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt -S 192.168.0.0/16 test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True
[root@linux-node1 ~]# salt -S 192.168.1.0/24 test.ping
minion-192-168-1-102:
    True
minion-192-168-1-118:
    True
[root@linux-node1 ~]# salt -S 192.168.1.118 test.ping
minion-192-168-1-118:
    True

2)Saltstack常用模块及API saltstack提供了非常丰富的功能模块,涉及操作系统的基础功能、常用工具支持等,更多模块信息请见:https://docs.saltstack.com/en/latest/ref/modules/all/index.html 当然,也可以通过sys模块列出当前版本支持的所有模块:

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt '*' sys.list_modules
minion-192-168-1-102:
    - acl
    - aliases
    - alternatives
    - archive
    - blockdev
    - buildout
    - cloud
    - cmd
    - composer
    - config
    - cp
    - cron
    .......

接下来抽取出常见的模块进行介绍,并列举模块API的用法。 API原理:通过调用master client模块,实例化一个LocalClient对象,再调用cmd()方法来实现的。 如下是API实现test.ping的示例:

代码语言:javascript
AI代码解释
复制
import salt.client  
client = salt.client.LocalClient()
ret = client.cmd('*','test.ping')
print ret

结果以一个标准的python字典形式的字符串返回吗,可以通过eval()函数转换成python的字典类型,方便后续的业务逻辑处理,程序运行结果如下:

代码语言:javascript
AI代码解释
复制
{'minion-192-168-1-102': True, 'minion-192-168-1-118': True}

截图如下:

----------------------------------------------------------------------------------------------------------------- 注意:将字符字典转换成python的字典类型,推荐使用ast模块的literal_eval()方法, 可以过滤表达式中的恶意函数。 -----------------------------------------------------------------------------------------------------------------

a)Archive模块 功能:实现系统层面的压缩包调用,支持gunzip、gzip、rar、tar、unrar、unzip等。 示例1:采用gunzip解压被控制机的/tmp/wangshibo.gz包

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt '*' archive.gunzip /tmp/wangshibo.gz
minion-192-168-1-102:
minion-192-168-1-118:

示例2:采用gzip压缩被控制机的/opt/test.txt文件

代码语言:javascript
AI代码解释
复制
[root@linux-node1 ~]# salt '*' archive.gzip /opt/test.txt
minion-192-168-1-102:
minion-192-168-1-118:

到被控制机上查看是否做了压缩: 192.168.1.102:

代码语言:javascript
AI代码解释
复制
[root@linux-node2 ~]# ll /opt/test.txt.gz 
-rw-r--r--. 1 root root 29 Feb 13 22:09 /opt/test.txt.gz

192.168.1.118:

代码语言:javascript
AI代码解释
复制
[root@linux-node3 ~]# ll /opt/test.txt.gz 
-rw-r--r--. 1 root root 29 Feb 13 22:09 /opt/test.txt.gz

其他示例:

代码语言:javascript
AI代码解释
复制
将被控制机的/mnt/nginx-1.9.7.tar.gz包解压,解压默认放到被控制机的当前用户家目录(/root)路径下(注意:archive.tar后面的参数前不能加-[root@linux-node1 ~]# salt '*' archive.tar zxf /mnt/nginx-1.9.7.tar.gz
minion-192-168-1-118:
minion-192-168-1-102:

到其中一台被控制机上检查:
[root@linux-node2 ~]# cd /root/
[root@linux-node2 ~]# ls
nginx-1.9.7

将被控制机的/mnt/heihei.tar.bz2包解压,解压默认放到被控制机的当前用户家目录(/root)路径下
[root@linux-node1 ~]# salt '*' archive.tar jxf /mnt/heihei.tar.bz2
minion-192-168-1-102:
minion-192-168-1-118:

------------------------------------------------------
将被控制机的/mnt/test打包到/mnt下的test.tar.gz
[root@linux-node1 ~]# salt '*' archive.tar zcf /mnt/test.tar.gz /mnt/test
minion-192-168-1-118:
    - tar: Removing leading `/' from member names
minion-192-168-1-102:
    - tar: Removing leading `/' from member names

将被控制机的/mnt/huihui打包到/opt下的huihui.tar.bz2
[root@linux-node1 ~]# salt '*' archive.tar jcf /opt/test.huihui.bz2 /mnt/huihui
minion-192-168-1-102:
    - tar: Removing leading `/' from member names
minion-192-168-1-118:
    - tar: Removing leading `/' from member names

针对上面通过archive模板压缩后的包再进行解压缩,发现解压缩后的文件路径会带有它原来的上级目录!如下:
[root@linux-node1 ~]# salt '*' archive.tar zxf /mnt/test.tar.gz 
minion-192-168-1-102:
minion-192-168-1-118:
[root@linux-node1 ~]# salt '*' archive.tar jxf /opt/test.huihui.bz2 
minion-192-168-1-102:
minion-192-168-1-118:

到其中一台被控制机上检查:
[root@linux-node2 ~]# cd /root/
[root@linux-node2 ~]# ls
mnt
[root@linux-node2 ~]# ls mnt/
huihui  test
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-02-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Saltstack自动化操作记录(1)-环境部署
早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用。 Saltstack知多少 Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中化管理平台,几分钟内便可运行起来,速度够快,服务器之间秒级通讯,扩展性好,很容易批量管理上万台服务器,显著降低人力与运维成本;它具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func;通过部署SaltStack环境,可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进
洗尽了浮华
2018/01/22
1.8K0
Saltstack自动化操作记录(1)-环境部署
Saltstack之SSH简介
安装 yum install -y salt-ssh 官方文档  https://docs.saltstack.com/en/latest/topics/ssh/index.html 配置 vi /etc/salt/roster linux-node1.example.com: host: 192.168.137.11 user: root port: 22 linux-node2.example.com: host: 192.168.137.12 user: root po
人生不如戏
2018/07/03
5080
01 . SaltStack部署配置及简单应用
SaltStack简介 SaltStack saltstack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。 saltstack是使用Python语言开发的,同时也支持restAPI方便二次开发以及和它平台集成,同时官方也发布了一个Web管理界面halite。 Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。 优点 首先,他速度快,基于消息队列
iginkgo18
2020/09/27
2.2K0
01 . SaltStack部署配置及简单应用
Saltstack 快速入门教程
该文介绍了如何使用SaltStack进行自动化运维,包括配置文件管理、主机状态管理、任务计划管理、文件同步复制、操作系统封装、配置文件分发、状态机管理等。同时,文章还介绍了一些常用的SaltStack模块和插件,以及如何使用SaltStack进行自动化部署、配置和运维。
程裕强
2018/01/02
7.5K0
深入理解 DeepSea 和 Salt 部署工具 – Storage6
首先我们通过前几篇文章,已经搭建了一套完整的Ceph集群,对使用salt工具自动化搭建集群有所了解,下面我们就对部署方式进行详解
星哥玩云
2022/07/28
9940
深入理解 DeepSea 和 Salt 部署工具 – Storage6
利用 Saltstack 远程执行命令
操作方法与func(fedorahosted.org/func/) 相似,可以帮助运维人员完成集中化的操作平台。
conanma
2021/08/31
1.4K0
centos7之saltstack使用手册
  salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,通常叫做Salt State System。
超蛋lhy
2018/08/31
1.2K0
centos7之saltstack使用手册
Saltstack远程执行命令(3)
    Saltstack的一个比较突出的优势是具备执行远程命令的功能,可以帮助运维人员完成集中化的操作平台(批量执行服务器命令)
py3study
2020/01/07
1.8K0
Salt-API安装配置及使用
Python3使用saltstack和salt-api 安装python3 1. tar zxvf Python-3.5.1.tgz 2. cd Python-3.5.1 3. ./configure 4. make 5. make install 6. mv /usr/bin/python /usr/bin/python2 # 如果是软连接,可以直接删除 7. ln -s /usr/local/bin/python3.5 /
程序员同行者
2018/07/02
1.3K0
saltstack常用模块、命令
​ SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境。SaltStack作用于仆从和主拓扑。SaltStack与特定的命令结合使用可以在一个或多个下属执行。实现这一点,此时Salt Master可以发出命令,如salt ‘*’ cmd.run ‘ls -l /’。
用户9949933
2023/02/24
1.3K0
Saltstack快速入门
saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。
子润先生
2021/07/06
9360
saltstack实践 - 自动化平台部署
saltstack实践 - 自动化平台部署 saltstack 实践 部署 master 服务端 安装shell yum install salt-master salt-minion salt-ssh \ salt-syndic salt-cloud salt-api -y sed -i 's/#
以谁为师
2019/05/29
1.1K0
服务自动化部署平台之Saltstack总结
      Saltstack是一个新的基础设施管理工具。目前处于快速发展阶段,可以看做是强化的Func+弱化的Puppet的组合。间接的反映出了saltstack的两大功能:远程执行和配置管理。            SaltStack保持了输入、输出、配置文件的一致性,所有文件均使用YAML格式。主要负责配置管理和远程执行(在远程主机运行预定义或任意的命令,也叫远程执行,这是Salt的核心功能。接下来的链接展示了模块(module)和返回器(returner),这是远程执行的关键所在。)      
BGBiao
2018/02/26
1.7K0
Saltstack_使用指南06_远程执行-指定目标
Matchers can be joined using boolean and, or, and not operators. 【复合匹配的时候】
踏歌行
2020/10/15
4430
Saltstack_使用指南06_远程执行-指定目标
Saltstack远程执行
远程执行是Saltstack的核心功能之一。主要使用Salt模块批量给选定的minion端执行相应的命令,并获得返回结果。
用户8851537
2021/07/26
8820
saltstack手册(含官方pdf)
https://docs.saltstack.com/en/pdf/Salt-2019.2.1.pdf
sunsky
2020/08/20
2.6K0
saltstack python api
client.cmd('SN2016-02-04','cmd.run',['free -m'])
py3study
2020/01/03
9870
一小时上手SaltStack
shaonbean
2018/01/02
9400
一小时上手SaltStack
Saltstack_使用指南17_salt-ssh
会把 /etc/salt/pki/master/ssh/salt-ssh.rsa.pub 拷贝到 /app/.ssh/authorized_keys「/app/ 是 yun用户的家目录,参见《Saltstack_使用指南01_部署》说明」。
踏歌行
2020/10/15
6830
Saltstack_使用指南17_salt-ssh
Saltstack_使用指南07_远程执行-执行模块
1. 主机规划 远程执行教程文档 https://docs.saltstack.com/en/latest/topics/tutorials/modules.html 所有模块文档 https://d
踏歌行
2020/10/15
4520
Saltstack_使用指南07_远程执行-执行模块
相关推荐
Saltstack自动化操作记录(1)-环境部署
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场