SaltStack学习笔记
SaltStack三大功能:
1. 远程执行
2. 配置管理 (状态)
3.云管理
运维三板斧:监控、执行、配置
四种运行方式:
1.Local
2. Minion/Master C/S架构
3. Syndic - zabbix proxy
4. Salt SSH
安装saltStack repository和Key
rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/3004/SALTSTACK-GPG-KEY.pub
curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/3004.repo | sudo tee /etc/yum.repos.d/salt.repo
运行命令
yum clean expire-cache
安装salt-minion, salt-master,或者其他的salt组件。
sudo yum install salt-mastersudo yum install salt-minionsudo yum install salt-sshsudo yum install salt-syndicsudo yum install salt-cloudsudo yum install salt-api
配置:
minion:
/etc/salt/minion中重要的两个配置:master, id,例如
id: hadoop-rm-cnsz17pl1791 master: - cnsz17pl2429 - cnsz17pl2552 - cnsz17pl2551 - cnsz17pl2550 - cnsz17pl2549
启动:systemctl start salt-minion
pki目录是minion第一次启动时创建的
[root@CNSZ17PL1791 salt]# tree pki
pki
├── minion
│ ├── minion_master.pub
│ ├── minion.pem
│ └── minion.pub
└── minion_bak
├── minion_master.pub
├── minion.pem
└── minion.pub
master:
tree pki
pki
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions
│ │ ├── 1a02vla3341mast
│ │ ├── 1a02vla3342mast
│ │ ├── zk-plat-1a02vlb4135dsvc
│ │ └── zk-plat-1a02vlb4136dsvc
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre //未认证的minion放在此目录
│ └── minions_rejected
└── minion
├── minion_master.pub
├── minion.pem
└── minion.pub
认证:
salt-key
Denied Keys:
Unaccepted Keys:
xxxx
yyyy
Rejected Keys:
认证key:
salt-key -a xxx(也可以使用通配符)
salt-key -A (同意所有)
经典案例:
1. 远程执行:
salt '*' test.ping #'*'代表所有主机 ,* 在shell里面也有含义,所以要用''/""引起来,test是模块,ping是模块的一个方法
salt 'linux-node1*' test.ping
salt 'linux-node-old.com' test.ping
salt 'xxx' cmd.run "w"
salt 'xxx' cmd.run 'mkdir /tmp/hehe'
salt 'xxx' cmd.run 'systemctl restart zabbix-agent'
2. 配置管理:
使用State状态模块来识别状态,需要写一个文件描述服务的状态,格式:YAML, 后缀.sls
YAML(Yet Another Markupo Language)
YAML三板斧:
1. 缩进:2个空格,不能使用Tab键
2. 冒号:表示键值对时,后面要有一个空格,key:value
3. 短横线:表示列表,后面要有一个空格
[root@cnsz17pl2551 web]# cat apache.sls
apache-install:
pkg.installed:
- names:
- httpd
- httpd-devel apache-service:
service.running:
- name: httpd
- enable: True
[root@cnsz17pl2551 web]# cat apache.sls
apache-install:
pkg.installed:
- names:
- httpd
- httpd-devel apache-service:
service.running:
- name: httpd
- enable: True
salt '*' state.sls web.apache
master执行状态的时候,状态文件放在/var/cache/salt/minon/files/base/web/apache.sls下
state_top: top.sls
saltStack数据系统:
Grains: 静态数据,当Minion启动时候收集的Minion本地的相关信息(操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号),只收集一次,不重启不会再收集。
1. 资产管理,信息查询。 salt "目标地址" grains.items
2. 用于目标选择。 salt -G 'os:CentOs' cmd.run 'echo.hehe'
3. 配管理中使用。
在base设置的目录下,创建 _grains目录,放置用python写的grains文件
vim my_grains.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def my_grains():
#初始化一个grains字典
grains = []
#设置字典中的key-value
grains['iaas'] = 'openstack'
grains['edu'] = 'oldboyedu'
#返回这个字典
return grains
grains是minoin收集的,在master写的收集grains的脚本需要下发到minoin,
salt '*' saltutil.sync_grains
同步之后放在minoins的/var/cache/salt/minion/extmods/grains
Grains优先级:
1. 系统自带
2. grains文件写的
3. minion配置文件写的
4. 自己写的
Pillar: 配置管理。Pillar是动态的,给特定的minion指定特定的数据。只有指定的Minion自己能看到自己的数据。top file
可以用在定义用户密码等。
salt '*' pillar.items
pillar_roots:
base:
- /srv/pillar/
master配置文件里
{% if grains['os'] == 'CentOS' %}
apache: httpd
{%elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
1. 写pillar sls
2. 写top file
top.sls
base:
'linux-node2.oldboyedu.com':
- web.apache
salt '*' saltutil.refresh.pillar
salt '*' pillar.items apache
hehe:
{% if grains['os'] == 'CentOS' %}
apache: httpd
{%elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
pillar使用场景:
1. 目标选择: salt -I 'appache:httpd' test.ping
Grains VS Pillar
类型 数据采集方式 应用场景 定义位置
Grains 静态 minion启动时收集 数据查询/目标选择/配置管理 minion
Pillar 动态 master自定义 目标选择/配置管理/敏感数据 master
深入学习saltstack远程执行:
salt '*' cmd.run 'w'
命令:salt
目标:'*'
模块:cmd.run ,salt自带150+模块。可以自己写模块
返回:执行后结果的返回,Returners
目标:Targe:
两种 :一种和Minion ID有关:1)通配符 2)列表 3) 正则表达式 4) 所有匹配目标的方式 ,都可以用到top file里面来指定目标
通配符:salt 'linux-node?.oldboyd' test.ping , salt 'inux-node[1-2].oldboyedu.com' test.ping , salt 'linux-node[!2].oldboyedu.com' test.ping
列表 :salt -L 'linux-node1oldboyedu.com,linux-node2.oldboyedu.com' test.ping
正则表达式:salt -E 'linux-(node1|node2)*' test.ping
一种和Minion ID无关:子网和IP地址,nodegroups,混合匹配,批处理
salt -S 192.168.56.11 test.ping
salt -S 192.168.56.0/24 test.ping
nodegroups:在master配置文件里配置
nodegroups:
web: 'L@Linux-node1.oldboyedu.com,linux-node2.oldboyedu.com'
systemctl restart salt-master
salt -N web test.ping
批处理: salt '*' -b 10 test.ping ; salt -G 'os:CentOS' --batch-size 25% apache.signal restart
主机名设置文案:
1. IP地址
2. 根据业务来进行设置
模块:
https://www.unixhot.com/docs/saltstack/topics/execution/remote_execution.html
返回程序:(minoin直接返回,不用返回给master)
salt '*' test.ping --return mysql #需要在minion上配置mysql信息,用户名密码等
如何编写一个状态模块:
1. 放在哪里,base路径的下面创建一个_modules
2. 命名,文件名就是模块名,例如
vim my_disk.py
def list():
cmd = 'df -h'
ret = __salt__['cmd.run](cmd)
return ret
3. 刷新
salt '*' saltutil.sync modules
salt '*' my_disk.list
SaltStack学习笔记的更多相关文章
- saltstack学习笔记1 --安装
salt官网:http://docs.saltstack.cn/zh_CN/latest/ 安装教程: - http://docs.saltstack.cn/zh_CN/latest/topics/i ...
- Saltstack学习笔记--安装
实验环境: 两台RHEL 7.2 192.168.75.135 master .minion 192.168.75.136 minion 确保机器的防火墙及seli ...
- SaltStack学习笔记之安装zabbix_agentd(jinja和pillar)
一.环境说明 机器 IP 主机名 Master 192.168.0.23 minion.saltstack.com Minion 192.168.0.35 minion-node2.saltstack ...
- saltstack学习笔记--grains基本操作
查看当前已经定义的监控项: [root@master ~]# salt "192.168.75.135" grains.items 192.168.75.135: ---- ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
随机推荐
- H5网页CAD中webpack使用详细说明
前言 webpack是用于现代 JavaScript 应用程序的静态模块打包工具,用以构建一个前端工程化项目,如vue-cli create-react-app等脚手架工具都是基于webpack的构建 ...
- delphi get post
procedure GetDemo;var IdHttp : TIdHTTP; Url : string;//请求地址 ResponseStream : TStringStream; //返回信息 R ...
- javascript获取浏览器窗口分辨率|浏览器全屏分辨率|屏幕分辨率
浏览器窗口分辨率指显示网页的区域,在PC端由于浏览器窗口大小可调节,这个值是可变的.在手机等移动端浏览器窗口大小不可调节,宽度值是固定的,但竖屏和横屏切换会改变. 浏览器全屏分辨率是指浏览器启用全屏显 ...
- iOS MacOS 系统时间(时间戳)格式化
#pragma mark -原始数据是20220608155116,加工成2022/06/08 15:51:16 -(NSString *)timeString:(NSString *)toIndex ...
- 回溯-1-N皇后(Backtracking-1-N Queens)
#include <stdio.h> #define N 4 enum bool {TRUE, FALSE}; void print_Q(int *Q) { int i; for (i = ...
- Github搜索优质项目方法
[转载]:https://www.zhihu.com/question/20084458 搜索结果会显示非常多的开源项目,简直让你应接不暇,无从下手,很多小伙伴搜到这一步就放弃了,因为项目太多了,根本 ...
- 权昌TSC244条码打印机如何加载数据实现大批量打印呢?
我公司的TSC TTP-244条码打印机,只会改个名称打一张,怎么样改数据或者是加载数据实现大量打印的呢? 解答: TSC TTP-244条码打印机,是一款性能不错的桌面型条码打印机,最大打印 ...
- Python学习笔记组织文件之将指定目录下的指定格式文件压缩到指定文件夹
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- mybatis自增主键的获取
实体类 package org.example.entity; public class User { private Integer id; private String name; private ...
- BBS 项目分析
项目开发流程 # 1.核心 文章的增删改查 # 2.表关系分析 确定表的数量,确定表的基础字段,最后确定表的外键字段 # 3.表 1.用户表 2.个人站点表 3.文章表 4.文章分类表 5.文章标签表 ...