zoukankan      html  css  js  c++  java
  • 【04】Saltstack:配置管理

    写在前面的话

    当我们需要进行一系列可重复且复杂的操作的时候,如果还继续用传统的 cmd.run 来执行显然难以满足我们的需求。这时候就会在想一个问题,我们能不能把这些操作编辑成一个类似脚本的操作,我们只需要运行这个脚本,达到在指定目标机器上执行的意义。而且通过 saltsatck 帮我们自动兼容多种 linux 系统。这里我们就来谈一下解决思路之一的 saltstack sls 配置管理。

    YUM 安装示例

    我们可以查看一下 apache 安装配置格式:

    apache-install:
      pkg.installed:
        - name:
          - httpd
          - httpd-devel
          
    apache-service:
      service.running:
        - name: httpd
        - enable: True

    apache-install:相当于我们给接下来的配置取了一个名字(ID),这个名字最好是唯一且具有意义。

    pkg.installed:使用 saltstack 的安装模块。每个模块在同一 ID 上只能使用一次。

    name:指定我们需要安装的包的名字。

    下面的 service 则是指定服务安装完成后的启动状态声明。

    注意,当我们没有定义 name 的时候,系统会自动将 ID 作为 name,所以如果你想偷懒不写 name,那么你 ID 则必须写成服务的名称。

    对于 pkg 模块,常用的方法有以下几个:

    pkg.installed:安装

    pkg.latest:确保安装的是最新版本

    pkg.remove:卸载

    pkg.purge:卸载并删除配置文件

    具体可以参考文档:

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

    再看下完整的 LAMP 配置示例:

    lamp-install:
      pkg.installed:
        - httpd
        - httpd-devel
        - mariadb
        - mariadb-server
        - php
        - php-mysql
        - php-cli
        - php-mbstring
        
    apache-config:
      file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://lamp/conf/httpd.conf
        - user: root
        - group: root
        - mode: 644
    
    mysql-config:
      file.managed:
        - name: /etc/my.cnf
        - source: salt://lamp/conf/my.cnf
        - user: root
        - group: root
        - mode: 644
        
    php-config:
      file.managed:
        - name: /etc/php.ini
        - source: salt://lamp/conf/php.ini
        - user: root
        - group: root
        - mode: 644
    
    apache-service:
      service.running:
        - name: httpd
        - enable: True
        - reload: True
        - require:
          - pkg: lamp-install
          - file: apache-config
        - watch:
          - file: apache-config
        
    mysql-service:
      service.running:
        - name: mariadb
        - enable: True

    file.managed:可以对配置文件进行替换管理。

    source:正确的配置文件路径,该路径相对于 master 配置文件中的 file_root 路径。

    require:定义该操作依赖于哪个操作。

    reload:定义重载规则,结合 watch 使用。

    watch:监控,如果监控项发生改变则执行 reload 定义。

    如果觉得这样写一个文件内容太多,我们可以单独的抽离某些配置出来,做成单独的 sls 文件,然后在主文件中使用类似方法:

    include:
      - lamp.service
      - lamp.config

    其中 lamp 是因为我们在 file_root 定义的路径中建立了 lamp 目录来存放这些配置,后面 service,config 其实就是文件名。类似 Python 中模块。

    单独执行某个 sls 配置的方法:

    salt 'saltstack-node-03' state.sls lamp.lamp

    state.sls:执行单个文件

    lamp.lamp:是 lamp 目录下 lamp.sls 文件

    在这些配置文件中都可以使用 jinja 模板语言来编写逻辑处理,非常简单,详细的 jinja 基础用法可以看文档:

    http://docs.jinkan.org/docs/jinja2/

    简单的使用方法:

    apache-config:
      file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://lamp/conf/httpd.conf
        - user: root
        - group: root
        - mode: 644
        - template: jinja
        - defaults:
          PORT: 8888

    使用 jinja 模板,需要加入 template 声明,然后通过 defaults 传递一个字典到配置文件。

    在模板中使用 {{ PORT }} 即可引用该变量。

    同样,在模板中我们可以使用 grains 等方法获取 IP,如:{{ grains['fqdn_ip4'][0] }}。同理 pillar 也可以。

    使用 {{ salt['network.hw_addr']('eth0') }} 来执行 salt 的方法并传参。

    小结

    这里只是简单的提了一下 sls 配置的应用,接下来我们会用大量的示例来说明,saltstack 在生产中到底如何使用。

  • 相关阅读:
    (数字类型,进制转换,字符串,列表)介绍,操作,内置方法
    谁说JavaScript容易?
    sass/scss 和 less的区别
    为什么commonjs不适合于浏览器端
    nodejs与v8引擎
    单例模式和angular的services的使用方法
    深入浅出 妙用Javascript中apply、call、bind
    单页Web应用优缺点
    JavaScript面向对象
    使用iframe的优缺点,为什么少用iframe以及iframe和frame的区别。
  • 原文地址:https://www.cnblogs.com/Dy1an/p/11126768.html
Copyright © 2011-2022 走看看