Skip to content

Salt Project

logo

What is Salt?

  1. 복잡한 IT 시스템 환경을 자동으로 구성하고 배포하기위한 IaC 도구입니다.
  2. Python으로 작성되었으며, YAML 형식의 파일을 사용합니다.
  3. 다양한 벤더사 제품과 호환 가능한 모듈을 제공합니다.
  4. Salt Project는 2020년 VMware에 인수되어 지원을 받고 있습니다.
  5. CentOS, Debian, RHEL, Ubuntu, MacOS, Windows, Cloud, Container 등 다양한 환경을 지원합니다.
  6. 병렬 실행을 지원하고 ZeroMQ 와 raw TCP를 사용하여 Master와 Minion 사이의 통로를 만들기 때문에 성능이 좋습니다.

THE 30 SECOND SUMMARY

Salt is: A configuration management system. Salt is capable of maintaining remote nodes in defined states. For example, it can ensure that specific packages are installed and that specific services are running.

A distributed remote execution system used to execute commands and query data on remote nodes. Salt can query and execute commands either on individual nodes or by using an arbitrary selection criteria.

Salt is designed for high-performance and scalability

Messages are efficiently serialized on the wire using MessagePack. Internally, Salt uses Python Tornado (implemented by some really smart developers) as an asynchronous networking library, and Salt is tuned using leading-edge approaches to multi-threading and concurrency.

It is not uncommon to meet users with over 10,000 minions on a single master in production, and there are known deployments with over 35,000 minions on a single Salt master! Salt has proven real-world speed and scalability.

Subsystem & Plug-in

salt-subsystems-workflow.png

  1. 20개 이상의 Pluggable한 서브 시스템과 수 백 개의 Plug-in이 포함되어 있어 자유롭게 Salt 환경을 구성할 수 있습니다.
  2. 각 단계에서 서브 시스템은 구성된 플러그인으로 작업을 위임합니다.

Architecture

subsystem

  1. Salt는 기본적으로 Server-Client(Agent) 통신 모델을 사용합니다. Agentless 방식도 지원을 하며, 이때는 SSH를 사용합니다.
  2. Salt 서버를 Salt-Master 라고 하며, 에이전트를 Salt-Minion 이라고 합니다.

Communication

subsystem

  1. Publisher Port - 4505
    모든 Master와 Minion 연결에 사용되는 포트 입니다. 해당 포트를 통해 명령이 전송 됩니다.
  2. Request Server Port - 4506
    Minion이 수행한 작업의 결과를 Master로 전송하고, Minion이 사용할 데이터(Pillar)를 Master에 요청할 때 사용하는 포트 입니다.

Components

간단하게 구성 요소들의 역할과 개념을 이해하면 Tutorial 진행이나 구성에 도움이 됩니다.

Salt Master

Master
- 중앙 관리 시스템입니다.
- 수행할 명령을 Minion에게 전달하고 관리하는 시스템입니다.

Salt Minion

Minion
- Master에 의해 관리가 되는 시스템입니다. - Master로 부터 명령을 받아 실행합니다.

Execution Modules

modules
- 일회성(Ad-hoc)으로 수행할 작업을 Master가 명령할 때 모듈을 사용합니다.
- state를 선언할 때도 사용할 수 있는 수많은 모듈이 있습니다.

Formulas (States)

states
- *.sls 파일에 시스템 상태를 선언하여 구성할 수 있습니다.

Grains

grains
- 시스템 변수이며, 시스템에 대한 잘 변하지 않는 정적 정보를 저장하고 있습니다.
- 운영체제 종류, 커널 버전, 메모리, CPU 등 Minion에 대한 다양한 정보를 사용할 수 있습니다.

Grains

grains
- 시스템에 대한 잘 변하지 않는 정적 정보를 저장하고 있는 변수입니다.

Pillar

pillar
- Master가 Minion에게 전달하여 환경 구성에 사용할 변수 입니다.
- Port 정보, 파일 경로, 설정 파일, 암호와 같은 값을 저장합니다.

Top File

topfile
- State와 Pillar를 선언하고 뼈대 파일입니다.
- Top File에 작성된 순서대로 작업이 실행됩니다.

  1. Salt Project
  2. Salt Github
  3. Salt State Repository
  4. SaltStack Documentation
  5. Salt Community Slack Channel
  6. Salt Project Community Wiki
  7. Salt Project YouTube channel