콘텐츠로 이동






1.Saltstack시작하기

SaltStack 개요

  1. SaltStack은 인프라 자동화와 구성 관리, 원격 명령 실행, 이벤트 기반 오케스트레이션까지 지원하는 자동화 도구입니다. 단순히 서버에 명령을 배포하는 수준을 넘어서, 원하는 상태를 코드로 정의하고 이를 여러 서버에 반복 적용할 수 있다는 점에서 IaC 도구로 많이 활용됩니다.
  2. Ansible과 비교하면 SaltStack은 기본적으로 master/minion 구조를 사용하고, 빠른 통신과 대규모 노드 제어에 강점이 있습니다. 특히 이벤트 기반 자동화와 실시간 반응 구조를 함께 제공하기 때문에, 단순 배포뿐 아니라 운영 자동화까지 확장하기 좋습니다.

SaltStack 아키텍처

  1. SaltStack의 기본 구조는 master와 minion으로 나뉩니다. master는 중앙 제어 서버 역할을 하고, minion은 실제로 명령을 받아 실행하는 대상 서버 역할을 합니다.
  2. Salt는 master와 minion 간 통신에 ZeroMQ 기반 메시징 구조를 사용하며, 일반적으로 master 쪽의 TCP 4505 포트는 명령 publish 용도, TCP 4506 포트는 실행 결과 반환과 파일 요청 등에 사용됩니다.
  3. Salt는 agent 기반의 master/minion 방식 외에도 salt-ssh를 통해 agentless 방식으로 사용할 수 있습니다. 이 경우 대상 서버에 minion을 설치하지 않고 SSH를 통해 명령을 전달할 수 있지만, 일반적으로는 minion 기반 구조가 더 빠르고 확장성 있는 방식으로 평가됩니다.
  4. Salt 통신구조
    • master가 여러 minion에 명령을 publish하고, 각 minion은 실행 결과를 master로 반환합니다. 이 과정에서 ZeroMQ 기반 통신과 TCP 4505, 4506 포트가 사용됩니다.
  5. salt-ssh 기반의 agentless 방식입니다.
    • salt-ssh는 별도의 minion agent 없이 SSH TCP 22로 대상 서버에 접속해 작업을 수행합니다. 소규모 환경이나 빠른 테스트에는 유용하지만, 대규모 반복 제어에서는 일반적인 minion 방식보다 불리할 수 있습니다.

Slat 구성 요소

  1. master : 중앙 제어 노드입니다. 명령 배포, 상태 적용, pillar 데이터 제공, 파일 서버 역할을 수행하며 전체 Salt 환경의 제어 지점이 됩니다.
  2. minion : 관리 대상 서버에 설치되는 agent입니다. master가 전달한 명령을 실행하고 결과를 반환하며, 자신의 시스템 정보를 grains 형태로 제공합니다.
  3. state : 서버가 어떤 상태여야 하는지를 선언적으로 정의한 파일입니다. 예를 들어 특정 패키지가 설치되어 있어야 하고, 서비스가 실행 중이어야 하며, 설정 파일이 특정 내용으로 유지되어야 한다는 식으로 작성합니다.
  4. pillar : minion별 또는 그룹별로 내려주는 민감하거나 환경별로 다른 데이터입니다. 비밀번호, API 키, 환경 변수, 애플리케이션 설정값처럼 노드별로 구분되는 정보를 관리할 때 주로 사용합니다.
  5. grains : minion이 자체적으로 가진 정적 시스템 정보입니다. 운영체제, 호스트명, IP, CPU 아키텍처 같은 값이 여기에 포함되며, target 지정이나 분기 처리에 자주 사용됩니다.

pillar vs grains

  1. pillar와 grains는 모두 Salt에서 데이터를 다루는 핵심 요소지만, 목적과 저장 위치가 다릅니다. grains는 minion이 가진 시스템 정보이고, pillar는 master가 minion에 주입하는 데이터라고 이해하면 가장 쉽습니다. | 항목 | Pillar | Grains | |---|---|---| | 데이터 위치 | 주로 master에서 관리 후 minion에 제공됨. | minion이 자체적으로 보유하는 시스템 정보. | | 목적 | 환경별 설정값, 비밀번호, 변수 관리. | OS, hostname, IP, architecture 같은 식별 정보 제공. | | 보안 성격 | 상대적으로 민감한 데이터 저장에 적합. | 일반 시스템 메타데이터 중심. | | 변경 주체 | master 쪽에서 정의하고 배포. | minion 정보 기반으로 자동 수집되거나 로컬에서 정의. | | 주요 활용 | state 템플릿 변수, 환경별 분기, 비밀정보 주입. | targeting, 조건 분기, 시스템 분류. |

동작 흐름

  1. SaltStack에서 명령은 보통 master에서 시작됩니다. 관리자는 master에서 특정 target을 지정해 명령을 publish하고, 조건에 맞는 minion이 이를 수신해 실행한 뒤 결과를 다시 master로 반환합니다.
  2. 이 구조 덕분에 중앙에서 수백, 수천 대의 서버를 한 번에 제어할 수 있습니다. 또한 단순 명령 실행뿐 아니라 state를 적용해 원하는 상태를 유지하도록 만들 수도 있습니다.
  3. 동작 구조

    • 1단계는 master가 TCP 4505를 통해 명령을 publish하는 과정
    • 2단계는 minion이 해당 명령을 실행하는 과정
    • 3단계는 TCP 4506을 통해 결과를 master로 반환하는 과정
    • 통신 구조는 ZeroMQ 기반으로 동작합니다.
    • State 적용 흐름은 조금 더 선언적입니다. master는 /srv/salt 아래의 state 파일을 기준으로 필요한 리소스 상태를 정의하고, minion은 이를 받아 현재 상태와 비교한 후 필요한 변경만 적용합니다.

기본 설정 파일 위치

SaltStack은 역할에 따라 설정 파일과 데이터 경로가 나뉩니다. master 설정, minion 설정, state 파일, pillar 파일은 서로 목적이 다르기 때문에 구분해서 이해하는 것이 좋습니다.

용도 경로 설치 서버 목적
Master 설정 파일 /etc/salt/master Master 서버 master 동작 방식, 파일 서버, pillar 루트, 포트 등 설정
Minion 설정 파일 /etc/salt/minion Minion 서버 연결할 master 주소, minion ID, 인증 및 동작 옵션 설정
State 파일 루트 /srv/salt 주로 Master 서버 state.sls 파일을 저장하고 minion에 배포하는 기본 파일 서버 경로
Pillar 파일 루트 /srv/pillar 주로 Master 서버 minion별 변수, 민감한 설정값, 환경별 데이터 저장
추가 설정 디렉터리 /etc/salt/master.d/, /etc/salt/minion.d/ 각 역할 서버 설정 파일 분리 관리, 기능별 설정 조각 배치

Reference

back
perplexity에서 생성한 AI이미지



작성일: 2026년 7월 23일 ,  마지막 업데이트: 2026년 7월 23일