理解SaltStack(7) – 系统数据

本文讨论系统数据的两个主要方面:获取你系统的有关数据和为你的系统设置数据。salt为这两个任务分别提供了两个不同的子系统来完成:salt grains和salt pillar。
本文还介绍了第三个组件,称为salt mine,用来从minion推送数据到master的共享数据存储上以便所有的minions能访问这些数据。

GRAINS

Grains用来获取你系统的数据。Grains是关于底层操作系统静态信息,如内存,硬盘和许多其它系统属性。
当minion启动时,Grains自动收集信息,然后定期刷新或者使用远程执行命令。
所以你用grains能做什么?你可以使用grain执行模块收集清单,可以列出所有grains,找到具有特定grain值的系统等。
Grains也是minion系统的组成部分,也用来定位salt state和salt pillar数据。

GRAINS如何收集数据?
在之前的章节中你已经对插件有所了解,已经知道grains如何工作了。grains子系统有几个salt grains模块(又名插件)运行在minion来填充grains目录。grains与远程执行模块类似,每一个grain模块包含在各种OS的收集grain数据的逻辑(不是使用多个模块和__virtualname__)

SALT PILLAR

salt pillar用来传送数据到你的系统。想象一个当配置甚至是一个简单的系统时不同的自定义数据:用户名称,服务URL,首选安装路径,端口,非默认应用程序设置和许多其它的设置。通常这些值在每个系统或系统角色(web,数据库等)都不一样。
salt pillar让你定义这些数据值,然后使用targets将它们分配给一个或多个minions。然后这些值可以作为变量在salt sates中使用。
salt pilllar使用目标minions的公钥来加密数据和通过安全通道来发送,因此salt pillar也非常适合分发安全数据,如密码和ssh密钥,因为它只能由目标minon来解密。
默认下salt pillar模块使用YAML文件来定义pillar,超过30个salt pillar模块用来支持各种后端。热门选项包括Mongo和Redis,都是非常适合存储结构数据的。许多用户坚持使用YAML文件,但使用一个私有git repo来管理和分发pillar数据。

SALT MINE

salt mine用来在salt minions之间共享数据值。例如如果你设置一个共享的数据库,你可以在数据库服务器上配置salt minion来自动推送它的IP到salt mine。这个方法比手动更新salt state或salt pillar的数据要好。
当你需要这些值来配置系统时,你可以直接通过salt state文件来访问salt mine的数据。
salt mine使用简单,最大的问题是许多用户不记得使用它。