Saltstack配置管理学习笔记:配置管理概述 – 21运维
通知: .-...

Saltstack配置管理学习笔记:配置管理概述

saltstack 21运维 2452浏览 0评论

 

前边介绍了很多基础以及一些远程命令执行,基本对saltstack有了一个认识,但saltstack的功能远不止这些,只是其强大功能的一部分。该笔记以及后边的内容将针对saltstack的重要功能:配置管理 做一个笔记说明。这也是实际工作中经常用到的。
基础以及学习知识点列表如下,基础很重要,务必打牢。其中配置管理的核心是state,state的核心是sls。下边针对配置管理做一个概述先,后期慢慢的进行知识整理:

1,file_roots : 设置状态文件的位置。 需要/etc/salt/master 先启用这个目录,并设置自己目录。
2,env环境 。base环境和开发、测试、预生产、生产环境,我们可以配置文件给不同的环境指定不同的目录。然后到/srv/salt 下边针对性创建这些目录。

file_roots:
base:              默认环境。
- /srv/salt    
dev:
- /srv/salt/dev    开发环境
test:
- /srv/salt/test   测试环境(功能测试、性能测试)
prod:
- /srv/salt/prod   生产环境

3,sls文件编写,sls是配置管理核心state模块的核心,这个需要大量的练习。sls知识点有三个地方:
(1) YAML 什么是YAML,语法是什么,需要注意什么。后期需要了解学习的。
(2)Jinja
(3)编写技巧 。三个:缩进、冒号、短横线

比如简单举例一个,我们需要设置一个批量更改dns的sls:
(1),设置入口文件top.sls,指定环境和target以及sls文件路径

[[email protected] salt]# cat top.sls 
base:
  '*':
    - init.dns

(2)dns.sls内容编写如下,我们调用的是file这个组件,这个组件以后经常用

[[email protected] init]# cat dns.sls 
/etc/resolv.conf:
  file.managed:
    - source: salt://init/resolv.conf
    - user: root
    - group: root
    - mode: 644

然后我们执行一次 salt ‘*’  state.highstate  就可以批量修改dns文件resolv.conf了。

4,state模块。这个是saltstack配置管理的核心内容。我们需要熟练掌握如下几个组件以及常用的方法,以后也会经常与他们打交道:

(1)file,管理文件状态
常用方法:
file.managed:保证文件存在并且为对应的状态,不一样就根据source指定文件进行修改。比如上边的resolv.conf。
file.recurse: 保证目录存在并且为对应状态,否则change。
file.absent:确保文件不存在,如果存在就删除。

具体file使用方法可以参考https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#module-salt.states.file
比如file.managed:

/etc/http/conf/http.conf:
  file.managed:
    - source: salt://apache/http.conf
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - defaults:
        custom_var: "default value"
        other_var: 123
{% if grains['os'] == 'Ubuntu' %}
    - context:
        custom_var: "override"
{% endif %}
/etc/foo.conf:
  file.managed:
    - source:
      - salt://foo.conf.{{ grains['fqdn'] }}
      - salt://foo.conf.fallback
    - user: foo
    - group: users
    - mode: 644
    - backup: minion

 

(2)pkg  管理软件包状态
常用方法:
pkg.installed: 确保软件包已经安装,如果没有安装就安装。
pkg.remove: 确保软件包已卸载,如果还是安装的,就卸载。
pkg.purge: 除remove外,还会删除其配置文件。
pkg.latest:  确保软件包是最近版本,如果不是就升级。
更全知识点请参考官网https://docs.saltstack.com/en/latest/ref/states/all/salt.states.pkg.html#module-salt.states.pkg
比如举例如下:

dotdeb.repo:
  pkgrepo.managed:
    - humanname: Dotdeb
    - name: deb http://packages.dotdeb.org wheezy-php55 all
    - dist: wheezy-php55
    - file: /etc/apt/sources.list.d/dotbeb.list
    - keyid: 89DF5277
    - keyserver: keys.gnupg.net
    - refresh_db: true

php.packages:
  pkg.installed:
    - fromrepo: wheezy-php55
    - pkgs:
      - php5-fpm
      - php5-cli
      - php5-curl

(3)service 管理服务状态
常用方法:
service.running: 确保服务处理运行状态,如果没有运行就启动。
service.dead: 确保服务没有在运行,如果运行就停止。
service.enabled: 设置服务保持开机启动。False或True
service.disabled: 设置服务不开机启动。
更全知识点请参考:https://docs.saltstack.com/en/latest/ref/states/all/salt.states.service.html#module-salt.states.service
比如举例如下

redis:
  service.running:
    - enable: True
    - reload: True
    - watch:
      - pkg: redis

(4)cmd 远程执行命令。
这个之前远程执行就已经了解学习过,我们可以sys_listfunctions了解方法或sys.doc 、官网了解用法,一般常用run

5,state之间的关系,每个state之间有可能涉及到达一些依赖,我们需要sls做一些指定。就好比我们要yum一个mysql-server,需要gcc先安装。
比如
require、require_in 、依赖某个状态或被某个状态所依赖
watch、 watch_in、  关注某个状态或被某个状态所关注
unless、  onlyif

6,实际应用。完成批量化操作。
比如我们要批量部署lamp或lnmp环境、zabbix、haproxy+keepalive以及一些实际应用等。

如下是从其他资料截图过来的, 可以整体了解下,总结的非常到位:
3

转载请注明:21运维 » Saltstack配置管理学习笔记:配置管理概述

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址