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-master
  • sudo yum install salt-minion
  • sudo yum install salt-ssh
  • sudo yum install salt-syndic
  • sudo yum install salt-cloud
  • sudo 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学习笔记的更多相关文章

  1. saltstack学习笔记1 --安装

    salt官网:http://docs.saltstack.cn/zh_CN/latest/ 安装教程: - http://docs.saltstack.cn/zh_CN/latest/topics/i ...

  2. Saltstack学习笔记--安装

    实验环境: 两台RHEL 7.2 192.168.75.135          master .minion 192.168.75.136          minion 确保机器的防火墙及seli ...

  3. SaltStack学习笔记之安装zabbix_agentd(jinja和pillar)

    一.环境说明 机器 IP 主机名 Master 192.168.0.23 minion.saltstack.com Minion 192.168.0.35 minion-node2.saltstack ...

  4. saltstack学习笔记--grains基本操作

    查看当前已经定义的监控项: [root@master ~]# salt "192.168.75.135" grains.items 192.168.75.135:     ---- ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  9. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  10. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

随机推荐

  1. nodejs配合jwt

    使用npm下载包: npm i jsonwebtoken --save 引入此包: const jsonwebtoken =require('jsonwebtoken'); JWT的组成: JWT由三 ...

  2. Vue3学习笔记(1)

    安装 //使用yarn构建 //安装yarn 需要管理员权限 sudo npm i yarn -g yarn create vite cd .. yarn yarn dev 目录结构 见名知义 四种语 ...

  3. 1067- invalid default value for ""

    创建表时报的,一个时间字段类型是datetime,一保存就报错,网上说是datetime类型只支持mysql 5.6.5+,我看了下我的版本,5.8的,没什么问题,然后找了许久找到了错误的地方. 很蠢 ...

  4. 2022-11-19学习内容-Server端代码编写-Client端代码编写

    1.Server端代码编写 1.1UserDBHelper.java package com.example.chapter07_server.database; import android.con ...

  5. python38

    Python break 语句 Python break语句,就像在C语言中,打破了最小封闭for或while循环. break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归 ...

  6. centos7上搭建Jenkins环境

    选择在centos 上安装jdk和tomcat来搭建Jenkins 1.jdk安装 查看有没有java环境:rpm -qa | grep java 如果没有java环境的话,接着就去查找java-1. ...

  7. top usage

    https://www.cnblogs.com/dragonsuc/p/5512797.html

  8. PyTables 教程(一)入门,浏览对象树,将数据提交到表和数组

    翻译自http://www.pytables.org/usersguide/tutorials.html 教程 Seràs la clau que obre tots els panys, seràs ...

  9. 操作系统 Concurrency 并发

    1. 线程和进程的区别 名称 执行点 地址空间 状态保存位置 进程 process 一个进程有多个线程,多个执行点 一个进程一个地址空间 Process Control Block 进程控制块 线程 ...

  10. Oracle11g空表导出设置

    alter system set deferred_segment_creation=false; select 'alter table '||table_name||' allocate exte ...