天天看点

56. Python saltstack 二次开发(1)

Saltstack简介

Salt 是:

一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行);

一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据;

开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单。

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

Saltstack的优势:

有master端和minion端,执行的信息比较稳定,不容易丢失信息,或者出现失联主机的情况

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

基于centos6和centos7的差异,在两个不同的操作系统中安装saltstack也是不一样的。

参考网址:

<a href="https://docs.saltstack.com/en/latest/topics/installation/rhel.html">https://docs.saltstack.com/en/latest/topics/installation/rhel.html</a>

Centos6需要先安装扩展源,然后在进行安装:

Master端

<code>yum </code><code>install</code> <code>–y salt-master</code>

<code>yum </code><code>install</code> <code>–y salt-api</code>

Minion端:

<code>yum </code><code>install</code>  <code>-y salt-minion</code>

Saltstack的秘钥安装

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发送指令了。

<code>salt-key -L 或者salt-key       </code><code>#显示所有的key</code>

<code>salt-key -D               </code><code>#删除所有认证主机id证书</code>

<code>salt-key -d keys_values -y</code>

<code>salt-key -A                </code><code>#接收所有id证书请求</code>

<code>salt-key -a </code><code>id</code>               <code>#接受单个id证书请求</code>

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配置文件详解

Saltstack占用两个端口4505和4506

1. 确保master端的4505和4506端口开通

2. Minion的key确实别master接受

3. 通过test.ping 模块,双方都可以ping通

配置文件详解:

<a href="http://note.youdao.com/noteshare?id=ef288d8d0abb8f3e8bf6aa5b87bfabd3&amp;sub=wcp1478526434731795">http://note.youdao.com/noteshare?id=ef288d8d0abb8f3e8bf6aa5b87bfabd3&amp;sub=wcp1478526434731795</a>

Saltstack的几种模块介绍

在二次开发中开发的模块有2个,如下(Runner、Module):

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

Module 模块    通过master同步到minion端, 在minion执行

<code>salt-call saltutil.sync_modules</code>

<code>salt-call saltutil.sync_all</code>

包括:

beacons:

clouds: engines: grains: log_handlers: modules:

output: proxymodules: renderers: returners: sdb:

states: utils:

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

Pillar模块 记录所有minion通用的属性,然后同步到minion端

<code>salt-call saltutil.refresh_pillar</code>

<code>salt ‘*’ saltutil.refresh_pillar</code>

1. cmd模块

<code>salt  ‘*’ cmd.run “</code><code>df</code> <code>-h”</code>

2. ping模块

<code>salt ‘*’ </code><code>test</code><code>.</code><code>ping</code> <code>-t 5     </code><code>#-t 超时时间,秒</code>

3. cp 模块

<code>file_roots:</code>

<code>base:</code>

<code>- </code><code>/export/salt/root</code>

salt根目录:

    在master中file_roots定义的路径

    salt://test.txt 相当于 /export/salt/root/test.txt

用法:

<code>salt  </code><code>'172.17.23.11'</code>  <code>cp</code><code>.get_file  salt:</code><code>//nscd</code><code>.conf   </code><code>/tmp/xiang</code><code>.txt   (拷贝文件)</code>

4. cron模块:

<code>salt </code><code>'*'</code> <code>cron</code><code>.raw_cron root     (查看定时任务)</code>

<code>salt </code><code>'*'</code> <code>cron</code><code>.set_job root </code><code>'*'</code> <code>'*'</code> <code>'*'</code> <code>'*'</code> <code>1 </code><code>/export/scripts/rm_log</code><code>.sh (设定定时任务)</code>

<code>salt </code><code>'*'</code> <code>cron</code><code>.rm_job root </code><code>/export/scripts/rm_log</code><code>.sh   (删除定时任务,写全没效果)</code>

5.dnsutil模块

<code>salt </code><code>'*'</code> <code>dnsutil.hosts_append </code><code>/etc/hosts</code> <code>127.0.0.1 xiang.com</code>

<code>salt </code><code>'*'</code> <code>dnsutil.hosts_remove </code><code>/etc/hosts</code> <code>xiang.com</code>

6.file模块:

<code>salt </code><code>'*'</code> <code>file</code><code>.</code><code>chown</code> <code>/etc/passwd</code> <code>root root</code>

<code>salt </code><code>'*'</code> <code>file</code><code>.copy </code><code>/path/to/src</code> <code>/path/to/dst</code>

<code>salt </code><code>'*'</code> <code>file</code><code>.file_exists </code><code>/etc/hosts</code>

<code>salt </code><code>'*'</code> <code>file</code><code>.directory_exists </code><code>/etc/</code>

<code>salt </code><code>'*'</code> <code>file</code><code>.get_mod </code><code>/etc/passwd</code>

<code>salt </code><code>'*'</code> <code>file</code><code>.set_mod </code><code>/etc/passwd</code> <code>0644</code>

<code>salt </code><code>'*'</code> <code>file</code><code>.</code><code>mkdir</code> <code>/tmp/test</code>

<code>salt </code><code>'*'</code> <code>file</code><code>.</code><code>sed</code> <code>/export/servers/nginx/conf/nginx</code><code>.conf </code><code>'debug'</code> <code>'warn'</code>

<code>salt </code><code>'*'</code> <code>file</code><code>.append </code><code>/tmp/test</code><code>.txt </code><code>"welcome xiang"</code>

<code>salt </code><code>'*'</code> <code>file</code><code>.remove </code><code>/tmp/1</code><code>.txt</code>

7.network模块:

<code>salt </code><code>'*'</code> <code>network.</code><code>dig</code> <code>www.qq.com</code>

<code>salt </code><code>'*'</code> <code>network.</code><code>ping</code> <code>www.qq.com</code>

<code>salt </code><code>'*'</code> <code>network.ip_addrs</code>

8.pkg包管理模块:

管理yum, apt-get等

<code>salt </code><code>'*'</code> <code>pkg.</code><code>install</code> <code>php(安装应用)</code>

<code>salt </code><code>'*'</code> <code>pkg.remove php(移除应用)</code>

<code>salt </code><code>'*'</code> <code>pkg.upgrade    (升级所有的软件包)</code>

9.service模块(centos6)

<code>salt </code><code>'*'</code> <code>service.</code><code>enable</code> <code>nginx</code>

<code>salt </code><code>'*'</code> <code>service.disable nginx</code>

<code>salt </code><code>'*'</code> <code>service.restart nginx</code>

Grains

自定义grians(是在minion上定义的)

记录的是客户端上的

grains是在minion启动时搜集一些信息,如操作系统类型,网卡,内核版本,cpu架构等

<code>salt </code><code>"*"</code> <code>grains.</code><code>ls</code>                    <code>列出所有grains项目名字</code>

<code>salt </code><code>"*app.*"</code> <code>grains.items          列出所有grains项目以及值</code>

<code>salt </code><code>"*"</code> <code>grans.item serialnumber 查看服务器的sn码</code>

<code>(其他以此类推)</code>

grains的信息并不是动态的,并不会实时变化,它只是在minion启动时收集到的

我们可以根据grains收集到的一些信息,做一些配置管理工作

在minion上:

<code>vim </code><code>/etc/salt/grains</code>

<code>role: nginx</code>

<code>env</code><code>: </code><code>test</code>

重启

<code>service salt-minion restart</code>

获取grians:

<code>salt </code><code>"*"</code> <code>grains.item role </code><code>env</code>

或者:

<code>salt -G </code><code>"*"</code> <code>role:nginx cmd.run "</code><code>hostname</code><code>“</code>

<code>salt ‘*’grains.items</code>

(虽然也挺好用,但是很少用,要用也是用pillar)

Pillar

(记录的是服务端上的信息)

pillar(在master上定义)

(yaml语法)

在配置文件中找pillar的文件路劲:创建目录

<code>mkdir</code>  <code>/export/salt/pillar</code>

在目录内定义文件:

<code>vim </code><code>top</code><code>.sls</code>

<code>"*"</code><code>:</code>

<code>- </code><code>test</code>

<code>vim </code><code>test</code><code>.sls</code>

<code>conf: xiang</code>

然后

刷新pillar:

<code>salt </code><code>'*'</code> <code>saltutil.refresh_pillar</code>

验证:

<code>salt </code><code>'*'</code> <code>pillar.items conf</code>

<code>salt -I  </code><code>'conf:xiang'</code> <code>test</code><code>.</code><code>ping</code>

<code></code>

本文转自 听丶飞鸟说 51CTO博客,原文链接:http://blog.51cto.com/286577399/2067460