Linux最全saltstack 自动化运维管理_saltstack highstate的执行日志,2024年最新2024Linux运维面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

[root@server1 yum.repos.d]# salt-key -L   查询
[root@server1 yum.repos.d]# salt-key -A    给两个minion  key

在这里插入图片描述
在这里插入图片描述

  • 查看端口连接情况
    在这里插入图片描述
  • 详细查看进程信息
[root@server1 ~]# yum install python-setproctitle.x86_64 -y
[root@server1 ~]# systemctl restart salt-master.service 

在这里插入图片描述

  • 查看端口连接情况
[root@server1 ~]# yum install lsof -y
[root@server1 ~]# lsof -i :4505

在这里插入图片描述

5.master端测试与minion端的连接

[root@server1 ~]# salt '*' test.ping

在这里插入图片描述

[root@server1 ~]# salt '*' cmd.run hostname

在这里插入图片描述

[root@server1 ~]# salt '*' cmd.run "ip addr"

在这里插入图片描述

三、saltstack远程执行

1.远程执行shell命令

  • Salt命令由三个主要部分构成:
    salt ‘’ [arguments]
    target: 指定哪些minion, 默认的规则是使用glob匹配minion id.
    salt ‘*’ test.ping
    Targets也可以使用正则表达式:
    salt -E ‘server[1-3]’ test.ping
    Targets也可以指定列表:
    salt -L ‘server2,server3’ test.ping
  • funcation是module提供的功能,Salt内置了大量有效的functions.
    salt ‘*’ cmd.run ‘uname -a’
    arguments通过空格来界定参数:
    salt ‘server2’ sys.doc pkg #查看模块文档
    salt ‘server2’ pkg.install httpd
    salt ‘server2’ pkg.remove httpd
    salt内置的执行模块列表:
    执行模块网址
    按Ctrl+F搜索你需要的模块
    在这里插入图片描述
  • 命令行执行

在这里插入图片描述

[root@server1 ~]# salt server2 pkg.install httpd
[root@server1 ~]# salt 'server2' service.start httpd

在这里插入图片描述
查看server2是否成功安装上
在这里插入图片描述
开启服务
在这里插入图片描述

2.配置管理

编辑master配置文件:

[root@server1 ~]# vim /etc/salt/master

默认位置,不用修改
在这里插入图片描述
因为没有salt目录,所以需要手动创建

[root@server1 ~]# cd /srv/
[root@server1 srv]# mkdir salt     
[root@server1 salt]# mkdir apache
[root@server1 salt/]# cd apache

创建一个sls文件:
注意缩进

#vim /srv/salt/apache.sls
httpd:                 	# ID声明
  pkg:                  	# 状态声明
    - installed           	# 函数声明

  • 下载服务,编写发布文件,启动服务
[root@server1 apache]# vim install.sls
apache:
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-mysql

  file.managed:
    - source: salt://apache/files/index.html
    - name: /var/www/html/index.html

  service.running:
    - name: httpd

[root@server1 apache]# mkdir files
[root@server1 apache]# vim files/index.html
server2

  • 指定主机执行:
[root@server1 ~]# salt server2 state.sls apache.install

  • 执行过程
    在这里插入图片描述
    在这里插入图片描述查看是否执行成功
    在这里插入图片描述
  • 在受控主机查看刚才的执行缓存信息
[root@server2 ~]# cd /var/cache/salt
[root@server2 salt]# tree .

在这里插入图片描述
查看文件内容是否发生变化

[root@server1 salt]# cd apache/
[root@server1 apache]# ls
files  install.sls
[root@server1 apache]# cd files/
[root@server1 files]# md5sum index.html 
serve2
01bc6b572ba171d4d3bd89abe9cb9a4c  index.html
[root@server1 files]# md5sum index.html 
01bc6b572ba171d4d3bd89abe9cb9a4c  index.html
[root@server1 files]# vim index.html 
server2
server2
[root@server1 files]# md5sum index.html 
e8e59ffc293de1e3388b4a5d903707a1  index.html

3.同时修改两个配置文件

  • 第一种书写方式
[root@server1 apache]# vim install.sls
apache:
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-mysql

  file.managed:
    - source: salt://apache/files/index.html
    - name: /var/www/html/index.html

  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/files/httpd.conf

注意 watch 为触发,监控当配置文件发生改变时,会重启服务

  • 第二种编写方式
apache:
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-mysql

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

  service.running:
    - name: httpd
    - enable: true
    - reload: true
    - watch:
      - file: apache

执行

[root@server1 apache]# salt 'server2' state.sls apache.install

在这里插入图片描述
在这里插入图片描述

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.

[root@server1 apache]# mv install.sls init.sls
[root@server1 apache]# salt server2 state.sls apache

在这里插入图片描述

4.创建模块目录:

[root@server1 salt]# mkdir /srv/salt/_modules
[root@server1 salt]# cd  _modules/

5.编写模块文件:

[root@server1 _modules]# vim mydisk.py
def df():
    return __salt__['cmd.run']('df -h')
[root@server1 _modules]# salt server2 saltutil.sync_modules     ## 同步模块

  • 在受控主机上查看模块是否同步成功
    在这里插入图片描述
  • 执行测试模块
[root@server1~] # salt server2 mydisk.df

在这里插入图片描述

四、grains

1.简介

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

  • 信息查询,可用作CMDB。
  • 在target中使用,匹配minion。
  • 在state系统中使用,配置管理模块。

(一)信息查询

[root@server1 _modules]# salt server2 grains.ls

在这里插入图片描述
(二)查看每一项的值:

[root@server1 _modules]#  salt server2 grains.items

在这里插入图片描述
(三)取单项的值:

[root@server1 _modules]# salt server2 grains.item ipv4

在这里插入图片描述

[root@server1 _modules]# salt server2 grains.item fqdn

在这里插入图片描述

2.自定义grains项

第一种方法

  • 在minion 端 /etc/salt/minion中定义:
    重启salt-minion,否则数据不会更新:
[root@server2 salt]# vim /etc/salt/minio
[root@server2 salt]# systemctl restart salt-minion.service

在这里插入图片描述
第二种方法

  • 在minion 端/etc/salt/grains中定义:
[root@server3 ~]# vim /etc/salt/grains
roles:
  - nginx

  • 查看grains项
[root@server1 salt]# salt server2 grains.item roles

在这里插入图片描述

  • 同步数据:
[root@server1 salt]# salt server3 saltutil.sync_grains
[root@server1 salt]# salt '*' grains.item roles

在这里插入图片描述

3.编写grains模块

在salt-master端创建_grains目录:

[root@server1 ~]# mkdir  /srv/salt/_grains
[root@server1 ~]# cd /srv/salt/
[root@server1 salt]# cd _grains/
[root@server1 _grains]# ls
[root@server1 _grains]# vim mygrains.py
def my_grain():
    grains = {}
    grains['salt'] = 'stack'
    grains['hello'] = 'world'
    return grains
    
测试
[root@server1 _grains]# salt '*' grains.item salt
[root@server1 _grains]# salt '*' grains.item hello
[root@server1 _grains]# salt '*' saltutil.sync_grains          #同步grains到minion端

在这里插入图片描述
在minion端查看缓存,查看grains是否生效

[root@server2 ~]# cd /var/cache/salt/
[root@server2 salt]# tree

在这里插入图片描述

4.grains匹配运用

  • 在target中匹配minion:
# salt -G roles:apache cmd.run hostname

  • 在top文件中匹配

在serve2部署apache在server3部署nginx
一步一步来

[root@server1 salt]# vim top.sls
base:
  'roles:apache':
    - match: grain
    - apache
  'roles:nginx':
    - match: grain
    - nginx
[root@server1 salt]# mkdir nginx
[root@server1 salt]# cd nginx/
[root@server1 nginx]# vim init.sls 
nginx:
  file.managed:
    - source: salt://nginx/files/nginx-1.18.0.tar.gz
    - name: /mnt/nginx-1.18.0.tar.gz
[root@server1 nginx]# mkdir files
[root@server1 nginx]# cd files/
[root@server1 files]# ls
nginx-1.18.0.tar.gz

链接:nginx包 提取码: 6kk2

  • 批量执行:
[root@server1 salt]# salt '*' state.highstate

在这里插入图片描述
在这里插入图片描述
验证:
在server3:/mnt 上查看是否有nginx包
在这里插入图片描述

  • 配置两个服务完整版的运行脚本
  • 下载服务部分
[root@server1 nginx]# vim install.sls 
nginx-install:
  pkg.installed:
    - pkgs:
      - gcc
      - pcre-devel
      - openssl-devel
  file.managed:
    - source: salt://nginx/files/nginx-1.18.0.tar.gz
    - name: /mnt/nginx-1.18.0.tar.gz
  cmd.run:
    - name: cd /mnt && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx

  • 修改配置文件部分
[root@server1 nginx]# vim init.sls 
include:
  - nginx.install

/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf

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

[root@server1 nginx]# cd files/     ##确保files底下有这三个文件,先执行,失败后直接从server3里面找
nginx-1.18.0.tar.gz  nginx.conf  nginx.service

链接: nginx.server提取码: s6w7

  • 批量执行:
[root@server1 files]# salt '*' state.highstate

在这里插入图片描述
查看服务是否成功安装并运行
在这里插入图片描述

五、Jinja模板

1.简介

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

2.jinja模板的适用方法

Jinja最基本的用法是使用控制结构包装条件:

[root@server1 salt]# vim test.sls
/mnt/testfile:
  file.append:
    {% if grains['fqdn'] == 'server2' %}
    - text: server2
    {% elif grains['fqdn'] == 'server3' %}
    - text: server3
    {% endif %}

  • 执行测试
[root@server1 salt]# salt '*' state.sls test

在这里插入图片描述
验证:去查看/mnt 下有没有文件生成
在这里插入图片描述

2.使用jinja模板实现apache的配置

  • 编写默认发布文件 内含系统版本,主机名
[root@server1 files]# vim index.html
{{ grains['os'] }} - {{ grains['fqdn'] }}
{{ NAME }}

  • 修改httpd配置文件端口号
[root@server1 files]# vim httpd.conf
#Listen 12.34.56.78:80
Listen {{ bind }}:{{ port }}

在这里插入图片描述

  • 编写执行文件
[root@server1 apache]# vim init.sls
apache:
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-mysql

  file.managed:
    - source: salt://apache/files/httpd.conf
    - name: /etc/httpd/conf/httpd.conf
    - template: jinja
    - context:
      port: 80
      bind: {{ grains['ipv4'][-1] }}
  service.running:
    - name: httpd
    - enable: true
    - reload: true
    - watch:
      - file: apache
/var/www/html/index.html:
  file.managed:
    - source: salt://apache/files/index.html
    - template: jinja
    - context:
      NAME: server2

  • 执行
[root@server1 apache]# salt server2 state.sls apache

验证:curl 172.25.3.2:80
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、pillar

1.pillar简介

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

2.声明pillar

  • 默认就是此目录,不用做任何修改
[root@server1 ~]#  vim /etc/salt/master
pillar_roots:
  base:
    - /srv/pillar

  • 需要自己手动建立目录
[root@server1 ~]# mkdir /srv/pillar

3.自定义pillar项

[root@server1 pillar]# vim top.sls
base:
  '*':
    - package
[root@server1 pillar]# vim package.sls
{% if grains['fqdn'] == 'server3' %}
package: nginx
{% elif grains['fqdn'] == 'server2' %}
paceage: apache
{% endif %}

  • 刷新pillar数据:
[root@server1 pillar]# salt '*' saltutil.refresh_pillar

在这里插入图片描述

  • 查询pillar数据:
[root@server1 pillar]# salt '*' pillar.items
[root@server1 pillar]# salt '*' grains.item  roles

在这里插入图片描述
测试
加入pillar

[root@server1 pillar]# vim package.sls
{% if grains['fqdn'] == 'server3' %}
package: nginx
{% elif grains['fqdn'] == 'server2' %}
port: 8080
bind: 172.25.3.2
{% endif %}

  • 修改执行文件,引用pillar
[root@server1 apache]# vim init.sls
apache:
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-mysql

  file.managed:
    - source: salt://apache/files/httpd.conf
    - name: /etc/httpd/conf/httpd.conf
    - template: jinja
    - context:
      port: {{ pillar['port'] }}
      bind: {{ grains['ipv4'][-1] }}
  service.running:
    - name: httpd
    - enable: true
    - reload: true
    - watch:
      - file: /etc/httpd/conf/httpd.conf
/var/www/html/index.html:
  file.managed:
    - source: salt://apache/files/index.html
    - template: jinja
    - context:
      NAME: server2

在这里插入图片描述

  • 执行
[root@server1 pillar]# salt server2 state.sls apache

在这里插入图片描述
import方式,可在state文件之间共享:

[root@server1 ~]# cd /srv/salt/apache/
[root@server1 apache]# ls
files  init.sls  lib.sls
定义变量文件:
[root@server1 apache]# vim lib.sls 
{% set port = 80 %}
导入模板文件:
[root@server1 apache]# vim files/httpd.conf
{% from 'apache/lib.sls' import port %}

加到配置文件最上面
在这里插入图片描述

  • 执行
[root@server1 apache]# salt server2 state.sls apache

在这里插入图片描述

七、自动部署keepalived

1.定义pillar值

[root@server1 pillar]# vim package.sls
{% if grains['fqdn'] == 'server3' %}
package: nginx
state: BACKUP
vrid: 54
pri: 50
{% elif grains['fqdn'] == 'server2' %}
port: 80
bind: 172.25.3.2
state: MASTER
vrid: 54
pri: 100
{% endif %}

2.创建sls文件

[root@server1 salt]# mkdir keepalived/files/ -p
[root@server1 salt]# cd keepalived/
[root@server1 keepalived]# vim init.sls
kp-install:
  pkg.installed:
    - name: keepalived
  file.managed:
    - name: /etc/keepalived/keepalived.conf
    - source: salt://keepalived/files/keepalived.conf
    - template: jinja
    - context:
      STATE: {{ pillar['state'] }}
      VRID: {{ pillar['vrid'] }}
      PRI: {{ pillar['pri'] }}
  service.running:
    - name: keepalived
    - enable: true
    - reload: true
    - watch:
      - file: kp-install

3.修改jinja模板

[root@server1 keepalived]# cd files/


### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

![](https://img-blog.csdnimg.cn/img_convert/057f7d2ba547452d24a399ac7ed71886.png)

给大家整理的电子书资料:

  

![](https://img-blog.csdnimg.cn/img_convert/32d49ebb377223104518bdc3ce2e72d0.png)



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

lived]# vim init.sls
kp-install:
  pkg.installed:
    - name: keepalived
  file.managed:
    - name: /etc/keepalived/keepalived.conf
    - source: salt://keepalived/files/keepalived.conf
    - template: jinja
    - context:
      STATE: {{ pillar['state'] }}
      VRID: {{ pillar['vrid'] }}
      PRI: {{ pillar['pri'] }}
  service.running:
    - name: keepalived
    - enable: true
    - reload: true
    - watch:
      - file: kp-install

3.修改jinja模板

[root@server1 keepalived]# cd files/


### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

[外链图片转存中...(img-WYMFTc4V-1715325439020)]

给大家整理的电子书资料:

  

[外链图片转存中...(img-MGsD0LUq-1715325439020)]



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值