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

[经验分享] SaltStack研究心得

[复制链接]

尚未签到

发表于 2018-8-1 06:14:42 | 显示全部楼层 |阅读模式
  基础篇
  --------------------------------------------------------------------------------------------------------
  概述:SaltStack简单来说是一个基础架构管理工具,这个比较抽象,说白就是一个运维管理工具,底层是使用python实现,C/S架构,支持分布式部署,据说可以轻松管理上W台服务器,和Puppet这类工具很类似,其主要的功能:

  •   基于Key的远程连接并执行命令;
  •   强大的搜索器,多种方式过滤服务器;
  •   灵活的远程部署实现方式;
  •   基于YMAL格式对文件,用户,用户组及服务等资源灵活管理;
  极简易安装
  
  本实例采用CentOS6.5_x86_64操作系统,在安装之前请先配置好Yum源
  salt-master服务端安装
yum -y install salt-master    /安装  
rpm -aq|grep salt-master    /检测
  
salt-master配置文件: /etc/salt/master
  salt-minion客户端安装
yum -y install salt-minion   /安装  
rpm -aq|grep salt-minion   /检测
  
salt-minion配置文件: /etc/salt/minion
  添加客户端
  
salt-key -L    /列出所有key,key格式是minion-id,如果没有配置minion-id,则是主机名  
salt-key -A    /接受所有key
  
salt-key -a  “ZK-YJY-APP-01”   /接受指定的key
  
salt-key -R    /拒绝所有未接受的key
  
salt-key -D     /删除所有key
  
salt-key -d  “ZK-YJY-APP-01”   /删除指定的key
  
  Target搜索器
  
  添加了minion的key后就可以免密码将命令传输到minion,并把执行结果返回来,方便的进行批量操作了,想象一下,如果有上W台服务器,而只想查看某些服务器的配置信息,怎么实现 ? 当然要有一个目标搜索器才行,saltstack的target搜索器非常强大,基于minion的id进行匹配,所以我们在部署minion之前要事先对minion的id做好规划(如果不配置minion的id,则默认是使用主机名,也要对主机名做好规划)
  glob方式
salt “*” test.ping  
salt “ZK-YJY-APP-01” test.ping
  正则表达式
salt  “web*” test.ping  
salt  “web[0-9]NaNdb?” test.ping
  
salt  “web-[x-z]” test.ping
  grains类
salt -G “os:CentOS” test.ping  
salt -G "cpuarch:x86_64"test.ping
  基于IP
salt -S "192.168.153.130"test.ping  
salt -S "192.168.153.0/24"test.ping
  基于节点组
  需要先在/etc/salt/master中定义nodegroups,如下:
nodegroups:  
      group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com’
  
      group2: 'G@os:Debian and foo.domain.com'
  
      group3: 'L@webserver01,webserver02'
salt -Ngroup3 test.ping  复合方式
  本质是上面的方式结合在一起,形成更为复杂的条件:
salt -C 'webserv* and G@os:Debian orE@web-dc1-srv.*' test.ping  
  Grains是啥
  
  grains简单来说就是一个字典,{“os”:CentOS, “num_cpus”:8},字典就是这样的key-value的键值对的一个无序集合,里面存放着minion端的所有配置信息,
  列出配置信息的分类,其实就是查看有哪些key
salt “*” grains.ls  列出配置信息的分类和具体分类信息,其实就是查看key-value
salt “*” grains.items  列出某个配置信息项的具体信息
salt “*” grains.item cpu_model  ==========================================================================================
  进阶篇States
  -------------------------------------------------------------------------------------------------------
  这篇是为自动化部署作准备的,核心就是弄清楚States的使用技巧
  
  YAML基本格式
  
nginx_package:      //声明id  
      file.managed:       //文件模板的managed函数,作用是实现从master下载文件
  
          - name: /tmp/nginx-1.8.0.tar.gz    //定义名称空间
  
          - source: salt://nginx/files/nginx-1.8.0.tar.gz   //指定文件在master上的位置
  难点说明:
  saltstack的YMAL格式通常以声明id开始,名称空间会覆盖id,也就是说,如果没有name,则id就是name,如果有name,id只作为标识,且在一个sls文件中,id不能重复,在states中有很多模块函数,可以对文件,用户,用户组,服务,定时任务等资源进行操作,我们只要调用并定义一些参数即可。
  这里要注意下缩进和空间,仔细观察就明白了
  
  条件判断和先决条件
extract_nginx:    //声明id  
      cmd.run:    //这个模块是表示要执行一些系统命令
  
        - cwd: /tmp    //切换到指定目录下
  
        - names:   //具体的命令,如果有多条可依次向下排列
  
          - tar zxf nginx-1.8.0.tar.gz
  
        - unless: test -d /tmp/nginx-1.8.0     //这里是一个条件判断
  
        - require:  //先决条件
  
          - file: nginx_source   //具体条件
  难点说明:
  第一个要注意的地方是unless这个判断条件,这个条件如果返回false,cmd.run才执行,否则不执行,unless可以很好的控制同步配置后重复执行某些命令
  第二个需要注意的地方是先决条件require,先决条件除了require之外还是watch,但require可以用在任何模块中,watch只能用在service.running模块中
  
  用户和组模块
  
nginx_user:   //声明id  
  user.present:    //用户管理模块,以下是一些参数
  
        - name: nginx
  
        - uid: 121
  
        - gid: 121
  
        - createhome: false
  
        - shell: /sbin/nologin
  
        - require:  //先决条件,表示要创建nginx用户先创建nginx这个组
  
          - group: nginx
  
   group.present:
  
        - name: nginx
  
          - gid: 121
  
  服务模块
  
nginx_service:     //声明id  
  service.running:      //服务运行模块
  
    - name: nginx
  
    - enable: True
  
    - reload: True
  
    - watch:    //监测以下条件是否变化,如果改变则重启服务
  
      - file: /usr/local/nginx/conf/nginx.conf
  我开始以为是修改minion的nginx配置会自动重启,后面验证不对,应该是修改了master上nginx的配置源文件,执行同步才会重启,使minion的nginx配置文件始终与master配置文件保持一致,这个是我测试的结果,也可能理解有误,后面再去研究吧。
  Template模板
  
{% for usr in['moe','larry','curly'] %}  
    {{ usr }}:
  
        user.present
  
{% endfor %}
  这个就是python中的模板标签的定义{%%},{{}}在,sls中,或者在配置源文件中都可以使用模板标签。
apache:  
    pkg.installed:
  
    {% if grains['os'] =='RedHat' %}
  
        - name: httpd
  
    {% elif grains['os'] =='Ubuntu' %}
  
        - name: apache2
  
    {% endif %}
  使用模板可以比较灵活的对可变的部分进行控制
  
  include引入
  
  如果有多个sls文件,我们可以在一个sls文件中引入另一个sls,在init.sls文件顶部添加如下内容:
include:  
    -  install.sls
  
    -  conf.sls
  
  批量部署nginx
  
  有了以上的基础,就可以很方便的部署任何软件包了,这里重点讲下步骤:
  编辑master配置文件,将如下内容注释去掉
file_roots:  
       base:    //此处的base标识在top.sls文件中引用
  
         - /srv/salt   //配置管理文件存放的root目录
  当然,这里可以根据需要创建多个不同的file_roots目录
  创建指定的目录
  默认/srv目录下是空的,需要创建salt目录
  创建top.sls文件
  在/srv/salt目录下创建top.sls文件
base:   //此处的base即在file_roots中定义的base  
  '*':  //这里是表示target目标,可以使用搜索器定义
  
    - nginx.install     //表示file_roots目录下的nginx目录下的install.sls
  
    - nginx.conf    //表示file_roots目录下的nginx目录下的conf.sls
  top.sls是一个入口文件,master同步时首先会去读取top.sls ,通过top.sls去找对应目录下的其它sls文件
  编写install.sls和conf.sls
  此处略去无数行
  将软件包和配置文件和启动脚本放到指定目录
  你懂的
  网上有大量的部署配置,推荐一些比较好的网址,个人建议学saltstack之前最好有一些python基础,毕竟是python写的
  http://blog.cunss.com/?p=272
  http://docs.saltstack.cn/zh_CN/latest/
  https://docs.saltstack.com/en/latest/

运维网声明 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-544348-1-1.html 上篇帖子: saltstack 安装mysql 下篇帖子: Saltstack简单汇总,快速入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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