文章目录

  • 1. saltstack 的数据系统
    • 1.1 SaltStack组件之Grains
      • 1.grains使用方法
        • 信息查询
        • 查询某个key值
        • 用Grains来匹配minion
      • 2.自定义grains
        • 方法一:在minion端
        • 方法二:在minion端
      • 3. 匹配运用
        • target匹配
        • top.sls文件使用
    • 1.2 SaltStack组件之Pillar
      • 1. 自定义pillar项
      • 2. 数据匹配
  • 2. jinja模板
    • 2.1介绍
    • 2.2 jinja的使用
    • 2.3 高可用安装配置 示例
  • 3. job管理
    • 3.1 把job存储到数据库
    • 3.2 Job管理

1. saltstack 的数据系统

saltstack有两大数据系统-grains和pillar

1.1 SaltStack组件之Grains

  • Grains是SaltStack的一个组件,其存放着minion启动时收集到的信息。当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。由于grains是静态数据,因此不推荐经常去修改它。

  • Grains是SaltStack组件中非常重要的组件之一,因为我们在做配置部署的过程中会经常使用它,Grains是SaltStack记录minion的一些静态信息的组件。可简单理解为Grains记录着每台minion的一些常用属性,比如CPU、内存、磁盘、网络信息等。我们可以通过grains.items查看某台minion的所有Grains信息。

  • Grains应用场景:

信息查询
在命令行下进行目标匹配
在top file中进行目标匹配
在模板中进行目标匹配

1.grains使用方法
信息查询

salt server2 grains.ls只查询grains的key项
salt server3 grains.item fqdn查询域名
salt server3 grains.item ipv4查询IP
salt server3 grains.item ipv6


查询某个key值

用Grains来匹配minion

2.自定义grains
方法一:在minion端
  • 在minion端vim /etc/salt/minion

  • systemctl restart salt-minion重启服务
  • 在master端进行查询 salt server3 grains.item roles
  • server2的设置方法如上,将server2的roles设置为httpd
方法二:在minion端

vim /etc/salt/grains创建grains文件

  • 在master端

salt server3 saltutil.sync_grains同步数据

salt server3 grains.item roles查看数据


master端

mkdir /srv/salt/_grains创建目录
vim /srv/salt/_grains/my_grain.py编写py文件

def my_grain():grains = {}grains['salt'] = 'stack123'grains['hello'] = 'world'return grains

salt '*' saltutil.sync_grains
salt server2 grains.item salt查看数据
salt server2 grains.item hello


注意:如果在.py文件中 设置了 grains['roles] = 'XXXX',重新查看minion的role,发现并没有生效,因为minion端的更改优先级更高

3. 匹配运用
target匹配

salt -G roles:httpd cmd.run date -G通过grains
salt -G roles:nginx cmd.run hostname
salt -G salt:stack123 cmd.run hostname
salt -G hello:world cmd.run hostname


top.sls文件使用

vim /srv/salt/top.sls

base:'roles:httpd':- match: grain- httpd'roles:nginx':- match: grain- nginx

salt '*' state.highstate全局推

  • salt目录

1.2 SaltStack组件之Pillar

  • Pillar也是SaltStack组件中非常重要的组件之一,是数据管理中心,经常配置states在大规模的配置管理工作中使用它。Pillar在SaltStack中主要的作用就是存储和定义配置管理中需要的一些数据,比如软件版本号、用户名密码等信息,而且可以指定某一个minion才可以看到对应的信息,它的定义存储格式与Grains类似,都是YAML格式。
  • Pillar的特点:

可以给指定的minion定义它需要的数据
只有指定的人才能看到定义的数据
在master配置文件里设置

  • 在Master配置文件中有一段Pillar settings选项专门定义Pillar相关的一些参数:
    vim /etc/salt/master
  • 默认Base环境下Pillar的工作目录在/srv/pillar目录下。若你想定义多个环境不同的Pillar工作目录,只需要修改此处配置文件即可。
1. 自定义pillar项

mkdir /srv/pillar创建pillar目录
mkdir /srv/pillar/web自定义目录web
vim /srv/pillar/web/init.sls

{% if grains['fqdn'] == 'server2' %}
package: httpd
{% if grains['fqdn'] == 'server3' %}
package: nginx
{% endif %}

vim /srv/pillar/top.sls

base:'*':- web


salt '*' saltutil.refresh_pillar刷新pillar数据
salt '*' pillar.items查询pillar数据
salt '*' pillar.item package查询pillar数据

2. 数据匹配
  • 命令行中匹配
    salt -I package:nginx cmd.run hostname
  • state系统中使用
    vim /srv/salt/httpd/init.sls
web:pkg.installed:- pkgs:- {{ pillar['package'] }}file.managed:- source: salt://httpd/files/httpd.conf- name: /etc/httpd/conf/httpd.confservice.running:- name: httpd- enable: True- reload: True- watch:- file: web

2. jinja模板

2.1介绍

  • Jinja2的应用场景:针对不同的操作系统安装软件,针对不同的cpu数量、内存等动态生成软件的配置文件,都需要Jinja2以及Grains和pillar的辅助,

  • Jinja2是一个强大的python模板引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能,这对大多应用的安全性来说是非常重要的。

  • Jinja模板两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环
    或赋值的语句,后者把表达式的结果打印到模板上。

2.2 jinja的使用

  1. 控制条件
    vim /srv/salt/test.sls
/mnt/testfile:file.append:{% if grains['fqdn'] == 'server2' %}- text: server2{% elif grains['fqdn'] == 'server3' %}- text: server3{% endif %}

salt '*' state.sls test执行命令,发minion端已经完成


2. 在普通文件中的使用
vim /srv/salt/httpd/httpd.conf

vim /srv/salt/httpd/init.sls

web:pkg.installed:- pkgs:- httpdfile.managed:- source: salt://httpd/files/httpd.conf- name: /etc/httpd/conf/httpd.conf- template: jinja- context:port: 80service.running:- name: httpd- enable: True- reload: True- watch:- file: web

  • 想要加上端口号的话

vim httpd.conf

Listen {{ bind }}:{{ port }}

vim init.sls

- template: jinja
- context:port: 80bind: 192.168.43.2

或者

...
- template: jinja
- context:port: 80bind: { grains['ipv4'][-1] }
  1. 直接引用pillar/grains变量
    vim /srv/salt/httpd/init.sls
...
- template: jinja
- context:port: {{ pillar['PORT'] }}bind: { grains['ipv4'][-1] }

vim /srv/pillar/web/init.sls

{% if grains['fqdn'] == 'server2' %}
package: httpd
PORT: 80
{% elif grains['fqdn'] == 'server3' %}
package: nginx
{% endif %}
  1. 引用pillar变量
    vim /srv/salt/httpd/init.sls
...
- template: jinja
- context:port: {{ pillar['PORT'] }}bind: {{ pillar['BIND'] }}

vim /srv/pillar/web/init.sls

{% if grains['fqdn'] == 'server2' %}
package: httpd
PORT: 80
BIND: 192.168.43.2
{% elif grains['fqdn'] == 'server3' %}
package: nginx
{% endif %}
  1. 直接引用pillar变量
    vim httpd.conf
Listen {{ grains['ipv4'][-1] }}:{{ pillar['PORT'] }}
  1. 引入其他文件中的变量,使用jinja模板的Import方式
    vim /srv/salt/lib.sls
{%  set port = 80 %}

vim /srv/salt/httpd/files/httpd.conf

{% from 'lib.sls' import port %} ##在apache配置文件中导入模板文件,将其写在第一行

注意: lib.sls文件的优先级大于pillar,最后生效

2.3 高可用安装配置 示例

  • vim /srv/salt/keepalived建立目录
  • vim /srv/salt/keepalived/files建立文件目录
  • vim /srv/salt/keepalived/install.sls安装。先写安装文件,
kp-install:pkg.installed:- name: keepalived
  • salt server2 state.sls keepalived.install先进行安装,然后传送配置文件到files/
[root@server2 ~]# cd /etc/keepalived/
[root@server2 keepalived]# ls
keepalived.conf
[root@server2 keepalived]# scp keepalived.conf server1:/srv/salt/keepalived/files
keepalived.conf                                     100% 1037   152.3KB/s   00:00
  • vim /srv/salt/keepalived/files/keepalived.conf配置keepalived文件
[root@server1 files]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state {{ STATE }}interface ens33virtual_router_id {{ VRID }}priority {{ PRI }}advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {{{ VIP }}}
}

vim /srv/salt/keepalived/init.sls

kp-install:pkg.installed:- name: keepalivedfile.managed:- source: salt://keepalived/files/keepalived.conf- name: /etc/keepalived/keepalived.conf- template: jinja- context:STATE: {{ pillar['state'] }}VRID: {{ pillar['vrid'] }}PRI: {{ pillar['pri'] }}VIP: {{ pillar['vip'] }}service.running:- name: keepalived- enable: True- reload: True- watch:- file:kp-install

mkdir /srv/pillar/kp创建kp目录

vim /srv/pillar/kp/init.sls

{% if grains['fqdn'] == 'server2' %}
state: MASTER
pri: 100
{% elif grains['fqdn'] == 'server3' %}
state: BACKUP
pri: 50
{% endif %}vrid: 60
vip: 192.168.43.100

vim /srv/pillar/top.sls

base:'*':- web- kp

salt '*' state.sls keepalived执行命令

  • 在server2中-master

  • server3中 backup


  • 断掉server2中的httpd服务后,server3就会补上

3. job管理

  • master在下发指令消息时,会附带上产生的jid,minion在接收到指令开始执行时,会在本地的cachedir(默认是/var/cache/salt/minion)下的proc目录产生已该jid命名的文件,用于在执行过程中master查看当前任务的执行情况,指令执行完毕将结果传送给master后,删除该临时文件
  • master将minion的执行结果存放在本地/var/cache/salt/master/jobs目录,默认缓存24小时(可通过修改master配置文件keepjobs选项调整)
  • vim /etc/salt/master
keep_jobs: 24


3.1 把job存储到数据库

  1. 配置数据库
  • server1中
  • yum install mariadb-server安装数据库
  • systemctl start mariadb
MariaDB [(none)]> grant all on salt.* to salt@'*' identified by 'salt';
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> grant all on salt.* to salt@'localhost' identified by 'salt';

  • vim /mnt/add.sql建立数据库表
CREATE DATABASE  `salt`DEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci;USE `salt`;--
-- Table structure for table `jids`
--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;--
-- Table structure for table `salt_returns`
--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;--
-- Table structure for table `salt_events`
--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;
  • mysql -p < add.sql 导入数据库

  1. 把job存储到数据库
  • 在server1(master)中
    yum install -y MySQL-python.x86_64 使master可以访问数据库
    vim /etc/salt/master 修改master端配置
  • 在server1中 vim /etc/salt/master
1253 master_job_cache: mysql
1254 mysql.host: 'localhost'
1255 mysql.user: 'salt'
1256 mysql.pass: 'salt'
1257 mysql.db: 'salt'
1258 mysql.port: 3306

systemctl restart salt-master重启salt-master服务:

测试


  • 还有一种方法,数据库配置在minion端,配置方法同上。
  • yum install -y MySQL-python.x86_64 使minion可以访问数据库
    vim /etc/salt/minion 修改minion端配置
return mysql ##返回数据到数据库
mysql.host: 'localhost'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'

systemctl restart salt-minion重启salt-minion服务:

3.2 Job管理

salt-run jobs.active 查看所有minion当前正在运行的jobs(在所有minions上运行saltutil.running)

salt-run jobs.list_jobs 列出当前master jobs cache中所有job

salt-run jobs.lookup_jid <jid> 从master jobs cache中查询指定jid的运行结果


Saltstack自动化运维详解(数据系统 jinja模板 job管理)相关推荐

  1. SaltStack 自动化运维详解

    一.自动化运维工具对比 使用所需软件配置单个服务器是一项相当简单的任务. 但是,如果许多服务器需要安装相同或相似的软件和配置,则该过程将需要大量的工时才能完成,这会耗尽您本已紧张的资源.如果没有某种形 ...

  2. ansible自动化运维详解(三)ansible常用模块续

    文章目录 ansible自动化运维详解(三)ansible常用模块续 四.ansible常用模块(2) 4.10.yum_repository 4.11.dnf 4.12.service 及 fire ...

  3. ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建

    文章目录 ansible自动化运维详解(一)ansible的安装部署.参数使用.清单管理.配置文件参数及用户级ansible操作环境构建 一.ansible的安装部署 1.1.ansible简介 1. ...

  4. @ansible自动化运维详解(总述)

    ansible [自动化运维应用场景] "运维的未来是,让研发人员能够借助工具.自动化和流程,并且让他们能够在运维干预极少的情况下部署和运营服务,从而实现自助服务.每个角色都应该努力使工作实 ...

  5. 企业运维实战--自动化运维Saltstack(上)之saltstack的安装部署、远程执行、grains和pillar详解以及Jinja模板的使用

    企业运维实战--自动化运维Saltstack(上) 前言 一.Saltstack安装部署 二.sls文件远程执行 saltstack安装httpd并启动 saltstack源码编译安装nginx 启动 ...

  6. 七天学会SALTSTACK自动化运维 (3)

    七天学会SALTSTACK自动化运维 (3) 导读 SLS TOP.SLS MINION选择器 SLS文件的编译 总结 参考链接 导读 SLS SLS (aka SaLt State file) 是 ...

  7. saltstack自动化运维部署--安装apache\原码安装nginx服务

    对saltstack自动化运维部署的认识 原理 SaltStack 是一种基于 C/S 架构的服务器基础架构集中化管理平台,管理端称为 Master,客户端称为 Minion.SaltStack 具备 ...

  8. 自动化运维工具——Ansible(三)——分组管理

    自动化运维工具--Ansible(三)--分组管理 1. 通过ip地址分组 1.1 写法一 1.2 写法二 2. 通过主机名分组 2.1 写法一 2.2 写法二 3. 子组 1. 通过ip地址分组 1 ...

  9. saltstack 自动化运维管理

    一.简介 saltstack是一个配置管理系统,能够维护预定义状态的远程节点. saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据. saltstack是运维人员提高工作效 ...

最新文章

  1. 字典的最大深度 python 实现
  2. OO实现ALV TABLE 三:ALV的功能设计
  3. FPGA+CPU助力数据中心实现图像处理应用体验与服务成本新平衡
  4. 实现一个简单的Tomcat
  5. Oracle SQL中实现indexOf和lastIndexOf功能
  6. win10休眠设置_电脑总是“打瞌睡”?教你如何简单关闭自动休眠
  7. 安卓如何修改华强北二代耳机敲击指令?
  8. 【牛客 - 369A】小D的剧场(线性dp)
  9. 《剑指offer》第三十五题(复杂链表的复制)
  10. c语言 消除最后一个空格,新人提问:如何将输出时每行最后一个空格删除
  11. UVA12897 - Decoding Baby Boos
  12. 如何格式化用过的磁带,让他被新磁带机重复利用
  13. 【转载】制作Ubuntu启动盘——详细记录,亲测有效
  14. vs2015安装vax助手
  15. QQ出现大规模盗号,qq被盗发布不良信息怎么办
  16. 基于TensorFlow让机器生成赵雷曲风的歌词
  17. 2022-2028全球及中国假睫毛行业研究及十四五规划分析报告
  18. 教你认识系统进程_电脑维修啦 PCWXL.com
  19. 用计算机弹奏若当来世,若当来世简谱(歌词)-马里奥、冥月演唱-动画片《狐妖小红娘 第三季》片头曲...
  20. java 事件链_供应链攻击事件——针对Github中Java项目的定向攻击

热门文章

  1. (域名、主机名、服务名、端口号)名字与地址的转换 (gethostbyname、getservbyname、getaddrinfo、getnameinfo等)
  2. 【arcgis 批量将属性表批量导出成excel】
  3. uni - app的 nfc功能使用鱼住未来第三方插件完成
  4. 计算机怎么查找表格里内容,请教如何迅速查找复杂EXCEL表格里的内容? -电脑资料...
  5. 怎么让Html的高度自适应屏幕高度
  6. gomonkey permission denied
  7. 多项式插值中的一些定理证明
  8. HDMI/type-c一线通EDP驱动板|应用高清便携显示器支持2K/1080P
  9. python哪家培训
  10. Pr混剪视频制作教程[纯萌新]