Saltstack 常用模块、命令,salt ssh,Salt Grains,Salt Pillar

  1. cmd.run (远程执行)

    功能: 实现远程命令执行

    salt '*'   cmd.run 'free -m'  
    
  2. cp模块

    功能: 实现远程文件、目录复制,下载Url文件等操作

    # 1、master配置同步根目录(YAML语法,1. 每一级使用两个空格 2. 短横线表示列表)
    vim /etc/salt/master
    
    file_roots:
      base:
        - /srv/salt
      dev:
        - /srv/salt/dev
    
    systemctl restart salt-master  # 需要重启master
        
    # 2、创建同步目录文件夹,和测试文件 /srv/salt/test.sh
    mkdir -p /srv/salt/dev
    vim /srv/salt/test.sh   #创建测试文件
    
    # 3、将 /srv/salt/ 下的test.sh文件同步到所有minion
    salt '*' cp.get_file salt://test.sh /tmp/test.sh
    
    
    # 4、创建目录 makedirs(当分发的位置在目标主机上不存在时,自动创建该目录)
    salt '*' cp.get_file salt://test.sh /aaa/test.sh makedirs=True
    
    # 5、将 /srv/salt 中的testdir 目录复制到所有minion
    mkdir /srv/salt/testdir/
    salt '*' cp.get_dir salt://testdir /aaa/
    
    # 6、下载百度首页内容保存到所有minion中
     salt '*' cp.get_url http://www.baidu.com /tmp/index.html
    
  3. 状态管理(神笔马良)

    1、修改 /etc/salt/master 文件

    # 1、master配置同步根目录(YAML语法,1. 每一级使用两个空格 2. 短横线表示列表)
    vim /etc/salt/master
    
    file_roots:
      base:
        - /srv/salt
      dev:
        - /srv/salt/dev
    
    systemctl restart salt-master  # 需要重启master
    

    2、在 /srv/salt/ 下配置状态管理

    [root@linux-node1 /]#  vim /srv/salt/web/apache.sls
    
    # 1.描述了要装一个httpd服务
    apache-install:  # 这个是一个名称,可以随便写
      pkg.installed:  # pkg是状态模块,installed是状态模块中的方法
        - name: httpd  # 描述了我在里要装一个httpd包
    
    # 2.描述了httpd服务是启动状态,并且是开机自启动状态
    apache-service:  # 这个是一个名称,可以随便写
      service.running:  # 描述了httpd服务是运行的状态
        - name: httpd
        - enable: True  # 描述httpd服务开机自动启动
    

    3、在 salt-master中执行命令让 linux-node2按照描述完成按照

    [root@linux-node1 web]# salt   linux-node2.example.com  state.sls  web.apache
    
    1. 通过远程执行,通知node2进行配置管理
    2. state.sls        # 远程执行的一个方法
    3. web.apache      # 执行web目录下的apache文件
    
  4. grains.item模块

    功能:获取机器基本信息(cpu、内存)

    # grains.item获取主机基本信息
    
    # 1、查看系统版本
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item os
    linux-node1.example.com:
        ----------
        os:
            CentOS
    
    # 2、查看cpu型号
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item cpu_model
    linux-node1.example.com:
        ----------
        cpu_model:
            Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
            
    # 3、获取ipv4地址
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item fqdn_ip4
    linux-node1.example.com:
        ----------
        fqdn_ip4:
            - 192.168.56.11
    
    # 4、查询内核版本
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item kernelrelease
    linux-node1.example.com:
        ----------
        kernelrelease:
            3.10.0-957.1.3.el7.x86_64
            
    # 5、查看主机名
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item nodename
    linux-node1.example.com:
        ----------
        nodename:
            linux-node1.example.com
            
    # 6、查看系统版本号 centos6、centos7等
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item osmajorrelease
    linux-node1.example.com:
        ----------
        osmajorrelease:
    # 7、查看salt版本    
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item saltversion
    linux-node1.example.com:
        ----------
        saltversion:
            2018.3.3
    
    # 8、查看cpu数据量
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item num_cpus
    linux-node1.example.com:
        ----------
        num_cpus:
    
    # 9、查看内存大小
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item mem_total
    linux-node1.example.com:
        ----------
        mem_total:
    
    # 10、查看ipv4地址
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item ipv4
    linux-node1.example.com:
        ----------
        ipv4:
            - 127.0.0.1
            - 192.168.56.11
    
  5. Service模块

    salt '*' service.reload nginx 
    


salt ssh

介绍:

  1. salt-ssh 是 0.17.0 新引入的一个功能,不需要minion对客户端进行管理,也不需要master。

  2. salt-ssh 支持salt大部分的功能:如 grains、modules、state 等

  3. salt-ssh 没有使用ZeroMQ的通信架构,执行是串行模式

类似 paramiko、pssh、ansible 这类的工具

使用:

  • 安装(master和minion中都需要安装)

    yum -y install salt-ssh
    
  • 配置花名册,配置要管理的机器

    vim /etc/salt/roster
    
    # Sample salt-ssh config file
    #web1:
    #  host: 192.168.42.1 # The IP addr or DNS hostname
    #  user: fred         # Remote executions will be executed as user fred
    #  passwd: foobarbaz  # The password to use for login, if omitted, keys are used
    #  sudo: True         # Whether to sudo to root, not enabled by default
    #web2:
    #  host: 192.168.42.2
    
    linux-node1.example.com:
      host: 192.168.56.11
      user: root
      passwd: chnsys@2016
      port: 22
    
    linux-node2.example.com:
      host: 192.168.56.12
      user: root
      passwd: chnsys@2016
      port: 22
    
    /etc/salt/roster
    
  • 常用命令

    salt-ssh '*' test.ping -i                    # 使用salt自身模块
    
    salt-ssh '*' cmd.run 'df -lh'
    
    salt-ssh '*' -r 'ifconfig'                    # 执行原生shell命令
    
    -r, –raw, –raw-shell # 直接使用shell命令
    –priv #指定SSH私有密钥文件
    –roster #定义使用哪个roster系统,如果定义了一个后端数据库,扫描方式,或者用户自定义的的roster系统,默认的就是/etc/salt/roster文件
    –roster-file #指定roster文件
    –refresh, –refresh-cache #刷新cache,如果target的grains改变会自动刷新max-procs #指定进程数,默认为25
    -i, –ignore-host-keys #当ssh连接时,忽略keys
    –passwd #指定默认密码
    –key-deploy #配置keys 设置这个参数对于所有minions用来部署ssh-key认证,
     这个参和–passwd结合起来使用会使初始化部署很快很方便。当调用master模块时,并加上参数 –key-deploy 即可在minions生成keys,下次开始就不使用密码
    
    salt-ssh命令用法
    

总结:

  1. salt-ssh 是在salt基础上打了一个python包上传到客户端的默认tmp目录下

    在客户端上面解压并执行返回结果,最后删除tmp上传的临时文件

  2. salt-minion方法是salt-mater先执行语法验证,验证通过后发送到minion

    minion收到Msater的状态文件默认保存在/var/cache/salt/minion

    注意:也有时候salt-master语法验证通过,在minion上可能因为环境问题会执行失败

  3. salt-ssh和salt-minion可以共存,salt-minion不依赖于ssh服务



Grains

介绍:

  • salt 的grains主要是存储静态的数据,主要是minion端的一些数据,比如,hostname,内存大小、IP,CPU等一些数据,主要是存储在minion端的。

  • minion在启动时会读取grains数据,如果有新的grains数据需要重启minion服务,或者在master端使用salt的命令进行刷新。

grains作用:

  1. grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。

  2. 其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。

  3. grains 的作用是在每个minion中配置 key value进行标识,使批量执行时可以区分

  4. salt ‘linux-node1*’ grains.ls # grains支持通配符

salt grains原生命令:

salt '*' grains.items                                          # 查看minion的全部静态变量

salt '*' grains.ls                                                # 显示grains的变量名称

salt '*' grains.item os                                       # 显示某一个变量

salt '*' grains.get  ip4_interfaces:eth0              # 直接获取内容

salt -G 'os:CentOs' test.ping                             # 所有os的centos的 执行test.ping (-G就是grains)

自定义grains:需要重启 minion:

  1. 编辑 minion 文件,配置角色名

    vim /etc/salt/minion
    '''
    grains:
      roles: apache
    '''
    
  2. 重启minion

    systemctl restart salt-minion
    
  3. 查看所有机器都有哪些roles

    [root@linux-node1 ~]# salt '*' grains.item roles
    linux-node1.example.com:
        ----------
        roles:
            apache
    linux-node2.example.com:
        ----------
        roles:
    
  4. 让所有角色为apache的机器执行命令’w’,-G表示以grains进行目标选择

    salt -G 'roles:apache' cmd.run 'w'  	
    

自定义grains:无需重启minion:

  1. 在 minion中新建文件/etc/salt/grains,添加一个 key value

    vim /etc/salt/grains
    
    '''
    test-grains: test-grains-value
    '''
    
  2. 让 minion到所有grains中读取配置

    salt '*' saltutil.sync_grains
    
  3. 查看所有 key为 test-grains的 minion

    [root@linux-node1 ~]# salt '*' grains.item test-grains
    linux-node1.example.com:
        ----------
        test-grains:
            test-grains-value
    linux-node2.example.com:
        ----------
        test-grains:
    
  4. 让所有key=test-grains value=test-grains-value 的机器执行命令’w’,-G表示以grains进行目标选择

    salt -G 'test-grains:test-grains-value' cmd.run 'w' 
    


Salt Pillar

介绍:

Pillar是在salt 0.9.8版本后才添加的功能组件。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sessiion,所以Pillar可以用来传递敏感的数据,例如ssh-key,加密证书等。

  • 存储位置:

    存储在master端存放需要提供给minion的信息

  • 应用场景:

    敏感信息:每个minion只能访问master分配给自己的信息


  1. 在master配置文件中指定pillar位置:

    vim /etc/salt/master
    
    '''
    pillar_roots:
      base:
        - /srv/pillar
    '''
    
    systemctl restart salt-master
    mkdir /srv/pillar
    cd /srv/pillar
    
  2. 编辑一个pillar文件:

    需求:在centos(httpd)和Ubuntu(apache2)都需要apache服务,但是两种操作系统安装的包名不同

    vim /srv/pillar/apache.sls   # 编辑一个pillar文件
    
    {% if grains['os'] == 'CentOS' %}
    apache: httpd
    {% elif grains['os'] == 'Debian' %}
    apache: apache2
    {% endif %}
    
  3. 指定这个pillar文件给那个minion使用:

    vim top.sls  # 指定这个pillar文件给那个minion使用
    
    base:
      'linux-node2.example.com':
      - apache
    
  4. 确认 pillar中配置的items是否生效

    [root@linux-node1 pillar]# salt '*' pillar.items       
    
    linux-node1.example.com:
        ----------
    linux-node2.example.com:
        ----------
        apache:
            httpd
    
  5. Salt Grains 与 Salt Pillar 比较

在这里插入图片描述

参考原址:https://www.cnblogs.com/xiaonq/p/10233439.html#i4

发布了102 篇原创文章 · 获赞 229 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_44685869/article/details/105129288