saltstack
安装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