自动化运维Saltstack系列(三)之YAML和自定义Grains、Pillar

先来看看Saltstack的配置文件

Master
[[email protected] ~]# vim /etc/salt/master
Minion
[[email protected] ~]# vim /etc/salt/minion

两者里面的配置项大同小异,其中master是我们需要重点配置的对象

大部分配置都可以保持默认无需改动,在部署大规模Saltstack环境需要自定义一些参数的时候才需要根据实际需求修改;其中一些比较重要的配置项:

publish_port: 4505 # Saltsatck使用ZeroMQ的消息发布端口
ret_port: 4506 # Saltsatck使用ZeroMQ的消息接收端口
user: root # Saltsatck使用root权限运行
pidfile: /var/run/salt-master.pid # pid进程文件
keep_jobs: 24 # Saltstack保留工作记录时间为24小时
timeout: 5 # Master和Minion通信受网络限制,连接超时时间
max_open_files: 100000 # 根据Master下的Minion数量进行适当地调整
worker_threads: 5 # 进程数
auto_accept: False # Master自动接受来自新Minion的注册
autosign_file: /etc/salt/autosign.conf # 自动注册配置文件
master_tops: {} # Master_tops和所有以exernal开头的参数在Saltstack与外部系统进行整合的时候会用到 
state_top: top.sls # 高级状态配置文件
# file_roots: # Saltstack配置管理使用的根目录
#   base:
#     - /srv/salt/
#   dev:
#     - /srv/salt/dev/services
#     - /srv/salt/dev/states
#   prod:
#     - /srv/salt/prod/services
#     - /srv/salt/prod/states
# pillar_roots: # Pillar根目录配置
#  base:
#    - /srv/pillar/base
#  prod:
#    - /srv/pillar/prod
syndic_master: 172.16.2.186 # Saltsatck代理master
log_file: /var/log/salt/master  # 日志路径
log_level: warning # 日志级别
nodegroups: # 对Minion分组
  web: ‘[email protected],saltstack-node2.lichengbing.com‘
#  group2: ‘[email protected]:Debian and foo.domain.com‘
#  group3: ‘[email protected]:Debian and [email protected]‘
#  group4:
#    - ‘[email protected]:bar‘
#    - ‘or‘
#    - ‘[email protected]:baz‘

这里我们需要注意的是,Saltstack所有的配置文件以及我们马上要接触到的配置管理文件(SLS文件)都是使用的一种特殊文件格式--YAML编辑而成的,YAML语法对格式要求比较简单但是严格,一个多余的空格或者其他符号都是不被允许的。

YAML语法规则

1)规则一:冒号

YAML参考Python,将key和key值通过冒号的形式关联起来形成一种数据类型叫哈希表或者关联数组

my_key: my_value #表示键值关系时键叫冒号后面跟一个空格再写值

2)规则二:缩进

YAML使用一个固定的缩进风格来表示数据层级结构关系,Saltstack需要每个缩进级别由两个空格组成,比如顶层没有空格,二层2个空格,三层4个空格...以此类推。特别需要注意的是不允许使用tab键缩进。

first_floor:
  second_floor:
    third_floor:

3)规则三:短横线

YAML中短横线表示列表项,多个项使用同样的缩进级别作为同一列表的一部分

my_key: 
  - 100
  - 101
  - 103

我们要学习的YAML所有语法就这么多,是不是很简单~~虽然简单,但是在学习甚至是真实生产环境案例中,经常发生saltstack配置文件因为语法问题(多一个空格,少一个空格)导致的服务异常,所以大家要十分小心...

Grains

Grains是Saltstack组件中非常重要的组件之一,在做配置管理时经常会使用到它,我们可以简单地理解Grains为在minion端服务启动时,收集的一些关于该主机的静态数据信息,然后汇报给master,这些数据包括主机cpu、内存、磁盘、网络等信息。我们可以利用这些信息做一些相关监控,或者有时候我们需要自定义一些Grains信息来方便我们做配置管理

查看关于grains支持的功能

[[email protected] ~]# salt ‘*‘ sys.list_functions grains
saltstack-node2.lichengbing.com:
    - grains.append
    - grains.delval
    - grains.fetch
    - grains.filter_by
    - grains.get
    - grains.get_or_set_hash
    - grains.has_value
    - grains.item
    - grains.items
    - grains.ls
    - grains.remove
    - grains.set
    - grains.setval
    - grains.setvals

主机所有的grains信息

[[email protected] ~]# salt ‘*‘ grains.items # grains信息比较多
saltstack-node2.lichengbing.com:
    ----------
    SSDs:
    biosreleasedate: # 主板日期
        07/02/2015
    biosversion: # BIOS版本
        6.00
    cpu_flags:
        - fpu
        - vme
        - de
        - pse
    cpu_model: # CPU型号
        Intel(R) Core(TM)2 Duo CPU     P9700  @ 2.80GHz
    cpuarch:
        x86_64
    disks:
        - sda
        - sr0
    dns:
        ----------
        domain:
        ip4_nameservers: # DNS
            - 10.0.0.2
            - 8.8.8.8
        ip6_nameservers:
        nameservers:
            - 10.0.0.2
            - 8.8.8.8
        search:
    domain:
        lichengbing.com
    fqdn:
        saltstack-node2.lichengbing.com
    fqdn_ip4: # 域名解析地址
        - 172.16.2.186
    fqdn_ip6:
    groupname:
        root
    host:
        saltstack-node2
    hwaddr_interfaces: # MAC地址
        ----------
        eth0:
            00:0c:29:1a:87:b4
        eth1:
            00:0c:29:1a:87:be
        lo:
            00:00:00:00:00:00
    id:
        saltstack-node2.lichengbing.com # minion端ID
    os: #一些系统相关信息
        CentOS
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        CentOS Linux 7 (Core)
    osfinger:
        CentOS Linux-7
    osfullname:
        CentOS Linux
    osmajorrelease:
        7
    osrelease:
        7.2.1511
    selinux: # 一些selinux信息
        ----------
        enabled:
            False
        enforced:
            Disabled

查看各功能的详细介绍和用法

[[email protected] ~]# salt ‘*‘ sys.doc grains.item
grains.item:
    Return one or more grains
    CLI Example:
        salt ‘*‘ grains.item os
        salt ‘*‘ grains.item os osrelease oscodename
    Sanitized CLI Example:
        salt ‘*‘ grains.item host sanitize=True

我们来批量查看所有minion的IP地址试试

[[email protected] ~]# salt ‘*‘ grains.item fqdn_ip4 
saltstack-node2.lichengbing.com:
    ----------
    fqdn_ip4: # 注意,这里的fqdn_ip4是主机域名解析结果,在/etc/resolve.conf中
        - 172.16.2.186
saltstack-node1.lichengbing.com:
    ----------
    fqdn_ip4:
        - 172.16.2.185

怎么样,有了grains我们在做集群所有机器监控的或者统计的时候是不是很方便~

Grains在实际生产中的作用

1)资产管理、信息查询

[[email protected] ~]# salt ‘*‘ grains.item os # 同我们上面查询IP地址,我们可以对所有minion做资产相关信息统计
saltstack-node2.lichengbing.com:
    ----------
    os:
        CentOS
saltstack-node1.lichengbing.com:
    ----------
    os:
        CentOS

2)用于选择目标主机

[[email protected] ~]# salt -G ‘os:CentOS‘ cmd.run ‘cat /etc/redhat-release‘ # 比如我们需要在所有系统版本为centos的主机上做相关操作
saltstack-node2.lichengbing.com:
    CentOS Linux release 7.2.1511 (Core)
saltstack-node1.lichengbing.com:
    CentOS Linux release 7.2.1511 (Core)

3)自定义规则

有三种常用的自定义规则方法:minion配置文件自定义、Grains模块文件自定义、Python脚本自定义

a.minion配置文件自定义

[[email protected] ~]# vim /etc/salt/minion # 在minion端修改配置文件
grains: # 添加 grains 规则,注意格式
  roles:
    - webserver
    - memcache
  deployment: datacenter4
  cabinet: 13
  cab_u: 14-15
[[email protected] ~]# systemctl restart salt-minion # 重启minion端
[[email protected] ~]# salt ‘*‘ grains.item roles # 查看grains是否生效
saltstack-node2.lichengbing.com:
    ----------
    roles:
        - webserver
        - memcache
saltstack-node1.lichengbing.com:
    ----------
    roles:
[[email protected] ~]# salt -G ‘roles:webserver‘ cmd.run ‘cat /etc/redhat-release‘ # 我们可以利用自定义的grains信息来做主机选择了
saltstack-node2.lichengbing.com:
    CentOS Linux release 7.2.1511 (Core)

b.Grains模块文件自定义

[[email protected] salt]# vim /etc/salt/grains # 在minion端编辑grains文件
cloud: openstack
[[email protected] ~]# salt ‘*‘ saltutil.sync_grains # 在master端同步grains文件
saltstack-node1.lichengbing.com:
saltstack-node2.lichengbing.com:
[[email protected] ~]# salt ‘*‘ grains.item cloud # 查看grains是否生效
saltstack-node2.lichengbing.com:
    ----------
    cloud:
        openstack
saltstack-node1.lichengbing.com:
    ----------
    cloud:
        openstack

c.Python脚本自定义

[[email protected] ~]# cd /srv/salt/base/
[[email protected] base]# mkdir _grains
[[email protected] base]# cd _grains/
[[email protected] _grains]# vim my_grain.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def my_grains():
    #初始化一个grains字典
    grains = {}
    #设置字典中的key-vlaue
    grains[‘iaas‘] = ‘openstack‘
    #返回这个字典
return grains
[[email protected] _grains]# salt ‘*‘ saltutil.sync_grains
saltstack-node1.lichengbing.com:
    - grains.my_grain
saltstack-node2.lichengbing.com:
    - grains.my_grain
[[email protected] _grains]# salt ‘*‘ grains.item iaas
saltstack-node2.lichengbing.com:
    ----------
    iaas:
       openstack
saltstack-node1.lichengbing.com:
    ----------
    iaas:
       openstack

自定义的Grains优先级

系统自带→grains模板→minion配置文件→Python定义

Pillar

Pillar也是Saltstack组件中非常重要的组件之一,是数据管理中心,我们经常配合states在大规模的配置管理工作中使用它,Pillar在Saltstack中主要的作用是动态地存储和定义配置管理中需要的一些敏感数据,比如版本号、用户密码等,这些敏感信息定义后只有minion自己能够看到。

接下来我们演示一下根据pillar自定义安装zabbix指定zabbix_server服务器地址

1)给minion指定pillar值

[[email protected] ~]# vim /etc/salt/master #修改配置文件指定pillar路径
pillar_roots:
  base:
    - /srv/pillar/base
[[email protected] ~]# systemctl restart salt-master #重启master
[[email protected] ~]# cd /srv/pillar/base/
[[email protected] base]# vim top.sls #编写top文件
base:
  ‘saltstack-node2.lichengbing.cn‘:
- web.apache
[[email protected] base]# salt ‘*‘ saltutil.refresh_pillar #刷新pillar
saltstack-node2.lichengbing.cn:
    True
saltstack-node1.lichengbing.cn:
    True
[[email protected] base]# salt ‘*‘ pillar.items apache #查看pillar是否生效
saltstack-node2.lichengbing.cn:
    ----------
    apache:
        httpd
saltstack-node1.lichengbing.cn:
    ----------
apache:
[[email protected] base]# salt -I ‘apache:httpd‘ test.ping #用pillar指定目标主机
saltstack-node2.lichengbing.cn:
True

2)接下来我们演示一下根据pillar自定义安装zabbix指定zabbix_server服务器地址

[[email protected] base]# vim top.sls
base:
  ‘*‘:
    - zabbix.agent
[[email protected] base]# mkdir zabbix
[[email protected] base]# cd zabbix/
[[email protected] zabbix]# vim agent.sls
Zabbix_Server: 172.16.2.150
[[email protected] ~]# systemctl restart salt-master

定义好后,以后在配置管理中就可以直接使用这样的格式取得pillar值

[[email protected] zabbix]# vim /srv/salt/base/init/zabbix-agent.sls
zabbix-agent:
  pkg.installed:
    - name: zabbix-agent
  file.managed:
    - name: /etc/zabbix/zabbix_agentd.conf
    - source: salt://init/files/zabbix_agentd.conf
    - template: jinja
    - backup: minion
    - defaults:
      Zabbix_Server: {{ pillar[‘Zabbix_Server‘] }} # pillar值
      Hostname: {{ grains[‘fqdn‘] }} # grains值
    - require:
      - pkg: zabbix-agent
  service.running:
    - enable: True
    - watch:
      - pkg: zabbix-agent
      - file: zabbix-agent

Grains和Pillar的区别

类型 数据采集方式 引用场景 定义位置
Grains 静态 minion启动时收集 目标选择、配置管理、数据查询 minion
pillar 动态 master定义 目标选择、配置管理、敏感数据 master
时间: 2024-10-20 09:32:16

自动化运维Saltstack系列(三)之YAML和自定义Grains、Pillar的相关文章

自动化运维Saltstack系列(一)之基础功能篇

Saltstack简介  Saltstack是基于Python开发的一套C/S架构,具备Puppet.Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高:使用号称世界上最快的消息队列ZeroMQ使得Saltstack能够秒级在数万台服务器上进行各种操作,而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高: Saltstack不仅仅是一款配置管理工具,还是一款做云计算和数据中心架构编排利器.目前Salt-cloud项目也已经合并到Saltstack主项

自动化运维Saltstack系列(四)之States配置管理和jinja模板的使用

States配置管理 States是Saltstack中的配置语言,在日常进行配置管理时需要编写大量的States SLS文件,而编写这些SLS文件的一般步骤也就是我们平时手动配置一台服务器的步骤:首先安装源码包,然后管理一个配置文件,最后再保证这个服务的开机启动及正常运行.其中使用到的states模块功能需要我们一边学习一边实践加强理解. 接下来,我们通过一个简单的例子来理解Saltstack配置管理的基本原理--安装keepalived 1)修改master配置文件的file_roots根目

自动化运维Saltstack系列(六)之配置管理系统模块

架构图 Saltstack配置管理大型web架构网站其实并不是很难,最主要是合理管理各功能模块之间依赖关系,尽量独立各功能模块,让每一个系统功能都可以被业务引用. Saltstack环境目录 file_roots:   base:     - /srv/salt/base   prod:     - /srv/salt/prod pillar_roots:   base:     - /srv/pillar/base   prod:     - /srv/pillar/prod Saltstac

自动化运维Saltstack系列(七)之配置管理业务模块

业务模块 业务模块要尽量和系统模块区分开,系统模块要做到随时能被业务模块所调用:特别是在多种业务模式共存的环境中,我们要使每个业务模块独立一个prod环境,方便统一管理而不影响其他业务. PHP模块 [[email protected] php]# vim install.sls include:   - modules.pkg.make-pkg   - modules.user.www pkg-php:   pkg.installed:     - names:       - swig   

自动化运维Saltstack系列(五)之中型Web网站架构设计

架构图

自动化运维工具(三)之( 时实监控)

话说运维监控,出口就是nagios.cacti.zabbix.Ganglia.Graphite 等,还有自已公司开发的,但采集轮询时间一般为 5分钟,1分钟 ,最少的也没30秒内的,但如果服务器异常,要时实查看,不得不开多个终端,一边处理分析,一边查看. 自动化运维工具,时实查看,5秒刷新一次并出图.可放心的去处理,并时实知道服务器的运行情况.

自动化运维Python系列(一)之基础篇

Python介绍 Python是由创始人吉多·范罗苏姆(Guido van Rossum)在1989年圣诞节假期期间,为了打发时间,构思出来的一个新的脚本解释器.由于Guido在开发Python语言过程中,借鉴了很多ABC语言特性,所有后来包括Guido自己也那么认为,Python语言的前身就是ABC语言. Python是一门面向对象的.动态解释型强定义语言:Python崇尚简洁.优美.清晰,是一门优秀的被广泛使用的语言. 在2015年以前,最流行的Python版本还是2.4,但是由于Pytho

自动化运维Python系列之ForeignKey、relationship联表查询

一对多和多对多 数据库表结构设计是程序项目开发前的重要环节,后期数据库操作都是围绕着这个已经设计好的表结构进行,如果表结构设计有问题,整个程序项目就有存在需要整个推翻重构的风险... 数据库表结构除了简单的单表操作以外,还有一对多.多对多等. 一对多 基于SQLAlchemy我们可以先创建如下结构的2张表,然后来看看具体怎样通过外键ForeignKey或者relationship联表操作 创建表 from sqlalchemy.ext.declarative import declarative

自动化运维Python系列之Django信号、缓存操作

Django信号 Django内部提供了一种"信号强度"处理机制,简单理解就是当Django在接收到请求后内部做某些特定操作前发出信号,提醒一些接受者或者做操作,这样的好处就是方便程序定制小功能插件,也是对本身框架的一种节藕操作 1)Django的内置信号 Model signals     pre_init                # django的modal执行其构造方法前,自动触发     post_init               # django的modal执行其构