SaltStack-----安装,远程执行,grains,pillar,jinja模板

Posted S4061222

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltStack-----安装,远程执行,grains,pillar,jinja模板相关的知识,希望对你有一定的参考价值。

一.saltstack

SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等。

1.简介

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

2. Salt的核心功能

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

3. saltstack的通信机制

在这里插入图片描述

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

在这里插入图片描述 • Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听 4506

端口。
在这里插入图片描述

4.工作原理

• SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信

• minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信

• master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。

• 这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt ‘*’ cmd.run 'uptime’的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受消息的

二.安装

实验环境:

三台新的虚拟机(网络,主机名称,软件仓库,selinux和firewall关闭,彼此解析)

[root@server1 ~]#cat /etc/yum.repos.d/salt.repo
[salt]
name=salt 3000
baseurl=http://172.25.28.250/3000
gpgcheck=0
[root@server1 ~]# scp /etc/yum.repos.d/salt.repo server2:/etc/yum.repos.d/
[root@server1 ~]# scp /etc/yum.repos.d/salt.repo server3:/etc/yum.repos.d/

1.服务端server1

server1安装salt-master ,开机自启动服务
在这里插入图片描述在这里插入图片描述

2.客户端server2和server3

安装salt-minion,修改配置文件,启动salt-minion服务

[root@server3 ~]# yum install salt-minion -y
[root@server3 ~]# vim /etc/salt/minion
[root@server3 ~]# systemctl enable --now salt-minion.service

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

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

在这里插入图片描述

3.saltstack服务端(master)和客户端(minion)的连接

server1上查看端口: 4505和4506端口(agent传回)
在这里插入图片描述server1添加minion端的key

[root@server1 ~]# salt-key -L #查看
[root@server1 ~]# salt-key -A #添加所有节点的key
[root@server1 ~]# salt-key -a server2/server3 #指定节点

在这里插入图片描述master端测试通信

[root@server1 ~]# salt '*' test.ping  ###测试通信

在这里插入图片描述
下载lsof查看,master端查看端口连接

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

在这里插入图片描述
默认4505端口开启并指向minion端,连接方式为established
在这里插入图片描述

4.相互交换公钥

server端(server1)给minion端(server2和server3)的公钥
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
minion端(server2和server3)给server端(server1)的公钥
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.安装python-setproctitle进程详细查看工具,重启salt-master服务,查看进程

[root@server1 minions]# yum install python-setproctitle.x86_64 -y
[root@server1 minions]# systemctl restart salt-master.service 
[root@server1 minions]# ps ax # 显示python进程简要作用

在这里插入图片描述

三. saltstack远程执行

1.shell命令式远程执行

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

salt server? test.ping
salt server2 cmd.run hostname
salt server2 cmd.run uname
salt server2 cmd.run 'uname -a'
salt server2 pkg.version salt-minion
salt server2 pkg.install 'httpd'
salt server2 pkg.version 'httpd'
salt server2 cmd.run 'systemctl start httpd'
salt server2 service.stop httpd

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

2.模块化远程执行

在这里插入图片描述
要作模块化执行,首先创建目录,在 /srv 创建 salt目录,/srv/salt/目录下创建 _modules目录,此目录下编写master主配置文件 /srv/salt/_modules/my_disk.py

[root@server1 srv]# mkdir salt
[root@server1 salt]# mkdir /srv/salt/_modules
[root@server1 _modules]# vim my_disk.py

在这里插入图片描述

服务端给server2同步模块

[root@server1 _modules]# salt server2 saltutil.sync_modules
#连接模块

在这里插入图片描述
minion端安装tree,可以看到server端的文件已同步

[root@server2 minion]# yum install -y tree
[root@server2 minion]# cd ..
[root@server2 salt]# tree minion/

在这里插入图片描述
server端远程执行minion端(server2)df 函数中内容

[root@server1 _modules]# salt server2 my_disk.df

在这里插入图片描述

3.配置管理的三种方式+apache

在这里插入图片描述在这里插入图片描述在这里插入图片描述(1) 配置管理方式一

ls /srv/salt/apache/apache.sls 
[root@server1 apache]# salt server2 state.sls apache/apache

在这里插入图片描述(2) 配置管理方式二

[root@server1 apache]# cp apache.sls init.sls 
[root@server1 apache]# ls /srv/salt/apache/init.sls 
[root@server1 apache]# salt server2 state.sls apache

apache:目录即识别/srv/salt/apache中的init.sls

在这里插入图片描述(3) 配置管理方式三

/srv/salt/apache.sls 和 /srv/salt/apache/init.sls,执行时优先选择外部sls文件
apache:目录即识别/srv/salt/apache.sls
在这里插入图片描述

4.server端远程执行:server2安装httpd,php,启动httpd

[root@server1 apache]# vim init.sls 
httpd:
  pkg.installed:
    - pkgs:
      - httpd #安装http
      - php  #安装php服务  

  service.running:
    - name: httpd  #开启http服务
[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# salt server2 state.sls apache

在这里插入图片描述
缓存位置:var/cache/master/jobs/
在这里插入图片描述

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

四.grains匹配运用:在server3部署nginx

master端在/src/salt/下创建nginx目录
在这里插入图片描述
master端在远程在server3执行

[root@server1 nginx]# pwd
/srv/salt/nginx
[root@server1 nginx]# ls
init.sls  nginx-1.20.1.tar.gz
[root@server1 nginx]# vim init.sls 
[root@server1 nginx]# salt server3 state.sls 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-file-aio &> /dev/null && make &> /dev/null && make install &> /dev/null
    - create: /usr/local/nginx

在这里插入图片描述在这里插入图片描述create的作用:执行后的动作不用再次执行
在这里插入图片描述

server3端查看进程
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
编写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

在这里插入图片描述在这里插入图片描述
server端修改nginx.server文件
在这里插入图片描述
在这里插入图片描述在这里插入图片描述测试:
在这里插入图片描述

五.grains:静态

在这里插入图片描述

1.信息查询

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

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

2.自定义grains项:方式一

server2:在/etc/salt/minion中定义
在这里插入图片描述

在这里插入图片描述

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

3.自定义grains项:方式二

server3:在/etc/salt/grains中定义
在这里插入图片描述

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

4.自定义grains项:方式三

在salt-master端创建_grains目录

[root@server1 _grains]# salt '*' saltutil.sync_grains  ##同步grains到minion端 

在这里插入图片描述
首先编写一个test.py进行测试
在这里插入图片描述在这里插入图片描述在这里插入图片描述

在salt-master端创建_grains目录:
server2安装httpd,server3安装并启动nginx
在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

六.pillar:动态 + jinjia模板

一个模板匹配所有的节点

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自定义pillar项
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述pillar数据匹配

在这里插入图片描述
Jinja模板

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
方式一:
在这里插入图片描述

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

测试:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

方式二:

[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# ls
httpd.conf  init.sls
[root@server1 apache]# vim httpd.conf 
[root@server1 apache]# vim init.sls 
[root@server1 apache]# cd -
/srv/pillar
[root@server1 pillar]# ls
pkgs.sls  top.sls
[root@server1 pillar]# vim pkgs.sls 

在这里插入图片描述

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

测试:
在这里插入图片描述在这里插入图片描述

以上是关于SaltStack-----安装,远程执行,grains,pillar,jinja模板的主要内容,如果未能解决你的问题,请参考以下文章

saltstack的安装及配置

SaltStack 远程执行

架构师成长之路5.2-Saltstack远程执行

一 saltstack 数据系统 远程执行

Saltstack 服务器基本安装

安全风险通告SaltStack漏洞搭配可远程命令执行,SaltStack多个高危漏洞安全风险通告