소개

Salt 또는 SaltStack은 원격 실행 도구 및 구성 관리 시스템입니다. 관리자는 원격 실행 기능을 사용하여 다양한 시스템에서 유연한 대상 시스템과 병렬로 명령을 실행할 수 있습니다. 구성 관리 기능은 지정된 정책에 따라 인프라 구성요소를 빠르고 쉽게 안전하게 가져올 수 있는 클라이언트-서버 모델을 구축합니다.

이 가이드에서는 솔트 사용법을 효과적으로 배우기 시작하는 데 필요한 몇 가지 기본 개념과 용어에 대해 설명합니다.

솔트 머신 역할

Salt의 제어 구조는 구성 관리 시스템처럼 매우 간단합니다. 일반적인 설정에서는 두 가지 종류의 컴퓨터만 있습니다.

마스터(Master)

솔트 마스터는 인프라를 제어하고 관리하는 서버에 대한 정책을 지정하는 시스템입니다. 구성 데이터의 리포지토리로 작동하며 원격 명령을 시작하고 다른 시스템의 상태를 보장하는 제어 센터로 작동합니다. 이 기능을 제공하기 위해 Salt-master라는 데몬이 마스터에 설치됩니다.

마스터 없는 구성을 사용하여 인프라를 제어할 수 있지만 대부분의 설정은 Salt 마스터에서 사용할 수 있는 고급 기능을 활용합니다. 실제로 대규모 인프라 관리를 위해 Salt는 마스터와 관련된 특정 구성 요소와 작업을 전용 서버에 위임할 수 있습니다. 하위 마스터 시스템을 통해 명령을 릴레이할 수 있는 계층형 마스터 구성에서도 작동할 수 있습니다.

미니언즈(Minions)

솔트가 관리하는 서버를 미니언즈라고 합니다. 각 관리 시스템에 salt-minion이라는 데몬이 설치되고 마스터와 통신하도록 구성됩니다. 미니언은 마스터가 보낸 지시사항을 실행하고, 작업의 성공 여부를 보고하고, 기본 호스트에 대한 데이터를 제공하는 일을 담당합니다.

솔트 구성 요소의 통신 방식

솔트 마스터와 미니언은 기본적으로 ZeroMQ 메시징 라이브러리를 사용하여 통신합니다. 이것은 파티들 사이에 매우 높은 성능의 네트워크 통신을 제공하여 Salt가 빠른 속도로 메시지와 데이터를 보낼 수 있게 한다. ZeroMQ는 독립적인 서비스가 아닌 라이브러리이기 때문에, 이 기능은 솔트 마스터와 솔트 미니언 데몬에서 기본적으로 사용할 수 있다.

ZeroMQ를 사용할 때 Salt는 마스터와 미니언을 인증하기 위한 공개 키 시스템을 유지한다. 처음 부팅할 때 미니언은 키 쌍을 생성하고 연결하도록 구성된 마스터 서버로 자격 증명을 보냅니다. 그런 다음 마스터는 미니언의 ID를 확인한 후 이 키를 수락할 수 있습니다. 그런 다음 두 당사자는 키로 암호화된 ZeroMQ를 사용하여 빠르고 안전하게 통신할 수 있습니다.

어떤 이유로 인해 노드에 솔트 미니언 데몬을 설치할 수 없는 경우 솔트는 SSH를 통해 명령을 내릴 수도 있습니다. 이 전송 옵션은 편의를 위해 제공되지만 성능이 상당히 저하되고 경우에 따라 다른 Salt 명령과 합병증이 발생할 수 있습니다. 성능, 보안 및 단순성을 위해 가능하면 Salt-minion 데몬을 사용하는 것이 좋습니다.

솔트 용어

솔트에 뛰어들기 전에, 사용될 몇몇 용어들을 숙지하는 것은 좋은 생각이다. 소금은 여러 가지 강력한 특징을 가지고 있지만 처음에는 이름과 그 기능을 일치시키기가 어려울 수 있다. 여러분이 볼 수 있는 더 일반적인 용어들을 살펴봅시다.

원격 실행: 실행 모듈(Execution Module) 및 기능(Function)

Salt는 원격 실행과 구성 관리 기능을 구분하려고 시도합니다. 원격 실행 기능은 실행 모듈(execution module)에서 제공합니다. 실행 모듈은 미니언에 대한 작업을 수행하는 관련 기능(function)의 집합입니다.

솔트에는 미니언에서 임의의 셸 명령을 실행할 수 있는 기능이 포함되어 있지만, 실행 모듈 뒤에 있는 아이디어는 “쉘아웃(shell out))”하지 않고도 명령을 실행할 수 있는 간결한 메커니즘을 제공하고 프로세스를 완료하는 방법에 대한 자세한 지침을 제공하는 것입니다. 모듈의 사용은 솔트가 시스템들 사이의 근본적인 차이점들을 추상화하도록 한다. Linux 또는 BSD를 실행하는 Minisons에서도 유사한 정보를 얻을 수 있습니다. 이러한 데이터를 수집하는 실제 메커니즘은 서로 다릅니다.

Salt는 즉시 사용할 수 있는 기능을 제공하기 위해 다양한 내장 실행 모듈을 제공합니다. 관리자는 미니어처 컴퓨터에서 실행할 수 있는 명령 라이브러리를 확장하기 위해 자체 모듈을 작성하거나 커뮤니티에서 작성한 모듈을 포함할 수도 있습니다.

구성 관리: 상태(State), 공식(Formula), 템플릿(Template)

Salt의 구성 관리 기능은 구성 파일의 리포지토리를 만들어 액세스할 수 있습니다. 이러한 리포지토리에 포함된 파일은 몇 가지 다른 유형일 수 있습니다.

상태(State)와 공식(Formula)

솔트의 구성 관리 부분은 주로 상태(state) 시스템을 사용하여 구현됩니다.

상태 시스템은 위에서 설명한 실행 모듈과 구별되는 상태 모듈(state module)을 사용합니다. 다행히도, 상태와 실행 모듈은 서로 매우 가깝게 미러링되는 경향이 있습니다. 관리자가 시스템을 배치해야 하는 상태를 설명할 수 있기 때문에 상태 시스템의 이름이 적절하게 지정됩니다. 실행 모듈과 마찬가지로 대부분의 상태 모듈은 기능 바로 가기를 나타내며 많은 일반적인 작업에 쉬운 구문을 제공합니다. 이렇게 하면 가독성을 유지할 수 있으며 구성 관리 파일 자체에 복잡한 논리를 포함할 필요가 없습니다.

솔트 공식(formula)은 특정 결과를 산출할 목적으로 배열된 상태 모듈 호출의 집합이다. 공식이 적용된 후 시스템의 모양을 설명하는 구성 관리 파일입니다. 기본적으로 이러한 데이터는 YAML 데이터 직렬화 형식으로 작성되어 높은 판독성과 기계 친화성 사이의 매우 좋은 중간 지점을 제공한다.

솔트 관리자는 미니언을 특정 수식 집합에 매핑하여 수식을 적용할 수 있습니다. 필요에 따라 수식을 특별하게 적용할 수도 있습니다. Minions는 제공된 정책에 따라 시스템을 가져오기 위해 에서 찾은 상태 모듈을 실행합니다.

SaltStack 조직 및 커뮤니티에서 만든 Salt 공식의 좋은 컬렉션을 이 GitHub 계정에서 찾을 수 있습니다.

템플릿

템플릿을 사용(templating)하면 Salt 공식 및 기타 파일을 보다 유연하게 작성할 수 있습니다. 템플릿은 미니언에 대해 사용 가능한 정보를 사용하여 공식 또는 구성 파일의 사용자 지정 버전을 구성할 수 있습니다. 기본적으로 Salt는 대체 기능 및 의사 결정을 위한 간단한 논리 구조를 제공하는 Jinja 템플릿 형식을 사용합니다.

렌더러(renderer)는 템플릿을 실행하여 유효한 상태 또는 구성 파일을 생성하는 구성 요소입니다. 렌더러는 입력을 구성하는 템플릿 형식과 출력으로 생성되는 데이터 직렬화 형식으로 정의됩니다. 위에서 설명한 기본값을 고려하여 기본 렌더러는 Jinja 템플릿을 처리하여 YAML 파일을 생성합니다.

미니언에 대한 정보 쿼리 및 할당

방대한 수의 시스템을 관리하기 위해 Salt는 각 호스트 시스템에 대한 정보를 필요로 합니다. 위에서 설명한 템플릿은 각 시스템과 연결된 데이터를 사용하여 각 미니언의 동작을 조정할 수 있습니다. 이 정보를 쿼리하거나 호스트에 할당할 수 있는 몇 가지 시스템이 있습니다.

그레인(Grain)

솔트 그레인은 미니언에 의해 수집되고 유지되며, 주로 그것의 근본적인 호스트 시스템에 관한 정보이다. 일반적으로 이러한 데이터는 솔트 미니언 데몬에 의해 수집되고 요청 시 마스터에 다시 전달됩니다. 이 기능은 다양한 용도로 활용할 수 있습니다.

예를 들어, 그레인 데이터는 원격 실행 또는 구성 관리를 위해 미니언 풀에서 특정 노드 하위 집합을 대상으로 지정하는 데 사용될 수 있습니다. Ubuntu 서버의 가동 시간을 확인하려면 그레인을 사용하여 이러한 시스템만 대상으로 지정할 수 있습니다.

그레인은 구성 변경 또는 명령에 대한 인수로도 사용할 수 있습니다. 예를 들어, 구성 파일을 변경하거나 명령에 대한 인수로 변경하기 위해 그레인을 사용하여 eth0 인터페이스와 연결된 IPv4 주소를 가져올 수 있습니다.

관리자는 미니언에게 그레인을 할당할 수도 있습니다. 예를 들어, 서버에 “역할”을 할당하기 위해 그레인을 사용하는 것은 매우 일반적이다. 그런 다음 위의 운영 체제 예와 유사한 노드의 하위 집합을 대상으로 지정하는 데 사용할 수 있습니다.

필러(Pillar)

미니언에 그레인을 할당하는 것은 가능하지만, 대부분의 구성 변수는 필러 시스템을 통해 할당될 것이다. 솔트에서 필러는 미니언에서 임의 할당된 데이터를 검색하는 데 사용할 수 있는 key-value 저장소를 나타냅니다. 이 기능은 사전 데이터 구조로 기능하며, 사전 데이터 구조는 조직의 목적으로 중첩되거나 계층화될 수 있습니다.

필러는 그레인 시스템보다 가치를 할당하는 데 몇 가지 중요한 이점을 제공합니다. 가장 중요한 것은 필러 데이터가 할당된 미니어처에서만 사용 가능하다는 점이다. 다른 미니언들은 내부에 저장된 값에 액세스할 수 없습니다. 따라서 노드 또는 노드의 하위 집합에 특정되는 중요한 데이터를 저장하는 데 이상적입니다. 예를 들어, 비밀 키 또는 데이터베이스 연결 문자열은 필러 구성에서 제공되는 경우가 많습니다.

구성 템플릿에 가변 데이터를 주입하는 방법으로 구성 관리 컨텍스트에서 필러 데이터를 활용하는 경우가 많습니다. Salt는 구성 파일의 가변 부분을 적용할 노드에 대한 특정 항목으로 바꾸기 위한 템플릿 형식을 제공합니다. 또한 이러한 방식으로 호스트 데이터를 참조하기 위해 곡물이 자주 사용됩니다.

마인(mine)

솔트 마인은 미니언에서 정기적으로 실행되는 명령의 결과를 저장할 수 있는 마스터 서버의 영역입니다. 이 시스템의 목적은 미니어처 컴퓨터에서 실행되는 임의 명령의 결과를 수집하는 것입니다. 그러면 인프라 전체에서 다른 구성 요소와 미니언에서 이 글로벌 저장소를 쿼리할 수 있습니다.

솔트 마인은 각 명령 실행에 대한 최신 결과만 저장하므로 기록 데이터에 액세스해야 하는 경우 도움이 되지 않습니다. 마인의 주요 목적은 이미 이용 가능한 그레인 데이터에 대한 유연한 보충물로 미니언 머신으로부터 최신 정보를 제공하는 것이다. 미니언들은 마인 시스템을 사용하여 상대방에 대한 데이터를 쿼리할 수 있다. 마이닝에서 미니언이 데이터를 새로 고치는 간격은 미니언 단위로 구성할 수 있습니다.

추가 기능

솔트는 위의 범주에 잘 맞지 않는 몇 가지 다른 시스템을 제공합니다.

리액터(Reactor)

솔트 리액터 시스템은 발생된 사건에 대응하여 조치를 트리거하는 메커니즘을 제공한다. Salt에서는 인프라 전체에서 변경 사항이 발생하면 salt-minion 또는 salt-master 데몬이 ZeroMQ 메시지 버스에서 이벤트를 생성합니다. 리액터 시스템은 이 버스를 감시하고 적절히 대응하기 위해 구성된 리액터와 사건(event)을 비교한다.

리액터 시스템의 주요 목표는 자동 상황 대응을 위한 유연한 시스템을 제공하는 것이다. 예를 들어 자동 확장 전략을 개발한 경우 시스템에서 리소스 요구를 동적으로 충족하는 노드를 자동으로 생성합니다. 각 새 노드는 이벤트를 트리거합니다. 리액터는 이러한 사건을 청취하고 기존 기반시설에 통합하여 새로운 노드를 구성할 수 있도록 설치될 수 있다.

러너(Runner)

솔트 러너는 미니언 대신 마스터 서버에서 실행되는 모듈입니다. 일부 러너는 시스템의 다양한 부품의 상태를 확인하거나 유지보수하기 위해 사용되는 범용 유틸리티입니다. 어떤 애플리케이션은 인프라를 보다 광범위한 범위에서 조정할 수 있는 기능을 제공하는 강력한 애플리케이션입니다.

리터너

솔트 리터너는 미니언에 대해 실행되는 액션의 결과를 보낼 대체 위치를 지정하는 데 사용됩니다. 기본적으로 미니언은 데이터를 마스터에 반환합니다. 리터너를 통해 관리자는 반환 데이터를 다른 대상으로 다시 라우팅할 수 있습니다. 일반적으로 이는 결과가 리터너가 지정한 대상과 미니언 명령을 시작한 프로세스로 반환됨을 의미합니다.

대부분의 경우 리터너는 결과를 데이터베이스 시스템이나 메트릭스 또는 로깅 서비스로 전달합니다. 이를 통해 이러한 시스템에 임의 데이터를 가져올 수 있는 유연한 방법을 제공합니다. 반환기를 사용하여 작업 캐시 및 이벤트 데이터와 같은 솔트의 특정 데이터를 수집할 수도 있습니다.

솔트 명령어

Salt는 위에 설명된 구성 요소를 활용할 수 있는 여러 명령을 제공합니다. 이러한 도구들 사이에는 기능 면에서 상당한 교차점이 있지만, 우리는 아래에 주요 기능을 강조하려고 시도했다.

  • salt-master: 이것은 마스터 데몬 프로세스입니다. 이 명령으로 마스터 서비스를 직접 시작할 수도 있고 일반적으로 init 스크립트 또는 service 파일을 통해 시작할 수도 있습니다.
  • salt-minion: 마찬가지로, 이것은 마스터와 통신하고 명령을 실행하는 데 사용되는 미니언 데몬 프로세스입니다. 대부분의 사용자는 init 스크립트 또는 서비스 파일에서도 이 작업을 시작합니다.
  • salt-key: 이 도구는 미니 공개 키를 관리하는 데 사용됩니다. 이 도구는 현재 키를 보고 잠재 미니언들이 보낸 공개 키에 대한 결정을 내리는 데 사용됩니다. 또한 미니언 아웃오브밴드(out-of-band)에 놓을 키를 생성할 수도 있다.
  • salt: 이 명령은 임시 실행 모듈을 실행하기 위해 미니언의 대상을 지정하는 데 사용됩니다. 이 도구는 원격 실행에 사용되는 기본 도구입니다.
  • salt-ssh: 이 명령을 사용하면 전송 메커니즘에 대해 ZeroMQ의 대안으로 SSH를 사용할 수 있습니다.
  • salt-run: 이 명령은 마스터 서버에서 러너 모듈을 실행하는 데 사용됩니다.
  • salt-call: 이 명령은 로그인한 미니언에서 직접 실행 모듈을 실행하는 데 사용됩니다. 마스터를 바이패스하여 문제가 있는 명령을 디버깅하는 데 자주 사용됩니다.
  • salt-cloud: 이 명령은 다양한 공급자의 클라우드 리소스를 제어하고 프로비저닝하는 데 사용됩니다. 새로운 미니언들은 쉽게 스핀업(spin up)하고 부트스트랩을 할 수 있다.

salt-api, salt-cp, 그리고 salt-syndic과 같은 다른 명령들도 있는데, 이것은 그렇게 자주 사용되지 않는다.

출처 : https://www.digitalocean.com/community/tutorials/an-introduction-to-saltstack-terminology-and-concepts
답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

You May Also Like

SaltStack 이해 : 통신

통신과 보안 이 절에서는 인증 및 보안에 대한 기본 개요와 함께 Salt 통신 모델에 대해 설명합니다. 아키텍처 모델…