salt-stack - que - saltstack tutorial
Pila de sal: granos vs pilares (4)
En el sistema de sal hay granos y pilares. Entiendo cómo puedo asignar granos personalizados, pero ¿cuándo sería mejor considerar el uso de pilares?
En Salt, los granos se utilizan para aspectos inmutables de su subordinado, como la CPU, la memoria, la ubicación, la zona horaria, etc.
Un pilar es una lista de datos en el maestro (en formato SLS) que necesita distribuir a sus minions. Pilar le permite establecer variables a las que pueden acceder los minions, por ejemplo, una opción de configuración de base de datos.
En resumen, los granos estáticos personalizados son probablemente una alternativa peor que los pilares.
| 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) |
| | | |
La diferencia fundamental aquí es que puede establecer un grano personalizado como una propiedad innata de un subordinado, en comparación con un pilar que debe asignarse a un subordinado en algún momento.
Por ejemplo, hay dos formas prácticas de asignar un rol a un minion: el id de minion o el uso de granos personalizados. Luego, puede hacer coincidir contra el ID de minion o los granos personalizados dentro de su archivo top.sls de la siguiente manera:
# 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
NO PUEDES hacer esto con pilar. Si bien puedes apuntar con pilar, primero necesitas una forma de asignar pilar a tus minions (esto debe ser un id de minion, o los granos como se indicó anteriormente). Piense en cómo asignaría un pilar en el archivo superior de pilares, necesita asignar estos datos de pilares utilizando un atributo innato del subordinado.
# pillar/top.sls
base:
''G@env:dev'':
- match: compound
- dev_settings
''G@env:prod'':
- match: compound
- prod_settings
El patrón aquí es que usas granos (o id de minion) como una forma mínima de establecer el tipo / rol / entorno de tu minion. Después de eso, utiliza los datos de pilares para alimentar todos los ajustes detallados apropiados.
Pilar también es útil para asegurar que solo ciertos minions obtengan un poco de información en particular.
Hay algunos grandes documentos aquí:
http://docs.saltstack.com/topics/pillar/index.html
y aquí:
http://docs.saltstack.com/topics/tutorials/pillar.html
También puede usar un Pilar externo para permitir que una base de datos arbitraria o un archivo de configuración establezca sus datos de Pilar por usted. Esto permite una integración muy potente con otros aspectos de su infraestructura. Hay varios pilares externos integrados listados aquí:
http://docs.saltstack.com/ref/pillar/all/index.html
Y es bastante sencillo construir un pilar externo personalizado:
http://docs.saltstack.com/topics/development/external_pillars.html