Saltstack简介

Salt是一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的包被安装,指定的服务在运行),一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据,开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单。Saltstack(中国用户组 www.saltstack.cn )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。

Saltstack的优势

有master端和minion端,执行的信息比较稳定,不容易丢失信息,或者出现失联主机的情况。
有封装好的http-api,我们可以直接启动salt-api就可以通过http协议进行调用。不需要自己进行第二次的封装。

安装

基于centos6和centos7的差异,在两个不同的操作系统中安装saltstack也是不一样的。参考网址:https://docs.saltstack.com/en/latest/topics/installation/rhel.html
Centos6需要先安装扩展源,然后在进行安装。

Master端(192.168.127.165)

  1. 安装
  2. yum install y salt-master
  3. yum install y salt-api
  4.  
  5. vi /etc/salt/master
  6. interface: 192.168.127.165
  7.  
  8. 启动
  9. systemctl start salt-master

Minion端(192.168.127.166)

  1. 安装
  2. yum install -y salt-minion
  3.  
  4. vi /etc/salt/minion
  5. master: 192.168.127.165
  6. 其中有一个id选项,这个id虽然不定义也没有关系,如果不定义,那么master会以客户端的hostname来显示,一旦定义了就按id定义的名字来显示了,这个id可以不和hostname一致,但定义了id后,也应该在/etc/hosts里面定义记录。
  7. 启动
  8. systemctl start salt-minion

源码安装:http://note.youdao.com/noteshare?id=881bbdbb6fd7bca9f74360aa052b79a4&sub=EEDE33154E13432FA9198021015C5C25

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

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

在Master上执行:

  1. [root@k8s-master /]# salt-key
  2. Accepted Keys:
  3. k8s-node1 # 因为我在Minion上没有定义id,所以这里显示的是客户端的hostname
  4. Denied Keys:
  5. Unaccepted Keys:
  6. Rejected Keys:

Saltstack远程执行命令

1.-E, --pcre,通过正则表达式进行匹配

  1. salt -E 'web(9|10)*' test.ping -t 1

2. -L, --list, 主机id进行过滤

  1. salt -L "*app*" cmd.run "df -h"

3. -G, --grain, 根据被控主机的grains信息进行过滤

  1. salt -G 'role:nginx' cmd.run "ls /export"

4. -I, --pillar, 根据被控主机的pillar信息进行过滤

  1. salt -I 'myname:xiang' test.ping -t 5

5. -S, --ipcidr, 根据minion的ip地址进行匹配

  1. salt -S 192.168.1.1 test.ping
  2. salt -S 192.168.1.0/24 test.ping
  3. salt -S 192.168.0.0/16 test.ping
  4. salt -S 192.0.0.0/8 test.ping

6.检查客户端是否挂掉

  1. salt-run manage.status |head
  2. salt-run manage.down
  3.  
  4. 例子:
  5. [root@k8s-master ~]# salt-run manage.status
  6. down:
  7. up:
  8. - k8s-node1

测试一:salt "*" test.ping  # 检测通讯是否正常

  1. [root@k8s-master ~]# salt "*" test.ping
  2. k8s-node1:
  3. True

测试二:salt-run "*" cmd.run "df -h"   # 远程执行命令

  1. [root@k8s-master ~]# salt "*" cmd.run "df -h"
  2. k8s-node1:
  3. Filesystem Size Used Avail Use% Mounted on
  4. /dev/mapper/centos-root 17G 1.2G 16G 7% /
  5. devtmpfs 478M 0 478M 0% /dev
  6. tmpfs 489M 12K 489M 1% /dev/shm
  7. tmpfs 489M 13M 476M 3% /run
  8. tmpfs 489M 0 489M 0% /sys/fs/cgroup
  9. /dev/sda1 1014M 125M 890M 13% /boot
  10. tmpfs 98M 0 98M 0% /run/user/0

说明: 这里的 * 必须是在 master 上已经被接受过的客户端,可以通过 salt-key 查到,通常是我们已经设定的 id 值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端 web10、web11, 那我们可以写成  salt 'web*'    salt 'web1[02]'  salt -L 'web10,web11'   salt -E 'web(10|11)' 等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持 grains 和 pillar,分别加 -G 和 -I 选项,下面会介绍到。

Saltstack的几种模块介绍

runner模块

  1. master端执行,用于执行在master端执行的一些module
  2. [root@k8s-master ~]# salt-run manage.status
  3. down:
  4. up:
  5. - k8s-node1

module 模块

  1. 通过master同步到minion端, minion执行。
  2. salt-call saltutil.sync_modules # 同步到minion端
  3. salt-call saltutil.sync_all

grains模块

  1. 记录minion的属性keyvalue
  2. [root@k8s-master ~]# salt "*" grains.ls
  3. k8s-node1:
  4. - SSDs
  5. - biosreleasedate
  6. - biosversion
  7. - cpu_flags
  8. - cpu_model
  9. - cpuarch
  10. - domain
  11. ......

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

  1.  

pillar模块

  1. 记录所有minion通用的属性,如cpu、内存、磁盘等信息,然后同步到master
  2. salt-call saltutil.refresh_pillar # minion端
  3. salt '*' saltutil.refresh_pillar # master端

pillar(在master上定义)(yaml语法)
在配置文件中找pillar的文件路径:

  1.  

找到以后,mkdir /export/salt/pillar
vim top.sls
base:
"*":
- test
vim test.sls
conf: xiang
然后刷新pillar: salt '*' saltutil.refresh_pillar
验证:salt '*' pillar.items conf
或者: salt -I 'conf:xiang' test.ping

cmd模块

  1. [root@k8s-master ~]# salt '*' cmd.run "df -h"
  2. k8s-node1:
  3. Filesystem Size Used Avail Use% Mounted on
  4. /dev/mapper/centos-root 17G 1.2G 16G 7% /
  5. devtmpfs 478M 0 478M 0% /dev
  6. tmpfs 489M 12K 489M 1% /dev/shm
  7. tmpfs 489M 13M 476M 3% /run
  8. tmpfs 489M 0 489M 0% /sys/fs/cgroup
  9. /dev/sda1 1014M 125M 890M 13% /boot
  10. tmpfs 98M 0 98M 0% /run/user/0

ping模块

  1. [root@k8s-master ~]# salt '*' test.ping
  2. k8s-node1:
  3. True

cp模块

  1. file_roots:
  2. base:
  3. - /export/salt/root
  4. salt根目录:在masterfile_roots定义的路径,salt://test.txt相当于/export/salt/root/test.txt
  5. salt '192.168.127.166' cp.get_file salt://nscd.conf /tmp/xiang.txt

cron模块

  1. salt '*' cron.raw_cron root # 查看定时任务
  2. salt '*' cron.set_job root '*' '*' '*' '*' 1 /export/scripts/rm_log.sh
  3. salt '*' cron.rm_job root /export/scripts/rm_log.sh

dnsutil模块

  1. salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 jack.com
  2. salt '*' dnsutil.hosts_remove /etc/hosts jack.com

file模块

  1. salt '*' file.chown /etc/passwd root root
  2. salt '*' file.copy /path/to/src /path/to/dst
  3. salt '*' file.file_exists /etc/hosts
  4. salt '*' file.directory_exists /etc/
  5. salt '*' file.get_mod /etc/passwd
  6. salt '*' file.set_mod /etc/passwd 0644
  7. salt '*' file.mkdir /tmp/test
  8. salt '*' file.sed /export/servers/nginx/conf/nginx.conf 'debug' 'warn'
  9. salt '*' file.append /tmp/test.txt "welcome jack"
  10. salt '*' file.remove /tmp/1.txt

network模块

  1. salt '*' network.dig www.qq.com
  2. salt '*' network.ping www.qq.com
  3. salt '*' network.ip_addrs

pkg包管理模块

  1. 管理yum apt-get
  2. salt '*' pkg.install php # 安装php
  3. salt '*' pkg.remove php # 移除php
  4. salt '*' pkg.upgrade # 升级所有的软件包

service模块

  1. salt '*' service.enable nginx # 使nginx可用
  2. salt '*' service.disable nginx # 使nginx不可用
  3. salt '*' service.restart nginx # 重启nginx

saltstack二次开发(一)的更多相关文章

  1. saltstack自动化运维系列⑩SaltStack二次开发初探

    saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...

  2. python之saltstack二次开发

    一.salt的概念 salt是一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行).一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选 ...

  3. saltstack二次开发(三)

    以下代码实现的功能: 通过saltstack的httpapi在minion上安装软件. vim saltapi.py #!/usr/bin/env python # -*- coding: utf-8 ...

  4. saltstack二次开发(二)

    Saltstack的api Salt-api有两种方式,一种是函数的形式,有人家定义好的函数,我们可以直接调用,直接写python代码调用函数或者类就可以了.第二种形式是salt-api有封装好的ht ...

  5. Navisworks API 简单二次开发 (自定义工具条)

    在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...

  6. [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用

    目       录 第十二章     二次开发及应用... 2 12.1        项目配制... 3 12.2        引用相关组件... 4 12.3        构建主程序... 5 ...

  7. OBS-Studio二次开发记录

    OBS-Studio 是一款跨平台的,开源的视频直播客户端软件. 公司需要对他进行二次开发,开发的目的是使用它的录屏功能. 开发的要求是:定制全新的界面,所见即所得,window系统兼容要好. 开发步 ...

  8. 小猪cms微信二次开发之怎样分页

    $db=D('Classify'); $zid=$db->where(array('id'=>$this->_GET('fid'),'token'=>$this->tok ...

  9. 承接 AutoCAD 二次开发 项目

    本人有多年的CAD开发经验,独立完成多个CAD二次开发项目.熟悉.net及Asp.net开发技术,和Lisp开发技术. 现在成立了工作室,独立承接CAD二次开发项目.结项后提供源码及开发文档,有需要的 ...

随机推荐

  1. AngularJS学习笔记(五)自定义指令(1)

    先来说说自定义指令 ng通过内置指令的方式实现了对html的增强,同时也赋予了我们自定义指令的功能,让我们根据实际需求进行指令的定制.自定义指令涉及到模板(template).作用域(scope).数 ...

  2. PetaPoco源代码学习--3.Sql类

    PetaPoco对数据库的操作直接使用SQL语句,在代码中进行调用既可以直接传递SQL语句,也可以使用提供的SQL类来获取到SQL语句进行操作,直接传递SQL语句在内部实现中也是封装成Sql类传递到底 ...

  3. PhpStorm快捷方式

    转载源:http://www.cr173.com/html/66775_1.html PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助用 ...

  4. linux 安装mysql8.0

    linux下安装mysql8.0 下载mysql $ wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-8.0/mysql-8.0.4 ...

  5. The area (hdu1071)积分求面积

    The area Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. 总结:独立开发 jar 包组件——功能主要是支持查询数据库的所有表数据

    前言:开发完一个项目,必定总结,这次就将总结记录在博客,第一次开发组件 jar 包,包含前端,后台,中间遇到好多问题,这里一一描述.转载请注明出处: https://www.cnblogs.com/y ...

  7. Hbase学习之概念与原理

    一.hbase与列式存储 hbase最早起源于谷歌的一篇BigTable的论文,它是由java编写的.开源的一个nosql数据库,同时它也是一个列式存储的.支持分布式(基于hdfs)的数据库.什么是列 ...

  8. 前端js获取checkbox的值

    1. var old = $("#old").val(); if (old != null && old != 'undefined' && old ...

  9. git push报错error: failed to push some refs to 'git@github.com'

    git push报错error: failed to push some refs to 'git@github.com' $ git push -u origin master To git@git ...

  10. VS 2015 报错 " 'unistd.h': No such file or directory" 的解决办法

    使用 Visual Studio 2015 进行程序开发工作时,如果编译的是来自于Linux平台的源文件,该源文件可能会包含头文件 uninstd.h,这样会产生报错信息: "fatal e ...