安装saltstack:

        先配置epel yum源,yum install salt-master salt-minion 主节控制节点上安装master和minion,控制节点上只要安装minion 即可。


配置minion:

        在各个minion节点上打开文件 /etc/salt/minion,设置master的IP地址,配置完成后启动master和各个minion。

        然后到master节点上执行 salt-key 命令,会列出各个节点的秘钥信息,如果salt-key 获取不到key,一般情况下就是防火墙问题,使用命令salt-key -A 命令可以接受所有的key,或者使用salt-key -a  node* 这样的形式来接受key。

        安装完成之后可以使用命令 salt '*' test.ping 来检查是否各个节点都连通了。test是salt中的一个模块,ping是test模块中的一个方法。

        salt '*' cmd.run 'uptime'    在minion上运行uptime命令,cmd.run可以执行所有的shell命令。


状态管理

使用salt status文件安装apache:

        打开配置文件 /etc/salt/master 将 file_roots 中的base段配置打开。这个用来制定salt status文件的位置,配置如下:

        file_roots:
          base:
            - /srv/salt

        然后创建 /srv/salt 目录,再在目录中创建 apache.sls 文件。在apache.sls文件中写入如下状态。

        apache-install:
              pkg.installed:
                    - names:
                          - httpd
                          - httpd-devel
        apache-service:
              service.running:
                  - name: httpd
                  - enable: True
                  - reload: True

        注意:在编写状态时只能使用空格,每个层级只能使用两个空格。

        编写好之后使用命令 salt '*' state.sls apache 来运行状态脚本,state是一个模块,sls为这个模块中的方法,后面的apache为这个状态脚本文件,且不用添加.sls后缀。


从入口文件top.sls文件执行state脚本:

        在base目录即之前master配置文件中定义的目录 /srv/salt 中创建top.sls文件和apache.sls文件,在top.sls文件中写入以下状态信息:

        base:
          '*':
            - apache

        上面这段脚本信息表示所有的minion上执行apache这个状态。然后使用命令 salt '*' state.highstate 来执行top.sls状态脚本。

        base中一般用来存放所有主机都要执行的状态。


Grains

        Grains是配置在minion端的,grains是minion端用来收集主机信息的组件,当启动minion端才会执行,然后保持不变。

        使用grains之前先进行配置,minion的配置文件可以用 include 包含,include可以使用相对地址目录,也可以使用绝对地址目录。如果不想使用 include 直接在minion中写如下配置,或者创建 /etc/salt/grains文件,然后在文件中写上如下配置信息。

        grains:
              env:
                    - test
              myname:
                    - top

        注意这个配置文件的格式,开头第一行要写上“grains:”后面的env为健名,后面的 “- test”为值,依照这个格式书写即可。配置好后重启minion。

        显示主机信息:

                salt '*' grains.items           显示全部信息

                salt '*' grains.item fqdn    显示单个信息

                salt '*' grains.get fqdn      显示信息,同item但格式不同

                salt '*' grains.get os          获取系统信息

                salt -G os:CentosOS cmd.run 'w'        在匹配的主机上执行w命令,-G即为Grains的意思。

Grains标签:

        标签的作用就是事先在各个minion节点上打标签,在执行状态操作时匹配到标签的主机上执行相应的状态,而其他的主机则不执行。

        配置好后重启minion。然后使用命令 salt -G 'rules:memcache' cmd.run '/bin/echo "hello"',这样匹配到的标签就执行了这个命令。

        这样就可以从入口文件top.sls开始执行含有特定标签的主机上执行状态了,top.sls文件如下。

        base:
          'roles:memcache':
            - match: grain
            - apache

Pillar

        pillar是设置在master主机上的,使用前先在配置文件中打开 pillar_roots 以及下面的两行。然后到 /srv/pillar 目录下新建三个文件,分别为pass.sls 、conf.sls、top.sls,其中top.sls是入口文件。在里面定义如下内容:

        base:
              'node1':
                    - conf
              'node0':
                    - pass

        这个 node1、node0 是主机名,conf 和 pass 为上面创建的两个文件,在这两个文件中可以任意定义一些健值对,格式如下:

        admin: admin_password

        qiyang: qiyang_password

        然后使用命令 salt 'node1' pillar.item admin 就可以获取到对应的值了。


常用命令


salt-key 查看接受秘钥的主机:

salt-key


使用salt模块化推送:

salt 'uat-pxy00*' state.sls nginx.config

        这个命令是用来推送nginx目录下的config文件,当在master主机修改nginx配置文件时这样推送即可,state.sls模块会根据配置文件重新reload配置文件。


推送环境变量到单台主机:

salt 'hostname' state.sls deploy.env


reload配置文件:

salt 'node*' service.reload nginx


推送文件:salt:// 开头的文件要放在 /srv/salt/base 目录中。

salt 'node*' cp.get_file salt://dev/data/xxx.txt  /home/xxx.txt

拷贝文件:将本地文件推送到远程目录

salt-cp '*' localfile /usr/local/


ping操作:

salt 'node*' test.ping


软件包升级:

salt 'node*' pkg.upgrade pkgs='["mysql-server", "apache"]'


分批次执行命令:

salt 'node*' -b n cmd.run 'date'


指定多台主机:

salt -L 'node1,node2,node3' cmd.run 'cat /etc/centos-release'

参考:

21yunwei.com/archives/3384