솔트란 무엇인가?
솔트(Salt)는 파이썬 기반 오픈 소스 원격 실행 프레임워크이다.
- 구성 관리
- 자동화
- 프로비저닝
- 오케스트레이션
솔트 시스템 아키텍처
다음 다이어그램은 기본 솔트 아키텍처의 주요 구성 요소를 보여줍니다.
다음 절에서는 솔트 아키텍처의 핵심 요소 중 일부를 설명합니다.
솔트 마스터와 솔트 미니언즈
Salt는 마스터-클라이언트 모델을 사용하여 마스터가 클라이언트에 명령을 내리고 클라이언트가 명령을 실행합니다. 솔트 생태계에서 솔트 마스터(Salt Master)는 솔트 마스터 서비스를 운영하는 서버입니다. 하나 이상의 솔트 미니언(Salt Minion)에 명령을 내립니다. 솔트 미니언은 솔트 미니언 서비스를 운영하고 있고 특정 솔트 마스터에 등록된 서버입니다.
솔트를 설명하는 또 다른 방법은 출판사-가입자(publisher-subscriber) 모델입니다. 마스터는 실행해야 하는 작업을 게시하고 Salt Minion는 해당 작업에 가입합니다. 특정 작업이 해당 미니언에 적용되면 작업이 실행됩니다.
minion은 작업 실행을 마치면 작업 반환 데이터를 마스터로 다시 전송합니다. 솔트에는 미니언들이 마스터와 통신하기 위해 기본적으로 사용되는 두 개의 포트가 있습니다. 이러한 포트는 데이터를 수신하고 메시지 버스로 전달하는 데 함께 작동합니다. 솔트의 메시지 버스는 ZeroMQ로, 비동기 네트워크 토폴로지를 만들어 가능한 가장 빠른 통신을 제공한다.
목표 및 그레인
마스터는 대상을 정의하여 작업을 실행해야 하는 미니언을 나타냅니다. 대상(Target)은 작업의 Salt 명령이 적용되는 하나 이상의 마스터에 걸쳐 있는 미니언 그룹입니다.
참고 : 마스터도 미니언처럼 관리할 수 있으며, 솔트미니언 서비스를 실행하는 경우 대상이 될 수 있습니다.
다음은 마스터가 미니언에게 내릴 수 있는 여러 종류의 명령 중 하나입니다. 이 명령은 모든 미니언들이 Vim 애플리케이션을 설치해야 함을 나타냅니다.
salt -v '*' pkg.install vim
이 경우 전역 ‘*’이 대상이며, 이는 모든 미니언들이 이 명령을 실행해야 함을 나타냅니다. ID로 특정 미니언을 대상으로 하거나 공유 특성 또는 특성(솔트에서 그레인이라고 함)으로 미니언을 대상으로 하는 것을 포함하여 많은 다른 타겟팅 옵션을 사용할 수 있다.
솔트는 기본 시스템에 대한 정보를 도출하는 인터페이스와 함께 제공됩니다. 이것은 그레인 인터페이스라고 불리는데, 이것은 솔트에 정보의 알갱이를 제공하기 때문입니다. 운영 체제, 도메인 이름, IP 주소, 커널, OS 유형, 메모리 및 기타 많은 시스템 속성에 대해 그레인이 수집된다. 사용자 정의 그레인 데이터를 직접 생성할 수도 있습니다.
그레인 데이터는 비교적 정적이다. 그러나 시스템 정보(예: 네트워크 설정)가 변경되거나 사용자 지정 그레인에 새 값이 할당되면 그레인 데이터가 새로 고쳐집니다.
개방 이벤트 시스템(이벤트 버스)
이벤트 시스템은 솔트 마스터와 솔트 미니언 간의 프로세스 간 통신에 사용됩니다. 이벤트 시스템:
- 이벤트는 마스터와 미니언 모두 볼 수 있습니다.
- 이벤트는 둘 다 모니터링 및 평가할 수 있습니다.
이벤트 버스는 조정과 실시간 모니터링을 위한 토대를 마련한다.
모든 미니언은 이벤트 시스템에 게시된 이벤트에 등록하여 작업 및 결과를 봅니다. Salt는 다음 두 계층이 포함된 플러그형 이벤트 시스템을 사용합니다.
- ZeroMQ(0MQ) – 유연한 전송 계층을 제공하는 현재 기본 소켓 레벨 라이브러리입니다.
- Tornado – 전체 TCP 기반 전송 계층 이벤트 시스템.
솔트의 가장 큰 강점 중 하나는 실행 속도이다. 이벤트 시스템의 통신 버스는 상위 수준의 웹 서비스(http)를 실행하는 것보다 더 효율적이다. 원격 실행 시스템은 모든 구성 요소가 기본으로 제공되는 구성 요소로, 분산형 원격 실행을 통해 리소스 간에 로드를 분산시킬 수 있습니다.
솔트 스테이트(Salt state)
솔트는 원격 실행 외에도 미니언의 상태를 선언하여 미니언을 구성하는 또 다른 방법을 제공한다. 솔트 상태는 구성 관리를 가능하게 합니다. Salt state를 사용하여 간단한 YAML 파일을 사용하여 인프라를 배포하고 관리할 수 있습니다. 상태를 사용하면 사용자 입력 없이 Salt에서 구현할 작업을 대기열에 저장하여 재귀적이고 예측 가능한 작업을 자동화할 수 있습니다. 또한 Jinja를 사용하여 상태 파일에 더 복잡한 조건부 로직을 추가할 수 있습니다.
원격 실행과 구성 관리 간의 미묘한 차이를 설명하기 위해 Salt가 애플리케이션 Vim을 모든 미니언에 설치한 Targets 과 그레인에 대해 이전 섹션에서 참조한 명령을 사용합니다.
Methodology | Implementation | Result |
---|---|---|
Remote execution | Run salt -v '*' pkg.install vim from the terminal | Remotely installs Vim on the targeted minions |
Configuration management | Write a YAML state file that checks whether Vim is installedThis state file is then applied to the targeted minions | Ensures that Vim is always installed on the targeted minionsSalt analyzes the state file and determines what actions need to be taken to ensure the minion complies with the state declarationsIf Vim is not installed, it automates the processes to install Vim on the targeted minions |
Vim이 설치되어 있는지 확인하는 상태 파일은 다음 예와 같을 수 있습니다.
File:/srv/salt/vim_install.sls
install_vim_now:
pkg.installed:
- pkgs:
- vim
이 상태를 미니언에 적용하려면 다음 예와 같이 state.apply 모듈을 사용합니다.
salt '*' state.apply vim_install
이 명령은 vim_install
스테이트를 모든 미니언에 적용합니다.
공식은 미니언 또는 응용 프로그램을 구성하기 위해 조화를 이루는 상태의 모음입니다. 예를 들어, 한 상태가 다른 상태를 트리거할 수 있습니다.
TOP 파일
매번 특정 미니언을 대상으로 각 상태를 수동으로 실행하는 것은 실용적이지 않다. 일부 환경에서는 수백 개의 상태 파일이 수천만을 대상으로 합니다.
Salt는 이 확장 문제를 해결하는 데 도움이 되는 두 가지 기능을 제공합니다.
- top.sls 파일 – Salt는 해당 미니언에 대해 설명합니다.
- Highstate 실행 – top.sls에 요약된 모든 Salt 상태를 단일 실행으로 실행합니다.
최상위 파일은 특정 환경에서 서로 다른 미니언에 적용되어야 하는 상태를 매핑합니다. 다음은 단순 상위 파일의 예입니다.
File: /srv/salt/top.sls
base:
'*':
- all_server_setup
'01webserver':
- web_server_setup
이 예제에서 베이스는 기본값인 솔트 환경을 참조합니다. 필요에 따라 prod, dev, QA 등 둘 이상의 환경을 지정할 수 있습니다.
미니언 그룹은 환경 아래에 지정되며, 각 미니언 집합에 대한 상태가 나열됩니다. 이 최상위 파일은 all_server_setup
이라는 상태가 모든 미니언 '*'
에 적용되고 web_server_setup
이라는 상태가 01webserver
미니언에 적용됨을 나타냅니다.
솔트 명령을 실행하려면 state.highstate 기능을 사용해야 합니다.:
salt * state.highstate
솔트 필러
Salt의 필러 기능은 Salt Master에 정의된 데이터를 가져와서 필요에 따라 미니언에 배포합니다. 필러는 주로 계정 인증 정보, 암호화 키 또는 암호와 같은 매우 중요한 기타 데이터를 저장하는 데 사용됩니다. 또한 필러는 구성 데이터와 같이 상태 파일에 직접 배치하지 않을 비보안 데이터를 저장하는 데 유용합니다.
솔트 필러는 그레인과는 반대 방향에서 클러스터로 데이터를 가져옵니다. 그레인은 미니언에서 생성된 데이터이지만, 필러는 마스터에서 생성된 데이터입니다.
필러는 필러 상태 트리의 상태와 유사하게 구성되며, 여기서 top.sls는 필러 데이터를 환경 및 데이터에 대한 미니언으로 조정하는 역할을 합니다. 필러를 사용하여 전송되는 정보는 대상 미니언에 대해 생성되고 보안 데이터 전송을 위해 해당 미니언의 키로 암호화된 사전이 있습니다. 필러 데이터는 피니언 단위로 암호화되므로 특정 피니언에 특정되는 중요한 데이터를 저장하는 데 유용합니다.
비콘 및 리액터
비컨(beacon) 시스템은 솔트 미니언즈에서 다양한 시스템 프로세스를 청취할 수 있는 모니터링 도구입니다. 비콘은 리액터를 작동시킬 수 있으며, 그러면 변경이나 문제 해결에 도움이 될 수 있다. 예를 들어, 서비스 응답 시간이 초과되면 리액터 시스템은 서비스를 다시 시작할 수 있다.
비컨은 다음을 포함한 다양한 용도로 사용됩니다.
- 자동 보고
- 오류 로그 전달
- 마이크로 서비스 모니터링
- 사용자 셸 활동
- 리소스 모니터링
리액터와 결합할 때, 비콘은 인프라와 애플리케이션 문제에 대한 자동 사전 서면 응답을 생성할 수 있다. 리액터는 사전 작성된 교정조치 상태를 이용하여 자동화된 대응으로 솔트를 확장한다.
리액터는 다음과 같은 다양한 시나리오에 적용될 수 있다.
- 인프라 확장
- 관리자에게 알림
- 실패한 응용 프로그램을 다시 시작하는 중
- 자동 롤백
비콘과 리액터를 함께 사용할 때, 특정한 필요에 따라 맞춤화된 독특한 상태를 만들 수 있다.
솔트 러너 및 오케스트레이션
솔트 러너는 salt-run
명령으로 실행되는 편의 애플리케이션이다. 솔트 러너는 솔트 실행 모듈과 유사하게 작동합니다. 하지만 그들은 솔트 미니언 대신 소금 마스터에서 실행한다. Salt runner는 간단한 클라이언트 통화 또는 복잡한 응용프로그램일 수 있습니다.
Salt는 전사적으로 시스템 관리 작업을 조정할 수 있는 기능을 제공합니다. 오케스트레이션을 통해 중앙 위치에서 여러 시스템의 작업을 조정할 수 있습니다. 또한 특정 구성 이벤트가 발생하는 순서를 제어할 수 있다는 장점이 있습니다. 오케스트레이션 상태는 스테이트 러너 모듈을 사용하여 마스터에서 실행됩니다.
출처 : https://docs.saltproject.io/en/latest/topics/salt_system_architecture.html