saltstack入门教程精华案例

1.在/srv/salt目录下创建top.sls文件
    cd /srv/salt
    touch top.sls
2.编辑sls文件
    vim hosts.sls
/tmp/aaa.hosts :        //name,可以宿便写,但是如果这里不写同步路径信息的话,需要在后面加上- name: /tmp/aaa.hosts  file.managed:        //指定使用的salt模块的名称    - source: salt://etc/hosts       //同步的源在哪
    - user: root
    - group: root
    - mode: 600
保存退出
    vim top.sls
base:    //这个是top.sls文件的固定格式,总共有三个:base dev和prod,跟你之前在master配置文件使用哪个级别的根目录有关(参看salt的文件系统配置)
  '*':    //代表使用sls的机器    - hosts    //代表使用的自定义sls文件的名称是什么
保存退出
3.下发配置文件
cp /etc/hosts /srv/salt/etc/hosts  //创建/etc/hosts文件
salt '*' state.highstate    //调用top.sls
salt '*' state.sls hosts    //直接调用hosts.sls
以上两种方法都可以下发配置文件到minion端
4.测试,当hosts.sls文件mv到非根目录下时如何下发配置
[root@Admin1-saltstack etc]# cd /srv/salt/
[root@Admin1-saltstack salt]# ls
etc  hosts.sls  top.sls
[root@Admin1-saltstack salt]# mkdir hosts
[root@Admin1-saltstack salt]# mv hosts.sls hosts
[root@Admin1-saltstack salt]# echo "bbbbbbb" >> etc/hosts
[root@Admin1-saltstack salt]# salt '*' state.sls hosts.hosts
Admin3-saltstack.littlebee.com:
----------
          ID: /tmp/aaa.hosts
    Function: file.managed
      Result: True
     Comment: File /tmp/aaa.hosts updated
     Started: 14:52:35.309405
    Duration: 7.627 ms
     Changes:   
              ----------
              diff:
                  ---  
                  +++  
                  @@ -1,3 +1,4 @@
                   127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
                   ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
                   aaaaaaaaaa
                  +bbbbbbb
Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Admin2-saltstack.littlebee.com:
----------
          ID: /tmp/aaa.hosts
    Function: file.managed
      Result: True
     Comment: File /tmp/aaa.hosts updated
     Started: 14:52:34.936313
    Duration: 7.775 ms
     Changes:   
              ----------
              diff:
                  ---  
                  +++  
                  @@ -1,3 +1,4 @@
                   127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
                   ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
                   aaaaaaaaaa
                  +bbbbbbb
Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
5.关于init.sls
当目录下找不到sls文件时,会默认执行init.sls文件里的内容


1.查看grains
salt 'Admin2-saltstack.littlebee.com' grains.ls
salt 'Admin2-saltstack.littlebee.com' grains.items    //查看所有item
salt 'Admin2-saltstack.littlebee.com' grains.item os    //单独查看os这个item
2.自定义grains
在minion的配置文件上进行自定义grains配置
grains:        //必须以grains开头
  roles:        //值得定义(自定义的)
    - webserver        //值对应的属性定义(自定义的)
    - memcache
  deployment: datacenter4
  cabinet: 13
  cab_u: 14-15
保存退出并重启minion服务:
    /etc/init.d/salt-minion restart
然后再在master上去测试:
[root@Admin1-saltstack salt]# salt '*' grains.item roles                                
Admin3-saltstack.littlebee.com:
    ----------
    roles:
        - webserver
        - memcache
Admin2-saltstack.littlebee.com:
    ----------
    roles:
        - webserver
        - memcache


1.需求
    使用sls安装nginx并管理nginx的配置文件,当nginx配置文件被修改时,自动更新配置文件,并重启nginx。
2.配置
    1.在master端上写好nginx.sls文件
        mkdir -p /srv/salt/nginx
        cd /srv/salt/nginx
            vim init.sls
nginx:
  pkg:
    - installed
  service:
    - running
    - enable: True
    - reload: True
    - watch:
      - pkg: nginx
      - file: /etc/nginx/nginx.conf
      - file: /etc/nginx/conf.d/default.conf
/etc/nginx/nginx.conf:
  file.managed:
    - source: salt://etc/nginx/nginx.conf
    - user: root
    - group: root
    - mode: 644
/etc/nginx/conf.d/default.conf:
  file.managed:
    - source: salt://etc/nginx/conf.d/default.conf
    - user: root
    - group: root
    - mode: 644
保存退出
    2.在master端上安装nginx,方便生成nginx的配置文件(生产环境中其实是不需要安装的)
        yum -y install nginx
    3.创建nginx同步目录
        mkdir /srv/salt/etc/nginx/conf.d -p
    4.拷贝nginx的配置文件到/srv/salt/etc/nginx/目录下
        cp /etc/nginx/nginx.conf /srv/salt/etc/nginx/
    5.拷贝default.conf配置文件到/srv/salt/nginx/conf.d/目录下
        cp /etc/nginx/conf.d/default.conf /srv/salt/etc/nginx/conf.d/
    6.下发安装指令[root@Admin1-saltstack nginx]# salt '*' state.sls nginx
Admin3-saltstack.littlebee.com:
----------
          ID: nginx
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: nginx
     Started: 16:00:54.241160
    Duration: 100771.423 ms
     Changes:    http://www.188bet188bet.net/;http://www.mywww188bet.com/
              ----------
              GeoIP:
                  ----------
                  new:
                      1.6.5-1.el6
                  old:
              GeoIP-GeoLite-data:
                  ----------
                  new:
                      2015.04-2.el6
                  old:
              GeoIP-GeoLite-data-extra:
                  ----------
                  new:
                      2015.04-2.el6
                  old:
              gd:
                  ----------
                  new:
                      2.0.35-11.el6
                  old:
              geoipupdate:
                  ----------
                  new:
                      2.2.1-2.el6
                  old:
              libXpm:
                  ----------
                  new:
                      3.5.10-2.el6
                  old:
              libxslt:
                  ----------
                  new:
                      1.1.26-2.el6_3.1
                  old:
              nginx:
                  ----------
                  new:
                      1.0.15-11.el6
                  old:
              nginx-filesystem:
                  ----------
                  new:
                      1.0.15-11.el6
                  old: http://www.8bo360.com/;http://www.zqpeilv.net/;http://www.duqiu2015.com/;http://www.dqwzpm007.com/
----------
          ID: /etc/nginx/nginx.conf
    Function: file.managed
      Result: True
     Comment: File /etc/nginx/nginx.conf is in the correct state
     Started: 16:02:35.422030
    Duration: 3.826 ms
     Changes:   
----------
          ID: /etc/nginx/conf.d/default.conf
    Function: file.managed
      Result: True
     Comment: File /etc/nginx/conf.d/default.conf is in the correct state
     Started: 16:02:35.430801
    Duration: 2.863 ms
     Changes:    http://www.888zhenrengw.com/;http://www.macauwnsr.com/;http://www.aomenpjylc.com/
----------
          ID: nginx
    Function: service.running
      Result: True
     Comment: Service nginx has been enabled, www.adwi.net and is running
     Started: 16:02:35.440698
    Duration: 583.024 ms
     Changes:   
              ----------
              nginx:
                  True
Summary
------------
Succeeded: 4 (changed=2)
Failed:    0
------------
Total states run:     4
Admin2-saltstack.littlebee.com:
----------
          ID: nginx
    Function: pkg.installed
      Result: True
     Comment: The following packages were installed/updated: nginx
     Started: 16:00:53.829498
    Duration: 145884.537 ms
     Changes:    http://www.lawyesr.com/;http://www.leehomesun.com/;http://www.sikayi.com/
              ----------
              GeoIP:
                  ----------
                  new:
                      1.6.5-1.el6
                  old:
              GeoIP-GeoLite-data:
                  ----------
                  new:
                      2015.04-2.el6
                  old:
              GeoIP-GeoLite-data-extra:
                  ----------
                  new:
                      2015.04-2.el6
                  old:
              gd:
                  ----------
                  new:
                      2.0.35-11.el6
                  old:
              geoipupdate:
                  ----------
                  new:
                      2.2.1-2.el6
                  old:
              libXpm:
                  ----------
                  new:
                      3.5.10-2.el6
                  old:
              libxslt:
                  ----------
                  new:
                      1.1.26-2.el6_3.1
                  old:
              nginx:
                  ----------
                  new:
                      1.0.15-11.el6
                  old:
              nginx-filesystem:
                  ----------
                  new:
                      1.0.15-11.el6
                  old:
----------
          ID: /etc/nginx/nginx.conf
    Function: file.managed
      Result: True
     Comment: File /etc/nginx/nginx.conf is in the correct state
     Started: 16:03:20.181447
    Duration: 5.708 ms
     Changes:   
----------
          ID: /etc/nginx/conf.d/default.conf
    Function: file.managed
      Result: True
     Comment: File /etc/nginx/conf.d/default.conf is in the correct state
     Started: 16:03:20.198217
    Duration: 4.887 ms
     Changes:   
----------
          ID: nginx
    Function: service.running
      Result: True
     Comment: Service nginx has been enabled, and is running
     Started: 16:03:20.214405
    Duration: 340.608 ms
     Changes:   
              ----------
              nginx:
                  True
http://www.pk104.com/;http://www.bjlwanfa.net/;http://www.aomendcpaiming.com/

Summary
------------
Succeeded: 4 (changed=2)
Failed:    0
------------
Total states run:     4
出现上面的信息则表示安装成功了
也可以在minion端看服务是否起来:
[root@Admin2-saltstack tmp]# /etc/init.d/nginx status
nginx (pid  3046) is running...
[root@Admin3-saltstack nginx]# /etc/init.d/nginx status
nginx (pid  2876) is running...
1.pillar的介绍
pillar是salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被salt的其他组件使用。salt在0.9.8版本中引入了pillar。pillar在解析完成以后,是一个嵌套的dict结构;最上层的key是minion ID,其值是该minoin所拥有的pillar数据;每一个值也都是key/value格式。这里可以看出pillar的一个特点,pillar数据是与特定的minion关联的,也就是说每一个minion都只能看到自己的数据,所以pillar可以用来传递敏感数据(在salt的设计中,pillar使用独立的加密session,也是为了保证敏感数据的安全性)。
2.pillar可以用在哪些地方?
    1.敏感数据
        例如ssh key,加密证书等,由于pillar使用独立的加密session,可以确保这些敏感数据不被其他minion看到。
    2.变量
        可以在pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在state中引用
    3.其他任何数据
        可以在pillar中添加任何需要用到的数据,比如定义拥护和UID的对应关系,minion的角色等等。
    4.用在Targetting中
        pillar可以用来选择minon,使用-l选项
        默认情况下,master配置文件中的所有数据都添加到pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效。
3.pillar的示例
    1.pillar中定时执行操作的格式
schedule:
  highstate:
    function:state.highstate
    minutes:1
    2.实际配置步骤
        1.在master上修改配置文件
            vim /etc/salt/master
            查找pillar_roots
pillar_roots:
  base:
    - /srv/pillar
pillar_opts: True
保存退出
        2.创建/srv/pillar/目录
            mkdir /srv/pillar -p
        3.写pillar文件
            cd /srv/pillar
            vim top.sls
base:
  '*':
    - nginx
保存退出
            mkdir -p /srv/pillar/nginx
            cd /srv/pillar/nginx
            vim init.sls
schedule:
  nginx:
    function: state.sls
    minutes: 1
    args:
      - 'nginx'
保存退出
PS1:如果这里的sls文件名字是nginx.sls那么args的值应该是- 'nginx.nginx',切记切记并且top.sls里的值也应该是nginx.nginx!
PS2:如果不想全部minion都执行而只希望执行某个指定的组的话,则进行如下配置:
vim top.sls
base:
  test1:        //这个是自定义的组名
    -match: nodegroup
    - nginx
保存退出
        4.查看pillar
            salt "*" pillar.items
[root@Admin1-saltstack nginx]# salt '*' pillar.items
Admin2-saltstack.littlebee.com:
    ----------
    schedule:
        ----------
        nginx:
            ----------
            args:
                - nginx
            functions:
                state.sls
            minutes:
                1
Admin3-saltstack.littlebee.com:
    ----------
    schedule:
        ----------
        nginx:
            ----------
            args:
                - nginx
            functions:
                state.sls
            minutes:
                1
出现如上提示表示配置成功了
salt '*' saltutil.refresh_pillar    //每修改一次pillar都要执行以下刷新命令
        5.更改配置文件然后到minion上进行验证
            将/srv/salt/etc/nginx/conf.d/default.conf文件中的监听端口改成777,然后1分钟以后到客户端上去看(netstat -lnt),正常的话应该看到监听端口被改成777了
        6.pillar值设置以后如果想要取消掉,可以在minion上重启salt-minion服务
            把之前的配置删除,然后执行salt '*' pillar.items和salt '*' saltutil.refresh_pillar命令刷新pillar值,最后再在其中一台minion上重启salt-minion服务,最后再把/srv/salt/etc/nginx/conf.d/default.conf文件中的监听端口改回80,一分钟以后会发现重启过服务的minion不会把端口改回80,而没有重启过服务的minion还是会继续抓取master上的最新配置。

你可能感兴趣的:(生活)