[네트워크] SaltStack 이란?
Network

[네트워크] SaltStack 이란?

728x90

SaltStack은 대규모 인프라를 관리하기 위한 자동화 관리 시스템 입니다.

위 그림처럼 Salt-master 하나가 여러개의 Salt-minion에게 명령을 publish 하고 그 결과를 취합하여 보여주는 구조입니다. 1대의 master가 수천대의 minion을 관리할 수 있습니다.

 

Salt-Master

Server 의 역할을 담당하며 minion들에게 명령을 publish 하고 그 결과를 보여줍니다. 따라서 데이터 저장소, 원격 명령 실행, 다른 시스템 상태 제어 센터의 역할을 담당합니다. ZeroMQ 라는 비동기 메시징 라이브러리를 통해 minion에게 통신합니다. Salt-Master를 설치하면 ZeroMQ도 함께 설치됩니다.

 

Salt-Minion

Agent 역할을 담당하며 구성 자동화를 하기위한 서버에 설치합니다. Master의 명령을 기다리다가 명령이 오면 작업을 수행합니다. 서버에 Agent를 설지하기 어렵다면 SSH로 명령 push 가 가능합니다 (Agentless 형태)

 

ZeroMQ

Salt-Master <-> Salt-Minion 간 통신에 사용되는 비동기 메시징 라이브러리입니다. Salt-Master를 설치하면 ZeroMQ도 함께 설치됩니다. 기본적으로 명령을 전달하는 publish port는 4505이고, minion들이 수행한 작업 결과를 받게되는 return port는 4506입니다.


SaltStack의 특징

  • 구조가 심플하다
    • Server - Agent 구조로 매우 단순합니다
    • Server의 경우 DB를 사용하지 않으면 별도의 plug-in을 통해 db사용이 가능합니다
  • 빠르다
    • 요청에 대해 ZeroMQ를 통해 비동기 병렬로 처리함으로 Agent가 많아도 빠르게 처리가 가능합니다
  • 다양한 모듈 지원
    • 다양한 내부모듈이 있으며 대규모 인프라를 코드 몇줄로 단순하게 처리가 가능합니다
  • Python 기반
    • SaltStack은 Python을 기반으로 개발되었으며 Module/Function으로 구현되어있습니다.
  • AES 암호화 통신
    • Minion이 Master에 처음 등록될때 Minion은 Master에게 자신의 public key 전달됩니다.
    • Master는 해당 Minion의 public key 저장하고 해당 minion의 등록을 허가합니다.
    • ZeroMQ로 통신할때 publicKey와 AES Key를 이용해 암호화 되어 통신됩니다.
  • Characterizable
    • 각 특성을 가진 Minion에게 별도의 명령을 내릴 수 있습니다.
    • Minion은 Master에게 전달받은 명령을 확인해 자신의 특성과 일치하는지 판별후 일치하면 실행합니다
  • Performance
    • MessagePack을 사용하여 Message(Master의 명령)을 효율적으로 직렬화할 수 있습니다.
    • Salt는 비동기 네트워킹 라이브로리로 Python Tornado를 사용하며 멀티쓰레딩 및 동시성에 대한 최신 접근 방식을 사용합니다.

Salt 문법

  • target: 타겟하는 minion. ('*'일 경우 모든 Minion에 전달합니다.)
  • module.function: 사용하는 module과 function의 조합으로 명령을 내립니다.
  • arguments: module.function에 인자값을 부여합니다

 

출처:

- SaltStack
728x90