当前位置 : 主页 > 网络安全 > 测试自动化 >

企业——saltstack

来源:互联网 收集:自由互联 发布时间:2021-06-19
1.saltstack 概念及原理 SaltStack 管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括 VMware vSphere 环境。自动化运维软件,自动化配置系统 SaltStack 作用于仆从和主拓扑。

1.saltstack概念及原理

   SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境。自动化运维软件,自动化配置系统
   SaltStack
作用于仆从和主拓扑。SaltStack与特定的命令结合使用可以在一个或多个下属执行。实现这一点,此时Salt Master可以发出命令,如salt ‘*‘ cmd.run ‘ls -l /‘。没有UI界面
   Saltstack
是基于python开发的一套C/S架构配置管理工具;一种全新的基础设施管理方式,部署轻松
   SaltStack
三大功能:
    ●
远程执行
    ●
配置管理
    ●
云管理

2.
环境要求
需要两个干净的6.5的虚拟机
查看虚拟机的信息的命令: qemu-img info 虚拟机名

 
在真机上:
   cd /var/lib/libvirt/
   ls
   qemu-img info new.qcow2    ##
查看虚拟机的信息
   qemu-img create -f qcow2 -b new.qcow2 wf1
   qemu-img create -f qcow2 -b new.qcow2 wf2
   virt-manager
  
创建新的虚拟机 wf1 wf2


  
注意:虚拟机的解析

   cat /etc/redhat-release  ##
查看系统版本
   uname -r ##
查看系统内核版本
   getenforce ##
查看selinux的状态,selinux必须是关闭的
   /etc/init.d/iptables stop  ##
关闭防火墙


3.saltstack
的配置

 
在真机上:
   lftp 172.25.254.250
   cd pub/docs/saltstack
   ls
   mirror rhel6     ##
rhel6的文件放在http的默认发布目录上
   mv rhel6/ /var/www/html/
   systemctl start httpd.service

 
wf1,2,3上:   需要重新配置yum
   vim /etc/yum.repos.d/rhel-source.repo
    [saltstack]
    name=saltstack
    baseurl=http://172.25.8.250/rhel6
    gpgcheck=0
   yum repolist
  
 
wf1上:
   yum install -y salt-master
   cd /etc/salt
   ls
   vim master    ##master
端编辑master的文件,不过这个没有要编辑的
   /etc/init.d/salt-master start

 
wf2,3上:
   yum install -y salt-minion
   cd /etc/salt/
   ls
   vim minion    ##minion
端编辑minion的文件
    master: 172.25.8.1   ##
设置masterip
   /etc/init.d/salt-master start
  
 
wf1上:salt远程执行命令
   salt-key -L   ##
查看接受的和没有被授权的请求
   salt-key -A   ##
批量处理没有被处理的没有授权的请求
   salt-key -a   ##
处理某一个为授权的请求

 
测试:保持长链接
 -
wf1上操作,输入命令:
 -salt wf2/3 test.ping
    ##salt
命令  test.ping的含义是,test是一个模块,ping是模块内的方法
 -salt wf2/3 cmd.run hostname

===============================================================================
lsof
list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
   lsof -i
用以显示符合条件的进程情况

   lsof -i :4505
===============================================================================

4.saltstack
的配置管理  YAML

===============================================================================
 
默认的SLS文件的rendererYAML rendererYAML是一个有很多强大特性的标记性语言。salt使用了一个YAML的小型子集,映射非常常用的数据,像列表和字典
  pki
加密 
base
目录 部署服务,需要调用很多的模块,没有base目录需要自己建立

================================================================================

 
wf1上:
   vim master
    file_roots:    ##
开启base的默认目录,并创建
      base:
        - /srv/salt/
   mkdir /srv/salt
   /etc/init.d/salt-master restart
  
   cd /srv/salt
   mkdir apache
   vim install.sls   ##
进入到/srv/salt/目录下创建,python语法注意空格缩进,不能用tab
    http:  
软件包名称
      pkg.installed
   salt wf2 state.sls apache.install  ##salt
调用客户端的命令 wf2客户端名称 state.sls调用sls这个文件 在base下的

 
wf2上:
   yum install tree -y
   cd /var/cache/salt
   tree .

 
wf1上:
   vim /srv/salt/apache/install.sls
    http:  
软件包名称
      pkg.installed   ##
安装
    apsche:
      service.running:  ##
执行 开启服务
        - name: httpd
        - enable: True
   salt wf2 state.sls apache.install

 
wf2上:
   ps ax   ##
查看进程信息,是否有开启服务
   chkconfig --list httpd

 
wf1上:
   vim /srv/salt/apache/install.sls
    httpd:
      pkg.installed:
       - pkgs:
         - httpd
         - php
         - php-mysql

    service.running:
      - name: httpd
      - enable: True

  
注意:但是如果修改wf2上的http的配置文件的话,wf1将命令推过来的时候,就会将更改的配置文件覆盖掉,就相当于没有更改。所以需要将wf2上的httpde配置文件scpwf1的一个目录当中,并且监控,如果修改过的话,就要重启服务
  
 
wf1上:
   cd /srv/salt/apache
   mkidr files


 
wf2上:
   scp /etc/httpd/conf/httpd.conf [email protected]:/srv/salt/apache/files
  
 
wf1上:
   cd /srv/salt/apache
   vim install.sls
    httpd:
      pkg.installed:
       - pkgs:
         - httpd
         - php
         - php-mysql

    service.running:
      - name: httpd
      - enable: True
      - watch:
        - file: /etc/httpd/conf/httpd.conf   ##
监控配置文件,如果修改,就重启服务

    /etc/httpd/conf/httpd.conf:
      file.managed:
        - source: salt://apache/files/httpd.conf
        - mode: 644
        - user: root
        - group: root
   salt wf2 state.sls apache.install

 
测试:
 
wf1上:
   cd /srv/salt/apache
   cd files/
   vim httpd.conf
    Listen 8080   ##
将端口改成8080
   salt wf2 state.sls apache.install
 
 
wf2上:
   netstat -antlp  ##
可以看到http的端口改成了8080

5.
开启服务和安装分开进行,编写两个sls文件
   cd /srv/salt/apache
   ls
   vim install.sls
    httpd:
      pkg.installed:
       - pkgs:
         - httpd
         - php
         - php-mysql

      file.managed:
        - name: /etc/httpd/conf/httpd.conf
            - source: salt://apache/files/httpd.conf
        - mode: 644
        - user: root
        - group: root
   vim service.sls
    include:
      - apache.install
    apache-service:
      service.running:
        - name: httpd
        - enable: True
        - watch:
          - file: apache-install
   salt wf2 state.sls apache.install

6.
wf3上开启nginx服务  并将开启和安装分开进行,编写两个sls文件

(1).
nginx的服务器的配置文件scpwf1
   scp /usr/local/nginx/conf/nginx.conf [email protected]:/srv/salt/nginx/files          ##
如果配置文件更改的话,将配置文件也发到虚拟机上去,然后覆盖原来的配置文件,注意,如果要更改配置文件的话,需要在master上更改,如果在minion上更改的话,在master执行salt操作的话,文件会被salt上的文件覆盖掉,更改的内容也就不见了。

(2)
nginx的安装包放在files目录下
   cd /srv/salt/
   mkdir nginx
   mkdir nginx/files
   mv nginx-1.14.0.tar.gz nginx/files

(3)
nginx的配置文件scpwf1nginxfiles目录下
   scp nginx.conf [email protected]:/srv/salt/nginx/files

(4)
将开启服务的命令放到另一个sls的文件里
   vim install.sls   ##
配置如下图
==================================================================================
  
注意:也可以将安装全部放在一个文件中,只需要调用就好了
   cd /srv/salt
   mkdir pkgs
   cd pkgs
   vim make.sls
    pkg.installed:
      - pkgs:
      - gcc
      - pcre-devel
      - openssl-devel
==================================================================================
   salt wf3 state.sls nginx.install

(5)
安装nginx的发布目录
  
用已经编译好的nginx的发布的文件,放到默认发布目录下就好
   mv nginx /etc/init.d
   cd /etc/init.d
   chmod +x nginx

  
测试一下,看发布文件能否使用:
   /etc/init.d/nginx start
   curl localhost    ##
出现nginx的页面就代表可以使用
   /etc/init.d/nginx stop
   scp nginx [email protected]:/srv/salt/nginx/files

 
wf3上: ps ax  ##查看执行的进程

7.
高级推
   cd /srv/salt
   ls
   vim top.sls
    base:
       "wf2":
          - apache.service
       "wf3":
          - nginx.install
   salt ‘*‘ state.highstate

   salt ‘*‘ test.ping   ## *
匹配的是salt里面的所有的远程主机

8.
wf1上下载salt-minion配置和wf23一样   wf1haproxy的服务器  用作负载均衡
   salt-key -L
   salt-key -a wf1
   salt-key -L  

   cd /srv/salt/
   ls
   mkdir haproxy
   cd haproxy/
   mkdir files    ##
haproxy的压缩包放在files文件中。
   vim install.sls
   vim service.sls
   salt wf1 state.sls haproxy.install

   cd ..
   cd haproxy-1.6.11/examples
   ls
   cp haproxy.init content-sw-sample.cfg /srv/salt/haproxy/files/

   cd /srv/salt/haproxy/files
   mv content-sw-sample.cfg haproxy.cfg
  
   mkdir users
   cd users/
   vim install.sls
    haproxy-group:
      group.present:
        - name: haproxy
        - group: 200

    haproxy-user:
      user.present:
        - name: haproxy
        - uid: 200
        - gid: 200
        - home: /usr/local/haproxy
        - shell: /sbin/nologin
        - createhome: False
   cd ..
   cd haproxy/
   vim service.sls
    - users.install

  
编辑haproxy的配置文件:如下图所示
 
   vim top.sls
    "wf1":
       - haproxy.install
  
 
wf2上编写http的默认发布文件:
   cd /var/www/html/
   ls
   vim index.html
    apache
 
 
在网页上测试,会出现轮询的效果: 172.25.254.1
 

9.
拿取远端机器的数据:静态,动态

 
查看远端服务器的数据的命令:
   salt wf2 grains.item os    ##
查看wf2os的类型
   salt wf2 grains.item ipv4  ##
查看wf2ip
   salt -G ‘os:redhat‘ cmd.run hostname    ##-G
表示匹配   ‘osredhat‘表示前面匹配所有红帽的系统  cmd表示匹配到一致的远端的服务器执行cmd后面的命令
  
更改信息的方式有两种:一在minion端改,二在master端改

(1)
minion端,有两种方法更改grains
 
方法一:在minion的配置文件中更改默认的roles
   cd /etc/salt/
   ls
   vim minion
    grains:
      roles:
        - apache    ##
更改默认的roles的值
   /etc/init.d/salt-minion restart   ##
因为是静态的更改配置文件,所以要重新启动服务

  
测试:在master    salt wf2 grains.item roles 
    ##
可以看到刚更改的配置文件的数据

 
方法二:在minion端的salt下编写一个文件
   cd /etc/salt
   ls
   vim grains
    roles: nginx   ##
因为不是配置文件所以不需要重起
  
  
测试:master端上    salt wf3 grains.item roles
    ##
虽然编写了配置文件,但是master端没有识别这个文件,需要触发一下,模块刷一下
    salt wf3 saltutil.sync_grains  ##
刷新
    salt wf3 grains.item roles  ##
再次查看就可以看到信息

(2)
master端,有两种方法更改grains
     ##
什么系统操作什么命令  role自定义角色
     ##
无需重起,只需要在master上触发一下grains


 
方法一:编辑top.sls文件
top file
中不需要匹配主机名,批量的配置服务器
   vim top.sls
    base:
      "wf1":
        - haproxy.service
      "roles:apache":
        - match: grain
        - apache.install
      "roles:nginx":
        - match: grain
        - nginx.service

 
方法二:在master端,编写py脚本   优点是:不需要登陆远程的服务端
   mkdir _grains
   cd _grains/
   vim my_grains.py
    #!/usr/bin/env python
    def my_grains():
        grains = {}
        grains[‘hello‘] = ‘westos‘
        grains[‘salt‘] = ‘stack‘
        return grainsa
   salt wf3 saltutil.sync_grains
  
  
测试:
  
wf3处: cd /var/cache/salt -> tree . -> my文件传送了过来
  
wf1处: salt wf3 grains.item hello/salt

==================================================================================
注意:如果同时编写了这些,那么这四个的优先级又是什么呢?
   1.grains
   2./etc/salt/grains
   3./etc/salt/minion
   4._grains/my_grains.py
==================================================================================

10.pillar
   Pillar
是在salt 0.9.8版本后才添加的功能组件。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sessiion,所以Pillar可以用来传递敏感的数据,例如ssh-key,加密证书等。
  
存储位置:存储在master端存放需要提供给minion的信息
  
应用场景:敏感信息:每个minion只能访问master分配给自己的信息

pillar
的配置
 
wf1上:

   cd /etc/salt/
   vim master
    pillar_roots:
      base:
        - /srv/pillar
   /etc/init.d/salt-master restart

   mkdir /srv/pillar
   cd /srv/pillar
   mkdir web
   cd web
   vim install.sls
    {% if grains[‘fqdn‘] == ‘wf2‘ %}
    webserver: httpd
    {% elif grains[‘fqdn‘] == ‘wf3‘ %}
    webserver: nginx
    {% endif %}

   cd ..
   vim top.sls
    base:
      ‘*‘:
        - web.install

  
测试:  salt ‘*‘ pillar.items
      salt ‘*‘ saltutil.refresh_pillar  ##
刷新
      salt wf2/3 pillar.item webserver   ##
单独看的话,就查看不了,需要刷新
      salt ‘*‘ saltutil.refresh_pillar  ##
刷新
      salt wf2/3 pillar.item webserver  ##
刷新过后就可以查看

==================================================================================  
注意:pillar的用法:-I 匹配 -S扫描整个网络
   salt -I ‘webserver:httpd‘ test.ping
   salt -S 172.25.254.0/24 test.ping
==================================================================================

11.JINJA
STATES中的使用   可以用于管理文件
(1)
   cd /srv/salt/apache
   vim install.sls
        - template: jinja
        - context:
          port: 8080
          bind: 172.25.254.2
   vim files/httpd.conf
    Listen {{ bind }}:{{ port }}
   salt wf2 state.sls apache.install
  
  
测试:
  
wf2上: netstat -antlp   ##端口格式被修改
        vim /etc/httpd/conf/httpd.conf   ##
配置文件中的格式也被修改了

(2)
不足:bind的信息是手动加进去的,如果有很多的服务器,不可能一个一个手动添加
 
改进:

   vim install.sls
    bind: {{ grains[‘fqdn_ip4‘]}}   ##
bind处修改
   salt wf2 state.sls apache.install

  
测试:
  
wf2上: netstat -antlp   ##端口格式被修改
        vim /etc/httpd/conf/httpd.conf   ##
配置文件中的格式也被修改了
       
但是却是列表的形式
 
接着改进:
         bind: {{ grains[‘ipv4‘][1] }}

  
测试:
  
wf2上: netstat -antlp   ##端口格式被修改
        vim /etc/httpd/conf/httpd.conf   ##
配置文件中的格式也被修改了

12.
   vim files/httpd.conf
    {% from ‘apache/lib.sls‘ import port with context%}
    {% from ‘apache/lib.sls‘ import bind with context%}
  
   cd /srv/salt/apache
   vim lib.sls
    {% set port = 8080 %}
    {% set bind = ‘172.25.254.2‘ %}                       

13.
   vim /srv/pillar/web/install.sls
    {% if grains[‘fqdn‘] == ‘ww2‘ %}
    webserver: httpd
    port: 80
    bind: 172.24.254.2
    {% elif grains[‘fqdn‘] == ‘ww3‘ %}
    webserver: nginx
    % endif %}

   vim files/httpd.conf
    Listen {{ pillar[‘bind‘] }}:{{ pillar[‘port‘] }}

14.
   cd /var/cache/salt/master/jobs
   salt-run jobs.list_jobs   ##
查看执行过的命令

 
wf2上:
   yum install MySQL-python -y
   cd /etc/salt
   vim minion
    mysql.host: ‘172.25.254.1‘
    mysql.user: ‘salt‘
    mysql.pass: ‘westos‘
    mysql.db: ‘salt‘
    mysql.port: 3306
   /etc/init.d/salt-minion restart

 
wf1上:
   yum install mysql-server -y
   /etc/init.d/mysqld start
   mysql < add.sql
   mysql
   mysql> grant all on salt.* to [email protected]‘%‘ identified by ‘westos‘;
   mysql> grant all on salt.* to [email protected]‘localhost‘ identified by ‘westos‘;
  
==================================================================================
下面是 add.sql 文件中的东西:

CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

USE `salt`;

--
-- Table structure for table `jids`
--

DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#CREATE INDEX jid ON jids(jid) USING BTREE;

--
-- Table structure for table `salt_returns`
--

DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
  `fun` varchar(50) NOT NULL,
  `jid` varchar(255) NOT NULL,
  `return` mediumtext NOT NULL,
  `id` varchar(255) NOT NULL,
  `success` varchar(10) NOT NULL,
  `full_ret` mediumtext NOT NULL,
  `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  KEY `id` (`id`),
  KEY `jid` (`jid`),
  KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `salt_events`
--

DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
==================================================================================

   salt ‘*‘ test.ping --return mysql   ##
执行一条return命令
   mysql
   mysql> use salt
   mysql> show tables;
   mysql> select * from salt_returns;   ##
会有刚才测试的 test.ping 的记录

 
wf1上:
   yum install MySQL-python -y
   cd /etc/salt
   vim master
    master_job_cache: mysql
    mysql.host: ‘localhost‘
    mysql.user: ‘salt‘
    mysql.pass: ‘westos‘
    mysql.db: ‘salt‘
    mysql.port: 3306
   /etc/init.d/salt-master restart
  
  
测试:
   salt wf3 cmd.run hostname   ##
执行一条return命令
   mysql
   mysql> use salt
   mysql> show tables;
   mysql> select * from salt_returns;   ##
会有刚才测试的 test.ping 的记

网友评论