企业运维实战(Saltstack的安装、远程执行、YAMY语法、grains、pillar、Jinja模板)图文解析,包看包会,卧龙出品,必是精品

Saltstack

  • 实验前提
  • saltstack安装及相关内容
  • saltstack远程执行
    • 远程执行shell命令
    • 编写远程之执行模块
  • YAML语法 配置SLS文件
    • 编写一个远程执行安装httpd的sls 为server2安装
    • 编写一个执行安装和配置nginx的sls 为server3安装
      • 安装nginx
      • 安装并配置
  • grains
    • 自定义grains项
    • 编写grains模块
    • grains匹配运用
  • pillar
    • 自定义pillar项
    • jinja模板配合同时为两台主机安装

实验前提

官网:http://www.saltstack.com/
设置官方YUM仓库:yum install http://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm

saltstack安装及相关内容

yum list salt-* 查看salt的相关安装包

在这里插入图片描述
server1(master端)
下载并开启以及设置开机自启动salt-master服务

yum install salt-master.noarch -y
systemctl enable --now salt-master.service

在这里插入图片描述
在这里插入图片描述
查看端口

4506端口的作用:salt Master Ret接口,支持认证、文件服务、结果收集等功能
4505端口的作用:salt Master pub接口,提供远程执行命令发送功能

在这里插入图片描述
在server2、3(minion端)
下载salt-minion 并修改配置文件 开启并设置开机自启动服务

yum install  salt-minion.noarch
vim /etc/salt/minion
	16 master: 172.25.21.1 #:号后面必须带个空格 master顶格写
systemctl enable --now salt-minion.service

systemctl enable --now salt-minion.service
在这里插入图片描述
注意:如果minion端更改完hostname名后 需要删除/etc/salt/minion_id
否则在master端显示的还是之前的hostname
在这里插入图片描述

到这,minion端则已经设置好

在server1(master端)
进行公钥的相互交换,master端执行命令允许minion连接

salt-key 密钥管理
salt-key -L              ##查看所有minion-key
salt-key -a <key-name>   ##接受某个minion-key
salt-key -d <key-name>   ##删除某个minion-key
salt-key -A              ##接受所有的minion-key
salt-key -D              ##删除所有的minion-key

在这里插入图片描述
测试master与minion是否连接成功

salt '*' test.ping #出现true则表示成功

在这里插入图片描述

lsof (list open files)是一个列出当前系统打开文件的工具

yum install -y lsof 
lsof -i :4505
lsof -i :4506

可以看出server1通过4505发送给server2和3
server1通过4506收集server2和3的信息
在这里插入图片描述
下载python获取进程名字的工具,可以看到运行进程的名字

yum install -y python-setproctitle.x86_64
systemctl restart salt-master.service
ps ax

如下图,可以看到相关进程的名字
在这里插入图片描述

saltstack远程执行

远程执行shell命令

远程执行命令在matser端输入

salt [options] '<target>' <function> [arguments]
target:指定哪些minion,默认的规则是使用glob匹配minion id
如:	salt '*' test.ping
	salt -E 'server[1-3]' test.ping
	salt -L 'server2,server3' test.ping
function是module提供的功能,Salt内置了大量有效的functions
如:	salt '*' cmd.run  hostname
	salt '*' cmd.run  'uname -a'
arguments通过空格来界定参数	
如:	salt 'server2' sys.doc pkg 查看pkg模块文档
		salt 'server2' sys.doc service 查看service模块文档

salt内置的执行模块列表
测试master和minion端连接
在这里插入图片描述
远程执行显示hostname名字
在这里插入图片描述
远程执行下载安装包的命令模板
在这里插入图片描述
远程执行在server2下载httpd服务

salt 'server2' pkg.install httpd

在这里插入图片描述

远程查看server2的httpd和minion的版本信息

salt 'server2' pkg.version httpd
salt 'server2' pkg.version salt-minion

在这里插入图片描述
远程控制server2的httpd服务开启和关闭

salt 'server2' service.start httpd
salt 'server2' service.stop httpd

在这里插入图片描述

编写远程之执行模块

首先在matser端(server1)

编辑master配置文件(默认base是/srv/salt)
如果你不想修改 可以忽略下面这步操作

vim /etc/salt/master
如果修改了 那就要重启服务salt-master

在这里插入图片描述
默认情况下/srv里面没有salt目录,需要自己建立

mkdir /srv/salt

创建模块目录

mkdir /srv/salt/_modules

在这里插入图片描述
编写模块文件

vim /srv/salt/_modules/my_disk.py
def df():
	return __salt__['cmd.run']('df -h')
#df 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计

在这里插入图片描述

同步模块

salt server2 saltutil.sync_modules
会同步到server2的/var/cache/salt/minion/files/base

如下图,显示同步成功
在这里插入图片描述

在master运行模块

salt server2 my_disk.df

则显示了server2的文件系统磁盘使用情况统计

在这里插入图片描述

YAML语法 配置SLS文件

YAML语法

规则一: 缩进
Salt需要每个缩进级别由两个空格组成,不要使用tabs。
规则二: 冒号
字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。
my_key: my_value
规则三: 短横杠
想要表示列表项,使用一个短横杠加一个空格。
  - list_value_one
  - list_value_two
Salt 状态系统的核心是SLS,或者叫SaLt State 文件。
SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。
sls文件命名:
	sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。
	使用子目录来做组织是个很好的选择。
	 init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以``apache/init.sls`` 就是表示``apache``.
	如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache.

编写一个远程执行安装httpd的sls 为server2安装

首先在base(也就是/srv/salt)下建立目录apache,在这个目录下建立init.sls,编写内容如下
文件意思大致:下载安装包httpd和php,运行、开机自启动、刷新httpd服务,watch的作用:运行中的 httpd 服务将会关注/etc/httpd/conf/httpd.conf文件的变化,如果发生变化,将会触发重启服务的操作 file.managed可以把自己修改的httpd.conf模板同步到你下载的httpd主机

apache:
  pkg.installed:
    - pkgs:
      - httpd
      - php
  service.running:
    - name: httpd
    - enable: true
    - reload: true
    - watch:
      - file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://apache/httpd.conf

需要在base下的apache下有一个httpd.conf的配置文件,这个可以自己修改自己所需的内容,在远程执行安装时候会将这个httpd.conf的配置文件模板填入到你安装的机器的httpd.conf的配置文件中

salt server2 state.sls apache在master端运行这条命令,即可为server2远程安装httpd服务

编写一个执行安装和配置nginx的sls 为server3安装

安装nginx

首先在base(也就是/srv/salt)下建立目录nginx,在这个目录下建立init.sls,编写内容如下
文件意思大致:安装nginx的依赖性问题,同步base下nginx目录中的nginx压缩包到远程安装主机的/mnt目录下,然后命令运行,进入/mnt—>解压缩nginx压缩包–>进入解压后的目录–>将debug注释掉(在解压后目录的auto/cc/gcc文件中)–>进行源代码安装三部曲
- creates: /usr/local/nginx 这句话的作用是判定有没有/usr/loacl/nginx存在 避免二次安装 如果存在这个目录 则不会执行操作

nginx-install:
  pkg.installed:
    - pkgs:
      - gcc
      - pcre-devel
      - openssl-devel
  file.managed:
    - name: /mnt/nginx-1.20.1.tar.gz
    - source: salt://nginx/nginx-1.20.1.tar.gz
  cmd.run:
    - name: cd /mnt && tar zxf nginx-1.20.1.tar.gz && cd nginx-1.20.1 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx  --with-http_ssl_module --with-threads --with-file-aio &> /dev/null && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx

需要提前将nginx压缩包放入到base下nginx目录中

salt server3 state.sls nginx在master端运行这条命令,即可为server3远程安装nginx服务

安装并配置

拷贝一个nginx.conf配置文件模板到base下nginx目录中,并进行修改

vim nginx.conf

在这里插入图片描述

拷贝一个nginx.service配置文件模板到base下nginx目录中,保证在安装nginx的主机可以通过systemctl来控制
文件内容大致跟上面httpd内容一致,唯一的不同就是这个嵌套了nginx的安装,第一二行表示调用nginx,也就是上面写的远程执行安装nginx服务,剩下的行则是远程配置nginx

include:
  - nginx
nginx-user:
  user.present:
    - name: nginx
    - shell: /sbin/nologin
    - home: /usr/local/nginx
    - createhome: false
/usr/local/nginx/conf/nginx.conf:
  file.managed:
  - source: salt://nginx/nginx.conf
nginx-service:
  file.managed:
  - name: /usr/lib/systemd/system/nginx.service
  - source: salt://nginx/nginx.service
  service.running:
  - name: nginx
  - enable: true
  - reload: true
  - watch:
    - file: /usr/local/nginx/conf/nginx.conf

curl server3 可以查看nginx是否开启成功

grains

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

salt server* grains.item ipv4  获取server2的ipv4

在这里插入图片描述

自定义grains项

两种设置minion端roles的方式

第一种:server2中设置roles

vim /etc/salt/minion
grains:
    roles: apache
systemctl restart salt-minion.service 重启salt-minion,否则数据不会更新

在这里插入图片描述

第二种:server3中设置roles

vim grains
	roles: nginx
salt server3 saltutil.sync_grains 同步数据,否则数据不会更新

在这里插入图片描述

server1(master):
在server1下查询

salt server? grains.item roles

在这里插入图片描述

编写grains模块

在salt-master端创建_grains目录
mkdir /srv/salt/_grains
vim /srv/salt/_grains/grains.py

#!/usr/bin/env python
def grains():
     # initialize a grains dictionary
     grains = {}
     # Some code for logic that sets grains like
     grains['hello'] = 'world'
     grains['salt'] = 'stack'
     return grains

在这里插入图片描述

salt '*' saltutil.sync_grains 同步grains到minion端
查看hello和salt的信息

在这里插入图片描述

grains匹配运用

在target中匹配minion
salt -G ‘roles:apache’ cmd.run hostname
-G 'roles:apache’可以匹配为server2 (由于在上面的设置)

命令显示结果为 在远程执行获取server2的hostname名
在这里插入图片描述

在top文件中匹配
vim /srv/salt/top.sls

base:
  'roles:apache':
    - match: grain
    - apache
  'roles:nginx':
    - match: grain
    - nginx.service

在这里插入图片描述

在这里插入图片描述
上图文件内容大致为 roles匹配到apache时,执行apache 匹配到nginx时,执行nginx.service

salt '*' state.highstate    ###state.highstate 这个是全局的所有的环境的所有的状态生效

在这里插入图片描述

pillar

pillar简介
pillar和grains一样也是一个数据系统,但是应用场景不同。
pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。
pillar更加适合在配置管理中运用。

定义pillar基础目录
编辑master配置文件(默认base是/srv/pillar)
如果你不想修改 可以忽略下面这步操作

vim /etc/salt/master

在这里插入图片描述

mkdir /srv/pillar
systemctl restart salt-master.service

在这里插入图片描述

自定义pillar项

vim /srv/pillar/pkgs.sls
{% if grains['fqdn'] == 'server2' %}
package: httpd
{% elif grains['fqdn'] == 'server3' %}
package: nginx
{% endif %}

vim top.sls
base:
  '*':
    - pkgs

如果grains的fqdn信息为server2 则pillar下package的信息为httpd
如果grains的fqdn信息为server3 则pillar下package的信息为nginx
在这里插入图片描述
调用pkgs.sls
在这里插入图片描述

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

在这里插入图片描述

远程执行pillar下package信息为httpd的主机运行hostname
salt -I ‘package:httpd’ cmd.run hostname

在这里插入图片描述

jinja模板配合同时为两台主机安装

Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作。
通过jinja模板可以为不同服务器定义各自的变量。
两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上。

修改之前的 /srv/pillar/pkgs.sls
如果grains的fqdn信息为server2 则pillar下package的信息为httpd port的信息为80
如果grains的fqdn信息为server3 则pillar下package的信息为httpd port的信息为8080

vim /srv/pillar/pkgs.sls
{% if grains['fqdn'] == 'server2' %}
package: httpd
port: 80
{% elif grains['fqdn'] == 'server3' %}
package: httpd
port: 8080
{% endif %}

在这里插入图片描述

修改之前apache目录下的init.sls文件
vim /srv/salt/apache/init.sls

在这里插入图片描述
- {{ pillar['package'] }} 填入pillar的package信息
http_port: {{ pillar['port'] }}填入pillar的port信息
http_host: {{ grains['ipv4'][-1] }} 填入grains的ipv4的最后一条信息
apache:
pkg.installed:
- pkgs:
- {{ pillar[‘package’] }}
service.running:
- name: httpd
- enable: true
- reload: true
- watch:
- file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://apache/httpd.conf
    - template: jinja
    - context:
      http_port: {{ pillar['port'] }}
      http_host: {{ grains['ipv4'][-1] }}

在这里插入图片描述

下载httpd后的同步的httpd.conf模板格式

vim /srv/salt/apache/httpd.conf
Listen {{ grains['ipv4'][-1] }}:{{ pillar['port'] }}

在这里插入图片描述

运行命令 salt ‘*’ state.sls apache
如下图,运行成功
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

查看效果:
server2的http.conf
在这里插入图片描述
server3的http.conf
在这里插入图片描述

热门文章

暂无图片
编程学习 ·

exe4j详细使用教程(附下载安装链接)

一、exe4j介绍 ​ exe4j是一个帮助你集成Java应用程序到Windows操作环境的java可执行文件生成工具&#xff0c;无论这些应用是用于服务器&#xff0c;还是图形用户界面&#xff08;GUI&#xff09;或命令行的应用程序。如果你想在任务管理器中及Windows XP分组的用户友好任务栏…
暂无图片
编程学习 ·

AUTOSAR从入门到精通100讲(126)-浅谈车载充电系统通信方案

01 引言 本文深入研究车载充电系统策略,设计出一套基于电动汽车电池管理系统与车载充电机的CAN通信协议,可供电动汽车设计人员参考借鉴。 02 电动汽车充电系统通讯网络 电动汽车整车控制系统中采用的是CAN总线通信方式,由一个整车内部高速CAN网络、内部低速CAN网络和一个充电…
暂无图片
编程学习 ·

CMake(九):生成器表达式

当运行CMake时&#xff0c;开发人员倾向于认为它是一个简单的步骤&#xff0c;需要读取项目的CMakeLists.txt文件&#xff0c;并生成相关的特定于生成器的项目文件集(例如Visual Studio解决方案和项目文件&#xff0c;Xcode项目&#xff0c;Unix Makefiles或Ninja输入文件)。然…
暂无图片
编程学习 ·

47.第十章 网络协议和管理配置 -- 网络配置(八)

4.3.3 route 命令 路由表管理命令 路由表主要构成: Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低Genmask:目标网络对应的netmaskIface: 到达对应网络,应该从当前主机哪个网卡发送出来Gateway: 到达非直连的网络,…
暂无图片
编程学习 ·

元宇宙技术基础

请看图&#xff1a; 1、通过AR、VR等交互技术提升游戏的沉浸感 回顾游戏的发展历程&#xff0c;沉浸感的提升一直是技术突破的主要方向。从《愤怒的小鸟》到CSGO,游戏建模方式从2D到3D的提升使游戏中的物体呈现立体感。玩家在游戏中可以只有切换视角&#xff0c;进而提升沉浸…
暂无图片
编程学习 ·

flink的伪分布式搭建

一 flink的伪分布式搭建 1.1 执行架构图 1.Flink程序需要提交给 Job Client2.Job Client将作业提交给 Job Manager3.Job Manager负责协调资源分配和作业执行。 资源分配完成后&#xff0c;任务将提交给相应的 Task Manage。4.Task Manager启动一个线程以开始执行。Task Manage…
暂无图片
编程学习 ·

十进制正整数与二进制字符串的转换(C++)

Function one&#xff1a; //十进制数字转成二进制字符串 string Binary(int x) {string s "";while(x){if(x % 2 0) s 0 s;else s 1 s;x / 2;}return s; } Function two&#xff1a; //二进制字符串变为十进制数字 int Decimal(string s) {int num 0, …
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统&#xff1a; 微信小程序——辩论管理前台涉及技术&#xff1a;WXML 和 WXS…
暂无图片
编程学习 ·

树莓派驱动DHT11温湿度传感器

1&#xff0c;直接使用python库 代码如下 import RPi.GPIO as GPIO import dht11 import time import datetimeGPIO.setwarnings(True) GPIO.setmode(GPIO.BCM)instance dht11.DHT11(pin14)try:while True:result instance.read()if result.is_valid():print(ok)print(&quo…
暂无图片
编程学习 ·

ELK简介

ELK简介 ELK是三个开源软件的缩写&#xff0c;Elasticsearch、Logstash、Kibana。它们都是开源软件。不过现在还新增了一个 Beats&#xff0c;它是一个轻量级的日志收集处理工具(Agent)&#xff0c;Beats 占用资源少&#xff0c;适合于在各个服务器上搜集日志后传输给 Logstas…
暂无图片
编程学习 ·

Linux 基础

通常大数据框架都部署在 Linux 服务器上&#xff0c;所以需要具备一定的 Linux 知识。Linux 书籍当中比较著名的是 《鸟哥私房菜》系列&#xff0c;这个系列很全面也很经典。但如果你希望能够快速地入门&#xff0c;这里推荐《Linux 就该这么学》&#xff0c;其网站上有免费的电…
暂无图片
编程学习 ·

Windows2022 无线网卡装不上驱动

想来 Windows2022 和 windows10/11 的驱动应该差不多通用的&#xff0c;但是死活装不上呢&#xff1f; 搜一下&#xff0c;有人提到 “默认安装时‘无线LAN服务’是关闭的&#xff0c;如果需要开启&#xff0c;只需要在“添加角色和功能”中&#xff0c;选择开启“无线LAN服务…
暂无图片
编程学习 ·

【嵌入式面试宝典】版本控制工具Git常用命令总结

目录 创建仓库 查看信息 版本回退 版本检出 远程库 Git 创建仓库 git initgit add <file> 可反复多次使用&#xff0c;添加多个文件git commit -m <message> 查看信息 git status 仓库当前的状态git diff 差异对比git log 历史记录&#xff0c;提交日志--pret…
暂无图片
编程学习 ·

用Postman生成测试报告

newman newman是一款基于nodejs开发的可以运行postman脚本的工具&#xff0c;使用Newman&#xff0c;可以直接从命令运行和测试postman集合。 安装nodejs 下载地址&#xff1a;https://nodejs.org/en/download/ 选择自己系统相对应的版本内容进行下载&#xff0c;然后傻瓜式安…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…