前边介绍了很多基础以及一些远程命令执行,基本对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文件路径
[root@Master salt]# cat top.sls base: '*': - init.dns
(2)dns.sls内容编写如下,我们调用的是file这个组件,这个组件以后经常用
[root@Master 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以及一些实际应用等。
如下是从其他资料截图过来的, 可以整体了解下,总结的非常到位:
转载请注明:21运维 » Saltstack配置管理学习笔记:配置管理概述