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

[经验分享] saltstack入门教程精华案例

[复制链接]

尚未签到

发表于 2015-11-26 11:04:36 | 显示全部楼层 |阅读模式
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到非根目录下时如何下发配置
[iyunv@Admin1-saltstack etc]# cd /srv/salt/
[iyunv@Admin1-saltstack salt]# ls
etc  hosts.sls  top.sls
[iyunv@Admin1-saltstack salt]# mkdir hosts
[iyunv@Admin1-saltstack salt]# mv hosts.sls hosts
[iyunv@Admin1-saltstack salt]# echo "bbbbbbb" >> etc/hosts
[iyunv@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上去测试:
[iyunv@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.下发安装指令[iyunv@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端看服务是否起来:
[iyunv@Admin2-saltstack tmp]# /etc/init.d/nginx status
nginx (pid  3046) is running...
[iyunv@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
[iyunv@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上的最新配置。

运维网声明 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-143815-1-1.html 上篇帖子: saltstack官方文档——Configuring the Salt Master 下篇帖子: saltstack官方文档——Python client API
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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