1. 솔트 스택이란?
- 대규모 인프라를 관리하기 위한 자동화 관리 시스템
- 서버와 에이전트간 zeromq를 통해 동신함, 에이전트 요청에 대해 비도기 병렬로 처리하기 때문에 에이전트 많아도 수 초안에 처리 가능
- 별도의 DB를 사용하지 않고 서버-에이전트 기반의 매우 단순한 구조
- 파이썬 기반의 Module / Function 으로 구현됨
- 설정 파일은 YAML 포맷을 기본으로 하며 template 파일의 경우 Jinja2 template를 사용
2. 솔트 스택 구성
- 솔트 마스터 : 솔트에서 서버 역할을 함. 마스터는 등록된 미니언에게 명령을 퍼블리싱하고, 그 결과를 취합하여 보여주는 역할을 함
- 솔트 미니언 : 에이전트 역할, 구성 자동화를 하기 위한 대상 서버에 설치, 마스터 명령을 대기하고 있다가 명령이 오면 해당 작업을 수행함
- ZeroMQ : 솔트 마스터와 솔트 미니언 간 통신에 사용되는 비동기 메시징 라이브러리 / 퍼블리싱 포트로 4505, 리턴 포트로 4506을 사용 / 모든 솔트 미니언이 솔트 마스터의 4505 포트를 작업에 대한 리스닝을 한 후 작업 결과를 4506 포트로 리턴 또는 특정 파일, 데이터를 요청함 (ZeroMQ 링크 : http://kr.zeromq.org/)
3. 솔트 스택 세부 개념
- State : 원하는 머신 사태를 기술하는 파일(패키지 설치, 파일 수정, 퍼미션 업데이트 등의 작업 명령을 작성)
- Grains : 미니언 호스트 자체에서 수집되는 정보(솔트 미니언 데몬에 의해 자동 또는 마스터의 명령에 의해 OS, 환경, 하드웨어 플랫폼 등 세부 정보를 수집함) / YAML 포맷 / 작업 대상을 시스템 정보를 기준으로 구분지을 경우 사용됨 / 미니언 -> 마스터
- Pillars : 솔트 마스터에서 글로벌하게 정의하는 변수이며 Key & Value 형태로 Master에서 작성함 / 마스터 -> 미니언
- Salt File Server : State에서 참조하는 파일과 스크립트, 기타 아티팩트가 저장
- Salt Top Files : State / Pillars를 미니언에 매핑하는데 사용
4. 솔트 스택 사용 예제
* 리눅스 사용자 계정 생성 / NGINX & PHP-FPM 서비스 설치 / 설치된 서비스의 구성 및 실행
- 스테이트
~ 미니언의 /src/salt/states를 솔트 스테이트 트리의 루트로 사용
~ 단일 파일 형태(/src/salt/states/mystate.sls) or 폴더 구성(/srv/salt/states/mystate/init.sls)로 구성 및 저장
~ salt:// 포맷은 스테이트 트리의 파일을 제공하는 솔트 파일 서버를 가리킴
=> /salt/states/users/init.sls | /salt/states/nginx/init.sls | /salt/states/php-fpm/init.sls | /salt/states/phptest/init.sls 작성
- 필러
~ 솔트 마스터에서 정의되고, 렌더링되며 변수는 중앙 저장소에서 저장됨
~ 미니언에서 /srv/salt/pillars를 필러 트리의 루트로 사용
=> /salt/pillars/users.sls 작성
- 그레인
~ 미니언 호스트의 실제 정보를 포함하는 정적인 데이터
=> /salt/states/phptest/init.sls 에서 그레인 사용
- 톱파일
~ 스테이트/필러와 미니언 사이의 매핑을 제공함
~ 개발환경 / QA 환경 / 운영 환경을 쉽게 구분지을 수 있음
=> /salt/states/top.sls | /salt/pillars/top.sls 연결
5. 솔트콜 주요 명령어
- 필러의 아이템 확인 : # salt-call pillar.items
- 그레인의 아이템 확인 : # salt-call grains.items
- 개별 스테이트 실행 : # salt-call grains state.apply nginx
- 스테이트 전체를 실행 : # salt-call state.apply
6. 솔트 마스터와 마스터리스
- 솔트 마스터 : 수많은 미니언 노드에 병렬로 빠르게 접근할 수 있는 중앙 집중형 제어 플랫폼
- 마스터리스 : 유지 및 관리할 마스터 노드 없음 / 보안상 솔트 마스터보다 더 안전 / 초기 솔트 실행 후 설정된 미니언은 불변
7. 솔트 사용 예제 (우분투 기준)
1) 설정
# vi /etc/salt/master
file_roots:
base:
- srv/salt
2) 파일 복사
# cp -ar <대상 파일> /srv/salt
3) 그레인 추가
# salt '*' grains.append roles <규칙 이름>
4) 적용
salt '*' state.apply pillar='{"":""}'