SaltStack数据系统之Grains、Pillar

1、什么是Grains?

Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息。
Grains是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息。在执行salt的sls时候可以根据Grains信息的不同对服务器进行匹配分组,例如可以根据系统是centos服务器跟系统是redhat环境的安装不同的软件包。
Grains功能:1.收集资产信息 2.信息查询
官方文档:https://docs.saltstack.com/en/getstarted/overview.html

2、Grains的功能使用

(1)Grains查询信息

  1. [root@linux-node1 ~]# salt '*' grains.items #查看所有grains的key和values
  2. [root@linux-node1 ~]# salt '*' grains.get saltversion #查看salt的版本
  3. linux-node2.example.com:
  4. 2016.11.8
  5. linux-node1.example.com:
  6. 2016.11.8
  7. [root@linux-node1 ~]# salt '*' grains.get ip4_interface #查看ip
  8. [root@linux-node1 ~]# salt '*' grains.get ip4_interface:eth0

(2)Grains目标匹配

grains可以用于进行目标匹配,比如让所有的centos系统进行某个操作。使用salt -G

  1. #(1)对os系统为centos系统执行一个uptime的命令:
  2. [root@linux-node1 ~]# salt -G 'os:Centos' cmd.run 'uptime' #查看负载
  3. linux-node2.example.com:
  4. 14:17:06 up 13 days, 8:51, 2 users, load average: 0.00, 0.01, 0.05
  5. linux-node1.example.com:
  6. 14:17:06 up 22 days, 8:23, 2 users, load average: 0.01, 0.02, 0.05
  7. #(2)在init为systemd的系统上执行查看负载:
  8. [root@linux-node1 ~]# salt -G 'init:systemd' cmd.run 'uptime'
  9. linux-node1.example.com:
  10. 14:21:00 up 22 days, 8:27, 2 users, load average: 0.00, 0.01, 0.05
  11. linux-node2.example.com:
  12. 14:21:00 up 13 days, 8:55, 2 users, load average: 0.00, 0.01, 0.05

(3)Grains在top file中进行匹配

  1. #在top.sls中定义对系统是CentOS的服务之星web.apached定义的状态信息
  2. [root@linux-node1 ~]# vim /srv/salt/base/top.sls
  3. base:
  4. 'os:CentOS':
  5. - match: grain
  6. - web.apache
  7. [root@linux-node1 ~]# salt '*' state.highstate
  8. linux-node2.example.com:
  9. ----------
  10. ID: apache-install
  11. Function: pkg.installed
  12. Name: httpd
  13. Result: True
  14. Comment: All specified packages are already installed
  15. Started: 14:28:57.612549
  16. Duration: 2490.712 ms
  17. Changes:
  18. ----------
  19. ID: apache-service
  20. Function: service.running
  21. Name: httpd
  22. Result: True
  23. Comment: The service httpd is already running
  24. Started: 14:29:00.104396
  25. Duration: 41.901 ms
  26. Changes:
  27. Summary for linux-node2.example.com
  28. ------------
  29. Succeeded: 2
  30. Failed: 0
  31. ------------
  32. Total states run: 2
  33. Total run time: 2.533 s
  34. linux-node1.example.com:
  35. ----------
  36. ID: apache-install
  37. Function: pkg.installed
  38. Name: httpd
  39. Result: True
  40. Comment: All specified packages are already installed
  41. Started: 14:29:12.061257
  42. Duration: 11458.788 ms
  43. Changes:
  44. ----------
  45. ID: apache-service
  46. Function: service.running
  47. Name: httpd
  48. Result: True
  49. Comment: The service httpd is already running
  50. Started: 14:29:23.520720
  51. Duration: 46.868 ms
  52. Changes:
  53. Summary for linux-node1.example.com

(4)Grains自定义

Grains的四种存在形式:
①Core grains.
②在 /etc/salt/grains 自定义grains。
③在 /etc/salt/minion 自定义grains。
④在 _grains 目录自定义grain,同步到minions。

  1. #生产环境使用自定义一个grains
  2. [root@linux-node1 ~]# vim /etc/salt/grains
  3. test-grains: linux-node2 #冒号后面有空格
  4. [root@linux-node1 ~]# systemctl restart salt-minion
  5. [root@linux-node1 ~]# salt '*' grains.get test-grains
  6. linux-node1.example.com:
  7. linux-node2
  8. linux-node2.example.com:
  9. [root@linux-node1 ~]# vim /etc/salt/grains
  10. test-grains: linux-node2
  11. hehe: haha
  12. [root@linux-node1 ~]# salt '*' saltutil.sync_grains
  13. [root@linux-node1 ~]# salt '*' grains.get hehe
  14. linux-node1.example.com:
  15. haha
  16. linux-node2.example.com:

3、什么是Pillar?

Pillar是Salt最重要的系统之一,它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sessiion。可用于提供开发接口,用于在master端定义数据,然后再minion中使用,一般传输敏感的数据,例如ssh key,加密证书等。

pillar和states建立方式类似,由sls文件组成,有一个入口文件top.sls,通过这个文件关联其他sls文件,默认路径在/srv/pillar,可通过/etc/salt/master里面pillar_roots:指定位置。

pillar到底什么作用呢?那么下面介绍一个简单的例子,你就明白了。

用zabbix监控新上架的服务器(10台),需要将zabbix_agentd.conf分发到被监控主机,这个文件中hostname的ip每台都不同,我们不可能写10分配置文件吧!那么如何让hostname在分发的时候就根据被监控主机IP,修改成自己的呢?这时就用到渲染了,默认渲染器是jinja,支持for in循环判断,格式是{%...%}{% end* %},这样一来salt会先让jinja渲染,然后交给yaml处理。

4、Pillar的功能使用

(1)如何定义Pillar数据

  • a.master配置文件中定义pillar:
    默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效:
  1. #默认的pillar的items为空,需要修改/etc/salt/master
  2. [root@linux-node1 ~]# salt '*' pillar.items
  3. linux-node1.example.com:
  4. ----------
  5. linux-node2.example.com:
  6. ----------
  7. [root@linux-node1 ~]# vim /etc/salt/master
  8. #pillar_opts: False 打开该项,修改成True
  9. pillar_opts: True
  10. [root@linux-node1 ~]# systemctl restart salt-master
  11. [root@linux-node1 ~]# salt '*' pillar.items
  • b.使用SLS文件定义Pillar
    Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。示例如下:
  1. [root@linux-node1 ~]# vim /etc/salt/master
  2. pillar_roots
  3. base:
  4. - /srv/pillar/base
  5. prod:
  6. - /srv/pillar/prod
  7. #此段代码定义了base环境下的Pillar文件保存在/srv/pillar/base目录下。prod环境下的Pillar文件保存在/srv/pillar/prod下。
  8. [root@linux-node1 ~]# mkdir -p /srv/pillar/{base,prod}
  9. [root@linux-node1 ~]# tree /srv/pillar/
  10. /srv/pillar/
  11. ├── base
  12. └── prod
  13. [root@linux-node1 ~]# systemctl restart salt-master
  14. #创建base环境下的pillar文件为apache
  15. [root@linux-node1 ~]# vim /srv/pillar/base/apache.sls
  16. {% if grains['os'] == 'CentOS' %}
  17. apache: httpd
  18. {% elif grains['os'] == 'Debian' %}
  19. apache: apache2
  20. {% endif %}
  21. #与State相似,Pillar也有top file,也使用相同的匹配方式将数据应用到minion上。示例如下:
  22. [root@linux-node1 ~]# vim /srv/pillar/base/top.sls
  23. base:
  24. '*':
  25. - apache
  26. [root@linux-node1 ~]# salt '*' pillar.items
  27. linux-node1.example.com:
  28. ----------
  29. apache:
  30. httpd
  31. linux-node2.example.com:
  32. ----------
  33. apache:
  34. httpd
  35. #在base环境下,引用pillar
  36. [root@linux-node1 ~]# vim /srv/salt/base/web/apache.sls
  37. apache-install:
  38. pkg.installed:
  39. - name: {{ pillar['apache'] }}
  40. apache-service:
  41. service.running:
  42. - name: {{ pillar['apache'] }}
  43. - enable: True
  44. [root@linux-node1 ~]# salt '*' state.highstate
  45. linux-node2.example.com:
  46. ----------
  47. ID: apache-install
  48. Function: pkg.installed
  49. Name: httpd
  50. Result: True
  51. Comment: All specified packages are already installed
  52. Started: 15:15:13.424547
  53. Duration: 940.333 ms
  54. Changes:
  55. ----------
  56. ID: apache-service
  57. Function: service.running
  58. Name: httpd
  59. Result: True
  60. Comment: The service httpd is already running
  61. Started: 15:15:14.366780
  62. Duration: 55.706 ms
  63. Changes:
  64. Summary for linux-node2.example.com
  65. ------------
  66. Succeeded: 2
  67. Failed: 0
  68. ------------
  69. Total states run: 2
  70. Total run time: 996.039 ms
  71. linux-node1.example.com:
  72. ----------
  73. ID: apache-install
  74. Function: pkg.installed
  75. Name: httpd
  76. Result: True
  77. Comment: All specified packages are already installed
  78. Started: 15:15:14.648492
  79. Duration: 8242.769 ms
  80. Changes:
  81. ----------
  82. ID: apache-service
  83. Function: service.running
  84. Name: httpd
  85. Result: True
  86. Comment: The service httpd is already running
  87. Started: 15:15:22.891907
  88. Duration: 42.651 ms
  89. Changes:
  90. Summary for linux-node1.example.com
  91. ------------
  92. Succeeded: 2
  93. Failed: 0
  94. ------------
  95. Total states run: 2
  96. Total run time: 8.285 s

总结:
1.pillar和状态一样,有pillar_roots,在master中配置
2.到配置的地方/srv/pillar/base下写一个apache.sls
3.pillar必须在top file指定才能使用,在top.sls中指定所有的minion,都需要执行在base环境下的apache.sls
4.用之前查看是否能获取到pillar值:salt '*' pillar.items
5.更改状态配置,把name改为一个pillar的引用,这是一个jinja的语法

5、Grains VS Pillar

名称 存储位置 类型 采集方式 场景
Grains minion 静态 minion启动时,可以刷新 1.获取信息 2.匹配
Pillar master 动态 指定,实时生效 1.匹配 2.敏感数据配置

转载于:https://blog.51cto.com/jinlong/2062766

SaltStack数据系统之Grains、Pillar的更多相关文章

  1. Saltstack数据系统Grains和Pillar(三)

    Saltstack数据系统 分为Grains和Pillar 一.Grains 静态数据,当Minion启动的时候收集的MInion本地的相关信息.(包含操作系统版本.内核版本.CPU.内存.硬盘.设备 ...

  2. 2. SaltStack数据系统: Grains、Pillar

    1. SaltStack数据系统 Grains (谷物) Pillar (支柱) 2.Grains Grains存放着Salt命令启动时收集的信息,运行时不收集 2.1  信息查询 收集资产 网卡,i ...

  3. SaltStack数据系统-Pillar

    上一篇:SaltStack数据系统-Grains 使用saltstack进行配置管理可以使用pillar定义主机假如是Openstack修改了一下nova的密码就需要修改很多配置文件 pillar很安 ...

  4. SaltStack数据系统-Grains

    上一篇:SaltStack配置管理 granis:谷粒 pillar:柱子 grains是salt的一个组件,存放minion启动时候收集的信息(状态信息) 查看 salt '*' grains.it ...

  5. 死磕salt系列-salt grains pillar 配置

    grains 和 pillar 对比: Grains:存放静态数据,主要存储客户端的主机信息,重启grains会刷新. Pillar: 处理敏感数据, 处理差异性的文件. Grains数据系统 sal ...

  6. SaltStack 数据系统 Grains Pillar

    grains 先来一个很好用的命令 # salt '*' grains.items \\基本上输出了所有你想要的信息 192.168.100.138: ---------- SSDs: biosrel ...

  7. SaltStack数据系统-Pillar详解

    1:存储位置 存储在master端,存放需要提供给minion的信息 每个minion只能访问master分配给自己的(应用场景) 2:在centos7 salt 2015.5.10 (Lithium ...

  8. Saltstack数据系统

    1.grainsgrains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型.网卡ip等.强调是minion启动时收集到的数据,所以如果改了什么硬件啥的,要重启minion才能收 ...

  9. SaltStack数据系统-Grans详解

    1:Grains是系统的一个组件,存放着minion启动时收集的系统底层的一些信息,每次minion启动的时候,会进行系统的采集,将其保存下来,在以后的生命周期中不会重新搜集,除非重启~ #查看gra ...

随机推荐

  1. PTA | 1009说反话(20分)

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有 ...

  2. SI24R2F新一代2.4G超低功耗单发射有源RFID芯片 SI24R2E升级版智能充电安全管理方案首选

    目前全国有很多电动车因在充电时电池温度过高,而导致爆炸引起火灾的情况.作为国内RFID行业的推动者,动能世纪联合中科微向IOT应用领域推出新款大功率2.4G射频芯片,并针对电动车防盗.电动车充电桩市场 ...

  3. Evolution of Image Classifiers,进化算法在神经网络结构搜索的首次尝试 | ICML 2017

    论文提出使用进化算法来进行神经网络结构搜索,整体搜索逻辑十分简单,结合权重继承,搜索速度很快,从实验结果来看,搜索的网络准确率挺不错的.由于论文是个比较早期的想法,所以可以有很大的改进空间,后面的很大 ...

  4. javascript入门 之 ztree (六 结点的点击和展开/折叠事件)

    1.注意: 测试点击事件时,如果要测试取消选中和追加选中,如果按住ctrl和win键无用,则需要先用鼠标左键按住,然后,在松开左键的前几毫秒按住ctrl键便可! <!DOCTYPE html&g ...

  5. Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 平常我们功能测试用例非常多时 ...

  6. 【python实现卷积神经网络】优化器的实现(SGD、Nesterov、Adagrad、Adadelta、RMSprop、Adam)

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...

  7. 接口 ThreadMXBean 一个很好用的线程管理接口类 可以参考 jdk 帮助文档

    概述  软件包   类  使用  树  已过时  索引  帮助  JavaTM Platform Standard Ed. 6  上一个类   下一个类 框架    无框架    所有类 摘要: 嵌套 ...

  8. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(八)之Polymorphism

    Polymorphism is the third essential feature of an object-oriented programming language,after data ab ...

  9. HttpWebRequest在Post的时候,遇到特殊符号+号(加号)变成空格了

    今天在调用一个外部接口的时候遇到一个问题,外部接口说要用FOMR的POST方法提交. OK,没问题,我加了个ASPX页面,里面加了个FORM表单和一些元素,提交,返回值成功.注意看下面这一句:但返回值 ...

  10. python超实用的30 个简短的代码片段(三)

    Python是目前最流行的语言之一,它在数据科学.机器学习.web开发.脚本编写.自动化方面被许多人广泛使用. 它的简单和易用性造就了它如此流行的原因. 如果你正在阅读本文,那么你或多或少已经使用过P ...