соляной стек: зерна против столбов

В Соляной системе есть зерна и столбы. Я понимаю, как я могу назначать пользовательские зерна, но когда лучше рассмотреть возможность использования столбов?


person Jeff Bauer    schedule 29.10.2012    source источник
comment
Кроме того, колонна может быть нацелена на определенных миньонов, так же как вы можете нацеливать состояния на определенных миньонов.   -  person lexual    schedule 21.05.2013


Ответы (4)


Фундаментальное отличие здесь заключается в том, что вы можете установить пользовательское зерно как врожденное свойство миньона, а не колонну, которая должна быть назначена миньону в какой-то момент.

Например, есть два практических способа назначить роль миньону: идентификатор миньона или использование пользовательских зерен. Затем вы можете сопоставить идентификатор миньона или пользовательские зерна внутри вашего файла top.sls следующим образом:

# 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

Вы НЕ МОЖЕТЕ сделать это со столбом. Хотя вы действительно можете нацеливаться с помощью столба, вам сначала нужен способ назначить столб своим миньонам (это должен быть идентификатор миньона или зерна, как указано выше). Подумайте о том, как бы вы назначили столб в верхнем файле столба, вам нужно назначить данные этого столба, используя врожденный атрибут миньона.

# pillar/top.sls
base:
  'G@env:dev':
    - match: compound
    - dev_settings
  'G@env:prod':
    - match: compound
    - prod_settings

Шаблон здесь заключается в том, что вы используете зерна (или идентификатор миньона) как минимальный способ установить тип/роль/окружение вашего миньона. После этого вы используете данные столба, чтобы передать ему все соответствующие подробные настройки.

person akoumjian    schedule 20.06.2013
comment
небольшая поправка к ответу выше. match: pillar теперь это возможно в соответствии с этим солевой документ - person Mayur Rokade; 28.12.2014
comment
Обратите внимание, что по соображениям безопасности вы не должны использовать гранулы для нацеливания на конфиденциальные файлы столбцов (например, те, которые содержат пароли базы данных). Зерна задаются на стороне миньона, и тот, кто укоренил миньона, может изменить его зерна, чтобы он получал данные столбов других миньонов. - person Andrew; 21.07.2015
comment
Поскольку столпы устанавливаются на стороне мастера, то, если вы хотите распространять конфиденциальные данные на основе каких-то ролей, разве вы не хотите, чтобы эти роли были определены как столб? - person Andrew Farrell; 26.01.2016
comment
Определенно есть проблемы с безопасностью, поскольку эта модель одинаково доверяет всем миньонам. Опять же, вы не можете использовать колонну, чтобы различать разных миньонов. Это должно быть основано на чем-то другом. Даже с match: pillar, как эти столбы были назначены миньонам? Они должны быть назначены либо по имени миньона, имени хоста, либо по зернам. - person akoumjian; 26.01.2016
comment
Я думаю, что таргетинг по имени/идентификатору миньона остается единственным безопасным путем. Имена хостов и зерна (возможно, также IP-адреса, в зависимости от сетевой безопасности) могут быть изменены на скомпрометированных миньонах, но идентификатор миньона блокируется, когда ключ принимается мастером, поэтому компрометация одного миньона раскроет только конфиденциальную информацию, известную этому миньону. миньон. - person kbolino; 24.05.2018

В Salt зерна используются для неизменных аспектов вашего миньона, таких как процессор, память, местоположение, часовой пояс и т. д.

Столб — это список данных о мастере (в формате SLS), которые нужно раздать своим миньонам. Pillar позволяет вам устанавливать переменные, к которым миньоны могут получить доступ, например, параметр конфигурации базы данных.

person Jeff Bauer    schedule 29.10.2012
comment
Важно: данные Pillar хранятся на мастере и кэшируются на соответствующих миньонах. Зерна хранятся на миньонах и кешируются на мастере. Что немного нелогично, но удобно. Данные столба доступны только для соответствующих миньонов, все данные о зернах доступны для всех миньонов. - person Dan Garthwaite; 12.02.2014
comment
@DanGarthwaite, не могли бы вы объяснить, как миньон может запрашивать все данные о зерне? - person brodie31k; 09.09.2015
comment
@ brodie31k Вы хотите сказать, что миньон не может получить данные от зерна другого миньона? - person vskubriev; 04.09.2019

Короче говоря, пользовательские static 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)          |
|                              |                               |                                     |
person uvsmtid    schedule 19.07.2015

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

person Utah_Dave    schedule 21.05.2013
comment
Не совсем отвечает на вопрос. Джефф Бауэр - вместо этого рассмотрите возможность изменения принятого ответа на ответ Акумджяна. - person Johntron; 11.08.2013