yoncho`s blog
AutoPi | SaltStack이란? 본문
AutoPi 구조
AutoPi의 구조는
Raspberry Pi OS에 SaltStack을 올리고
그 위에, AutoPi System을 올려서 동작시킨다.
1.0 SaltStack 이란?
인프라 규모가 커질 수록 서버 부담과 급증하는 트래픽 증가에
대처하는 서버를 구축하기 위해선 자동화가 필수다.
SaltStack은 이런 대규모 인프라 관리를 위한 자동화 관리 시스템이다.
1.1 SaltStack 구조
- Salt-Master
SaltStack에서 Server역할을 담당한다.
Master는 등록된 Minion에게 명령을 publishing하고
그 결과를 취합해 보여주는 역할이다.
1 Single Master는 수천 Minion을 관리할 수 있다. - Salt-Minion
Agent 역할이며, 구성 자동화를 하기 위한 대상 서버에 설치하면된다.
Master명령을 기다리다가, 명령이오면 작업을 수행한다.
만약, 서버에 설치가 불가능하면
SSH로 명령 push가 가능하다. - ZeroMQ
Salt-Master와 Salt-Minion간 통신에 사용되는
비동기 메시징 라이브러리이다.
Salt-Master 설치하면 자동으로 ZeroMQ도 함께 설치된다.
Publish Port는 4505을 사용하며,
Return Port는 4506dmf 사용한다.
- Minion은 항상 Master 명령을 듣기위해 publish port(4505)를 listening한다.
- Master가 명령을 publish port로 Minion들에게 전달한다.
- 모든 Minion들은 비동기 형태로 동시에 명령을 받아 수행한다.
- Minion들이 명령을 수행한 결과를 return port(4506)로 반환한다.
- return port는 Minion이 Master에게 파일을 요청하거나, Minion의 특정 데이터 값을 요청할 때 사용된다.
1.2 SaltStack 특징
- Python 기반SaltStack 자체가 Python으로 개발되었고, SaltStack의 모듈, 함수들이
Python코드 기반이다. 내장 모듈이 많아서 따로 원하는 모듈 개발할 일이 거의 없다. - 빠르고, 단순하다ZeroMQ를 통해 통신, Agent요청에 대한 비동기 병렬 처리로 빠르다. Server-Agent 구조로 단순하다.
- YAML 포맷의 설정파일 / Jinja2 Template 사용자동화할 작업 명세 sls파일은 YAML포맷을 기본으로 한다,
Template로 Jinja2을 이용해 로직 처리를 한다. - AES 암호화 통신Salt-Minion이 Master에 처음 등록될 때, Master에게
자신의 Public Key를 전달한다. 그러면 Master는 이 키를 저장하고
해당 Minion의 등록을 허락하는 절차를 거친다.
이후, Master와 Minion은 ZeroMQ 통신을 할때,
public key와 AES key를 이용해 암호화된 통신을 한다. - Automation초기 시스템 구성을 자동화 할 수 있고, 진행중인 관리를 확장,
복구 및 수행할 수 있게 자동화할 수 있다. 배포 및 유지 관리도 자동화가 된다.
1.3 Salt 용어
원격실행 : 실행 모듈(Execution Module) 및 함수(Function)
Salt는 원격실행과 구성관리 기능을 구분해놨다.
실행 모듈을 통해 원격실행기능이 제공되며,
모듈은 미니언에 대한 작업 수행 관련 함수 집합이다.
관리자는 Minion에서 실행될 모듈 확장을 위해
직접 모듈을 작성하거나, 커뮤니티에서 작성된 모듈을 포함시킬 수 있다.
구성관리 : 상태(State), 수식(Formulas), 탬플릿(Templet)
Salt의 구성관리기능은 상태 시스템을 사용해 구현된다.
Salt Formulas는 특정 결과 산출을 위해 배열된 상태 호출의 집합이다.
구성관리파일은 공식이 적용된 후 시스템의 상태를 나타내는 파일이다.
기본적으로 YAML 데이터 직렬화 형식으로 작성되어있다.
Salt Templet은 템플릿 사용시, Salt Formulas와 기타 파일을 보다 유연하게
작성할 수 있다. Salt는 대체 기능 및 의사결정 논리를 제공하는 Jinja Templet을
사용한다.
Randerers는 템플릿을 실행해 유효 상태나 Configue파일을 생성한다.
기본 렌더러는 YAML을 생성하기위해 Jinja 템플릿을 처리한다.
1.4 Salt System (about Minion)
Salt는 각 시스템과 관련된 데이터를 사용해 미니언을 동작하게한다.
이 데이터를 쿼리하거나 호스트에 할당하기위한 시스템이 몇개 있다.
- 그래인스(Grains)그래인스는 주요 호스트 시스템과 관련해 미니언이 수집, 유지한 데이터 조각이다.
미니언 데몬에 의해 수집되고 요청시 마스터에게 전달한다.
그래인 데이터는 원격 실행 또는 구성관리를 위해 미니언 풀에서 특정노드 하위 집합을
대상으로 지정하는데 사용할 수 있다.
그래인스는 구성변경 또는 명령 인수로 사용될 수 있다.
그래인스로 명령 인수로 특정 이더넷과 연관된 IPv4주소를 가져올 수 있다.
그래인스를 사용해 서버에 역할을 할당하는게 일반적이다. - 필라(Pillar)대부분 구성 변수는 필라 시스템을 통해 할당된다.
미니언에서 임의 할당된 데이터를 검색하는데 사용할 수 있는 Key-Value 저장소를 나타낸다.
필라는 값 할당을 위해 몇가지 이점을 제공하는데,
필라 데이터는 할당된 미니언에서만 사용할 수 있다.
노드 또는 노드 하위 집합에 대한 중요한 데이터를 저장하는데 이상적이다.
비밀번호와 데이터베이스 연결 문자열은 거의 필라 구서으로 제공된다. - 마인(Mine)미니언에서 정기적으로 실행되는 명령의 결과를 저장할 수 있는
마스터 서버의 영역이다. 미니언 디바이스에서 실행되는 명령 결과를 수집한다.
이 저장소는 인프라 전반에서 다른 요소와 미니언이 쿼리할 수 있다.
각 명령 실행에 대한 가장 최근 결과만 저장하기 때문에,
기록 데이터에 엑세스해야하는 경우 도움 되진 않는다.
주요 목적은 이미 이용가능한 그래인 데이터에 대한 유연 보완재로
미니언 디바이스의 최신 정보를 제공한다.
미니언은 마인 시스템을 이용해, 상대방 데이터를 쿼리할 수 있다. - 리액터(Reactor)생성된 이벤트에 반응해 동작을 트리거하는 기능을 제공한다.
인프라 전체에서 발생한 변경으로 미니언 또는 마스터 데몬이 ZeroMQ버스에
이벤트를 생성한다. 리액터는 이 버스를 감시하고 적절한 대응을 위해
구성된 리액터와 이벤트를 비교한다.
즉, 자동 상황 반응을 생성하기 위한 유연한 시스템을 제공하는 것이다. - 러너(Runner)마스터 서버에서 실행되는 모듈, 일부는 시스템의 여러부분의 상태 점검 및
유지 보수를 수행하는 범용 기능이고, 다른 일부는 더 넓은 범위에서
인프라를 조절할 수 있는 강력한 기능이다. - 리터너(Returner)미니언 행동 결과가 전송되는 대체 위치를 지정할 때 사용한다.
기본적으로 미니언은 마스터에게 데이터를 반환한다.
리터너는 관리자(외부 접근자)가 리턴데이터를 다른 목적지로
재전송할 수 있게 한다. 즉, 데이터를 원하는 곳으로 가져올 수 있다.
대부분 리터너는 데이터를 데이터베이스나 로깅서비스로 전달한다.
작업 캐시, 이벤트 데이터와 같은 Salt 특정 데이터 수집에 이용된다.
참고
[SaltStack]
'기술, 나의 공부를 공유합니다. > [Vehicle] Etc' 카테고리의 다른 글
FlexRay, 자동차 통신 프로토콜 FlexRay (4) | 2024.09.28 |
---|---|
LIN, 자동차 통신 프로토콜 Local Interconnect Network (0) | 2024.09.28 |