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

[经验分享] saltstack执行远程命令

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2018-1-3 22:47:06 | 显示全部楼层 |阅读模式
[toc]


Remote Execution


  • salt命令执行后的返回结果的数据结构都一致,保证能够很容易地检查数据,并存储在数据库中。
  •   salt 使用python modules来进行远程管理,可以自己增加python module来扩展。所有可以用python访问的应用或者服务,如一个shell命令,都可以作为salt中的一个执行模块。

  •   命令执行
      

    salt '*' test.rand_sleep 120  

      '*'是指机器名称,test.rand_sleep 即:modult.function, 120是参数

  • 命令执行过程

  • salt master通过发布端口发送命令
  • salt minion检查命令,看是否需要执行该命令
  • 若需要,目标minion找到执行module 和对应的方法,执行命令,将结果返回  
    每个命令,都被分成一个工作线程,保证一个salt minion可以同事处理多个jobs

salt state

salt state 系统
  salt state系统在salt remote系统不就之后就出现了,对其影响很大。二者非常相似,一个很大的不同在于,state系统包含一个检查系统是否处于正常状态的逻辑,检查完毕之后,会交给salt remote执行命令。


  • state 模块用于跨作业和夸平台系统
  • 返回的结果是连续的数据结构,便于检查和存储到数据库
salt state 系统流程
  salt sate 和salt remote的主要区别是state 系统内的控制流程。 salt提供特殊命令,用于定义依赖,重用代码,控制流程,影响变量和模板。

Runner

salt runner
  runner 子系统提供了一些在salt master上执行的salt mudule,实时事件视图,管理salt的文件server,查看salt的采集资料,向minion发送网络唤醒,调用webhook和其它http 请求等
  命令:salt-run,不需要taget server,因为target就是salt master本身
  
参数传递方式和向satl 执行模块发送参数的方式相同。

Orchestrate Runner
  orchestrate runner 提供了salt的一个核心功能:运行命令,在多个minion上依照一定义好的顺序运用配置.

System Data

data
  系统数据的两个主要方面:获取系统相关数据,传递数据至系统。salt提供了两个不同的子系统,来分别执行这两个任务:salt grains和salt pillar
  salt mine是用于将数据从minion上推送到master上的一个公共的数据存储库上,这个库可以被所有的minion访问。

grains
  grains用于获取agent的系统数据,是关于操作系统、内存、磁盘和其他系统属性的静态信息。
  
机器启动时开始采集数据,数据会阶段性刷新,或者使用远程命令执行。
  grains的使用场景:使用grains的某一个值,来列出所有的grains,从而周到所有的agent
  grains也是trageting系统不可缺少的一部分,用于定位salt state 和 salt pillar数据。

salt pillar
  salt pillar用于传输数据到系统。 一个场景应用场景就是,不同的minion机器的配置不同,salt pillar使我们可以定义这些数据值,然后使用target的形式赋值给minion,然后值以变量的形式给salt state.
  salt pillar数据使用minion 的公钥编码,通过加密渠道传输,因而salt pillar也适用于发送如密码,ssh key之类的秘密数据,因为只有target minion机器才能解码。salt pillar数据从不会被写入minon的磁盘。
  salt pillar 模块使用yaml文件定义pillar,超过20个salt module(即插件)用于支持一个多变的后端环境。常见的有:Mongo和Redis,都是用于存储结构化的数据的。有的用户使用yaml文件存储,然后使用git 仓库来管理和发送pillar data。

salt mine
  salt mine用于在minion间共享数据。如果建立一个共享DB,可以给运行依赖于db server的salt minion添加配置,使之自动推送自己的ip到salt mine。这比存储在salt state和salt pillar上好,因为它们需要进行手动更新。
  之后若需要数据,可以直接使用salt state file 去salt mine中获取。
  基本子系统的重置,在其它文档中有介绍。

Python

modules
  salt中,每一个子系统都是一个python module


  • salt源码中,所有的module都在salt文件夹下。一个子文件夹就是一个子系统
  • modules的命名规则salt.subsystem.module
执行函数的参数
  需要的参数值以特定的顺序传进来,参数之间用空格隔开。optional 参数以键值对的形式传递
  示例命令
  

salt '*' network.connect google-public-dns-a.google.com port=53 proto=udp timeout=3  
salt '*' cp.get_file salt://vimrc /etc/vimrc gzip=5
  
`salt ns1 pkg.install pkgs=['bind9','bind9-docs','bind-utils']`
  
`salt '*' pkg.install sources='[{"foo": "salt://foo.deb"},{"bar": "salt://bar.deb"}]'`
  

State function arguments
  state file中,state 函数的调用使用yaml 语法。yaml展示数据类型时,表现更为突出。使用key 获取参数值
  

a state example that calls user.present:  user.present:
  - name: fred
  - shell: /bin/zsh
  

  
list:
  
install bind packages:
  pkg.installed:
  - pkgs:
  - bind9
  - bind9-docs
  - bind-utils
  

  list dictornary
  

install bind packages:  pkg.installed:
  - pkgs:
  - bind9
  - bind9-docs
  - bind-utils
  

  具体见salt.states.user.present
  tips:
  
并非所有的参数都会列在function 注释中,有时候需要check source code 去看到底支持什么类型。

运维网声明 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-431350-1-1.html 上篇帖子: Saltstack 命令 下篇帖子: 07-saltstack 之pillar
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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