设为首页 收藏本站
查看: 1299|回复: 0

[经验分享] saltstack之远程执行

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-19 09:22:17 | 显示全部楼层 |阅读模式
#########################################TARGETING############################################

[iyunv@linux-node1 pillar]# salt '*' cmd.run 'w'

linux-node1.example.com:

     09:22:01 up 37 min,  1 user,  load average: 0.00, 0.01, 0.06

    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

    root     pts/0    10.0.0.1         08:45    1.00s  0.95s  0.78s /usr/bin/python

linux-node2.example.com:

     09:22:01 up 37 min,  1 user,  load average: 0.00, 0.00, 0.00

    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

    root     pts/0    10.0.0.1         08:45   21:14   0.02s  0.02s -bash


salt           命令

*              代表指定目标

cmd.run        cmd模块的run方法

w              参数


[iyunv@linux-node1 pillar]# salt 'linux-node1.example.com' cmd.run 'w'

linux-node1.example.com:

     09:28:16 up 43 min,  1 user,  load average: 0.10, 0.04, 0.05

    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

    root     pts/0    10.0.0.1         08:45    1.00s  0.98s  0.80s /usr/bin/python


[iyunv@linux-node1 pillar]# salt 'linux-node[1,2].example.com' cmd.run 'w'

通配符:https://docs.saltstack.com/en/la ... html#targeting-glob


正则表达式:

-E     显示正则匹配

例子:

[iyunv@linux-node1 pillar]# salt -E 'linux-(node1|node2).example.com' test.ping

linux-node2.example.com:

    True

linux-node1.example.com:

    True


-L      显示列表

例子:

[iyunv@linux-node1 pillar]# salt -L 'linux-node1.example.com,linux-node2.example.com' test.ping

linux-node2.example.com:

    True

linux-node1.example.com:

    True


grains:  https://docs.saltstack.com/en/latest/topics/targeting/grains.html

例子:

[iyunv@linux-node1 pillar]# salt -G 'os:CentOS' test.ping                -G  指定为grains

linux-node1.example.com:

    True

linux-node2.example.com:

    True


指定目标主机:https://docs.saltstack.com/en/latest/topics/targeting/pillar.html

[iyunv@linux-node1 pillar]# salt -I 'apache:httpd' test.ping                -I  指定目标主机

linux-node1.example.com:

    True

linux-node2.example.com:

    True


匹配子网或者IP地址:https://docs.saltstack.com/en/latest/topics/targeting/ipcidr.html

例一:

[iyunv@linux-node1 pillar]# salt -S 10.0.0.8 test.ping                     -S   匹配IP地址

linux-node2.example.com:

    True

例二:

[iyunv@linux-node1 pillar]# salt -S 10.0.0.0/24 test.ping                  -S   匹配子网

linux-node2.example.com:         

    True

linux-node1.example.com:

    True


例三:

[iyunv@linux-node1 pillar]# salt -C 'S@10.0.0.8 or G@web:nginx' test.ping     -C    混合使用    -S   匹配IP地址   -G  匹配grains

linux-node2.example.com:

    True

linux-node1.example.com:

    True


混合使用:https://docs.saltstack.com/en/la ... eting/compound.html


节点组(NODE GROUPS):https://docs.saltstack.com/en/la ... ing/nodegroups.html       -N     匹配节点组

#####################################################TARGETING#########################################################


远程执行模块

#########################################FULL LIST OF BUILTIN STATE MODULES############################################

远程执行模块:https://docs.saltstack.com/en/latest/ref/modules/all/index.html

service模块讲解:https://docs.saltstack.com/en/la ... alt.modules.service


场景1:判断当前服务是否在运行

[iyunv@linux-node1 pillar]# salt '*' service.available sshd

linux-node2.example.com:

    True

linux-node1.example.com:

    True


场景2:显示当前正在运行的服务:

[iyunv@linux-node1 pillar]# salt '*' service.get_all


场景3:如果服务正在运行则返回false:

[iyunv@linux-node1 pillar]# salt '*' service.missing sshd

linux-node1.example.com:

    False

linux-node2.example.com:

    False


场景4:服务的启动,关闭,重启,加载及状态:

[iyunv@linux-node1 pillar]# salt '*' service.start/stop/restart/reload/status httpd





network模块讲解:https://docs.saltstack.com/en/la ... alt.modules.network

场景1: 返回所有活动的tcp链接:

[iyunv@linux-node1 pillar]# salt '*' network.active_tcp


场景2: 返回arp

[iyunv@linux-node1 pillar]# salt '*' network.arp


场景3: 返回所有eth0的网卡的相关内容

[iyunv@linux-node1 pillar]# salt '*' network.interface eth0



模块的acl:权限控制管理

[iyunv@linux-node1 pillar]# vim /etc/salt/master

client_acl:               指定oldboy用户只能运行test.ping和network模块

  oldboy:

    - test.ping

    - network.*


[iyunv@linux-node1 pillar]# useradd oldboy          添加oldboy用户

[iyunv@linux-node1 pillar]# passwd oldboy           设置oldboy用户密码

更改用户 oldboy 的密码 。

新的 密码:

无效的密码: 过于简单化/系统化

无效的密码: 过于简单

重新输入新的 密码:

passwd: 所有的身份验证令牌已经成功更新。

[iyunv@linux-node1 pillar]# chmod 777 /var/log/salt/master

[iyunv@linux-node1 pillar]# chmod 755 /var/cache/salt/ /var/cache/salt/master/ /var/cache/salt/master/jobs/ /var/run/salt /var/run/salt/master/

[iyunv@linux-node1 ~]# su - oldboy

[oldboy@linux-node1 ~]$ salt '*' test.ping              ======>此处用oldboy用户执行test.ping能够成功返回,证明oldboy用户可以使用此命令

linux-node2.example.com:

    True

linux-node1.example.com:

    True


[oldboy@linux-node1 ~]$ salt '*' cmd.run 'w'             ======>此处用oldboy用户执行别的命令会报错,因为salt-master的配置文件中没有指定,证明acl设置成功

Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage).


acl中的正则匹配:

场景1 user01只能在linux-node1上执行test.ping命令

[iyunv@linux-node1 pillar]# vim /etc/salt/master

client_acl:

  oldboy:

    - test.ping

    - network.*

  user01:

    - linux-node1*:

    - test.ping


[iyunv@linux-node1 ~]# /etc/init.d/salt-master restart

Stopping salt-master daemon:                               [确定]

Starting salt-master daemon:                               [确定]

[iyunv@linux-node1 ~]# useradd user01

[iyunv@linux-node1 ~]# su - user01

[user01@linux-node1 ~]$ salt 'linux-node1*' test.ping

linux-node1.example.com:

    True

[user01@linux-node1 ~]$ salt '*' test.ping

Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage).


禁止使用***模块,在master配置文件中配置blacklist即可

#########################################FULL LIST OF BUILTIN STATE MODULES############################################


返回模块

#########################################FULL LIST OF BUILTIN RETURNER MODULES############################################

返回数据至mysql数据库:https://docs.saltstack.com/en/la ... alt.returners.mysql

创建salt数据库及所需表:

CREATE DATABASE  `salt`

  DEFAULT CHARACTER SET utf8

  DEFAULT COLLATE utf8_general_ci;

USE `salt`;


CREATE TABLE `jids` (

  `jid` varchar(255) NOT NULL,

  `load` mediumtext NOT NULL,

  UNIQUE KEY `jid` (`jid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `salt_returns` (

  `fun` varchar(50) NOT NULL,

  `jid` varchar(255) NOT NULL,

  `return` mediumtext NOT NULL,

  `id` varchar(255) NOT NULL,

  `success` varchar(10) NOT NULL,

  `full_ret` mediumtext NOT NULL,

  `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

  KEY `id` (`id`),

  KEY `jid` (`jid`),

  KEY `fun` (`fun`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `salt_events` (

`id` BIGINT NOT NULL AUTO_INCREMENT,

`tag` varchar(255) NOT NULL,

`data` mediumtext NOT NULL,

`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

`master_id` varchar(255) NOT NULL,

PRIMARY KEY (`id`),

KEY `tag` (`tag`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;


最后一定要记得授权,至关重要:

mysql> grant all on salt.* to salt@'10.0.0.0/255.255.255.0' identified by 'salt';

Query OK, 0 rows affected (0.00 sec)


返回程序是minion返回的,所以在所有minion端都必须要安装MySQL-python包

[iyunv@linux-node1 ~]# yum install MySQL-python -y

[iyunv@linux-node2 ~]# yum install MySQL-python -y


在每个master和minion的配置文件末尾加上以下配置,则OK

[iyunv@linux-node1 ~]# vim /etc/salt/minion  

[iyunv@linux-node2 ~]# vim /etc/salt/minion  

[iyunv@linux-node1 ~]# vim /etc/salt/master  

mysql.host: '10.0.0.7'

mysql.user: 'salt'

mysql.pass: 'salt'

mysql.db: 'salt'

mysql.port: 3306

修改之后重新启动salt-master和salt-minion服务

/etc/init.d/salt-master restart

/etc/init.d/salt-minion restart


然后刷新pillar

[iyunv@linux-node1 ~]# salt '*' saltutil.refresh_pillar

linux-node2.example.com:

    True

linux-node1.example.com:

    True


[iyunv@linux-node1 ~]# salt '*' test.ping --return mysql

linux-node1.example.com:

    True

linux-node2.example.com:

    True


之后查询数据库,则出现返回的数据:

mysql> select * from salt.salt_returns;

+-----------+----------------------+--------+-------------------------+---------


+-----------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+

| fun       | jid                  | return | id                      | success | full_ret                                                                                                   


                                         | alter_time          |

+-----------+----------------------+--------+-------------------------+---------


+-----------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+

| test.ping | 20151117113743783244 | true   | linux-node1.example.com | 1       | {"fun_args": [], "jid": "20151117113743783244", "return": true, "retcode": 0, "success": true, "fun":


"test.ping", "id": "linux-node1.example.com"} | 2015-11-17 11:37:43 |

| test.ping | 20151117113743783244 | true   | linux-node2.example.com | 1       | {"fun_args": [], "jid": "20151117113743783244", "return": true, "retcode": 0, "success": true, "fun":


"test.ping", "id": "linux-node2.example.com"} | 2015-11-17 11:37:43 |

+-----------+----------------------+--------+-------------------------+---------


+-----------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+

2 rows in set (0.00 sec)

则代表返回成功。



#####################################################################return: mysql############################################################################

将minion端和master端的注释打开,则无需指定--return mysql,如下所示:

#return: mysql    ================>   return: mysql

重新启动salt-master和salt-minion

[iyunv@linux-node1 ~]# salt '*' cmd.run 'w' ======================>在master端执行以下命令

linux-node2.example.com:

     11:41:38 up  2:56,  1 user,  load average: 0.00, 0.00, 0.00

    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

    root     pts/0    10.0.0.1         08:45   15:17   0.09s  0.09s -bash

linux-node1.example.com:

     11:41:38 up  2:57,  2 users,  load average: 0.34, 0.14, 0.10

    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

    root     pts/0    10.0.0.1         10:44    3:06   0.37s  0.10s mysql

    root     pts/1    10.0.0.1         11:32    1.00s  0.91s  0.86s /usr/bin/python


在库中查看:

mysql> select * from salt.salt_returns;

+-----------+----------------------+--------+-------------------------+---------


+-----------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+

| fun       | jid                  | return | id                      | success | full_ret                                                                                                   


                                         | alter_time          |

+-----------+----------------------+--------+-------------------------+---------


+-----------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+

| test.ping | 20151117113743783244 | true   | linux-node1.example.com | 1       | {"fun_args": [], "jid": "20151117113743783244", "return": true, "retcode": 0, "success": true, "fun":


"test.ping", "id": "linux-node1.example.com"} | 2015-11-17 11:37:43 |

| test.ping | 20151117113743783244 | true   | linux-node2.example.com | 1       | {"fun_args": [], "jid": "20151117113743783244", "return": true, "retcode": 0, "success": true, "fun":


"test.ping", "id": "linux-node2.example.com"} | 2015-11-17 11:37:43 |

+-----------+----------------------+--------+-------------------------+---------


+-----------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+

2 rows in set (0.00 sec)


mysql> select * from salt.salt_returns;

| cmd.run   | 20151117114138375756 | " 11:41:38 up  2:56,  1 user,  load average: 0.00, 0.00, 0.00\nUSER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT\nroot     pts/0   


10.0.0.1         08:45   15:17   0.09s  0.09s -bash"                                                                                   | linux-node2.example.com | 1       | {"fun_args":


["w"], "jid": "20151117114138375756", "return": " 11:41:38 up  2:56,  1 user,  load average: 0.00, 0.00, 0.00\nUSER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT\nroot   


pts/0    10.0.0.1         08:45   15:17   0.09s  0.09s -bash", "retcode": 0, "success": true, "fun": "cmd.run", "id": "linux-node2.example.com"}                                            


                                       | 2015-11-17 11:41:38 |

| cmd.run   | 20151117114138375756 | " 11:41:38 up  2:57,  2 users,  load average: 0.34, 0.14, 0.10\nUSER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT\nroot     pts/0   


10.0.0.1         10:44    3:06   0.37s  0.10s mysql\nroot     pts/1    10.0.0.1         11:32    1.00s  0.91s  0.86s /usr/bin/python" | linux-node1.example.com | 1       | {"fun_args":


["w"], "jid": "20151117114138375756", "return": " 11:41:38 up  2:57,  2 users,  load average: 0.34, 0.14, 0.10\nUSER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT\nroot   


  pts/0    10.0.0.1         10:44    3:06   0.37s  0.10s mysql\nroot     pts/1    10.0.0.1         11:32    1.00s  0.91s  0.86s /usr/bin/python", "retcode": 0, "success": true, "fun":


"cmd.run", "id": "linux-node1.example.com"} | 2015-11-17 11:41:38 |

2 rows in set (0.00 sec)

已返回两行,则代表去掉master和minion中的注释,无需加--return mysql,数据仍可返回,OK

############################################################################return: mysql############################################################################


###########################################################################master_job_cache##########################################################################

参考网址:https://docs.saltstack.com/en/latest/topics/jobs/job_cache.html

使用job_cache:

[iyunv@linux-node1 ~]# vim /etc/salt/master

742 master_job_cache: mysql

743 mysql.host: '10.0.0.7'

744 mysql.user: 'salt'

745 mysql.pass: 'salt'

746 mysql.db: 'salt'

747 mysql.port: 3306


重新启动salt-master

[iyunv@linux-node1 ~]# salt '*' cmd.run 'free -m'     

linux-node1.example.com:

                 total       used       free     shared    buffers     cached

    Mem:          1873        886        986          2        124        247

    -/+ buffers/cache:        515       1358

    Swap:         1023          0       1023

linux-node2.example.com:

                 total       used       free     shared    buffers     cached

    Mem:          1873        385       1487          0         29        218

    -/+ buffers/cache:        137       1736

    Swap:         1023          0       1023


在数据库中查看结果,里面有返回的free -m数据

mysql> select * from salt.salt_returns;

| cmd.run   | 20151117115059880549 | "             total       used       free     shared    buffers     cached\nMem:          1873        886        986          2        124        


247\n-/+ buffers/cache:        515       1358 \nSwap:         1023          0       1023"                                                   | linux-node1.example.com | 1       |


{"fun_args": ["free -m"], "jid": "20151117115059880549", "return": "             total       used       free     shared    buffers     cached\nMem:          1873        886        986      


    2        124        247\n-/+ buffers/cache:        515       1358 \nSwap:         1023          0       1023", "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2015-11-


17T03:51:00.124707", "fun": "cmd.run", "id": "linux-node1.example.com"} | 2015-11-17 11:51:00 |

| cmd.run   | 20151117115059880549 | "             total       used       free     shared    buffers     cached\nMem:          1873        385       1487          0         29        


218\n-/+ buffers/cache:        137       1736 \nSwap:         1023          0       1023"                                                   | linux-node2.example.com | 1       |


{"fun_args": ["free -m"], "jid": "20151117115059880549", "return": "             total       used       free     shared    buffers     cached\nMem:          1873        385       1487      


    0         29        218\n-/+ buffers/cache:        137       1736 \nSwap:         1023          0       1023", "retcode": 0, "success": true, "cmd": "_return", "_stamp": "2015-11-


17T03:51:00.164240", "fun": "cmd.run", "id": "linux-node2.example.com"} | 2015-11-17 11:51:00 |


则代表master_job_cache生效,这里不是minion直接返回,而是minion将数据传输给master,而master将数据写入数据库中

###########################################################################master_job_cache##########################################################################

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140987-1-1.html 上篇帖子: saltstack数据系统之Pillar 下篇帖子: Saltstack配置管理之牛刀小试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表