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

[经验分享] Saltstack入门

[复制链接]

尚未签到

发表于 2018-1-3 16:04:59 | 显示全部楼层 |阅读模式
saltstack主要的用途


  • 远程执行命令
  • 配置管理
  • 主机信息管理
saltstack安装


  • 使用pip安装 (目前saltstack只支持py2)
  • 使用系统的包管理安装,如yum,apt-get,zypper等
  • 源码安装
  推荐使用系统的包管理安装,我使用的是opensuse,因此使用zypper安装。服务端安装salt-master,客户端安装salt-minion

saltstack启动


  • 服务端启动,修改/etc/salt/master文件,将interface(服务端监听ip)设置成服务端的Ip,然后执行systemctl start salt-master
  • 修改客户端的/etc/salt/minion,将master改成服务端的主机名或ip,然后执行systemctl start salt-minion
saltstack认证


  • 当salt-minion启动后,客户端会生成公钥(minion.pub)和私钥(minion.pem),然后将公钥发送给服务端
  • 服务端收到客户端发送的公钥后,可以使用salt-key -L 查看所有的Key。
  • 使用salt-key -a接受客户端发送的key(指定主机名),也可以使用salt-key -A接受所有的key,接着就可以对客户端发送指令了。
  • 测试 salt "*" test.ping,如果所有主机都返回true,则没有问题
salt命令使用
  salt "目标" 模块.方法

目标(target)


  • *代表所有的主机
  • 'shell正则',如
  'node*.example.com'


  • pcre正则,使用时,需要加上-E参数 如
  -E 'node(1|2).exaple.com'


  • Group,在/etc/salt/master中定义group,使用时加上-N参数,如
  -N 'group1'


  • list,通过逗号分隔的列表来指定多个minion,列表中的项不使用正则或pcre正则。使用-L,如
  -L 'node1.example.com,node2.exaple.com'


  • subnet,通过指定一个ipv4或一个CIDR的Ipv4子网列表来指定目标。如
  -S '192.168.1.0/24'


  • grains。minion在启动的时候会收集机器的cpu架构、主机名、操作系统等机器信息,这些信息称为grains,grians是键值对,因此键名和键值都要指定,通过冒号进行分隔。如
  -G 'os:Ubuntu'


  • pillar。pillar的内容在下面会进行具体介绍,先认为它和grains一样即可。  


  -I 'my_var: my_value'


  • 混合。混合目标允许一个命令中指定多种类型,想指定其他类型,则需要在前面追加类型简单和@符号。如
  -C 'G@os:ubuntu,E@node(1|2).example.com,S@192.168.1.0/24'

模块方法
  指定target后,接下来需要声明需要运行的方法。在测试过程中使用了test.ping方法,当然也可以指定其他方法。方法包含两部分:通过.来分隔
  Modeule.func
  在salt命令中,模块方法紧跟target,也可以在最后给方法加上参数
  salt 'target' Module.func [args]
  一些常用的模块方法


  • pkg.install
  • file.manager
  • service.running
  还有很多,具体可以查阅saltstack官方文档

Grain
  grain会在minion进行启动时进行加载,并缓存在内存中。
  
查看Minion中都有哪些Grain数据
  salt '*' grains.items
  想查看某个特定的grain,可以将对应的名字当作参数传递给grains.item
  salt '*' grains.item os_family
  也可以自定义grain。在/etc/salt/minion中添加
grains:  Foo: bar
  var: value
  上面这是老版本的配置方法,现在依然可用,但是不建议使用。更常用的方法是将自定义的静态Grain存在一个叫在grain的文件中:/etc/salt/grains,除了不需要grains的声明外,其他和以前的方法一样.
Foo: bar  
var: value

pillar
  在大多数场景中,pillar和grain是差不多的,但最大的区别就是:pillar是在master上进行定义,而grain是在minion中。

定义pillar


  •   修改配置文件/etc/salt/master,
      
    搜索pillar_roots.这一段定义了环境和他对应的pillar路径。如
    pillar_roots:  
    base:
      - /srv/salt/pillar
      base就是环境的名称,我们可以定义很多个环境,如开发环境 dev,生产环境 prod等。/srv/pillar是base环境的pillar文件的路径。

  •   重启master服务

  •   编辑pillar需要的top.sls文件(yaml格式),如
    base:  
    '*':
      - apache
      首先声明一个环境,然后是一个target,最后是target需要使用的sls文件
      
    apache.sls
    port: 80
  •   查看所有的pillar数据

  salt '*' pillar.items

SLS
  SLS代指salt state,首先要在/etc/salt/master中声明SLS的环境和环境所对应的路径,默认在/srv/salt。然后在/srv/salt下要声明一个top.sls文件,用于将SLS拉在一起并指定在哪个环境下为哪些Minion提供SLS文件。如
base:  '*':
  - apache
  - nginx
  
dev:
  'node1.example.com':
  - haproxy
  - keepalived
  在这个top.sls中,声明了两个环境 ,base和dev。base指定所有的Minion执行apache和nginx的state,dev指定node1执行haproxy和keepalived的state。

SLS目录组织
  SLS的文件名可以是top.sls中指定的文件名,如apache.sls、nginx.sls等;也可以是init.sls,但是要放在State的目录下,如apache/init.sls、nginx/init.sls。

使用SLS进行配置管理
  在SLS文件中,第个小节的Key称为ID,如果小节中没有显示声明name属性,那么ID会作为name。ID必须全局唯一
httpd:  pkg:
  - installed
  
httpd-conf:
  file.managed:
  - name: /etc/httpd/conf/httpd.conf
  - source: salt://files/httpd.conf
  - user :root
  - group: root
  上面定义了两个小节,首先安装httpd这个包,因为没有显示的声明name,所有httpd即是ID,也是name;接着将/srv/salt/files/httpd.conf复制到minion下的/etc/httpd/conf/httpd.conf,并设置用户和组。这里显示的声明了ID:httpd-conf。salt://files/httpd.conf代表在当前环境下的files目录下的httpd.conf

执行SLS
  salt '*' state.highstate
  这条命令执行/srv/salt/top.sls和他里面定义的所有SLS

SLS进阶


  •   使用依赖.
    httpd-conf:  
    file.managed:
      - name: /etc/httpd/conf/httpd.conf
      - source: salt://files/httpd.conf
      - require:
      - pkg: httpd
      
    httpd:
      
    pkg:
      - install
      在复制配置文件之前,需要前安装httpd

  •   watch。在上面的例子中,httpd在第一次执行后就己经安装,如果之后配置又发生了变更,httpd需要重启才行,而watch可以监控文件是否发生变化,如果发生变化可以自动重启或reload
    service.running:  
    - name: httpd
      
    - require:
      - pkg: httpd
      
    - watch:
      - file: httpd-conf

      
    ->  这一段中监控httpd-conf这个ID下的file。

  •   unless。只有当条件不成立时,才会执行name指向的命令
    nginx-source-install:  cmd.run:
      
    - name: ./configure && make && make install
      
    - unless: test -d /usr/local/nginx
      当/usr/local/nginx这个目录不存在时,才会执行name指向的命令

  • include,引用其他的SLS文件  
    ```yaml
      
    include:



  • apache
  • nginx  
    ```


运维网声明 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-431212-1-1.html 上篇帖子: 40块钱抓娃娃 下篇帖子: saltstack学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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