使用saltstack部署zabbix-agent

使用saltstack批量部署服务是工作中一种常见的内容,对于一个服务的部署可以分为:前期准备(系统资源的设定、参数调整、软件包的下载)、安装、配置、启动这几个步骤。
本文以zabbix客户端的设定为例,向大家展示如何用saltstack部署服务。

部署步骤

1.首先利用pillar定义配置文件中一些关键的数据,例如zabbix server的IP(如果有需求还可以设置开放端口、客户端名称)。在整个部署开始之前,我们需要了解pillar和file的相关目录信息,在master的配置文件中:

file_roots:
  base:
    - /srv/salt/prod
  dev:
    - /srv/salt/dev/services
    - /srv/salt/dev/states
  prod:
    - /srv/salt/prod/services
    - /srv/salt/prod/states
以及:
pillar_roots:
  base:
    - /srv/pillar

file_roots以及pillar_roots里的base、dev和prod会在后续的配置中经常使用,默认情况下我们在每个base地址下创建一个top.sls文件。

2.pillar文件的配置

pillar的根文件top.sls:

[root@server2 pillar]# cat top.sls 
base:
  '*':
    - zabbix

指定了任何minion都包含zabbix.sls的静态数据,在zabbix.sls文件中我们指定了zabbix_server的ip地址:

[root@server2 pillar]# cat zabbix.sls 
zabbix-agent:
  Zabbix_Server: 192.168.42.129
  port: 10050

查看下pillar中定义的Zabbix_Server和port的值:

[root@server2 pillar]#  salt '*' pillar.items
minion-192.168.42.130:
    ----------
    zabbix_agent:
        ----------
        Zabbix_Server:
            192.168.42.129
        port:
            10050
minion-192.168.42.128:
    ----------
    zabbix_agent:
        ----------
        Zabbix_Server:
            192.168.42.129
        port:
            10050

3.zabbix服务配置

此示例中使用源码进行安装,请提前准备好zabbix 源码包以及配置文件的模板。

[root@server2 files]# pwd
/srv/salt/prod/zabbix/files
[root@server2 files]# ls
zabbix-3.2.1.tar.gz  zabbix_agentd.conf

查看file_roots目录(/srv/salt/prod)中的内容:

[root@server2 prod]# ls
top.sls  zabbix

首先编写top.sls文件:

[root@server2 prod]# cat top.sls 

base:
  '*':
    - zabbix.zabbix_agent

这里的base指的是file_roots定义目录中的base:

file_roots:
  base:
    - /srv/salt/prod

在这个目录中有一个zabbix目录,该目录中有一个zabbix_agent.sls文件,主要的配置都在该文件中:

[root@server2 zabbix]# cat zabbix_agent.sls 
include:
  - zabbix.common_install

create_zabbix_user:
  user.present:
    - name: zabbix
    - shell: /sbin/nologin
  group.present:
    - name: zabbix

zabbix_tar:
  file.managed:
    - name: /tmp/zabbix-3.2.1.tar.gz
    - source: salt://zabbix/files/zabbix-3.2.1.tar.gz
    - user: zabbix
    - group: zabbix
    - mode: 0644

/opt/app:
  file.directory:
    - user: zabbix
    - group: zabbix

zabbix_decompression:
  cmd.run:
    - name: tar xvf /tmp/zabbix-3.2.1.tar.gz -C /opt/app 
    - unless: test -d /opt/app/zabbix-3.2.1
    - require:
      - file: /tmp/zabbix-3.2.1.tar.gz

zabbix_install:
  cmd.run:
    - name: cd /opt/app/zabbix-3.2.1 && ./configure --enable-agent && make && make install
    - require:
      - cmd: zabbix_decompression

/usr/local/etc/zabbix_agented.conf:
  file.managed:
    - name: /usr/local/etc/zabbix_agentd.conf
    - source: salt://zabbix/files/zabbix_agentd.conf
    - user: zabbix
    - group: zabbix
    - mode: 0644
    - template: jinja
    - defaults:
      Server: {{pillar['zabbix_agent']['Zabbix_Server']}}
    - require:
      - cmd: zabbix_install
run_zabbix:
  cmd.run:
    - name: /usr/local/sbin/zabbix_agentd -c /usr/local/etc/zabbix_agentd.conf
    - require:
      - cmd: zabbix_install
    - watch:
      - file: /usr/local/etc/zabbix_agentd.conf

在该文件的开始有一个include操作,安装zabbix之前系统可能需要先安装相关软件包和编译工具,所以把这个操作放在单独的zabbix.common_install文件中,该文件也在/srv/salt/prod/zabbix目录。内容如下:

[root@server2 zabbix]# cat common_install.sls 
pkg-init:
  pkg.installed:
    - names:
      - gcc
      - gcc-c++
      - glibc
      - make
      - autoconf
      - openssl
      - openssl-devel

接下来的过程包括:
(1)zabbix用户和组的创建;
(2)zabbix源码包的拷贝;
(3)源码包的解压缩和配置安装;
(4)zabbix客户端配置文件(zabbix_agentd.conf)的部署;
(5)zabbix服务的开启;

4.执行过程:

-------------

[root@server2 zabbix]# salt '*' state.highstate

Succeeded: 15 (changed=3)
Failed:     0
-------------
Total states run:     15
Total run time:   26.597 s