[自动化] Saltstack服务配置详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[自动化] Saltstack服务配置详解相关的知识,希望对你有一定的参考价值。

Saltstack 简介

Saltstack 是一个服务器基础设施管理工具,它具有配置管理、远程执行、监控等功能。Saltstack由Python语言编写,基于 C/S 架构,即服务端 master 和客户端 minions,Master和 Minion之间是通过 Zeromq(消息队列)进行通信的 ;适合大规模批量管理服务器。

Saltstack 常用模块

(1)pkg模块:包管理,包括增删更新

(2)file模块:管理文件操作,包括同步文件、设置文件权限和所属用户组、删除文件等。

(3)cmd模块:在Million上执行命令或者脚本。

(4)user模块:管理系统账户操作。

(5)service模块:管理系统服务操作。

(6)cron模块:管理cron服务操作。

saltstack安装

1.准备工作

准备三台机器,这三台机器都关闭selinux以及防火墙

setenforcr 0
systemctl stop firewalld.service
systemctl disable firewalld.service

master服务器 (192.168.100.143)

minion服务器 (192.168.100.144 192.168.100.145)

2.编辑hosts文件(三台都配置)

vim /etc/hosts

192.168.100.143 master.saltstack.com
192.168.100.144 web01.saltstack.com
192.168.100.145 web02.saltstack.com

3.分别修改各自的主机名

vim /etc/hostname

 master.saltstack.com   #master服务器
 web01.saltstack.com    #million服务器1
 web02.saltstack.com    #million服务器1

配置完成,重启生效,再次关闭selinux。

4.安装

(1)服务端

yum install -y epel-release  #安装epel源
yum install -y salt-master 

(2)客户端

yum install -y epel-release  #安装epel源
yum install -y salt-minion

5.配置服务端配置文件(/etc/salt/master)

vim /etc/salt/master

interface: 192.168.100.143     #第15行,修改监听地址为本机地址

auto_accept: True     #第215行,主服务器会自动认证被控端的认证,只要被控端在设置完主服务器的IP地址后启动服务,主服务器就会允许被控端自动认证,以避免以后每次都要运行salt-key来确认认证书信任。

file_roots:
  base:
    - /srv/sale
#第416行,去掉注释。开启saltstack文件根目录位置,注意这个目录默认没有创建,需要自己手动创建。

nodegroups:   
  group1: ‘web01.saltstack.com‘
  group2: ‘web02.saltstack.com‘   #第710行,配置组分类

pillar_opts: True    #第552行,开启pillar功能,同步文件功能

pillar_roots:
    base:
     - /srv/pillar  #第529行,去掉注释,pillar的主目录,需要自己创建

技术分享图片

6.创建salt与pillar文件根目录

mkdir /srv/salt
mkdir /srv/pillar

7.启动salt-master服务

systemctl start salt-master
systemctl enable salt-master

8.配置million客户端配置文件(/etc/salt/minion)

vim /etc/salt/minion

master: 192.168.100.143     ##第16行,指定master服务器的IP

id: web01.saltstack.com   #注意冒号要有空格 ##第78行,指定客户端主机名,另一台是web02.saltstack.com 

技术分享图片

9.分别启动两台客户端服务

systemctl start salt-minion

10.测试

(1)查看在主服务器上已经被接受过的客户端

salt-key

技术分享图片
(1)测试连接服务端和客户端的通信状态

##在主服务器端进行操作

salt ‘*‘ test.ping         

web01.saltstack.com:
  True
web02.saltstack.com:
  True

技术分享图片
(2)测试远程执行命令

##在主服务器端进行操作
salt ‘*‘ cmd.run ‘hostname‘    ##远程执行命令

技术分享图片

Saltstack的三大组件

1.grains

grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等,它更适合做一些静态的属性值的数据采集 。
使用命令:

salt ‘web01.saltstack.com‘ grains.ls            //列出所有的 grains 项目名字

技术分享图片

salt ‘web01.saltstack.com‘ grains.items      //列出所有的 grains 项目名以及值

技术分享图片
grains在远程执行命令时也很方便,示例如下:

salt -G os:CentOS cmd.run ‘hostname‘

技术分享图片

2.pillar

pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。

salt ‘web01.saltstack.com‘ pillar.items  #查看指定minion的 pillar值

技术分享图片
综上所述,如果你想定义的属性值是经常变化的,就采用pillar:如果很固定、不易变,就采用 grains。

3.state

state组件是SaltStack的核心功能,通过预先定制好的sls文件对被控端主机进行状态管理,如程序包、文件、网路配置、系统服务、系统用户等。state的定义也是通过编写sls文件进行操作的。

示例一:通过saltstack远程安装apache

1.创建入口文件top.sls

mkdir /srv/salt          #配置文件中需要开启
vim /srv/salt/top.sls     #创建入口文件,入口文件的作用是定义pillar 的数据覆盖被控主机的有效范围
base:
  ‘*‘:
    - apache

2.创建pillar入口文件apache.sls

vim /srv/salt/apache.sls
apache:           #这里是自定义的名称
  pkg.installed:        #安装包
    - names:
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

3.重启服务端服务

systemctl restart salt-master

4.执行命令

salt ‘*‘ state.highstate    ##执行并刷新state配置命令

技术分享图片
这样就可远程安装apache服务了

示例二:文件目录管理

1、文件管理

(1)接着编辑之前的 top.sls 文件

vim /srv/salt/top.sls   #修改为如下

base:
  ‘web02.saltstack.com‘:
    - file

(2)新建 file.sls 文件

vim /srv/salt/file.sls

file-test:     #自定义
  file.managed:
    - name: /opt/file.txt      #指定远程客户端要生成的文件。
    - source: salt://test/abc/1.txt #源文件
    - user: root
    - group: root
    - mode: 644

(3)新建所要测试的源文件

mkdir -p /srv/salt/test/abc/

vim /srv/salt/test/abc/1.txt
   test-test-test

(4)重启服务端服务

systemctl restart salt-master

(5)执行命令

salt ‘web02.saltstack.com‘ state.highstate    ##执行并刷新state配置命令

技术分享图片
技术分享图片

2、目录管理

(1)接着编辑之前的 top.sls 文件

vim /srv/salt/top.sls              #修改为如下
base:
  ‘web02.saltstack.com‘:
    - dir

(2)新建 dir.sls 文件

vim /srv/salt/dir.sls
file-dir:
  file.recurse:
    - name: /opt/dir
    - source: salt://test1/a
    - user: root
    - file_mode: 644
    - dir_mode: 755
    - mkdir: True
    - clean: True

注意:clean: True 源删除文件或目录,目标也会跟着删除,否则不会删除。可以默认设置为 False。

(3)新建所要测试的源目录

 mkdir -p /srv/salt/test1/a
 vim /srv/salt/test1/a/0.txt
   12345678

(4)重启服务端服务

systemctl restart salt-master

(5)执行命令

salt ‘web02.saltstack.com‘ state.highstate    ##执行并刷新state配置命令

技术分享图片
技术分享图片

示例三:远程执行

1.远程执行命令

(1)接着编辑之前的 top.sls 文件

vim /srv/salt/top.sls              #修改为如下
base:
  ‘web01.saltstack.com‘:
    - cmd

(2)新建 cmd.sls 文件

vim /srv/salt/cmd.sls
cmd-test:  
  cmd.run:
    - onlyif: test -f /opt/123.txt
    - names:
      - touch /opt/cmdtest.txt
      - mkdir /opt/cmdtest
    - user: root

(3)在web01.saltstack.com主机上创建/opt/123.txt

touch /opt/123.txt

(4)重启服务端服务

systemctl restart salt-master

(5)执行命令

salt ‘web01.saltstack.com‘ state.highstate    ##执行并刷新state配置命令

技术分享图片
技术分享图片

2.远程执行脚本

(1)接着编辑之前的 top.sls 文件

vim /srv/salt/top.sls              #修改为如下
base:
  ‘web01.saltstack.com‘:
    - shell

(2)新建 shell.sls 文件

vim /srv/salt/shell.sls
shell-test:  
  cmd.script:
    - source: salt://test/1.sh
    - user: root

(3)新建 1.sh 脚本文件

vim /srv/salt/test/1.sh
 #!/bin/bash
 echo "hello" > /opt/123.txt

(4)重启服务端服务

systemctl restart salt-master

(5)执行命令

salt ‘web01.saltstack.com‘ state.highstate    ##执行并刷新state配置命令

技术分享图片
技术分享图片

示例四:管理任务计划

1.建cron计划

(1)接着编辑之前的 top.sls 文件

vim /srv/salt/top.sls              #修改为如下
base:
  ‘web02.saltstack.com‘:
    - cron

(2)新建 cron.sls 文件

vim /srv/salt/cron.sls
cron-test:  
  cron.present:
    - name: /bin/touch /opt/111.txt
    - user: root
    - minute: ‘*‘
    - hour: 0
    - daymonth: ‘*‘
    - month: ‘3,5‘
    - dayweek: ‘*‘

(3)重启服务端服务

systemctl restart salt-master

(4)执行命令

salt ‘web02.saltstack.com‘ state.highstate    ##执行并刷新state配置命令

技术分享图片
技术分享图片

2.删除 cron

只需修改 cron.sls 文件,
把 cron.present: 改成 cron.absent即可。然后重启服务,执行并刷新state配置命令。

vim /srv/salt/cron.sls
cron-test:  
  cron.absent:
    - name: /bin/touch /opt/111.txt
    - user: root
    - minute: ‘*‘
    - hour: 0
    - daymonth: ‘*‘
    - month: ‘3,5‘
    - dayweek: ‘*‘
systemctl restart salt-master
salt ‘web02.saltstack.com‘ state.highstate    ##执行并刷新state配置命令

技术分享图片

以上是关于[自动化] Saltstack服务配置详解的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维利器 SaltStack 工作原理及安装配置实例详解

关于Saltstack核心模块state详解

Saltstack批量安装部署Zabbix代理(附zabbix自动注册详解)

SaltStack 入门到精通第三篇:Salt-Minion配置文件详解

2自动化运维之SaltStack远程执行详解

运维实战 自动化运维 SaltStack入门