自动化运维Saltstack系列之YAML和自定义GrainsPillar
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维Saltstack系列之YAML和自定义GrainsPillar相关的知识,希望对你有一定的参考价值。
先来看看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 |
本文出自 “改变从每一天开始” 博客,请务必保留此出处http://lilongzi.blog.51cto.com/5519072/1859322
以上是关于自动化运维Saltstack系列之YAML和自定义GrainsPillar的主要内容,如果未能解决你的问题,请参考以下文章