2017년 3월 21일 화요일

Saltstack 이란

Salt is a new approach to infrastructure management built on a dynamic communication bus. Salt can be used for data-driven orchestration, remote execution for any infrastructure, configuration management for any app stack, and much more. saltstack homepage 
솔트는 인프라스트럭처 관리를 위한 자동화 도구입니다.솔트는 많은 서버를 쉽고 빠르게 제어하는 것을 목적으로 만들었다고 합니다. 2011년에 시작해서 지금은 가장 빠르게 발전하고, 가장 활동적인 오픈소스 프로젝트라고 하네요.

개요


솔트는 원격 실행 도구와 형상관리 도구 입니다. 원격 실행 기능은 운영자가 다양한 서버에 명령을 수행할 수 있도록 해줍니다. 형상관리 기능은 주어진 정책에 따라서 빠르고 쉽고 안전하게 인프라를 구성 할수 있게 도와줍니다. 

솔트 구성


솔트의 구조는 매우 단순합니다. 두 종류의 서버로 구성됩니다. 

Master

솔트 마스터는 인프라를 제어하고, 관리대상 서버에 대한 정책을 지정하는 서버입니다. 구성 데이터 저장소와 원격 명령을 실행하고 다른 시스템의 상태를 확인하는 제어 센터로 작동합니다. 이 기능을 제공하려면 salt-master라는 데몬이 설치되어 있어야 합니다. 
마스터가 없는 구성을 사용하여 인프라를 제어하는 것도 가능하지만 대부분은 솔트 마스터에서 제공하는 고급 기능을 사용하는 것이 더 유용합니다. 실제로 대규모 인프라를 관리하는 경우 마스터와 관련된 특정 구성요소나 작업을 전용 서버에 위임할 수 있습니다. 하위 마스터 시스템을 통해 명령을 릴레이 할 수 있는 계층형 마스터 구성도 가능합니다. 

Minion

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

솔트 구성요소간 통신방법


솔트 마스터와 미니언은 기본적으로 ZeroMQ 메시지 라이브러리를 사용하여 통신합니다. 이는 매우 높은 성능의 네트워크 통신을 제공하여 솔트가 빠른 속도로 메시지와 데이터를 보낼수 있게 합니다. ZeroMQ는 독립적인 서비스가 아닌 라이브러리 이기에 솔트 데몬에서 사용할 수 있습니다.  ZeroMQ를 사용하면 솔트는 마스터 및 미니언을 인증하기 위한 공개 키 시스템을 사용합니다. 처음 부팅할 때 미니언은 키 쌍을 생성하고, 연결하도록 구성된 마스터 서버에 자격 증명을 보냅니다. 마스터는 미니언의 신원을 확인하고 이 키를 받아들입니다. 그러면 두 서버는 주고 받은 키로 암호화된 데이터를 빠르고 안전하게 통신할 수 있습니다.  어떤 이유로 솔트 미니언을 노드에 설치할 수 없다면 ssh를 통해 명령을 내릴 수 있습니다. 이 전송 옵션은 편의를 위해 제공되지만 성능이 상당히 떨어지며 경우에 따라 다른 솔트 명령과의 복잡성을 초래할 수 있습니다. 가능한 경우 성능, 보안, 단순성을 위해 솔트 미니언을 사용하는 것이 좋습니다. 

용어


솔트에서 사용되는 용어에 익숙해 지는것이 좋습니다. 강력한 기능을 제공하지만 처음에는 기능과 이름을 맞추기가 어려울 수 있습니다. 

원격실행: 실행모듈(Execution Module) 및 함수(Function)

솔트는 원격실행과 구성관리 기능을 구분해서 제공합니다. 원격 실행기능은  실행 모듈을 통해 제공됩니다. 이 모듈은 미니언에 대한 작업을 수행하는 관련 함수들의 집합입니다.   

솔트가 미니언에서 임의의 쉘 명령을 수행할 수 있도록 하는 기능을 가지고 있지만, 실행모듈은 쉘아웃 없이 명령을 실행하기 위한 간결한 메커니즘을 제공하는 것, 프로세스를 완료시키기 위한 자세한 지침을 제공하는 것입니다. 모듈을 사용하면 시스템간의 차이점을 추상화 할 수 있습니다. 실제로 데이터를 수집하는 메커니즘이 서로다른 리눅스나 BSD를 사용하는 미니언에서 비슷한 정보를 얻을수 있습니다.  솔트는 즉시 사용가능한 기능을 제공하기 위해서 적절한 실행모듈을 선택하여 제공합니다. 관리자는 미니언에서 실행될 명령 집합을 확장하기 위해서 자신이 직접 모듈을 작성하거나 커뮤니티에서 작성된 모듈을 포함할수 있습니다. 

구성관리: 상태(State), 수식(Formulas) 및 탬플릿(Templet)

솔트의 구성관리 기능은 구성파일의 레파지토리를 생성해야 사용할 수 있습니다. 이 레파지토리에 포함된 파일은 몇가지 유형이 있습니다. 

상태 및 수식

솔트의 구성관리 기능은 주로 상태 시스템을 사용하여 구현됩니다.  상태 시스템은 위에 설명된 실행 모듈과는 다른 상태 모듈을 사용합니다. 다행이도 상태모듈과 실행모듈은 서로 밀접하게 대면하는 경향이 있습니다. 상태 시스템은 관리자가 시스템을 배치해야 하는 상태를 설명할 수 있으므로 적절하게 명명됩니다. 실행모듈과 마찬가지로 대부분의 상태 모듈은 기능 단축키를 나타내며 많은 공통 작업에 대한 간단한 구문을 제공합니다. 이렇게 해서 가독성을 유지하고 구성관리 파일 자체에 복잡한 논리를 포함할 필요가 없습니다. 

솔트 수식은 특정 결과를 산출하기 위해 정렬 된 상태 모듈 호출 집합 입니다. 구성관리 파일은 수식이 적용된 후 시스템이 어떻게 보이는지 나타내는 파일입니다. 기본적으로 YAML 데이터 직렬화 형식으로 작성되어 가독성과 기계 친숙성 사이의 중간지점을 제공합니다. 

솔트 관리자는 미니언을 특정 수식 집합에 매핑하여 수식을 적용할 수 있습니다. 필요에 따라 임시로 적용 할 수도 있습니다. 미니언은 제공된 정책에 따라 시스템으로 가져온 상태 모듈을 실행합니다. 

템플릿

템플릿은 솔트 수식과 다른 파일들이 좀더 유연한 상태로 쓰여지는 것을 허용합니다. 템플릿은 수식의 사용자 정의된 버전 또는 설정 파일을 구성하기 위해서 미니언에 대한 가능한 정보를 사용할 수 있습니다. 기본적으로 솔트는 치환 기능과 의사결정을 위한 간단한 논리를 제공하는 진쟈(Jinja) 템플릿 포맷을 사용합니다.

렌더러(Renderers)는 템플릿을 실행하여 유효한 상태나 컨피그 파일을 생성하는 컴포넌트 입니다. 렌더러는 입력을 구성하는 템플릿 형식과 출력으로 생성되는 직렬화된 데이터 형식으로 정의 됩니다. 기본 렌더러는 YAML을 생성하기 위해서 진쟈(Jinja) 템플릿을 처리합니다. 

미니언에 대한 질의와 정보의 할당

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

그래인스 (Grains)

솔트 그래인스는 주요 호스트 시스템과 관련하여 미니언이 수집하고 유지하는 정보조각입니다. 이들은 일반적으로 솔트 미니언 데몬에 의해 수집되고 요청시에 마스터에게 다시 전달됩니다. 이기능은 다양한 목적으로 활용될 수 있습니다. 
예를 들어 솔트 그래인스의 데이터는 원격 실행 또는 구성관리를 위해 미니언 풀에서 노드의 특정 하위 집합을 대상으로 사용할 수 있습니다. 우분투 서버의 가동시간을 확인하려면 그래인스를 사용하여 특정 컴퓨터만 대상으로 지정할 수 있습니다. 
그래인스는 구성변경 또는 명령에 대한 인수로 사용될 수도 있습니다. 예를 들어 그래인스를 사용하여 구성 파일 변경 또는 명령인수로 특정 이더넷 인터페이스와 연관된 IPv4 주소를 가져올 수 있습니다. 
관리자는 그래인스를 미니언에게 할달 할 수도 있습니다. 예를 들어 그래인스를 사용하여 서버에 역할을 할당하는 것이 일반적입니다. 그러면 위의 운영체제의 예와 유사한 노드 서브세트를 대상으로 사용할 수 있습니다. 

필라 (Pillar)

그래인스를 미니언에게 할당하는 것이 가능하지만 대부분의 구성 변수는 필라 시스템을 통해 할당됩니다. 솔트에서 필라는 미니언이 임의로 할당 된 데이터를 검색하는데 사용할 수 있는 키값 저장소를 나타냅니다. 이는 조직적 목적으로 중첩되거나 계층화 될 수 있는 사전 데이터 구조로서 기능합니다. 
필라는 값을 할당하기 위해 그래인스 시스템 보다 몇가지 중요한 이점을 제공합니다. 가장 중요한 점은 필라 데이터는 할당된 미니언에서만 사용할수 있다는 것입니다. 다른 미니언 들은 내부에 저장된 값에 접근할수 없습니다. 따라서 노드 또는 노드 하위집합에 대한 중요한 데이터를 저장하는데 이상적입니다. 예를 들어. 비밀번호 또는 데이터베이스 연결문자열은 대개 필라 구성으로 제공됩니다. 
필라 데이터는 종종 구성 데이터를 구성 템플릿에 주입하는 방법으로 구성관리 컨텍스트에서 활둉됩니다. 솔트는 구성 파일의 변수부분을 적용할 노드에 특정한 항목으로 대체하기 위한 템플리트 형식을 제공합니다. 그래인스가 호스트 데이터를 참조할 때 종종 이 방법이 사용됩니다.

마인 (Mine)

솔트 마인은 미니언에게 정기적으로 실행되는 명령의 결과가 저장될 수 있는 마스터 서버의 영역입니다. 이 시스템의 목적은 미니언 머신에서 실행되는 임의의 명령의 결과를 수집하는 것입니다. 이 글로벌 저장소는 인프라 전반에서 다른 구성 요소와 미니언이 쿼리 할 수 있습니다. 
솔트 마인은 각 명령 실행에 대한 가장 최근 결과만 저장합니다. 즉 기록 데이터에 엑세스 해야하는 경우 도움이 되지 않습니다. 마인의 주요 목적은 이미 사용가능한 그래인 데이터에 대한 유연한 보완재로서 미니언 머신의 최신 정보를 제공하는 것입니다. 미니언은 마인 시스템을 사용하여 상대방에 대한 데이터를 쿼리할 수 있습니다. 미니언이 마인에서 데이터를 새로 고치는 간격은 미니언 단위로 구성할 수 있습니다.

추가 기능들

리액터 (Reactor)

솔트 리액터 시스템은 생성된 이벤트에 반응하여 동작을 트리거 하는 메커니즘을 제공합니다. 솔트에서는 인프라 전체에서 발생하는 변경으로 인해 미니언 또는 마스터 데몬이 ZeroMQ 메시지 버스에서 이벤트를 생성합니다. 리엑터 시스템은 이 버스를 감시하고 적절히 대응하기 위해 구성된 리액터와 이벤트를 비교합니다.
리엑터 시스템의 주요 목표는 자동 상황 반응을 생성하기 위한 유연한 시스템을 제공하는 것입니다. 예를들어 자동 확장전략을 개발하는 경우 시스템은 리소스 요구를동정으로 충족시키는 노드를 자동으로 생성합니다. 각각의 새 노드는 이벤트를 트리거 합니다. 리액터는 이러한 이벤트를 듣고 새노드를 구성하여 이를 기존 인프라에 통합 할수 있습니다. 

러너 (Runner)

솔트 러너는 미니언이 아닌 마스터 서버에서 실행되는 모듈입니다. 일부 러너는 시스템의 여러부분의 상태를 점검하거나 유지보수를 수행하는데 사용되는 범용 유틸리티 입니다. 일부는 더 넓은 범위에서 인프라를 조율할 수 있는 강력한 응용프로그램 입니다. 

리터너 (Returner)

솔트 리터너는 미니언에 대한 행동 결과가 전송되는 대체 위치를 지정하는데 사용됩니다. 기본적으로 미니언은 데이터를 마스터에게 반환합니다. 리터너는 관리자가 리턴데이터를 다른 목적지로 재 라우트 할수 있게합니다. 일반적으로 결과는 리터너와 미니언 명령을 시작한 프로세스에 지정된 대상으로 반환됨을 의미합니다.  대개 리터너는 결과를 데이터베이스 시스템이나 메트릭 또는 로깅 서비스로 전달합니다. 이것은 임의의 데이터를 이들 시스템으로 가져오기 위한 유연한 방법을 제공합니다. 리터너는 작업 캐시, 이벤트 데이터와 같은 솔트의 특정 데이터를 수집하는데 사용될 수 있습니다.

댓글 1개:

  1. salt로 client나 agent용 배포 시스템을 구성할 수도 있을까요?

    답글삭제

salt-ssh를 이용한 salt minion 자동설치

salt-ssh의 작동방식 일반적으로 salt는 master와 minion이 zeroMQ를 이용하여 통신 이렇게 하려면 관리하려는 모든 서버에 minion이 설치되어야 함 salt-ssh는 minion 없이 서버를 관리할 수 있는 기능을 제공...