在盐系统中有谷物和柱子。我了解如何分配自定义颗粒,但什么时候考虑使用柱子更好?
4 回答
在 Salt 中,grains 用于你的 minion 的不可变方面,例如 cpu、内存、位置、时区等。
支柱是您需要分发给您的 minions 的 master 上的数据列表(以 SLS 格式)。Pillar 允许您设置 minions 可以访问的变量,例如数据库配置选项。
简而言之,自定义静态Grains 可能比 Pillars 更糟糕。
| Differences | Grains | Pillars |
|------------------------------|-------------------------------|-------------------------------------|
| This is info which... | ... Minion knows about itself | ... Minion asks Master about |
| | | |
| Distributed: | Yes (different per minion) | No (single version per master) |
| Centralized: | No | Yes |
| | | |
| Computed automatically: | Yes (preset/computed value) | No (only rendered from Jinja/YAML) |
| Assigned manually: | No (too elaborate) | Yes (Jinja/YAML sources) |
| | | |
| Conceptually intrinsic to... | ... individual Minion node | ... entire system managed by Master |
| Data under revision control: | No (computed values) | Yes (Jinja/YAML sources) |
| | | |
| They define rather... | _provided_ resources | _required_ resources |
| | (e.g. minion OS version) | (e.g. packages to install) |
| | | |
这里的根本区别在于,您可以将自定义颗粒设置为小兵的先天属性,而柱子需要在某个时候分配给小兵。
例如,有两种实用的方法可以为 minion 分配角色:minion id 或使用自定义 grains。然后,您可以匹配 top.sls 文件中的 minion id 或自定义颗粒,如下所示:
# salt/top.sls
base:
# match against custom grain
'G@role:webserver':
- match: compound
- webserver
'G@role:search':
- match: compound
- elasticsearch
# match against minion id
'minion_db*':
- database
你不能用柱子做到这一点。虽然您确实可以使用柱子作为目标,但您首先需要一种将柱子分配给您的奴才的方法(这必须是奴才 id,或如上所述的颗粒)。考虑如何在柱顶文件中分配柱子,您需要使用 minion 的固有属性分配此柱子数据。
# pillar/top.sls
base:
'G@env:dev':
- match: compound
- dev_settings
'G@env:prod':
- match: compound
- prod_settings
这里的模式是你使用grains(或minion id)作为设置你的minion的类型/角色/环境的最小方法。之后,您使用支柱数据为其提供所有适当的详细设置。
Pillar 还有助于确保只有特定的奴才获得特定的信息。
这里有一些很棒的文档:
http://docs.saltstack.com/topics/pillar/index.html
和这里:
http://docs.saltstack.com/topics/tutorials/pillar.html
您还可以使用外部支柱来允许任意数据库或配置文件为您设置支柱数据。这允许与基础架构的其他方面进行非常强大的集成。这里列出了几个内置的外部支柱:
http://docs.saltstack.com/ref/pillar/all/index.html
构建自定义外部支柱非常简单:
http://docs.saltstack.com/topics/development/external_pillars.html