Saltstack自动化运维
Saltstack三大功能
1,远程执行
2,配置管理(状态)
3,云管理
四种运行方式:
Local 本地
Minion/Master C/S
Syndic 代理模式
Salt SSH
安装仓库
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el7.noarch.rpm
安装master和minion
yum -y install salt-master salt-minion
客户端安装minion
不修改master配置文件就可以先启动master
systemctl start salt-master
修改minion配置文件
vim /etc/salt/minion
16行填写master地址

103号配置ID(也可以不配置默认使用主机名为ID这里我没有配置)

启动
systemctl start salt-minion
会在/etc/salt文件夹下面生成一个id文件就是主机名(不要随意修改,因为启动需要读取minion_id,如果修改需要先把这个文件删除然后在启动的时候又自动生成)

修改两个个客户端的配置文件然后启动(分别为我的web服务器和ios服务器)
需要经过master认证以后才能使用
minion第一次启动会生成一个pki目录


pem是私钥 pub为公钥
master下面也有一个pki文件夹

pre下是客户端发送的ID但是还没有经过master的认证
可以查看服务器端文件和客户端文件的MD5来看是不是同一个文件


通过salt-key可以查看key

同意的 拒绝的 没有同意的
同意

salt-key -A 同意所有
同意以后

同时在客户端生成一个公钥
minion_master.pub

实际上认证过程就是交换公钥的过程,实现了加密通信。
远程执行
salt '*' test.ping

这里的ping不是发送ping包而是检测客户端是否通信正常
批量执行创建文件夹的命令
salt '*' cmd.run 'mkdir /tmp/hehe'
配置管理
State 要写一个文件格式 YAML 后缀
YAML:三板斧
1,缩进
两个空格,不能使用Tab
2,冒号
表示层级关系的冒号后面没有东西,表示键值的有一个空格
key:value
3,短横线
短横线后面也有一个空格
- list1
- list2
设置master配置文件
vim /etc/salt/master
去掉这几行的#

重启master
systemctl restart salt-master
创建配置文件目录
mkdir /srv/salt
在创建一个web配置文件目录
mkdir web
进入这个web目录创建一个配置文件apache.sls
apache-install: #定义唯一标示
pkg.installed: #pkg是一个状态模块,installed是执行方法
- names:
- httpd
- httpd-devel
apache-service:
service.running:
- name: httpd #运行一个服务,服务名是httpd
- enable: True #开机自启动
执行
salt '10-8-86-172' state.sls web.apache
在对应的客户端目录/var/cache/salt生成对应的文件,是master发送给minnon的
如果客户端是centos就使用yum安装如果是Ubuntu就使用apt-get自动安装

执行完毕会在相应客户端自动安装apache并且启动
PS:后面加test = True可以先测试但是不执行
注意编辑时候的空格,每一行的末尾也不能有空格和Tab
上面是手动执行一个模块
slat有一个高级状态
打开master配置文件(需要放在base下面)

vim /srv/salt/top.sls
base:
'10-8-45-27':
- web.apache
'10-8-86-172':
- web.apache
执行
salt '*' state.highstate
Saltstack与ZeroMQ

Saltstack使用4505 4506两个端口4505用于消息的发布
4506请求与响应
ZeroMQ不是一个传统意义的消息队列
默认salt-master进程显示都是salt-master

安装显示进程的详细信息的包
yum -y install python-setproctitle
systemctl restart salt-master
ps -ef|grep salt-master

通过进程已经建立好长连接了,所以执行速度快
SaltStack 数据系统
Grains (谷粒)
Pillar (柱子)
Grains:静态数据 当Minion启动时收集的Minion本地相关信息
操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号
不重启就不会变,所以叫静态数据
1,资产管理,信息查询
2,用于目标选择
3,配置管理中使用
查看其中一条服务器的grains信息
salt '10-8-45-27' grains.ls
salt '10-8-45-27' grains.items
查看所有机器的操作系统
salt '*' grains.item os

查看ip
salt '*' grains.item fqdn_ip4
查找出操作系统是CentOS的执行相应的命令,这样就可以做目标选择
salt -G 'os:CentOs' test.ping
salt -G 'os:CentOs' cmd.run 'echo hehe'
如果列出的grains不够用也可以自定义grains
可以修改客户端的的vim /etc/salt/minion自定义grains

先不重启,查看是没有的

重启以后再查找

重启定义为apache的apache
salt -G 'roles:apache' cmd.run 'systemcet restart httpd'
生产环境不建议写在minion直接写在
vim /etc/salt/grains
cloud: openstack
minion会自动找

grain在top里面的用法

PS:这里grain没有s
开发一个Grains 在master下
Python。写一个Python脚本,返回一个字典就可以了

#!/usr/bin/env python
#_*_ coding: utf-8 _*_ def my_grains():
#初始化一个grains字典
grains = {}
#设置字典中的key
grains['iaas'] = 'openstack'
grains['edu'] = 'oldboyedu'
#返回这个字典
return grains
同步到minion
salt '*' saltutil.sync_grains
在minion的/var/cache/salt

在master下面查看

Grains优先级:
1,系统自带
2,Grains文件写的
3,minion配置文件
4,自己写的
PS:可以不重启salt-minion刷新更新grains命令是,salt '*' saltutil.sync_grains
Pillar:
Pillar是动态的。给特定的Minion指定特定的数据。只有指定的minion自己能看到自己的数据(安全,比如定义用 户密码)
和top file类似
显示
salt '*' pillar.items

默认没有显示
设置成显示
vim /etc/salt/master

systemctl restart salt-master
可以查看了 是一个名称为master的字典
还是注释掉以免影响自定义的pillar
修改master配置

重启
systemctl restart salt-master
1,写pillar sls
vim /srv/pillar/web/apache.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
2,top file
vim /srv/pillar/top.sls
base:
'10-8-86-172':
- web.apache
刷新
salt '*' saltutil.refresh_pillar
查看
salt '*' pillar.items apache

PS:注意文件apache.sls和top.sls的位置
pillar使用场景
1,目标选择
salt -I 'apache:httpd' test.ping
salt -I 'apache:httpd' cmd.run 'w'
Grains VS Pillar
类型 数据采集方式 应用场景 定义位置
Grains 静态 minion启动时收集 数据查询 目标选择 配置管理 minion
Pillar 动态 master自定义 目标选择 配置选择 敏感数据 master
深入学习saltstack远程执行
salt '*' cmd.run 'w'
命令:salt
目标:'*'
模块: cmd.run 自带150+模块。自己写模块
返回: 执行后结果返回,Returnners
目标:Targeting
两种:一种和minion ID有关
一种和minion ID无关
1,Minion ID有关的方法
minion ID
通配符
列表
salt -L '10-8-86-172,10-8-45-27' cmd.run 'uptime'
正则表达式
salt -E '10-8*' test.ping
所有匹配目标的方式,都可以用到top file里面来指定目标
主机名设置方案:
1,IP地址
2,根据业务来进行设置
按百分比执行
salt '*' -b 10 test.ping
模块:
返回tcp链接
salt '*' network.active_tcp
获取主机名
salt '*' network.get_hostname
取得所有在运行的服务
salt '*' service.get_all
取得对应服务的状态
salt '*' service.status sshd
往所有机器上面拷贝文件
salt-cp '*' /etc/hosts /opt/hehe
查看top file
salt '*' state.show_top
单独安装一个服务
salt '*' state.single pkg.installed name=lsof
返回程序
ruturns
数据返回到muysql这个返回是minion直接返回给mysql的不是返回给master然后到mysql的
salt.returners.mysql
客户端安装MySQL-python (python的MySQL库)
salt '10-8-86-172' state.single pkg.installed name=MySQL-python
或者使用下面命令安装
salt '10-8-86-172' cmd.run 'yum -y install MySQL-python'
master创建数据库
create database `salt` character set utf8 collate utf8_general_ci;
创建表
DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
`jid` varchar(255) NOT NULL,
`load` mediumtext NOT NULL,
UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX jid ON jids(jid) USING BTREE;
DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
`fun` varchar(50) NOT NULL,
`jid` varchar(255) NOT NULL,
`return` mediumtext NOT NULL,
`id` varchar(255) NOT NULL,
`success` varchar(10) NOT NULL,
`full_ret` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY `id` (`id`),
KEY `jid` (`jid`),
KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 授权
grant all on salt.* to salt@'%' identified by 'salt@pwd'; 修改两个minion的配置文件vim /etc/salt/minion
在尾部添加
mysql.host: '10.8.45.27'
mysql.user: 'salt'
mysql.pass: 'salt@pwd'
mysql.db: 'salt'
mysql.port: 3306
重启minion
systemctl restart salt-minion
在minion看着日志执行
先查看一下master的数据库是空的

执行 '*' test.ping --return mysql 再来查看数据库就有数据了

PS:返回程序是比较深入的,或者基于saltstack做二次开发时候使用
参考文档
https://www.unixhot.com/docs/saltstack/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql
编写状态模块
先看一个系统自带模块
vim /usr/lib/python2.7/site-packages/salt/modules/service.py
编写模块
1,放哪里
在/srv/salt目录下新建一个文件夹_modules
2,命名
vim _modules/my_disk.py
def list():
cmd = 'df -h'
ret = __salt__['cmd.run'](cmd)
return ret
PS:是两个下划线
3,刷新
salt '*' saltutil.sync_modules

4,执行
salt '*' my_disk.list

Saltstack自动化运维的更多相关文章
- 七天学会SALTSTACK自动化运维 (3)
七天学会SALTSTACK自动化运维 (3) 导读 SLS TOP.SLS MINION选择器 SLS文件的编译 总结 参考链接 导读 SLS SLS (aka SaLt State file) 是 ...
- 七天学会SALTSTACK自动化运维 (2)
七天学会SALTSTACK自动化运维 (2) 导读 Grains Pillar 总结 参考链接 导读 上一篇主要介绍了安装和基本的使用方法,但是我认为如果理解了相关概念的话,使用会更加顺手,因为毕竟每 ...
- saltstack自动化运维系列11基于etcd的saltstack的自动化扩容
saltstack自动化运维系列11基于etcd的saltstack的自动化扩容 自动化运维-基于etcd加saltstack的自动化扩容# tar -xf etcd-v2.2.1-linux-amd ...
- saltstack自动化运维系列⑩SaltStack二次开发初探
saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...
- saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3
saltstack自动化运维系列⑧SaltStack实践配置管理安装nginx-1.10.3 安装nginx-1.10.3.tar.gz # mkdir -p /srv/salt/prod/pkg / ...
- saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix
saltstack自动化运维系列⑥SaltStack实践配置管理安装zabbix 1.添加管理zabbix的sls文件# vim /srv/salt/base/init/zabbix_agent.sl ...
- saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy的Keepalived 安装配置Keepalived 1.编写功能模块 #创建keepalived目录# mkdir -p ...
- saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy
saltstack自动化运维系列⑥SaltStack实践安装配置HAproxy 下载haproxy1.6.2.tar.gz下载地址:http://www.haproxy.org/download/1. ...
- saltstack自动化运维快速入门
saltstack自动化运维快速入门 关于saltstack 这个软件是干啥的 我这里就不介绍了 只是简单的说下是干啥的 网上的说法是 它是func的强化版本+ puppet的精简版 关于puppet ...
- saltstack 自动化运维
salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会进行大量的重复性操作,例如安装软 ...
随机推荐
- VisualVM监控远程主机上的JAVA应用程序
使用VisualVM监控远程主机上JAVA应用程序时,需要开启远程主机上的远程监控访问,或者在远程JAVA应用程序启动时,开启远程监控选项,两种方法,选择其中一种就可以开启远程监控功能,配置完成后就可 ...
- CoreCLR源码探索(五) GC内存收集器的内部实现 调试篇
在上一篇中我分析了CoreCLR中GC的内部处理, 在这一篇我将使用LLDB实际跟踪CoreCLR中GC,关于如何使用LLDB调试CoreCLR的介绍可以看: 微软官方的文档,地址 我在第3篇中的介绍 ...
- react+webpack开发环境配置
react是目前非常热门的前端框架,提倡组件化开发.所谓的组件,简单理解,就是一个独立的页面部件(包括页面模版,样式,逻辑等),它是一个独立的整体. webpack,是一个模块打包工具,其主要功能,就 ...
- 模块化规范Common.js,AMD,CMD
随着网站规模的不断扩大,嵌入网页中的javascript代码越来越大,开发过程中存在大量问题,如:协同开发,代码复用,大量文件引入,命名冲突,文件依赖. 模块化编程称为迫切的需求. 所谓的模块,就是实 ...
- 一个关于Python正则表达式的快速使用手册
一直在纠结自己的博客到底应该写一些什么东西,这几天发现自己的正则用的不是很熟练,于是想要写一篇关于正则表达式的博客,目的就是为了让自己以后要用而又不会的时候不至于像无头苍蝇一样到处乱撞. 有些人在碰到 ...
- Access-自定义控件TabControl
p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...
- 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述 HierarchyViewer库的引入让M ...
- java 解压 zip 包并删除
需求是这样的, 在服务器上有 运营上传的zip 包,内容是用户的照片,我需要做的是 获取这些照片上传,并保存到 数据库. 这里面的 上传照片,保存数据库都不难,主要问题是解压zip包,和删除zip ...
- com.android.ide.common.process.PrecessException:org.gradle.process....finished with non-zero exit value 1
1.问题描述: 如图,在生成apk文件时出现如下错误, 2.原因分析: 我在网上搜了很多类似的问题,但试了又试也没有解决.然后我想上次编译时都没有出错,应该是最近的操作导致的错误. 3.解决办法: 把 ...
- IONIC2新建项目并添加导航
一. 基础搭建 1. 新建IONIC2项目 ionic start myApp tabs --v2 不加--v2会新建ionic1的项目 2. 运行项目 cd myApp io ...