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 比较

          

  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/xiaonq/p/10233439.html
Copyright © 2011-2022 走看看