• Saltstack自动化运维


    Saltstack三大功能

    1,远程执行

    2,配置管理(状态)

    3,云管理

    四种运行方式:

      Local            本地

      Minion/Master   C/S 

      Syndic       代理模式

      Salt SSH

    安装仓库

    yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el7.noarch.rpm

    安装master和minion

     yum -y install salt-master salt-minion

    客户端安装minion

    不修改master配置文件就可以先启动master

    systemctl start salt-master

    修改minion配置文件

    vim /etc/salt/minion

    16行填写master地址

    103号配置ID(也可以不配置默认使用主机名为ID这里我没有配置)

    启动

    systemctl start salt-minion

    会在/etc/salt文件夹下面生成一个id文件就是主机名(不要随意修改,因为启动需要读取minion_id,如果修改需要先把这个文件删除然后在启动的时候又自动生成)

    修改两个个客户端的配置文件然后启动(分别为我的web服务器和ios服务器)

    需要经过master认证以后才能使用

    minion第一次启动会生成一个pki目录

    pem是私钥 pub为公钥

    master下面也有一个pki文件夹

    pre下是客户端发送的ID但是还没有经过master的认证

    可以查看服务器端文件和客户端文件的MD5来看是不是同一个文件

    通过salt-key可以查看key

    同意的 拒绝的 没有同意的

    同意

    salt-key -A 同意所有

    同意以后

    同时在客户端生成一个公钥

    minion_master.pub

    实际上认证过程就是交换公钥的过程,实现了加密通信。

    远程执行

     salt '*' test.ping

    这里的ping不是发送ping包而是检测客户端是否通信正常

    批量执行创建文件夹的命令

    salt '*' cmd.run 'mkdir /tmp/hehe'

    配置管理

    State 要写一个文件格式 YAML 后缀

    YAML:三板斧

      1,缩进

      两个空格,不能使用Tab

      2,冒号

      表示层级关系的冒号后面没有东西,表示键值的有一个空格

      key:value

      3,短横线

      短横线后面也有一个空格

      - list1

      - list2

    设置master配置文件

    vim /etc/salt/master

    去掉这几行的#

    重启master

    systemctl restart salt-master

    创建配置文件目录

    mkdir /srv/salt

    在创建一个web配置文件目录

    mkdir web

    进入这个web目录创建一个配置文件apache.sls

    apache-install:         #定义唯一标示
      pkg.installed:        #pkg是一个状态模块,installed是执行方法
        - names:
          - httpd
          - httpd-devel
    apache-service:
      service.running:
        - name: httpd       #运行一个服务,服务名是httpd
        - enable: True      #开机自启动
    

    执行

    salt '10-8-86-172' state.sls web.apache

    在对应的客户端目录/var/cache/salt生成对应的文件,是master发送给minnon的

    如果客户端是centos就使用yum安装如果是Ubuntu就使用apt-get自动安装

    执行完毕会在相应客户端自动安装apache并且启动

    PS:后面加test = True可以先测试但是不执行

      注意编辑时候的空格,每一行的末尾也不能有空格和Tab

    上面是手动执行一个模块

    slat有一个高级状态

    打开master配置文件(需要放在base下面)

    vim /srv/salt/top.sls

    base:
      '10-8-45-27':
        - web.apache
      '10-8-86-172':
        - web.apache
    

    执行

    salt '*' state.highstate

    Saltstack与ZeroMQ

    Saltstack使用4505 4506两个端口4505用于消息的发布

    4506请求与响应

    ZeroMQ不是一个传统意义的消息队列

    默认salt-master进程显示都是salt-master

    安装显示进程的详细信息的包

    yum -y install python-setproctitle
    systemctl restart salt-master
    ps -ef|grep salt-master

    通过进程已经建立好长连接了,所以执行速度快

    SaltStack 数据系统

      Grains (谷粒)

      Pillar    (柱子)

     Grains:静态数据 当Minion启动时收集的Minion本地相关信息

         操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号

         不重启就不会变,所以叫静态数据

      1,资产管理,信息查询

      2,用于目标选择

      3,配置管理中使用

    查看其中一条服务器的grains信息

    salt '10-8-45-27' grains.ls

    salt '10-8-45-27' grains.items

    查看所有机器的操作系统

    salt '*' grains.item os

    查看ip

    salt '*' grains.item fqdn_ip4

    查找出操作系统是CentOS的执行相应的命令,这样就可以做目标选择

    salt -G 'os:CentOs' test.ping

    salt -G 'os:CentOs' cmd.run 'echo hehe'

    如果列出的grains不够用也可以自定义grains

    可以修改客户端的的vim /etc/salt/minion自定义grains

    先不重启,查看是没有的

    重启以后再查找

    重启定义为apache的apache

    salt -G 'roles:apache' cmd.run 'systemcet restart httpd'

    生产环境不建议写在minion直接写在

    vim /etc/salt/grains

    cloud: openstack

    minion会自动找

    grain在top里面的用法

    PS:这里grain没有s

    开发一个Grains 在master下

      Python。写一个Python脚本,返回一个字典就可以了

    #!/usr/bin/env python
    #_*_ coding: utf-8 _*_
    
    def my_grains():
        #初始化一个grains字典
        grains = {}
        #设置字典中的key
        grains['iaas'] = 'openstack'
        grains['edu'] = 'oldboyedu'
        #返回这个字典
        return grains
    

      同步到minion

    salt '*' saltutil.sync_grains

     在minion的/var/cache/salt

    在master下面查看

    Grains优先级:

      1,系统自带

      2,Grains文件写的

      3,minion配置文件

      4,自己写的

    PS:可以不重启salt-minion刷新更新grains命令是,salt '*' saltutil.sync_grains

    Pillar:

      Pillar是动态的。给特定的Minion指定特定的数据。只有指定的minion自己能看到自己的数据(安全,比如定义用   户密码)

      和top file类似

    显示

    salt '*' pillar.items

     

    默认没有显示

    设置成显示

    vim /etc/salt/master

    systemctl restart salt-master

    可以查看了 是一个名称为master的字典

    还是注释掉以免影响自定义的pillar

    修改master配置

    重启

    systemctl restart salt-master

    1,写pillar sls

    vim /srv/pillar/web/apache.sls

    {% if grains['os'] == 'CentOS' %}
    apache: httpd
    {% elif grains['os'] == 'Debian' %}
    apache: apache2
    {% endif %}
    

    2,top file

    vim /srv/pillar/top.sls

    base:
      '10-8-86-172':
        - web.apache
    

    刷新

    salt '*' saltutil.refresh_pillar

    查看

    salt '*' pillar.items apache

    PS:注意文件apache.sls和top.sls的位置

    pillar使用场景

    1,目标选择

    salt -I 'apache:httpd' test.ping

    salt -I 'apache:httpd' cmd.run 'w'

    Grains VS Pillar

         类型    数据采集方式    应用场景            定义位置

    Grains   静态    minion启动时收集  数据查询 目标选择 配置管理    minion

    Pillar  动态    master自定义    目标选择 配置选择 敏感数据    master

    深入学习saltstack远程执行

    salt '*' cmd.run 'w'

    命令:salt

    目标:'*'

    模块: cmd.run 自带150+模块。自己写模块

    返回: 执行后结果返回,Returnners

    目标:Targeting

      两种:一种和minion ID有关

         一种和minion ID无关

    1,Minion ID有关的方法

      minion ID

      通配符

      列表

            salt -L '10-8-86-172,10-8-45-27' cmd.run 'uptime'

      正则表达式

       salt -E '10-8*' test.ping

    所有匹配目标的方式,都可以用到top file里面来指定目标

    主机名设置方案:

      1,IP地址

      2,根据业务来进行设置

    按百分比执行

    salt '*' -b 10 test.ping

    模块:

    返回tcp链接

    salt '*' network.active_tcp

    获取主机名

    salt '*' network.get_hostname

    取得所有在运行的服务

    salt '*' service.get_all

    取得对应服务的状态

    salt '*' service.status sshd

    往所有机器上面拷贝文件

    salt-cp '*' /etc/hosts /opt/hehe

    查看top file

    salt '*' state.show_top

    单独安装一个服务

    salt '*' state.single pkg.installed name=lsof

    返回程序

    ruturns

    数据返回到muysql这个返回是minion直接返回给mysql的不是返回给master然后到mysql的

    salt.returners.mysql

    客户端安装MySQL-python  (python的MySQL库)

    salt '10-8-86-172' state.single pkg.installed name=MySQL-python

    或者使用下面命令安装

    salt '10-8-86-172' cmd.run 'yum -y install MySQL-python'

    master创建数据库

    create database `salt`  character set utf8  collate utf8_general_ci;

    创建表

    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;


    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;


    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;


    授权
    grant all on salt.* to salt@'%' identified by 'salt@pwd';


    修改两个minion的配置文件vim /etc/salt/minion
    在尾部添加

    mysql.host: '10.8.45.27'
    mysql.user: 'salt'
    mysql.pass: 'salt@pwd'
    mysql.db: 'salt'
    mysql.port: 3306

    重启minion

    systemctl restart salt-minion

    在minion看着日志执行

    先查看一下master的数据库是空的

    执行  '*' test.ping --return mysql 再来查看数据库就有数据了

    PS:返回程序是比较深入的,或者基于saltstack做二次开发时候使用

    参考文档

    https://www.unixhot.com/docs/saltstack/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql

    编写状态模块

    先看一个系统自带模块

    vim /usr/lib/python2.7/site-packages/salt/modules/service.py

    编写模块

    1,放哪里

    在/srv/salt目录下新建一个文件夹_modules

    2,命名

    vim _modules/my_disk.py

    def list():
      cmd = 'df -h'
      ret = __salt__['cmd.run'](cmd)
      return ret
    

    PS:是两个下划线

    3,刷新

    salt '*' saltutil.sync_modules

    4,执行

    salt '*' my_disk.list

     

     
  • 相关阅读:
    预备作业2
    预备作业
    虚拟机安装&Linux初探
    20155330预备作业2:做中学——实践中思考
    预备作业:你期望的师生关系是什么?
    2017-2018-1 学号20155329 《信息安全系统设计基础》第5周学习总结
    2017-2018-1 学号20155329_5332_5302《信息安全系统设计基础》实验一 开发环境的熟悉
    再装虚拟机及git
    2017-2018-1 学号20155329 《信息安全系统设计基础》第4周学习总结
    2017-2018-1 学号20155329 《信息安全系统设计基础》第4周学习总结
  • 原文地址:https://www.cnblogs.com/minseo/p/6816042.html
Copyright © 2020-2023  润新知