python saltstack

一.Saltstack简介

Salt 是:
一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行)
一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据
开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单


Saltstack(中国用户组 www.saltstack.cn )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。

Saltstack的优势:
有master端和minion端,中间有zeroMQ消息队列,执行的信息比较稳定,不容易丢失信息,或者出现失联主机的情况
python saltstack

有封装好的http-api,我们可以直接启动salt-api就可以通过http协议进行调用。不需要自己进行第二次的封装

二.Saltstack的安装

Centos6:
安装 epel yum源
在 Master 端和 Minion 端都需要安装 epel 的 yum源
rpm -ivh http://mirrors.zju.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm

Master端:
yum install –y salt-master
yum install –y salt-api

安装好后开启:
/etc/init.d/salt-master start
Starting salt-master daemon: [确定]

设置开机自启动:
chkconfig salt-master on

查看SaltStack Master 端版本号
salt-master --version
salt-master 2015.5.10 (Lithium)

Minion端:
yum install  -y salt-minion

指定 master 的ip地址(根据自己的IP进行修改)
sed -i 's/#master: salt/master: 192.168.1.127/g' /etc/salt/minion 

启动
/etc/init.d/salt-minion start

设置开机自启
chkconfig salt-minion on

查看SaltStack Minion 端版本号
salt-minion --version
salt-minion 2015.5.10 (Lithium)

三.Master与Minion认证

minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。

salt-key -L 或者salt-key 显示所有的key
salt-key -D :删除所有认证主机id证书
salt-key -d keys_values -y
salt-key -A:接收所有id证书请求
salt-key -a id :接受单个id证书请求

salt-key 查看当前需要接受的keys(master和minions都需要把服务开启)。

python saltstack

-A参数,该参接受所有认证主机的认证,也可以使用 -a id名 只认证单独的主机

python saltstack

如果对客户端信任,可以让master自动接受请求,在master端/etc/salt/master配置
    auto_accept: True
命令执行:
测试master和minion之间的通信是否正常
python saltstack

True代表正常,*代表所有主机,也可以选择单台或者按组及正则进行匹配等
命令执行使用cmd.run参数

python saltstack

四.Saltstack远程执行机器

1.-E, --pcre,通过正则表达式进行匹配:
salt -E 'web(9|10)*' test.ping -t 1
2. -L, --list, 主机id进行过滤:
salt -L "*app*" cmd.run "df -h" 
3. -G, --grain, 根据被控主机的grains信息进行过滤
salt -G 'role:nginx' cmd.run "ls /export"
4. -I, --pillar, 根据被控主机的pillar信息进行过滤
salt -I 'myname:xiang' test.ping -t 5
5. -S, --ipcidr, 根据minion的ip地址进行匹配
salt -S 192.168.1.1 test.ping
salt -S 192.168.1.0/24 test.ping
salt -S 192.168.0.0/16 test.ping
salt -S 192.0.0.0/8 test.ping
6.检查客户端是否挂掉:
salt-run manage.status |head
salt-run manage.down

五.Saltstack的几种模块介绍

1.Runner 模块     在master端执行的  salt-run

2.Module 模块    通过master同步到minion端, 在minion执行
salt-call saltutil.sync_modules
salt-call saltutil.sync_all:包括:beacons:
clouds: engines: grains: log_handlers: modules:
output: proxymodules: renderers: returners: sdb:
states: utils:

3.Grins 模块 记录minion的属性key:value

4.Pillar模块 记录所有minion通用的属性,然后同步到minion端
salt-call saltutil.refresh_pillar
salt ‘*’ saltutil.refresh_pillar

5.cmd模块
salt  ‘*’ cmd.run “df -h”
6. ping模块
salt ‘*’ test.ping –t 5

7. cp 模块
将master上的文件cp到minion端:路径在/etc/salt/master中设置。
下面为默认位置:
#file_roots: 
#base:
#/salt/salt
salt根目录:在master中file_roots定义的路径,salt://test.txt相当于/srv/salt/test.txt
salt '*' cp.get_file salt://a.txt /tmp/a.txt  #将/srv/salt/a.txt文件cp到所有minion端的/tmp下。
python saltstack

8. cron模块:
salt '*' cron.raw_cron root     (查看定时任务)
salt '*' cron.set_job root '*' '*' '*' '*' 1 /export/scripts/rm_log.sh 
salt '*' cron.rm_job root /export/scripts/rm_log.sh   (写全没效果)

9.dnsutil模块
salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 xiang.com
salt '*' dnsutil.hosts_remove /etc/hosts xiang.com

10. file模块:
salt '*' file.chown /etc/passwd root root
salt '*' file.copy /path/to/src /path/to/dst
salt '*' file.file_exists /etc/hosts
salt '*' file.directory_exists /etc/
salt '*' file.get_mod /etc/passwd
salt '*' file.set_mod /etc/passwd 0644
salt '*' file.mkdir /tmp/test
salt '*' file.sed /export/servers/nginx/conf/nginx.conf 'debug' 'warn'
salt '*' file.append /tmp/test.txt "welcome xiang"
salt '*' file.remove /tmp/1.txt

11.network模块:
salt '*' network.dig www.qq.com
salt '*' network.ping www.qq.com
salt '*' network.ip_addrs

12.pkg包管理模块:
管理yum, apt-get等
salt '*' pkg.install php
salt '*' pkg.remove php
salt '*' pkg.upgrade    (升级所有的软件包)

13.service模块

salt '*' service.enable nginx

Grains
自定义grians(在minion上定义的)
grains是在minion启动时搜集一些信息,如操作系统类型,网卡,内核版本,cpu架构等
salt "*" grains.ls    列出所有grains项目名字
salt "*app.*" grains.items  列出所有grains项目以及值
grains的信息并不是动态的,并不会实时变化,它只是在minion启动时收集到的
我们可以根据grains收集到的一些信息,做一些配置管理工作
在minion-1上:vim /etc/salt/grains
role: minion-1
env: test

重启service salt-minion restart

在minion-2上:vim /etc/salt/grains
role: minion-2
env: test

重启service salt-minion restart

获取grians:
salt "*" grains.item role env
或者:
salt -G  "role:minion-1" cmd.run "hostname“
salt "* " grains.items

python saltstack


Pillar
pillar(在master上定义)(yaml语法)
在配置文件中找pillar的文件路径:/etc/salt/master
#pillar_roots:
#  base:
#    - /srv/pillar
找到以后,mkdir  -p /srv/pillar
vim top.sls
base:
"*":      #对所有minion有效

- test

vim test.sls

conf: xiang
然后刷新pillar: salt '*' saltutil.refresh_pillar
验证:salt '*' pillar.items conf
或者: salt -I 'conf:xiang' test.ping