Saltsack架构   基于C/S架构   底层使用ZeroMQ

最主要的两个功能:配置管理和远程执行

服务器端称Master

客户端称Minion


一、配置服务器端

[root@sm saltstack]# yum  -y install salt-master

[root@sm saltstack]# systemctl start salt-master

[root@sm saltstack]# ss -ltn | grep "450[56]"

LISTEN     0      128          *:4505                     *:*                  

LISTEN     0      128          *:4506                     *:*  


二、修改/etc/hosts,实现名称解析(每台都要做)

    [root@sm saltstack]#tail -2 /etc/hosts

    192.168.113.172 vh01

    192.168.113.173 vh02


 2.2 修改主配文件 实现与master的通信

    [root@vh01 ~]# vim /etc/salt/minion

    16  master   sm

    103  id     sm

 

    [root@vh02 ~]# vim /etc/salt/minion

        16  master    sm

        103  id     sm

 

  2.3关闭防火墙

    [root@sm salt]#for i in 172 173;do ssh 192.168.113.${i} 'systemctl stop firewalld.service';done


  2.4开启服务(172、173)

    [root@vh01 ~]# systemctl start salt-minion 开启服务


 三 查看用户

    [root@sm saltstack]# salt-key -L     查看密钥信息

    Accepted Keys:

    Denied Keys:

    Unaccepted Keys:

    vh01

    vh02

  

    [root@sm saltstack]# salt-key -A  -y 接受密钥,完成互信

           -L: 列出密钥

     -a: 接受一个密钥

     -A: 接受全部密钥

     -D: 删除全部密钥

 


    [root@sm saltstack]# salt '*' test.ping 检查客户端服务是否启动

    vh01:

        True

    vh02:

        True


    四、命令格式

    salt[options]   '<target>'    <function> [arguments]

       目标主机的集合 模块.方法 修饰函数.参数

   

    root@sm ~]# salt -L 'vh01,vh02' cmd.run 'uptime'  

    vh01:      01:50:01 up  5:49,  2 users,  load average: 0.00, 0.01, 0.05

    vh02:      01:50:01 up  5:32,  2 users,  load average: 0.00, 0.01, 0.05

    

    -L   列表

    -E   正则

    -N   分组

    -S   CIDR

 

  

    [root@sm ~]# vim /etc/salt/master 定义组

    1085 nodegroups:

    1086     nsd: 'L@vh01,vh02'

 

    [root@sm ~]# salt -N 'nsd' test.ping

    vh01:

        True

    vh02:

        True

   

        

   五、模块及功能

    [root@sm salt]# salt 'vh01' sys.list_modules     所有模块

    [root@sm salt]# salt 'vh01' sys.list_functions uptime     查看模块所有功能

    [root@sm pillar]# salt 'vh01' sys.doc user      查看模块方法

 

  

    [root@sm salt]# salt 'vh01' user.add 'tom' 添加用户

    vh01:

        True

     

   六、Grains组件 是saltstack重要组件之一  存放minion端的基本信息,这些信息一般都是静态的

      Grains存储在minion本地,管理员可以在minion端进行grains值的修改

    YAML的结构通过空格表示

    项目使用"-"表示

    键值使用":"表示  

    master和minion的配置文件均采用YAML语法

     规则一 缩进级别由两个空格 不能用tab

     规则二 键值对采用冒号分割  

     规则三 列表使用一个短横杠加一个空格

  

    grains 组件

    [root@sm ~]# salt 'vh02' sys.list_modules           所有可用模块

    [root@sm ~]# salt 'vh02' sys.list_functions《模块》    查看所有模块

    [root@sm salt]# salt 'vh02' grains.items  查看所有信息

    [root@sm salt]# salt '*' saltutil.sync_grains       刷新所有grains信息

    [root@sm salt]# salt 'vh02' grains.item key       查看某台key的信息

    [root@sm salt]# salt -G 'os:RedHat' test.ping       匹配grains信息分类

    [root@sm ~]# salt 'vh02' sys.doc user.list_users      查看用法

    [root@sm ~]# salt 'vh02' sys.doc user.add

    user.add:

     Add a user to the minion

        CLI Example:

            salt '*' user.add name <uid> <gid> <groups> <home> <shell>

   

     

    [root@web1 ~]# vim /etc/salt/minion 修改标签

    120 grains:

    121     web:

    122       nginx

    

    [root@sm salt]# salt -G 'web:nginx' test.ping     匹配标签

    vh01:

        True

   

       

   七、Pillae组件

    作用是定义与被控主机相关的任何数据 定义好的数据可以被其他组件使用

    Pillar需要一个pillar_roots来维护pillar的配置

    默认pillar_roots为/srv/pillar   

    pillar_roots在Master配置文件中定义

    

     [root@sm ~]# vim /etc/salt/master

    768 pillar_roots:

    769   base:

    770    - /srv/pillar

    

    [root@sm ~]#mkdir /srv/pillar

    [root@sm pillar]# vim top.sls 

    base: 与pillar_roots定义一致

      'L@vh01,vh02': 过滤目标

        - appweb

        - user 用于包含user.sls

      

    [root@sm pillar]# vim user.sls

    users:

      zhang3: 1000

      li4: 1001

    

    [root@sm pillar]# vim appweb.sls 

    appname: web

    software:

      - apache

      - nginx

    

    [root@sm pillar]# salt '*' saltutil.refresh_pillar 刷新所有信息

    [root@sm pillar]# salt '*' pillar.items 获取pillar所有信息

    [root@sm pillar]# salt '*' pillar.item user 获取指定数据

    [root@sm pillar]# salt -I 'software:nginx' test.ping 根据pillar值匹配minion


      Jinja是基于Python的模板引擎

      在saltstack中我们使用yaml——jinja渲染器来根据模块生产对应的配置文件

  Jinja使用步骤

    在state文件中使用"- template: jinja"声明

    在模板文件中使用变量"{{ name }}"声明,name为变量,自己定义

    在state文件中使用"- defautls: name: value"声明

   

    States是satlstack中的配置语言

    安装软件包、管理配置文件都需要编写一些states sls文件

    states sls使用YAML语法

    查看所有states列表

    [root@sm pillar]# salt 'vh01' sys.list_state_modules

    查看states模块功能

    [root@sm pillar]# salt 'vh01' sys.list_state_functions file

    

    

    为不同的环境设置不同的文件目录

     [root@sm salt]# vim /etc/salt/master 

    file_roots:

      base:

        - /srv/salt/base

      dev:

        - /srv/salt/dev

      prod:

        - /srv/salt/prod

    [root@vh01 salt]# systemctl restart salt-master.service 

    [root@vh01 salt]# mkdir /srv/salt/{base,dev,prod}

    

     例子1

    [root@sm srv]# mkdir base dev prod

    [root@sm base]# vim top.sls

    base: 环境

      '*': 用户

        - dns 执行什么

    [root@sm srv]# vim dns.sls

    abc:

      file.managed:     调用的模块

      - name:  /etc/resolv.conf 目标文件

      - source: salt://files/dns.conf 源文件

      - user: root             所有者

      - group: root            所属主

      - mode: 644             权限

   

    [root@sm base]# mkdir files

    [root@sm base]# vim files/dns.conf

    nameserver 192.168.1.1

    

    [root@sm base]# salt '*' state.highstate saltenv=base test=True  测试

    [root@sm base]# salt '*' state.highstate saltenv=base test=False  执行

    

    [root@sm base]# salt '*' cmd.run 'cat /etc/resolv.conf'

    vh01:

        nameserver 192.168.1.1

    vh02:

        nameserver 192.168.1.1

   

    例子2

    [root@sm base]# vim top.sls 执行文件分发操作

    base:

      '*':

        - dns

        - setdns

    

    [root@sm base]# vim setdns.sls     用于向指定文件中追加文本

    append_dns:

      file.append:      追加内容

        - name: /etc/sysconfig/network-scripts/ifcfg-eth0

        - text:

          - DNS1=9.9.9.9

    进行查看

    [root@sm base]# salt '*' state.highstate saltenv=base test=False

    [root@sm base]# salt 'web1' cmd.run 'tail -1 /etc/sysconfig/network-scripts/ifcfg-eth0 

     DNS1=9.9.9.9

 

    使用file.directory模块

    用于创建或管理目录

    [root@sm base]# vim pkgs.sls 

    pkgs:

      file.directory:

        - name: /opt/rpm_pkgs

        - user: root

        - group: root

        - dir_mode: 755

        - file_mode: 644

    [root@sm base]#  salt 'vh02' cmd.run 'touch /opt/rpm_pkgs/1.txt'

    [root@web2 rpm_pkgs]# ll -ls

    总用量 0

    0 -rw-r--r--. 1 root root 0 1月  19 22:34 1.txt


     【具体模块的使用需网上查看相关文档】