A maioria dos usuários acha útil compreender o que é o Salt e como ele funciona antes de iniciar o processo de instalação. O Salt usa um modelo de mestre/cliente, no qual um mestre Salt emite comandos a um cliente, que então executa esses comandos.

Observação: Como parte da iniciativa da VMware de remover entradas de terminologia problemáticas, o termo mestre Salt será substituído por um termo melhor no SaltStack Config e em produtos e tópicos de documentação relacionados. Essa atualização de terminologia pode demorar alguns ciclos de lançamento antes de ser totalmente concluída.

O que é o Salt?

O SaltStack Config conta com a tecnologia Salt, uma estrutura de execução remota de código aberto baseada em Python e usada para:

  • Gerenciamento de configuração
  • Automação
  • Provisionamento
  • Orquestração

O Salt é a tecnologia subjacente à funcionalidade central do SaltStack Config. O SaltStack Config aumenta e estende o Salt, fornecendo funcionalidade e recursos adicionais que facilitam ainda mais o seu uso. Para ver um resumo da infraestrutura do SaltStack Config, consulte Arquitetura do sistema SaltStack Config.

O diagrama a seguir mostra os principais componentes da arquitetura Salt básica:


Arquitetura Salt

As seções a seguir descrevem alguns dos principais componentes da arquitetura Salt que são relevantes para a instalação do SaltStack Config.

Mestres Salt e subordinados Salt

O Salt usa o modelo de mestre/cliente, no qual um mestre Salt emite comandos a um cliente, que então executa esses comandos. No ecossistema Salt, o mestre Salt é um servidor que está executando o serviço do mestre Salt. Ele emite comandos para um ou mais subordinados Salt, que são os nós que estão executando o serviço de subordinados e que estão registrados nesse mestre Salt específico.

Outra maneira de descrever o Salt é como um modelo de publicador/assinante. O mestre Salt publica trabalhos que precisam ser executados, e os subordinados assinam esses trabalhos. Quando um trabalho específico for aplicável a um subordinado, ele executará esse trabalho.

Quando um subordinado finaliza a execução de um trabalho, ele envia dados de retorno do trabalho de volta ao mestre Salt. O Salt tem duas portas usadas por padrão para os subordinados se comunicarem com seu mestre Salt. Essas portas funcionam em conjunto para receber e fornecer dados ao barramento de mensagens. O barramento de mensagens do Salt é o ZeroMQ, que cria uma topologia de rede assíncrona para fornecer a comunicação mais rápida possível.

Destinos e grãos

O mestre Salt define um destino para indicar quais subordinados devem executar o trabalho. Um destino é o grupo de subordinados, em um ou muitos mestres Salt, ao qual o comando Salt de um trabalho se aplica.

Observação:

Um mestre Salt também pode ser gerenciado como um subordinado, podendo ser um destino se estiver executando o serviço de subordinados.

Este é um exemplo de um dos muitos tipos de comandos que um mestre Salt pode emitir a um subordinado. O comando indica que todos os subordinados devem instalar o aplicativo Vim:

salt -v '*' pkg.install vim

Nesse caso, glob '*' é o destino, o que indica que todos os subordinados devem executar esse comando. Muitas outras opções de definição de destinos estão disponíveis, incluindo o direcionamento de um subordinado específico por seu ID ou o direcionamento de subordinados por suas características ou peculiaridades compartilhadas (chamadas de grãos no Salt).

O Salt acompanha uma interface para derivar informações sobre o sistema subjacente. Isso é chamado de interface de grãos, porque apresenta o Salt com grãos de informações. Grãos são coletados para o sistema operacional, o nome de domínio, o endereço IP, o kernel, o tipo de SO, a memória e muitas outras propriedades do sistema. Você também pode criar seus próprios dados de grãos personalizados.

Dados de grãos são relativamente estáticos. No entanto, eles são atualizados quando as informações do sistema mudam (como configurações de rede) ou quando um novo valor é atribuído a um grão personalizado.

Sistema de eventos aberto (barramento de eventos)

O sistema de eventos é usado para comunicação interprocessos entre o mestre Salt e os subordinados. No sistema de eventos:

  • Os eventos são vistos pelo mestre Salt e pelos subordinados.
  • Os eventos podem ser monitorados e avaliados por ambos.

O barramento de eventos estabelece as bases para a orquestração e o monitoramento em tempo real.

Todos os subordinados visualizam trabalhos e resultados assinando eventos publicados no sistema de eventos. O Salt usa um sistema de eventos conectável com duas camadas:

  • ZeroMQ (0MQ) - A biblioteca atual em nível de soquete padrão que fornece uma camada de transporte flexível.
  • Tornado - Sistema de eventos da camada de transporte e completo baseado em TCP.

Um dos maiores pontos fortes do Salt é a velocidade de execução. O barramento de comunicação do sistema de eventos é mais eficiente do que executar um serviço Web de nível superior (http). O sistema de execução remota é o componente em que todos os componentes são desenvolvidos, permitindo que a execução remota espalhe a carga entre recursos.

Estados Salt

Além da execução remota, o Salt fornece outro método para configurar subordinados, declarando em qual estado um subordinado deve estar, também chamado de estados Salt. Estados Salt possibilitam o gerenciamento da configuração. Você pode usar estados Salt para implantar e gerenciar a infraestrutura com arquivos YAML simples. Usando estados, é possível automatizar tarefas recursivas e previsíveis por meio do enfileiramento de trabalhos para implementação pelo Salt sem exigir a entrada do usuário. Você também pode adicionar uma lógica condicional mais complexa para arquivos de estado com o Jinja.

Para ilustrar as diferenças significativas entre execução remota e gerenciamento de configuração, considere o comando referenciado na seção anterior sobre destinos e grãos, em que o Salt instalou o aplicativo Vim em todos os subordinados:

Metodologia

Implementação

Resultado

Execução remota

  • Executar salt-v'*'pkg.installvim no terminal
  • Instala remotamente o Vim nos subordinados direcionados

Gerenciamento de configuração

  • Gravar um arquivo de estado do YAML que verifica se o Vim está instalado
  • Esse arquivo de estado é aplicado aos subordinados direcionados
  • Garante que o Vim sempre seja instalado nos subordinados direcionados
  • O Salt analisa o arquivo de estado e determina quais ações precisam ser tomadas para garantir que o subordinado esteja em conformidade com as declarações de estado
  • Se o Vim não estiver instalado, ele automatizará os processos para instalar o Vim nos subordinados direcionados

O arquivo de estado que verifica se o Vim está instalado pode se parecer com o seguinte exemplo:

# File:/srv/salt/vim_install.sls
install_vim_now:
  pkg.installed:
     -pkgs:
         -vim

Para aplicar esse estado a um subordinado, você deve usar o módulo state.apply, como no exemplo a seguir:

salt '*' state.apply vim_install

Esse comando aplica o estado vim_install a todos os subordinados.

Fórmulas são coleções de estados que funcionam em conjunto para configurar um subordinado ou aplicativo. Por exemplo, um estado pode disparar outro estado.

O arquivo "Top"

Não é prático executar manualmente cada estado individualmente, direcionando subordinados específicos em cada nova execução. Alguns ambientes têm centenas de arquivos de estado direcionados a milhares de subordinados.

O Salt oferece dois recursos para ajudar com esse problema de dimensionamento:

  • O arquivo top.sls - Mapeia estados Salt para seus subordinados aplicáveis.
  • Execução highstate - Executa todos os estados Salt descritos em top.sls de uma só vez.

O arquivo "top" mapeia quais estados devem ser aplicados a diferentes subordinados em determinados ambientes. Veja a seguir um exemplo de arquivo "top" simples:

# File: /srv/salt/top.sls
base:
  '*':
    - all_server_setup
  
  '01webserver':
    - web_server_setup

Neste exemplo, base refere-se ao ambiente Salt, que é o padrão. Você pode especificar mais de um ambiente conforme necessário, como prod, dev, QA etc.

Grupos de subordinados são especificados no ambiente, e os estados são listados para cada conjunto de subordinados. Esse arquivo "top" indica que um estado chamado all_server_setup deve ser aplicado a todos os subordinados '*' e que o estado chamado web_server_setup deve ser aplicado ao subordinado 01webserver.

Para executar o comando Salt, use a função state.highstate:

salt \* state.highstate

Esse comando aplica o arquivo "top" aos subordinados direcionados.

Pilar do Salt

O recurso de pilar do Salt tem dados definidos no mestre Salt e os distribui aos subordinados conforme necessário. O pilar é usado principalmente para armazenar segredos ou outros dados altamente confidenciais, como credenciais de contas, chaves criptográficas ou senhas. O pilar também é útil para armazenar dados não secretos que você não deseja colocar diretamente nos seus arquivos de estado, como dados de configuração.

O pilar do Salt leva os dados ao cluster na direção oposta à dos grãos. Enquanto grãos são dados gerados no subordinado, o pilar consiste em dados gerados no mestre Salt.

Pilares são organizados de maneira semelhante a estados em uma árvore de estado de Pilar, na qual o top.sls atua para coordenar dados de pilares com ambientes e subordinados que compartilham o privilégio a esses dados. As informações transferidas usando o pilar têm um dicionário gerado para o subordinado direcionado e criptografado com a chave desse subordinado para a transferência segura dos dados. Os dados do pilar são criptografados para cada subordinado, o que os tornam úteis para armazenar dados sensíveis específicos de um determinado subordinado.

Beacons e reatores

O sistema de beacons é uma ferramenta de monitoramento que pode escutar uma variedade de processos do sistema em subordinados. Beacons podem disparar reatores, que então podem ajudar a implementar uma alteração ou solucionar um problema. Por exemplo, se a resposta de um serviço atingir o tempo limite, o sistema de reatores poderá reiniciar esse serviço.

Beacons são utilizados para várias finalidades, entre elas:

  • Relatórios automatizados
  • Entrega de logs de erros
  • Monitoramento de microsserviços
  • Atividade de shell de usuários
  • Monitoramento de recursos

Quando combinados com reatores, os beacons podem criar respostas pré-gravadas automatizadas para problemas de infraestrutura e aplicativos. Os reatores expandem o Salt com respostas automatizadas usando estados de correção pré-gravados.

Reatores podem ser aplicados em vários cenários:

  • Dimensionamento da infraestrutura
  • Notificação de administradores
  • Reinicialização de aplicativos com falha
  • Reversão automática

Quando beacons e reatores são usados juntos, você pode criar estados exclusivos personalizados para suas necessidades específicas.

Runners Salt e orquestração

Runners Salt são aplicativos de conveniência executados com o comando salt-run. Eles funcionam de maneira semelhante a módulos de execução Salt, mas são executados no mestre Salt em vez de nos subordinados. Um runner Salt pode ser uma chamada de cliente simples ou um aplicativo complexo.

O Salt fornece a capacidade de orquestrar tarefas administrativas do sistema por toda a empresa. A orquestração possibilita coordenar as atividades de várias máquinas de um local central. Ela tem a vantagem adicional de ser capaz de controlar a sequência de quando determinados eventos de configuração ocorrerem. Estados de orquestração são executados no mestre Salt usando o módulo de runners de estado.

Quando você executa uma instalação em vários nós, está na verdade executando uma orquestração para instalar o SaltStack Config. No cenário de instalação em vários nós, você executa um highstate de orquestração projetado pela VMware. O highstate é executado no seu mestre Salt e configura o ambiente de vários nós. Ele instala a arquitetura do SaltStack Config de núcleo nos três outros nós que hospedarão o PostgreSQL, o Redis e o RaaS.