zoukankan      html  css  js  c++  java
  • 01:saltstack 基本使用

     目录:zabbix其他篇

    01:saltstack 基本使用

    02:saltstack-api使用详解

    目录:

    1.1 准备实验环境: 安装系统     返回顶部

      1)硬件配置如下

           

      2) 先把光标放到”install CentOS 7”,按 Tab键编辑内核参数,添加 (net.ifnames=0 biosdevname=0)

        作用:使网卡名称为 eth0 这样的格式

                

      3) 建议安装语言改成 简体中文,其他保持默认即可

           

      4)设置完root密码等待安装完成重启即可完成系统安装

      5)配置 VMware NAT 模式默认地址池

          编辑----》虚拟网络编辑器

          

    1.2 克隆一台虚拟机完成使用环境     返回顶部

      1)配置网卡

          vi /etc/sysconfig/network-scripts/ifcfg-eth0

            

          systemctl restart network

          systemctl disable firewalld

          systemctl disable NetworkManager

      2)设置主机名

          vi /etc/hostname

            linux-node1.example.com

      3)设置主机名解析

          vi /etc/hosts

            192.168.56.11 linux-node1 linux-node1.example.com

            192.168.56.12 linux-node2 linux-node2.example.com

      4)设置DNS

          vi /etc/resolv.conf

            nameserver 192.168.56.2

      5)安装最新epel yum源

        注:此地址中有各种源(https://opsx.alibaba.com/mirror)

          rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

      6)yum安装 一些基础包

           yum -y install net-tools vim lrzsz tree screen lsof tcpdump nc mtr nmap

       7)关闭selinux

          vim /etc/selinux/config 

             SELINUX=disabled

       8)重启系统

          yum update -y && reboot          # 升级所有包同时也升级软件和系统内核, 并重启

       9)确认是否一些服务是否已按计划关闭

          getenforce          # selinux是否关闭

          firewall-cmd --state         # 防火墙是否关闭

    1.2 克隆一台虚拟机完成使用环境   

       注:克隆虚拟机必须要先关闭(shutdown)

       1)右键 “管理” ----》“克隆” ----》

       2)选择 从哪个状态创建克隆

           

      3)克隆类型(创建完整克隆

           

      4)新建虚拟机名称

           

      5)点击 “完成” 即可完成虚拟机克隆

      6)对克隆的虚拟机 node2 进行一些简单修改

          vim /etc/hostname       # 1、修改主机名

              linux-node2.example.com

          vi /etc/sysconfig/network-scripts/ifcfg-eth0 

              IPADDR=192.168.56.12

          reboot

    1.3 saltstack介绍     返回顶部

      1、saltstack说明

          1)salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ
          2)用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎
          3)也有一个强大的配置管理系统,通常叫做Salt State System。

          4)主要作用: 远程执行、配置管理、事件驱动

              a.  远程执行: 及支持 使用agent 支持 使用ssh远程执行

              b. 配置管理: 如果用salt描述nginx,没有就会帮你安装,如果nginx配置不对就会帮你改对(保证机器状态和你描述一致)

          5)特点:即可支持 agent 方式,也支持 ssh方式

      2、基本原理

           1)SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信

           2)minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信

           3)master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中

      3、saltstack具体步骤如下

          1)Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc

          2)salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。

          3)master接收到命令后,将要执行的命令发送给客户端minion。

          4)minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理

          5)minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master

          6)master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中

          7)salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。

      4、saltstack认证原理

          1)salt-master和salt-minion第一次启动时会在 /etc/salt/pki/master目录下生成公钥和私钥用于身份验证

              [root@linux-node1 master]# cd /etc/salt/pki/master

              [root@linux-node1 master]# ll -lh
              -r-------- 1 root root 1.7K Jan 7 05:36 master.pem
              -rw-r--r-- 1 root root 450 Jan 7 05:36 master.pub

          2)所有未认证minion的私钥都会放到master的  /etc/salt/pki/master/minions_pre/ 文件夹下

          3)当minion通过认证后就会放到 /etc/salt/pki/master/minions 文件夹下

          4)master通过在认证的同时会把自己的公钥发送给minion, minion会放到 /etc/salt/pki/minion/minion_master.pub 

          5)这样就实现了双向密钥交换

    1.4 saltstack安装     返回顶部

      注:saltstack官方提供了各种版本系统安装方法(地址:http://repo.saltstack.com/#rhel)

        1、在linux-node1 中安装saltstack master 和 minion

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

            yum -y install salt-master salt-minion

              /etc/salt/master(master配置文件)

              /etc/salt/minion(minion配置文件)

        2、在linux-node2 中安装saltstack minion

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

            yum -y install salt-minion

              /etc/salt/minion(minion配置文件)

        3、在linux-node1中配置 salt-minion

             vim /etc/salt/minion

              #master: salt   修改为(master: 192.168.56.11) ----》配置master IP

              #id:           修改为(id: linux-node1.example.com)   ---》告诉master自己是谁,默认会读取当前主机名

            注:saltstack是以主机名区分不同 agent 需保证主机名唯一

        4、在linux-node2中配置 salt-minion     

             vim /etc/salt/minion

              #master: salt   修改为(master: 192.168.56.11) ----》配置master IP

              #id:           修改为(id: linux-node2.example.com)   ---》告诉master自己是谁,默认会读取当前主机名

        5、启动linux-node1中salt-maser 和 salt-minion

            systemctl start salt-master       # 启动salt-master

            systemctl enable salt-master       # 设置salt-master开机自启动

            systemctl start salt-minion        # 启动

            systemctl enable salt-minion     # 开机自启动

        6、启动linux-node2中salt-minion

            systemctl start salt-minion        # 启动

            systemctl enable salt-minion      # 开机自启动

        7、认证

            salt-key             # 在master中查看所有key的状态

            salt-key -a linux-node1.example.com      # 认证 linux-node1.example.com的key

            salt-key -A          # 一次性认证所有key

        8、远程执行测试

             salt  *  test.ping         # 测试saltstack minion与master的连通性

             salt * cmd.run 'df -h'     # 在所有minion中批量执行 df -h 命令

    1.5 saltstack常用模块     返回顶部

      1、cmd.run (远程执行)

          功能:  实现远程命令执行

          salt '*'   cmd.run 'free -m'  

      2、cp模块

          功能: 实现远程文件、目录复制,下载Url文件等操作

    # 1、master配置同步根目录(YAML语法,1. 每一级使用两个空格 2. 短横线表示列表)
    vim /etc/salt/master
    
    file_roots:
      base:
        - /srv/salt
      dev:
        - /srv/salt/dev
    
    systemctl restart salt-master  # 需要重启master
        
    # 2、创建同步目录文件夹,和测试文件 /srv/salt/test.sh
    mkdir -p /srv/salt/dev
    vim /srv/salt/test.sh   #创建测试文件
    
    # 3、将 /srv/salt/ 下的test.sh文件同步到所有minion
    salt '*' cp.get_file salt://test.sh /tmp/test.sh
    
    
    # 4、创建目录 makedirs(当分发的位置在目标主机上不存在时,自动创建该目录)
    salt '*' cp.get_file salt://test.sh /aaa/test.sh makedirs=True
    
    # 5、将 /srv/salt 中的testdir 目录复制到所有minion
    mkdir /srv/salt/testdir/
    salt '*' cp.get_dir salt://testdir /aaa/

    # 6、下载百度首页内容保存到所有minion中
    salt '*' cp.get_url http://www.baidu.com /tmp/index.html

      3、状态管理(神笔马良)

        1)修改 /etc/salt/master 文件

    # 1、master配置同步根目录(YAML语法,1. 每一级使用两个空格 2. 短横线表示列表)
    vim /etc/salt/master
    
    file_roots:
      base:
        - /srv/salt
      dev:
        - /srv/salt/dev
    
    systemctl restart salt-master  # 需要重启master

        2)在 /srv/salt/ 下配置状态管理

            [root@linux-node1 /]#  vim /srv/salt/web/apache.sls

    # 1.描述了要装一个httpd服务
    apache-install:  # 这个是一个名称,可以随便写
      pkg.installed:  # pkg是状态模块,installed是状态模块中的方法
        - name: httpd  # 描述了我在里要装一个httpd包
    
    # 2.描述了httpd服务是启动状态,并且是开机自启动状态
    apache-service:  # 这个是一个名称,可以随便写
      service.running:  # 描述了httpd服务是运行的状态
        - name: httpd
        - enable: True  # 描述httpd服务开机自动启动

        3)在 salt-master中执行命令让 linux-node2按照描述完成按照

            [root@linux-node1 web]# salt   linux-node2.example.com  state.sls  web.apache

            1)通过远程执行,通知node2进行配置管理
            2)state.sls        # 远程执行的一个方法
            3)web.apache      # 执行web目录下的apache文件

      4、grains.item模块

           功能:获取机器基本信息(cpu、内存)

    # 1、查看系统版本
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item os
    linux-node1.example.com:
        ----------
        os:
            CentOS
    
    # 2、查看cpu型号
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item cpu_model
    linux-node1.example.com:
        ----------
        cpu_model:
            Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
            
    # 3、获取ipv4地址
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item fqdn_ip4
    linux-node1.example.com:
        ----------
        fqdn_ip4:
            - 192.168.56.11
    
    # 4、查询内核版本
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item kernelrelease
    linux-node1.example.com:
        ----------
        kernelrelease:
            3.10.0-957.1.3.el7.x86_64
            
    # 5、查看主机名
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item nodename
    linux-node1.example.com:
        ----------
        nodename:
            linux-node1.example.com
            
    # 6、查看系统版本号 centos6、centos7等
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item osmajorrelease
    linux-node1.example.com:
        ----------
        osmajorrelease:
            7
    # 7、查看salt版本    
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item saltversion
    linux-node1.example.com:
        ----------
        saltversion:
            2018.3.3
    
    # 8、查看cpu数据量
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item num_cpus
    linux-node1.example.com:
        ----------
        num_cpus:
            1
    
    # 9、查看内存大小
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item mem_total
    linux-node1.example.com:
        ----------
        mem_total:
            1819
    
    # 10、查看ipv4地址
    [root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item ipv4
    linux-node1.example.com:
        ----------
        ipv4:
            - 127.0.0.1
            - 192.168.56.11
    grains.item获取主机基本信息

      5、Service模块

          salt '*' service.reload nginx 

    1.6 salt ssh详解     返回顶部

      1、安装(master和minion中都需要安装)

           yum -y install salt-ssh

      2、配置花名册,配置要管理的机器

           vim /etc/salt/roster

    # Sample salt-ssh config file
    #web1:
    #  host: 192.168.42.1 # The IP addr or DNS hostname
    #  user: fred         # Remote executions will be executed as user fred
    #  passwd: foobarbaz  # The password to use for login, if omitted, keys are used
    #  sudo: True         # Whether to sudo to root, not enabled by default
    #web2:
    #  host: 192.168.42.2
    
    linux-node1.example.com:
      host: 192.168.56.11
      user: root
      passwd: chnsys@2016
      port: 22
    
    linux-node2.example.com:
      host: 192.168.56.12
      user: root
      passwd: chnsys@2016
      port: 22
    /etc/salt/roster

      3、常用命令 

          salt-ssh '*' test.ping -i                    # 使用salt自身模块

          salt-ssh '*' cmd.run 'df -lh'

          salt-ssh '*' -r 'ifconfig'                    # 执行原生shell命令

    -r, –raw, –raw-shell # 直接使用shell命令
    –priv #指定SSH私有密钥文件
    –roster #定义使用哪个roster系统,如果定义了一个后端数据库,扫描方式,或者用户自定义的的roster系统,默认的就是/etc/salt/roster文件
    –roster-file #指定roster文件
    –refresh, –refresh-cache #刷新cache,如果target的grains改变会自动刷新
    –max-procs #指定进程数,默认为25
    -i, –ignore-host-keys #当ssh连接时,忽略keys
    –passwd #指定默认密码
    –key-deploy #配置keys 设置这个参数对于所有minions用来部署ssh-key认证,
     这个参和–passwd结合起来使用会使初始化部署很快很方便。当调用master模块时,并加上参数 –key-deploy 即可在minions生成keys,下次开始就不使用密码
    salt-ssh命令用法

    1.7 Salt Grains     返回顶部

      1、grains作用

          grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。

          其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。

          grains 的作用是在每个minion中配置 key value进行标识,使批量执行时可以区分

           salt 'linux-node1*' grains.ls          # grains支持通配符

      2、salt grains原生命令

          1. salt '*' grains.items                                          # 查看minion的全部静态变量

          2. salt '*' grains.ls                                                # 显示grains的变量名称

          3. salt '*' grains.item os                                       # 显示某一个变量

          4. salt '*' grains.get  ip4_interfaces:eth0              # 直接获取内容

          5. salt -G 'os:CentOs' test.ping                             # 所有os的centos的 执行test.ping (-G就是grains)

      3、自定义grains:需要重启 minion

    # 1、编辑 minion 文件,配置角色名
    vim /etc/salt/minion
    '''
    grains:
      roles: apache
    '''
      
    # 2、重启minion
    systemctl restart salt-minion
    
    # 3、查看所有机器都有哪些roles
    [root@linux-node1 ~]# salt '*' grains.item roles
    linux-node1.example.com:
        ----------
        roles:
            apache
    linux-node2.example.com:
        ----------
        roles:
    
    # 4、让所有角色为apache的机器执行命令'w',-G表示以grains进行目标选择
    salt -G 'roles:apache' cmd.run 'w'  
    自定义grains:需要重启 minion

      4、自定义grains:无需重启minion

    # 1、在minion中新建文件/etc/salt/grains,添加一个 key value
    vim /etc/salt/grains
    '''
    test-grains: test-grains-value
    '''
    
    # 2、让minion到所有grains中读取配置
    salt '*' saltutil.sync_grains
    
    # 3、查看所有 key为test-grains的minion
    [root@linux-node1 ~]# salt '*' grains.item test-grains
    linux-node1.example.com:
        ----------
        test-grains:
            test-grains-value
    linux-node2.example.com:
        ----------
        test-grains:
        
    # 4、让所有key=test-grains value=test-grains-value 的机器执行命令'w',-G表示以grains进行目标选择
    salt -G 'test-grains:test-grains-value' cmd.run 'w' 
    自定义grains:无需重启minion

    1.8 Salt Pillar     返回顶部

      1、Salt Pillar

          1. 存储位置:存储在master端,存放需要提供给minion的信息,minion每次需要动态从master获取

          2. 应用场景:敏感信息,每个minion只能访问master分配给自己的 pillar

      2、在master配置文件中指定pillar位置

    vim /etc/salt/master
    '''
    pillar_roots:
      base:
        - /srv/pillar
    '''

    systemctl restart salt-master
    mkdir /srv/pillar
    cd /srv/pillar

     

      3、编辑一个pillar文件

          需求:在centos(httpd)和Ubuntu(apache2)都需要apache服务,但是两种操作系统安装的包名不同

    vim /srv/pillar/apache.sls   # 编辑一个pillar文件
    
    {% if grains['os'] == 'CentOS' %}
    apache: httpd
    {% elif grains['os'] == 'Debian' %}
    apache: apache2
    {% endif %}

      4、指定这个pillar文件给那个minion使用

    vim top.sls  # 指定这个pillar文件给那个minion使用
    
    base:
      'linux-node2.example.com':
      - apache

      5、确认 pillar中配置的items是否生效

    [root@linux-node1 pillar]# salt '*' pillar.items       
    linux-node1.example.com:
        ----------
    linux-node2.example.com:
        ----------
        apache:
            httpd

      6、 Salt Grains 与  Salt Pillar 比较

          

  • 相关阅读:
    ICQ
    Create小程序
    LRU最近最少使用算法
    感知器
    聚类-K均值
    阈值分类法
    最邻近分类
    设计模式
    高级排序算法
    Socket编程
  • 原文地址:https://www.cnblogs.com/xiaonq/p/10233439.html
Copyright © 2011-2022 走看看