234 saltstack安装配置与使用

自动化运维saltstack

一、基础介绍
==========================================================================================
saltstack简单介绍

Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中化管理平台,几分钟内便可运行起来,速度够快,服务器之间秒级通讯,扩展性好,很容易批量管理上万台服务器,显著降低人力与运维成本;它具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func;通过部署SaltStack环境,可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)(SaltStack的通信模式总共分为2种模式:ZeroMQ、REAT,鉴于REAT目前还不是太稳定,通常会选择ZeroMQ模式)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

Saltstack运行模式

Local:本地,一台机器玩,不建议

Master/Minion:通过server/agent的方式进行管理,效率很高(批量管理1000台机器,25秒搞定)

Salt SSH:通过SSH方式进行管理,效率相对来说比较低(批量管理1000台机器,83秒搞定)

Saltstack三大功能

远程执行(执行远程命令)

配置管理(状态管理)

云管理

Saltstack特征

1)部署简单、方便;

2)支持大部分UNIX/Linux及Windows环境;

3)主从集中化管理;

4)配置简单、功能强大、扩展性强;

5)主控端(master)和被控端(minion)基于证书认证,安全可靠;

6)支持API及自定义模块,可通过Python轻松扩展。

 

Master与Minion认证

1)minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。

2)master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。

Master与Minion的连接

1)SaltStack master启动后默认监听4505和4506两个端口。4505(publish_port)为saltstack的消息发布系统,4506(ret_port)为saltstack客户端与服务端通信的端口。如果使用lsof 查看4505端口,会发现所有的minion在4505端口持续保持在ESTABLISHED状态。

 

2)minion与master之间的通信模式

 

二、SaltStack 安装配置过程

服务端:Xuegod63:

IP:192.168.0.63

Hostname:xuegod63.cn

被控端:xuegod64

IP:192.168.0.64

Hostname:xuegod64.cn

1、配置FQDN,让ip和主机名对应

[root@xuegod63 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.0.63 xuegod63 xuegod63.cn

192.168.0.64 xuegod64 xuegod64.cn

[root@xuegod64 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.0.64 xuegod64 xuegod64.cn

192.168.0.63 xuegod63 xuegod63.cn

2、两台机器都关闭防火墙和selinux

3、服务组件安装:

[root@xuegod63 ~]# yum install epel-release

[root@xuegod63 ~]# yum install salt-master salt-minion  -y  ##安装服务端和被监控端

[root@xuegod64 ~]# yum install epel-release -y && yum install salt-minion –y  ##

被监控服务安装被监控端

这个如果提示,使用下面的操作

No package salt-master available.

No package salt-minion available.

Error: Nothing to do

安装服务端

sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub

curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo

sudo yum clean expire-cache

yum install salt-master -y # 我看到中间会安装python36

sudo yum install salt-minion -y

sudo yum install salt-ssh -y

sudo yum install salt-syndic -y

sudo yum install salt-cloud -y

sudo yum install salt-api -y

systemctl start salt-minion

systemctl enable salt-minion

systemctl enable salt-master.service && systemctl restart salt-master.service

安装客户端

sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub

curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo

sudo yum clean expire-cache

sudo yum install salt-minion -y

systemctl restart salt-minion

systemctl enable salt-minion

4、服务启动:

启动服务:

[root@xuegod63 ~]# vim /etc/salt/minion

在16行下面增加一行:

master: 192.168.0.63   ##说明服务端的地址

启动主控端服务:

root@xuegod63 ~]# vim /etc/salt/minion

[root@xuegod63 ~]# /etc/init.d/salt-master start

Starting salt-master daemon:                               [  OK  ]

[root@xuegod63 ~]# /etc/init.d/salt-minion start

Starting salt-minion daemon:                               [  OK  ]

启动被监控端服务:

[root@xuegod64 ~]# vim /etc/salt/minion

在16行下面增加一行:

master: 192.168.0.63   ##说明服务端的地址

启动被监控服务:

[root@xuegod64 ~]# /etc/init.d/salt-minion start

Starting salt-minion daemon:                               [  OK  ]

启动完,可以查看下进程,可以看到相关服务是python来执行运行的

[root@xuegod63 ~]# ps aux|grep salt

root       1772  0.0  2.0 288104 21088 ?        S    09:46   0:00 /usr/bin/python2.6 /usr/bin/salt-master –d

root       2166  0.1  2.5 442228 25216 ?        S    09:46   0:00 /usr/bin/python2.6 /usr/bin/salt-minion –d

5、配置认证

下面认证操作都是在xuegod63上操作:

salt-key -a xuegod64.cn  ##增加一个xuegod64的密钥认证

[root@xuegod63 ~]# salt-key -a xuegod64.cn

The following keys are going to be accepted:

Unaccepted Keys:

xuegod64.cn

Proceed? [n/Y] y      

Key for minion xuegod64.cn accepted.

查看已经签名的客户端:

[root@xuegod63 ~]# salt-key

Accepted Keys:

xuegod64.cn

Denied Keys:

Unaccepted Keys:

xuegod63.cn

Rejected Keys:

签名完成,可以在被监控端看到生成的密钥minion_master.pub

[root@xuegod64 ~]# cd /etc/salt/pki/minion/

[root@xuegod64 minion]# ls

minion_master.pub  minion.pem  minion.pub

补充: salt-key 可以使用-A 来签名所有主机,也可以使用-d 删除指定的主机

6、saltstack 远程执行命令演示:

探测主机是否在线

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

xuegod64.cn:

  True

查看分区等信息:

[root@xuegod63 ~]# salt 'xuegod64.cn' cmd.run 'df -h'

xuegod64.cn:

  Filesystem      Size  Used Avail Use% Mounted on

  /dev/sda2       9.5G  2.0G  7.1G  22% /

  tmpfs           491M   12K  491M   1% /dev/shm

 /dev/sda1       2.9G   39M  2.7G   2% /boot

/dev/sda3       5.7G   12M  5.4G   1% /usr/local

可以调用cmd.run 来执行其他的命令,比如负载,时间,主机名等等

这里的*  表示所以已经签名的客户端,也可以指定其中特定的一个,比如 xuegod64.cn,但是这些客户端必须是在master上被接受认证的客户端,

如果有多个被监控的客户端,我们可以通过通配符,列表,正则等来一次性的控制多个主机,比如我们现在有两个客户端,web10 web11.可以写成:

salt ‘web*’或者salt ‘web1[01]’或者 salt  -L ‘web10,web11’使用列表的时候,多个机器用逗号隔开

7、saltstack 之grains介绍

grains 是在minion启动收集到的一些信息,比如操作系统的类型,网卡IP,内存版本,CPU信息等

[root@xuegod63 ~]# salt 'xuegod64.cn' grains.ls    ##列出所有的grains项目名称

xuegod64.cn:

    - SSDs

    - biosreleasedate

    - biosversion

    - cpu_flags

    - cpu_model

- cpuarch

等等

[root@xuegod63 ~]# salt 'xuegod64.cn' grains.items  ##列出所有的grains项和对应的值

xuegod64.cn:

    ----------

    SSDs:

    biosreleasedate:

        05/20/2014

    biosversion:

        6.00

    cpu_flags:

        - fpu

        - vme

       - de

启动grains的信息并不是动态的,并不会时时变更,它只是在minion启动时收集到的,我们可以根据grains收集到的一些信息,做配置管理工作,可以支持自定义一些监控项

8、自定义grains

在被监控端xuegod64上添加grains:

[root@xuegod64 ~]# vim /etc/salt/grains    ##此文件默认没有,需要创建

添加如下信息,监控项:对应的信息

 role: zabbix_server

 env: test

 myname: xuegodlinux

 myhostname: xuegod64.cn

重启minion服务

[root@xuegod64 ~]# /etc/init.d/salt-minion restart



可以再次执行salt 'xuegod64.cn' grains.items 查看是否存在自定义的项,或者使用

[root@xuegod63 ~]# salt 'xuegod64.cn' grains.item env  单独查看

我们可以借助grains的一些属性信息来执行一些命令

[root@xuegod63 ~]# salt -G env:test cmd.run 'w'

9、saltstack 之pillar介绍

pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息,可以自定义变量等

自定义配置pillar过程:

[root@xuegod63 ~]# vim /etc/salt/master

找到pillar_roots 这项,取消下面三行的注释

529 pillar_roots:

530   base:

531     - /srv/pillar

创建pillar文件的存放目录:

[root@xuegod63 ~]# mkdir /srv/pillar

创建配置文件,编辑如下内容:

[root@xuegod63 pillar]# vim test.sls

conf: /etc/123.conf

myname: saltstack-server

创建编写入口配置文件

[root@xuegod63 ~]# vim /srv/pillar/top.sls

base:

  'xuegod64.cn':

- test

重启服务:

[root@xuegod63 pillar]# /etc/init.d/salt-master restart

可以通过刷新来获取新的状态

[root@xuegod63 pillar]# salt '*' saltutil.refresh_pillar

查看:

[root@xuegod63 pillar]# salt '*' pillar.items

xuegod64.cn:

    ----------

    conf:

        /etc/123.conf

    myname:

        saltstack-server

xuegod63.cn:

----------

pillar 同样可以用作salt的匹配对象,比如:

[root@xuegod63 pillar]# salt -I 'myname:saltstack-server' cmd.run 'w'

三、Saltstack 配置管理服务

1、  配置安装apache

[root@xuegod63 ~]# vim /etc/salt/master

取消406-408行的注释

406 file_roots:

407    base:

408      - /srv/salt/

创建配置文件存储目录

[root@xuegod63 ~]# mkdir /srv/salt

创建入口配置文件

[root@xuegod63 salt]# vim top.sls

base:

  'xuegod64.cn':

- apache

意思是在所以的客户端上执行apache的模块

重启服务:

[root@xuegod63 salt]# /etc/init.d/salt-master restart

创建编写apache模块的配置文件

[root@xuegod63 salt]# vim /srv/salt/apache.sls

apache-service:

  pkg.installed:

    - names:

      - httpd

      - httpd-devel

  service.running:

    - name: httpd

- enable: True

apache-service是ID的名称,自定义的。pkg.installed为包安装函数,下面是要安装的包的名字。service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。

配置好文件,执行

[root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

xuegod64.cn:

----------

          ID: apache-service

    Function: pkg.installed

        Name: httpd

      Result: True

     Comment: The following packages were installed/updated: httpd

     Started: 14:41:53.099793

    Duration: 9075.212 ms

     Changes:  

              ----------

              apr-util-ldap:

                  ----------

                  new:

                      1.3.9-3.el6_0.1

查看被控端,已经安装成功。

2、  配置远程文件管理

创建一个文件管理的模块

[root@xuegod63 salt]# vim filetest.sls

file_test:

  file.managed:

    - name: /tmp/xuegodlinux.txt

    - source: salt://test/xuegod.php

    - user: root

    - group: root

- mode: 644

在入口文件里添加模块

[root@xuegod63 salt]# vim top.sls

base:

  'xuegod64.cn':

    - apache

- filetest

测试执行:

[root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

----------

          ID: file_test

    Function: file.managed

        Name: /tmp/xuegodlinux.txt

      Result: True

     Comment: File /tmp/xuegodlinux.txt updated

     Started: 14:55:43.405748

    Duration: 9.272 ms

     Changes:  

              ----------

              diff:

                  New file

              mode:

                  0644

3、配置文件夹管理:

创建一个文件夹管理的模块

[root@xuegod63 salt]# vim filedir.sls

file_dir:

  file.recurse:

    - name: /tmp/testdir

    - source: salt://test

    - user: root

    - file_mode: 644

    - dir_mode: 755

    - mkdir: True

- clean: True

在入口文件里添加模块

[root@xuegod63 salt]# vim top.sls

base:

  'xuegod64.cn':

- filedir

测试文件夹管理:

[root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

xuegod64.cn:

----------

          ID: file_dir

    Function: file.recurse

        Name: /tmp/testdir

      Result: True

     Comment: Recursively updated /tmp/testdir

     Started: 15:07:48.516708

    Duration: 314.122 ms

     Changes:  

              ----------

              /tmp/testdir/xuegod.php:

                  ----------

                  diff:

                      New file

                  mode:

                      0644

Summary

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

Succeeded: 1 (changed=1)

3、  saltstack远程执行命令

创建执行命令的配置文件

[root@xuegod63 salt]# vim cmd.sls

cmd_test:

 cmd.run:

  - unless: test -f /tmp/xuegodtext.txt

  - names:

    - touch /tmp/11.txt

    - mkdir /tmp/1233

  - user: root

在入口文件里添加模块

 [root@xuegod63 salt]# vim top.sls

base:

  'xuegod64.cn':

- cmd

测试执行命令:

[root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

xuegod64.cn:

----------

          ID: cmd_test

    Function: cmd.run

        Name: mkdir /tmp/1233

      Result: True

     Comment: Command "mkdir /tmp/1233" run

     Started: 15:24:59.832268

    Duration: 297.728 ms

     Changes:  

              ----------

              pid:

                  5309

              retcode:

                  0

              stderr:

              stdout:

5、saltstack远程执行shell脚本

[root@xuegod63 salt]# vim shell.sls

shell_test:

 cmd.script:

  - source: salt://test/1.sh

  - user: root

[root@xuegod63 salt]# cat test/1.sh

#!/bin/bash

touch /tmp/111222333.jsp

echo 'this is jsp page'>> /tmp/111222333.jsp

[root@xuegod63 salt]# vim top.sls

base:

  'xuegod64.cn':

- shell

测试执行命令:

[root@xuegod63 salt]# salt 'xuegod64.cn' state.highstate

原文地址:https://www.cnblogs.com/hailun1987/p/15647698.html