Saltstack-安装部署、远程执行、grains和pillar详解、Jinja模板

前言

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

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

Salt的核心功能:

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

一.Saltstack安装部署

准备9三台虚拟机,server1负责saltstack-master端,server2\3负责saltstack-minion端。

1.设置YUM仓库

首先在server1上操作如下:

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

[salt]
name=salt 3000
baseurl=http://172.25.0.254/saltstack
gpgcheck=0

yum repolist
yum list salt-*

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

[root@server1~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm

在这里插入图片描述

server2、3配置软件仓库
将server1写好的传给2,3
或者还是通过刚才的官方网站wget去下载!!

scp  /etc/yum.repos.d/salt.repo server2:/etc/yum.repos.d/
scp  /etc/yum.repos.d/salt.repo server3:/etc/yum.repos.d/

在这里插入图片描述

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

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

在这里插入图片描述

在这里插入图片描述

在server2,3操作如下:
安装salt-minion

yum repolist
yum list salt-*
yum install -y salt-minion

在这里插入图片描述
编辑配置文件,使得minion指向master

vim /etc/salt/minion
master: 172.25.0.1

在这里插入图片描述

修改之后,重启服务

systemctl enable --now salt-minion.service

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

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

因为我是server2,server3依次配置的,所以一个一个添加key,可以都配好文件后,直接添加2,3!!
在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

[root@server1 ~]# 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值,两边是对应一致的!

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

可以看到master的key值!

在这里插入图片描述

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

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

会发现和master上的key一致,因为master会发送过来自己的key!!
在这里插入图片描述

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

cd /etc/salt/pki/master/minions
md5sum server2
md5sum server3

会看到server2,server3的key

在这里插入图片描述

我们这时候,在server2,server3

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

会发现key值server1上查看的server2,3的一致!

在这里插入图片描述

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 server2 cmd.run uname
salt server2 cmd.run 'uname -a'

在这里插入图片描述

在这里插入图片描述
pkg查看版本

salt server2 pkg.version salt-minion

在这里插入图片描述

使用pkg模块安装httpd服务

salt server2 pkg.install 'httpd'

在这里插入图片描述

启动httpd服务:start

停止httpd服务:stop
在这里插入图片描述

创建salt自定义模板目录

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

创建自动逸模板

vim my_disk.py

在这里插入图片描述

内容如下:
在这里插入图片描述

同步自定义模板到server2
在这里插入图片描述

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

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

在这里插入图片描述

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

salt server2 my_disk.df

在这里插入图片描述

1.saltstack安装httpd并启动

编写.sls文件,默认读取init.sls文件

mkdir apache
cd apache/
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 server2 state.sls apache

在这里插入图片描述

在这里插入图片描述

vim httpd.conf # 修改端口后触发watch

在这里插入图片描述

再次执行

salt server2 state.sls apache

在这里插入图片描述

在server2上查看端口:
在这里插入图片描述
查看server2的httpd配置文件端口也变为8080
在这里插入图片描述

三.saltstack源码编译安装nginx

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

cd /srv/salt
mkdir nginx
cd nginx/
vim init.sls
get nginx-1.20.1.tar.gz 

在这里插入图片描述

内容如下:

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

  file.managed:
    - name: /mnt/nginx-1.20.1.tar.gz # 指定server2解压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

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

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

在这里插入图片描述

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

salt server3 state.sls nginx.service

在这里插入图片描述

2.测试一下:

curl server3
在这里插入图片描述

四.grains

1.简介

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

查看模块

salt server2 grains.ls
salt server2 grains.items

在这里插入图片描述

在这里插入图片描述

查看指定的item ipv4!!

salt server2 grains.item ipv4

在这里插入图片描述

2.自定义grains项

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

2.1第一种方法

minion端,修改主配:

vim /etc/salt/monion

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

systemctl restart salt-minion
在这里插入图片描述

查看角色

salt server2 grains.item roles

在这里插入图片描述

2.2第二种法:

在server3上:添加文件


vim /etc/salt/grains
roles: nginx

在这里插入图片描述

在这里插入图片描述

测试如下:查看server3模板

alt server3 saltutil.sync_grains

salt server3 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
cat grains.py

#!/usr/bin/env python
def grains():
    grains = {}
    grains['hello'] = 'world'
    grains['salt'] = 'stack'
    return grains

在这里插入图片描述

在这里插入图片描述

salt '*' saltutil.sync_grains #同步修改到minion

在这里插入图片描述

salt server2/3 grains.item hello

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

vim grains.py

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

vim top.sls
base:
  'server2':
    - apache
  'server3':
    - nginx.service

highstate执行top

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

在这里插入图片描述
在这里插入图片描述当我们不想输入server2,server3而是直接定位角色名,可以修改如下

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'] == 'server2' %}
        - text: server2
        {% elif grains['fqdn'] == 'server3' %}
        - text: server3
        {% 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 apache

在这里插入图片描述

执行后查看minion端/mnt/testfile

cd /mnt
cat testfile

在这里插入图片描述

在这里插入图片描述

为httpd服务添加并修改端口

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

在这里插入图片描述

{% if grains['fqdn'] == 'server2' %}
package: httpd
port: 80
{% elif grains['fqdn'] == 'server3' %}
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端口修改成功

2.1注意:

vim /srv/salt/apache/init.sls

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模块!!!

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dudududu--

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值