1、什么是Grains?

Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息。可以理解为Grains记录着每台Minion的一些常用属性,比如CPU、内存、磁盘、网络信息等。我们可以通过grains.items来查看某台Minion的所有Grains信息。 
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.  
  8. #(2)在init为systemd的系统上执行查看负载:
  9. [root@linux-node1 ~]# salt -G 'init:systemd' cmd.run 'uptime'
  10. linux-node1.example.com:
  11. 14:21:00 up 22 days, 8:27, 2 users, load average: 0.00, 0.01, 0.05
  12. linux-node2.example.com:
  13. 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.  
  28. Summary for linux-node2.example.com
  29. ------------
  30. Succeeded: 2
  31. Failed: 0
  32. ------------
  33. Total states run: 2
  34. Total run time: 2.533 s
  35. linux-node1.example.com:
  36. ----------
  37. ID: apache-install
  38. Function: pkg.installed
  39. Name: httpd
  40. Result: True
  41. Comment: All specified packages are already installed
  42. Started: 14:29:12.061257
  43. Duration: 11458.788 ms
  44. Changes:
  45. ----------
  46. ID: apache-service
  47. Function: service.running
  48. Name: httpd
  49. Result: True
  50. Comment: The service httpd is already running
  51. Started: 14:29:23.520720
  52. Duration: 46.868 ms
  53. Changes:
  54.  
  55. 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.  
  8. #此段代码定义了base环境下的Pillar文件保存在/srv/pillar/base目录下。prod环境下的Pillar文件保存在/srv/pillar/prod下。
  9.  
  10. [root@linux-node1 ~]# mkdir -p /srv/pillar/{base,prod}
  11. [root@linux-node1 ~]# tree /srv/pillar/
  12. /srv/pillar/
  13. ├── base
  14. └── prod
  15. [root@linux-node1 ~]# systemctl restart salt-master
  16.  
  17. #创建base环境下的pillar文件为apache
  18. [root@linux-node1 ~]# vim /srv/pillar/base/apache.sls
  19. {% if grains['os'] == 'CentOS' %}
  20. apache: httpd
  21. {% elif grains['os'] == 'Debian' %}
  22. apache: apache2
  23. {% endif %}
  24.  
  25. #与State相似,Pillar也有top file,也使用相同的匹配方式将数据应用到minion上。示例如下:
  26. [root@linux-node1 ~]# vim /srv/pillar/base/top.sls
  27. base:
  28. '*':
  29. - apache
  30. [root@linux-node1 ~]# salt '*' pillar.items
  31. linux-node1.example.com:
  32. ----------
  33. apache:
  34. httpd
  35. linux-node2.example.com:
  36. ----------
  37. apache:
  38. httpd
  39.  
  40. #在base环境下,引用pillar
  41. [root@linux-node1 ~]# vim /srv/salt/base/web/apache.sls
  42. apache-install:
  43. pkg.installed:
  44. - name: {{ pillar['apache'] }}
  45.  
  46. apache-service:
  47. service.running:
  48. - name: {{ pillar['apache'] }}
  49. - enable: True
  50. [root@linux-node1 ~]# salt '*' state.highstate
  51. linux-node2.example.com:
  52. ----------
  53. ID: apache-install
  54. Function: pkg.installed
  55. Name: httpd
  56. Result: True
  57. Comment: All specified packages are already installed
  58. Started: 15:15:13.424547
  59. Duration: 940.333 ms
  60. Changes:
  61. ----------
  62. ID: apache-service
  63. Function: service.running
  64. Name: httpd
  65. Result: True
  66. Comment: The service httpd is already running
  67. Started: 15:15:14.366780
  68. Duration: 55.706 ms
  69. Changes:
  70.  
  71. Summary for linux-node2.example.com
  72. ------------
  73. Succeeded: 2
  74. Failed: 0
  75. ------------
  76. Total states run: 2
  77. Total run time: 996.039 ms
  78. linux-node1.example.com:
  79. ----------
  80. ID: apache-install
  81. Function: pkg.installed
  82. Name: httpd
  83. Result: True
  84. Comment: All specified packages are already installed
  85. Started: 15:15:14.648492
  86. Duration: 8242.769 ms
  87. Changes:
  88. ----------
  89. ID: apache-service
  90. Function: service.running
  91. Name: httpd
  92. Result: True
  93. Comment: The service httpd is already running
  94. Started: 15:15:22.891907
  95. Duration: 42.651 ms
  96. Changes:
  97.  
  98. Summary for linux-node1.example.com
  99. ------------
  100. Succeeded: 2
  101. Failed: 0
  102. ------------
  103. Total states run: 2
  104. 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

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

6.微服务 配置中心需学习:微服务框架:Spring的Cloud config  开源的和阿里的Diamond等,jsf京东的

配置中心:

zookeeper

extcd

pillar

004-SaltStack入门篇之数据系统Grains、Pillar的更多相关文章

  1. SaltStack入门篇(三)之数据系统Grains、Pillar

    1.什么是Grains? Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息.可以理解为Grains记录着每台Minion的一些常用属性,比如CPU ...

  2. SaltStack 数据系统 Grains Pillar

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

  3. SaltStack入门篇(四)之深入理解SaltStack远程执行

    1.目标 2.执行模块 3.返回 salt ‘*’ cmd.run ‘uptime’ 命令 目标 执行模块 执行模块参数 1.SlatStack远程执行–目标 执行目标:https://docs.sa ...

  4. SaltStack入门篇(七)之架构部署实战

    模块:https://docs.saltstack.com/en/2016.11/ref/states/all/index.html 实战架构图: 实验环境设置: 主机名 IP地址 角色 linux- ...

  5. SaltStack入门篇(六)之部署Redis主从实现和Job管理

    一.部署Redis主从 需求: 192.168.56.11是主,192.168.56.12是从 redis监听自己的ip地址,而不是0.0.0.0 分析: linux-node1 安装 配置 启动 l ...

  6. SaltStack入门篇(五)之salt-ssh的使用以及LAMP状态设计部署

    1.salt-ssh的使用 官方文档:https://docs.saltstack.com/en/2016.11/topics/ssh/index.html ()安装salt-ssh [root@li ...

  7. SaltStack入门篇(二)之远程执行和配置管理

    1.远程执行 第一条命令: [root@linux-node1 master]# salt '*' test.ping linux-node2.example.com: True linux-node ...

  8. SaltStack入门篇(一)之SaltStack部署

    一.SaltStack概述 Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线, ...

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

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

随机推荐

  1. TODO C++ 高级篇

    http://c.biancheng.net/view/439.html

  2. Serializable 和 Parcelable 的区别?

    1.在使用内存的时候,Parcelable 类比 Serializable 性能高,所以推荐使用 Parcelable 类.2.Serializable 在序列化的时候会产生大量的临时变量,从而引起频 ...

  3. Jmeter(六)事务

    事务是性能测试之必不可少的关注点, Jmeter默认把每一个请求都统计成了一个事务, 但有时候我们根据业务需求, 会把多个操作统计成一个事务, Jmeter当然也考虑到了这个需求, 因此我们可以通过逻 ...

  4. OpenStack 启动虚拟机 Booting from Hard Disk

    问题 OpenStack 启动虚拟机 Booting from Hard Disk-GRUB 环境 OpenStack RUNNING IN vSphere 6.0.0 VM 开启了 CPU 虚拟化支 ...

  5. HttpRunnerManager(二)--使用

    参考资料:https://sutune.me/2018/08/05/httprunner/

  6. LoadRunner 技巧之 自动关联

    LoadRunner 技巧之 自动关联 这一节讲loadunner 关联的问题,其实这个东西理解起来简单,但说起来比较麻烦. 关联的原理:                               ...

  7. Delphi DBGridEh导出Excel

    unit Unit_DBGridEhToExcel; interface uses SysUtils, Variants, Classes, Graphics, Controls, Forms, Ex ...

  8. Google Home Mini配置失败解决办法

    Google Home Mini配置到最后一步时失败: There was a problem setting up Google Home Mini For help resolving this ...

  9. unity快捷放置物体操作

    https://connect.unity.com/p/zui-jia-shi-jian-dui-xiang-fang-zhi-he-wu-li-xiao-guo 最佳实践系列文章将探讨我们在与客户合 ...

  10. ElasticSearch 7.3.0 查询、修改、删除 文档操作

    PUT chuyuan/_doc/ { "name":"xiaolin", , "sex":"F", "lov ...