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

本文详细介绍了SaltStack的安装部署过程,包括在master和minion节点的配置,以及sls文件的远程执行,如安装Apache、Nginx服务。此外,还讲解了grains的使用和自定义,以及如何结合Jinja模板进行配置管理。内容涵盖了SaltStack的常用功能,如命令执行、服务管理、配置文件同步和状态管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

saltstack是一个配置管理系统,能够维护预定义状态的远程节点。
saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据。
saltstack是运维人员提高工作效率、规范业务配置与操作的利器。

SaltStack 采用 C/S模式,minion与master之间通过ZeroMQ消息队列通信,默认监听4505端口。

Salt的核心功能

使命令发送到远程系统是并行的而不是串行的
使用安全加密的协议
使用最小最快的网络载荷 提供简单的编程接口
Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。

一.Saltstack安装部署

准备三台虚拟机,server5负责saltstack-master端,server67负责saltstack-minion端。

1.设置YUM仓库

首先在server5上操作如下:

vim /etc/yum.repos.d/salt.repo

[salt]
name=salt 3000
baseurl=http://172.25.254.76/3000
gpgcheck=0
yum repolist

或者官方下载
从官方网站下载yum源 仓库地址

yum install https://repo.saltstack.com/yum/redhat/salt-repo-3004.el7.noarch.rpm

server67配置软件仓库
将server5写好的传给67
或者还是通过刚才的官方网站wget去下载

scp  /etc/yum.repos.d/salt.repo server5:/etc/yum.repos.d/
scp  /etc/yum.repos.d/salt.repo server6:/etc/yum.repos.d/

server5端安装salt-master,并开启服务,查看端口4505和4506是否开启

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

在这里插入图片描述

在server67操作如下:
安装salt-minion

yum repolist
yum install -y salt-minion

编辑配置文件,使得minion指向master

vim /etc/salt/minion
	master: 172.25.76.5

在这里插入图片描述
修改之后,重启服务

systemctl enable --now salt-minion.service

2.master端执行命令允许minion连接

salt-key -L   #查询
salt-key -A    #给两个minion  key

在这里插入图片描述

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

server5:

 salt '*' test.ping

在这里插入图片描述

 salt '*' cmd.run hostname

在这里插入图片描述

可以下载lsof查看端口

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

在这里插入图片描述

默认4505端口开启并指向minion端,连接方式为established。

注意:
monion端修改主机名后,需要删除/etc/salt/minion_id 否则master端会一直显示之前的主机名

当master能够ping通monion之后,我们可以查看配置文件生成的key值,两边是对应一致的

在server5

cd /etc/salt/pki/master/
md5sum master.pub

可以看到master的key值
在这里插入图片描述

这时候,在server67上也查看一下:

cd /etc/salt/pki/minion
md5sum minion_master.pub

在这里插入图片描述

会发现和master上的key一致,因为master会发送过来自己的key

当然我们还可以再master上收到minion的key

cd /etc/salt/pki/master/minions
md5sum server6
md5sum server7

会看到server67的key
在这里插入图片描述

我们这时候,在server67

cd /etc/salt/pki/minion/
md5sum minion.pub

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

会发现key值server5上查看的server67的一致

4.python进程显示

ps ax 显示python进程简要作用

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

在这里插入图片描述

二.sls文件远程执行

salt server? test.ping

使用cmd.run模块查看远程主机系统名和系统信息

salt server6 cmd.run uname
salt server6 cmd.run 'uname -a'

在这里插入图片描述

pkg查看版本

salt server6 pkg.version salt-minion

在这里插入图片描述

使用pkg模块安装httpd服务

salt server6 pkg.install 'httpd'

在这里插入图片描述

启动httpd服务:start
停止httpd服务:stop

salt server6 service.start httpd
salt server6 service.stop httpd

创建salt自定义模板目录

mkdir -p /srv/salt/_modules
cd /srv/salt/_modules

创建自动逸模板

vim my_disk.py
	def df():
   		return __salt__['cmd.run']('df -h')

同步自定义模板到server2
salt server6 saltutil.sync_modules
在这里插入图片描述

进入server6中查看生成的结构,这里需要下载tree来查看!

yum install -y tree
cd /var/cache/salt
tree minion/

在这里插入图片描述

执行刚才写的模块,注意执行的的时候,后缀为df

salt server2 my_disk.df

在这里插入图片描述

1.saltstack安装httpd并启动

在server5中安装httpd
编写.sls文件,默认读取init.sls文件

mkdir apache
cd apache/
cp /etc/httpd/conf/httpd.conf .

vim init.sls

apache:
  pkg.installed:
    - pkgs:
      - httpd
      - php
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf

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

执行文件,在server2上安装apache,php

salt server6 state.sls apache

在这里插入图片描述

vim httpd.conf # 修改端口后触发watch
在这里插入图片描述

再次执行

salt server6 state.sls apache

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

查看server2的httpd配置文件端口也变为8080

三.saltstack源码编译安装nginx

我们在来创建一个目录专门存放创建nginx的文件

cd /srv/salt
mkdir nginx
cd nginx/
vim init.sls

nginx-install:
  pkg.installed:
    - pkgs:
      - gcc
      - pcre-devel
      - openssl-devel

  file.managed:
    - name: /mnt/nginx-1.20.1.tar.gz # 指定server6解压nginx包的地址
    - source: salt://nginx/nginx-1.20.1.tar.gz  #需要nginx目录下有安装包

  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 --with-http_ssl_module --with-threads --with-file-aio &> /dev/null  && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx #一定要写不然一致重复执行!


在这里插入图片描述

执行结果如下:
在这里插入图片描述

1.启动服务nginx

我们先需要个nginx.service来修改配置
在这里插入图片描述

vim service.sls内容如下:

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

此时需要把server6上的nginx配置文件也放在 salt://nginx/nginx.conf
server6:

cd /usr/local/nginx/conf
scp nginx.conf server5:/srv/salt/nginx/

传过来的nginx配置文件修改一下:
vim nginx.conf
在这里插入图片描述

salt server6 state.sls nginx.service

2.测试一下

curl server6
在这里插入图片描述

四.grains

1.简介

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

查看模块

salt server6 grains.ls
salt server6 grains.items

在这里插入图片描述
查看指定的item ipv4

salt server6 grains.item ipv4

在这里插入图片描述

2.自定义grains项

三种添加角色的方式。两种来自minion端,一种在master端

2.1第一种方法

minion端,修改主配:

vim /etc/salt/minion
在这里插入图片描述
修改完后记得重启minion服务

systemctl restart salt-minion

查看角色

salt server6 grains.item roles

在这里插入图片描述

2.2第二种法

在server7上:添加文件

vim /etc/salt/grains
	roles: nginx

测试如下:重启服务后查看server7模板

salt server7 grains.item roles在这里插入图片描述

刷新并查看所有角色

salt '*' saltutil.sync_grains
salt server? grains.item roles

在这里插入图片描述

2.3第三种方法

编写grains模块
在salt-master端创建_grains目录:

mkdir _grains
cd _grains/
vim grains.py

#!/usr/bin/env python
def grains():
    grains = {}
    grains['hello'] = 'world'
    grains['salt'] = 'stack'
    return grains
salt '*' saltutil.sync_grains #同步修改到minion
[root@server5 _grains]# salt server6 grains.item hello
server6:
    ----------
    hello:
        world
[root@server5 _grains]# salt server7 grains.item hello
server7:
    ----------
    hello:
        world

当然我们可以再server67上查看到同步过来的文件,目录
在这里插入图片描述

不同节点执行不同角色策略

vim top.sls

base:
  'server6':
    - apache
  'server7':
    - nginx.service

highstate执行top

salt '*' saltutil.sync_grains
salt '*' state.highstate

在这里插入图片描述

当我们不想输入server67而是直接定位角色名,可以修改如下

vim top.sls

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

可以直接用大写G定位角色:

salt -G ‘roles:apache’ cmd.run hostname
在这里插入图片描述

五.pillar结合jinja模板使用

vim /srv/salt/test.sls

/mnt/testfile:
    file.append:
        {% if grains['fqdn'] == 'server6' %}
        - text: server6
        {% elif grains['fqdn'] == 'server7' %}
        - text: server7
        {% endif %}


vim /srv/salt/apache/init.sls

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
salt '*' state.sls test

在这里插入图片描述

执行后查看minion端/mnt/testfile

cd /mnt
cat testfile

在这里插入图片描述

为httpd服务添加并修改端口

cd /srv/
mkdir pillar
vim /srv/pillar/pkgs.sls

{% if grains['fqdn'] == 'server6' %}
package: httpd
port: 80
{% elif grains['fqdn'] == 'server7' %}
package: httpd
port: 8080
{% endif %}
vim /srv/pillar/top.sls
base:
  '*':
    - pkgs

查看pillar是否配置成功

salt '*' pillar.items

在这里插入图片描述

1.方法一

vim /srv/salt/apache/init.sls

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]}}

调用已经定义的变量

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

执行:

salt '*' state.sls apache

在这里插入图片描述

2.方法二

vim /srv/salt/apache/init.sls

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']}}
vim /srv/salt/apache/httpd.conf
	Listen {{ grains['ipv4'][-1] }}:{{ pillar['port'] }}
salt ‘*’ state.sls apache

执行成功无报错,查看httpd端口修改成功
ex

2.1注意

vim /srv/salt/apache/init.sls
方法一:
- context:
      http_port: {{ pillar['port']}}
      http_host: {{ grains['ipv4'][-1]}}

方法二:
    - context:
      http_port: {{ pillar['port']}}

context部分都可以注释掉,不影响执行,只是为了方便记录和好看,专门写在这里
但是 vim /srv/salt/apache/httpd.conf
是不可以写的,因为它调用了pillar模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lll_cf

喜欢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值