• 自动化运维工具saltstack02 -- 之SaltStack的配置管理


    SaltStack的配置管理

    1、配置管理说明

    • 配置管理,顾名思义及配置与管理,
    • salt-master的配置文件编写格式之YAML语法说明:

              数据的结构通过缩进来表示,每一级用两个空格来表示缩进,如果有下一级结构需要以冒号结尾,连续的列表通过减号“-”来表示,减号后面需要有空格,不是以冒号结尾的冒号后面需要有空格。

    • 规则:

              salt需要每个缩进级别由两个空格组成,不支持tabs键,冒号{如果有下一级结构需要以冒号结尾,如果不是以冒号结尾则冒号后面需要有一个空格}

    2、修改/etc/salt/master文件

    # vim /etc/salt/master +416
    416 file_roots:        #告诉salt状态文件的位置
    417   base:    #base为必须存在的,
    418     - /srv/salt/base
    419   dev:
    420     - /srv/salt/dev
    421   test:
    422     - /srv/salt/test
    423   prod:
    424     - /srv/salt/prod

    说明:配置文件这里也是YAML格式(注意缩进),缩进以两个空格的方式,如果没有空格或者多了空格都会报错, - 后面也是有一个空格的,多了或者没有都会报错

    2.1、创建对应的目录并重启master

    # mkdir -p /srv/salt/{base,dev,test,prod}    #创建目录
    # systemctl restart salt-master          #重启master

    2.2、重启后测试master与minion的连通性

    # salt 'linux-node1*' test.ping 
    linux-node1.example.com: 
    True #成功

    3、StatStack配置管理之写一个安装httpd的状态

    # cd /srv/salt/base
    # vim apache.sls
    apache-install:    #安装状态的ID声明
      pkg.installed:    #pkg为状态模块,installed是pkg模块下的安装方法
        - name: httpd    #installed方法的参数,name是一个特殊的参数,安装的服务为httpd
    注:以上整个状态的意思为:{应该有一个httpd服务,如果有则啥也不干,如果没有则下载一个}
    
    apache-service:    #服务状态的ID
      service.running:   #service是状态模块,running是service模块下的启动方法
        - name: httpd    #方法的目标参数(对哪个目标进行操作)
        - enable: True   #目标参数的动作(True为启动)

    3.1、执行这个模块

    # salt "linux-node1*" state.sls apache

    3.2、执行结果为:

    3.3、此时去salt-minion服务器上去查看下httpd这个服务即可

    至此就验证我们的httpd状态安装启动是没问题的!!!

    4、配置管理之多级目录引用与安装tomcat状态

             如果需要调用多级目录可以通过.来引用,例:父目录.子目录

    4.1、创建web目录

    # cd /srv/salt/base/
    # mkdir web
    # cd web/

    4.2、到web目录下创建安装tomcat的状态

    # cat tomcat.sls 
    jdk-install:
      pkg.installed:         #安装jdk
        - name: java-1.8.0-openjdk
    
    tomcat-install:
      file.managed:       #file模块下的managed的方法(分发文件方法),把master端的文件放到minion端
        - name: /usr/local/src/apache-tomcat-8.0.46.tar.gz     #放到minion端的位置
        - source: salt://web/files/apache-tomcat-8.0.46.tar.gz     #在master端的文件
        - user: root    #到minion端的文件的用户组和权限配置
        - group: root
        - mode: 755
      cmd.run:         #在状态里写shell命令,在minion端执行
        - name: cd /usr/local/src && tar zxf apache-tomcat-8.0.46.tar.gz && mv apache-tomcat-8.0.46 /usr/local/ && ln -s /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat
        - unless: test -L /usr/local/tomcat && test -d /usr/local/apache-tomcat-8.0.46

    4.3、执行这个多级目录的安装tomcat状态

    # salt "*" state.sls web.tomcat

    说明:salt "*",这个*表示所有,即所有的minion端,也可以匹配,如linux-node1*

     5、SaltStack配置管理之高级状态:top.sls

            说明:顶级的入口文件,建议放在base环境下(放在其他环境下也可以)多个也可以,为了便于管理建议使用一个,默认名为top.sls(叫别的也可以)。

     5.1、写一个高级状态

    # cat top.sls 
    base:    #环境名称,表示在base环境对应的目录下
      'linux-node2.example.com':        #minion端的ID
        - web.tomcat    #在这个minion上执行的状态
      'linux-node1.example.com':        #minion端的ID
        - web.lamp    #在这个minion上执行的状态

    说明:这个高级状态的base:表示当前的高级状态所在的环境

             ‘linux-node2.example.com’: 为minion的通讯ID

             -web.tomcat          表示执行web目录下的tomcat状态

    5.2、执行这个高级状态

    # salt "*" state.highstate

     6、saltstack配置管理之模拟执行

            在执行的命令后面加上test=True,即这条salt命令模拟执行,不会真的执行,但是执行后会有变化的内容会以黄色字体表示出来;

    # salt "*" state.sls apache test=True

    7、saltstack配置管理之使master端目录下的文件生效到minion端下

    apache-config:
      file.recurse:
    - name: /etc/httpd/conf.d
    - source: salt://web/files/apache-conf.d

    8、saltstack配置管理之往指定文件里追加内容

    [root@linux-node1 web]# cat append.sls 
    /etc/profile:    #目标文件
      file.append:   #动作,追加内容
        - text:      #类型text文件
          - "#aaa"   #追加的内容

    8.1、执行结果

    # salt '*' state.sls web.append
    linux-node1.example.com:
    ----------
              ID: /etc/profile
        Function: file.append
          Result: True
         Comment: Appended 1 lines
         Started: 01:12:56.689939
        Duration: 9.359 ms
         Changes:   
                  ----------
                  diff:
                      --- 
                      +++ 
                      @@ -74,3 +74,4 @@
                       
                       unset i
                       unset -f pathmunge
                      +#aaa       #添加了这么多东西
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0

    9、saltstatck配置管理之状态之间的关系处理(依赖和被依赖的关系处理)

    •  实现前置的状态执行不成功,依赖前面状态的状态不往下执行,
    • 实现监控一个状态,被监控状态内的功能发生了改变则监控的状态实现该表
    # cat lamp.sls 
    lamp-install:
      pkg.installed:
        - pkgs:
          - httpd
          - php
          - php-pdo
          - php-mysql
    
    apache-config:
      file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://web/files/httpd.conf
        - user: root
        - group: root
        - mode: 644
        - template: jinja
        - defaults:
          PORT: 80
          IPADDR: {{ grains['fqdn_ip4'][0] }}
        - require:        #依赖于某个状态{即lamp-install:状态执行不成功,不执行当前状态}
          - pkg: lamp-install    #pkg指的是pkg模块,lamp-install是状态ID。
    
    apache-conf:
      file.recurse:
        - name: /etc/httpd/conf.d
        - source: salt://web/files/apache-conf.d
        - watch_in:     #被lamp-service状态关注{即本状态内发生改变,lamp-service状态会被触发}
           - service: lamp-service   #service模块,lamp-service是ID号
    
    php-config:
      file.managed:
        - name: /etc/php.ini
        - source: salt://web/files/php.ini
        - user: root
        - group: root
    - mode: 644
        - watch_in:    #被lamp-service状态关注{即本状态内发生改变,lamp-service状态会被触发}
          - service: lamp-service     #service模块,lamp-service是ID号
    
    lamp-service:
      service.running:
        - name: httpd
        - enable: True
        - reload: True    #重载
        - watch:      #关注apache-config状态,如果apache-config状态发生改变则触发本状态
          - file: apache-config     #file表示模块,apache-config为ID号

    说明:

             require     #我依赖某个状态,即依赖的状态触发成功后,该状态便执行

             require_in  #我被某个状态依赖,即该状态执行后,依赖于该状态的状态自动触发

             watch      #我关注某个状态,即该状态关注某个状态,被关注的状态执行后自动触发该状态

             watch_in    #我被某个状态关注,即该状态被某个状态关注,改状态执行后,关注该状态的状态自动执行

    10、saltstack配置管理之状态之间的判断,如果存在则不执行

    # cat tomcat.sls 
    jdk-install:      #安装jdk
      pkg.installed:
        - name: java-1.8.0-openjdk
    
    tomcat-install:    #安装tomcat
      file.managed:
        - name: /usr/local/src/apache-tomcat-8.0.46.tar.gz      #minion端的文件路径
        - source: salt://web/files/apache-tomcat-8.0.46.tar.gz    #master端的文件路径
        - user: root
        - group: root
        - mode: 755    #权限
      cmd.run:    #命令模块
        - name: cd /usr/local/src && tar zxf apache-tomcat-8.0.46.tar.gz && mv apache-tomcat-8.0.46 /usr/local/ && ln -s /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat    #tomcat解压,做软连接的过程
        - unless: test -L /usr/local/tomcat && test -d /usr/local/apache-tomcat-8.0.46    #判断,如果存在解压目录和软连接则不再执行

    说明:

            cmd.run命令模块支持判断,用unless来实现判断

            unless     #给unless一个条件,这个条件为真则不执行,假则执行

    11、saltstack配置管理之远程执行时匹配主机名

    11.1、通配符匹配

    salt '*' test.ping
    salt 'linux-node1*' test.ping
    salt '*example*' test.ping
    salt 'web?' test.ping
    salt 'web[1-5]' test.ping
    salt 'web[1,4]' test.ping

    11.2、正则匹配

    salt -E 'linux-node(1|2).example.com' test.ping

    11.3、高级状态(top.sls)里的正则匹配

    base:
      'web1-(prod|devel)':
    -    match: pcre
    -    webserver

    11.4、列表匹配

    salt -L 'web1,web2,web3' test.ping

    11.5、grains匹配

    salt -G 'os:CentOS' test.ping
    salt -G 'cpuarch:x86_64' grains.item num_cpus

    11.6、IP地址匹配

    salt -S 192.168.56.0/24 test.ping

    11.7、批量处理(一次性执行多少台)

    salt '*' -b 10 test.ping        #执行一次性执行10台

    11.8、批量处理(按百分比执行)

    salt -G 'os:RedHat' --batch-size 25% apache.signal uptime

     12、saltstack配置管理之include用法

            我们在安装tomcat时都必须线安装jdk,此时我们可以先将jdk写一个单独的状态,然后再安装tomcat的状态里include,具体看下面的配置

    1、先写一个jdk的安装状态
    # cat /srv/salt/base/web/jdk.sls 
    jdk-install:
      pkg.installed:
        - name: java-1.8.0-openjdk
    
    
    2、然后写tomcat的安装状态
    # cat /srv/salt/base/web/tomcat1.sls 
    include:         #将前面写的jdk状态include进来
      - web.jdk
    
    tomcat-install:
      file.managed:
        - name: /usr/local/src/apache-tomcat-8.0.46.tar.gz
        - source: salt://web/files/apache-tomcat-8.0.46.tar.gz
        - user: root
        - group: root
        - mode: 755
      cmd.run:
        - name: cd /usr/local/src && tar zxf apache-tomcat-8.0.46.tar.gz && mv apache-tomcat-8.0.46 /usr/local/ && ln -s /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat
        - unless: test -L /usr/local/tomcat && test -d /usr/local/apache-tomcat-8.0.46

    13、saltstack配置管理之执行非默认环境下的状态(prod下的状态)

            如果要执行非默认环境下的状态时需要在执行状态命令的结尾加上:saltenv=要执行的环境名

    salt 'linux-node2*' state.sls redis-cluster.redis-master saltenv=prod

    配置管理相关模块说明

    1、pkg模块

    pkg是虚拟的,不用管是什么操作系统,如果centos系统pkg模块会使用yum安装软件包,如果是其他的系统它也会使用系统支持安装工具,所以这个不需要担心。

    • pkg模块用得到的参数
    • pkg.installed     #确保软件包已安装,如果没有安装就安装。
    • pkg.latest       #确保软件是最新版本,如果不是,进行升级。
    • pkg.remove     #确保软件包已卸载,如果之前已安装,进行卸载。
    • pkg.purge       #除了remove外,也会删除其配件
    • pkgs.named     #列表,(都想下载那些软件包)

    2、service模块

    • service.running    #确保服务处于运行状态,如果没有运行就启动。
    • service.enabled     #确保服务开机自动启动
    • service.disabled     #确保服务开机不自启动
    • service.dead        #确保服务当前没有运行,如果运行就停止

    3、file模块

    • file.managed    #保证minion端的文件存在并且为对应master端的状态
    • file.recurse     #保证minion端的目录及目录下的文件存在并且为对应master端的状态
    • file.append     #往指定文件里追加文本
    • file.absent      保证文件不存在,如果存在就删除
  • 相关阅读:
    神经网络量化入门--激活函数
    自我介绍+软工五问
    Myapp
    自我介绍+软工5问
    需求改进&系统设计
    团队展示&选题
    结对编程(java实现)
    个人项目-wc
    自我介绍+软工5问
    团队项目介绍
  • 原文地址:https://www.cnblogs.com/hei-ma/p/9645504.html
Copyright © 2020-2023  润新知