【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 在生产中到底如何使用。

原文地址:https://www.cnblogs.com/Dy1an/p/11126768.html