Salt Project¶
What is Salt?¶
- 복잡한 IT 시스템 환경을 자동으로 구성하고 배포하기위한 IaC 도구입니다.
- Python으로 작성되었으며, YAML 형식의 파일을 사용합니다.
- 다양한 벤더사 제품과 호환 가능한 모듈을 제공합니다.
- Salt Project는 2020년 VMware에 인수되어 지원을 받고 있습니다.
- CentOS, Debian, RHEL, Ubuntu, MacOS, Windows, Cloud, Container 등 다양한 환경을 지원합니다.
- 병렬 실행을 지원하고 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¶
- 20개 이상의 Pluggable한 서브 시스템과 수 백 개의 Plug-in이 포함되어 있어 자유롭게 Salt 환경을 구성할 수 있습니다.
- 각 단계에서 서브 시스템은 구성된 플러그인으로 작업을 위임합니다.
Architecture¶
- Salt는 기본적으로 Server-Client(Agent) 통신 모델을 사용합니다. Agentless 방식도 지원을 하며, 이때는 SSH를 사용합니다.
- Salt 서버를 Salt-Master 라고 하며, 에이전트를 Salt-Minion 이라고 합니다.
Communication¶
- Publisher Port - 4505
모든 Master와 Minion 연결에 사용되는 포트 입니다. 해당 포트를 통해 명령이 전송 됩니다. - Request Server Port - 4506
Minion이 수행한 작업의 결과를 Master로 전송하고, Minion이 사용할 데이터(Pillar)를 Master에 요청할 때 사용하는 포트 입니다.
Components¶
간단하게 구성 요소들의 역할과 개념을 이해하면 Tutorial 진행이나 구성에 도움이 됩니다.
Salt Master¶
- 수행할 명령을 Minion에게 전달하고 관리하는 시스템입니다.
Salt Minion¶
Execution Modules¶
- state를 선언할 때도 사용할 수 있는 수많은 모듈이 있습니다.
Formulas (States)¶
Grains¶
- 운영체제 종류, 커널 버전, 메모리, CPU 등 Minion에 대한 다양한 정보를 사용할 수 있습니다.
Grains¶
Pillar¶
- Port 정보, 파일 경로, 설정 파일, 암호와 같은 값을 저장합니다.
Top File¶
- Top File에 작성된 순서대로 작업이 실행됩니다.