더북(TheBook)

퍼펫으로 시스템을 제어하는 원리

그림 10-1은 퍼펫으로 시스템이 변경되는 과정을 보여줍니다. 관리할 시스템을 변경하는 퍼펫 응용 프로그램을 ‘퍼펫 에이전트Puppet Agent’라고 합니다. 퍼펫 패키지를 설치하면 퍼펫은 기본적으로 에이전트 모드로 실행됩니다.

그림 10-1 퍼펫으로 시스템이 변경되는 과정

1. 시스템 관리자가 퍼펫만의 고유한 언어를 사용해서 명세를 작성합니다. 이러한 명세를 매니페스트(manifests)라고 하는데, 매니페스트에는 적용 대상 시스템을 구분하고 시스템 자원을 어떻게 관리할지 선언합니다.

2. puppet apply 명령을 실행하면 매니페스트를 해당 시스템에 필요한 제어 정보인 카탈로그(catalog)로 변환합니다. 이 과정을 컴파일(compile)이라고 합니다.

3. 데몬 형태로 실행 중인 퍼펫 에이전트는 카탈로그를 적용해서 해당 시스템을 변경하고 결과를 보고합니다.

Tip

프로그래밍 언어에서 프로그래머가 작성한 소스 코드를 바이너리 코드로 변환하는 과정을 컴파일이라고 하는데 퍼펫에서는 다른 의미로 사용됩니다.

퍼펫으로 네트워크로 연결된 다른 시스템을 제어하는 과정은 다소 차이가 있습니다. 다른 시스템을 제어하는 서버 시스템은 퍼펫 마스터 모드로, 제어 대상 클라이언트 시스템은 퍼펫 에이전트 모드로 실행합니다. 각 퍼펫 에이전트가 퍼펫 마스터에서 전달받은 변경 사항을 제어 대상 시스템에 적용하는 과정이 큰 틀입니다. 그림 10-2를 살펴봅시다.

그림 10-2 퍼펫으로 다른 시스템을 변경하는 과정

1. 관리 대상 시스템에서 실행되는 퍼펫 에이전트가 퍼펫 마스터 서버에 카탈로그를 요청합니다.

2. 시스템 관리자는 미리 매니페스트를 작성하고 puppet apply 명령을 실행해서 컴파일한 카탈로그를 준비해둡니다. 퍼펫 마스터는 카탈로그를 미리 준비해뒀다가 에이전트의 요청이 오면 적용할 시스템에 해당하는 카탈로그를 전송합니다.

3. 퍼펫 에이전트는 마스터에서 받은 카탈로그를 적용해서 해당 시스템을 변경하고 변경 결과를 마스터에 알립니다.

Tip

퍼펫으로 관리할 대상 시스템을 노드(node)라고 합니다.

퍼펫 에이전트가 퍼펫 마스터로부터 변경된 설정 정보를 끌어오기 방식 pulling으로 운영되므로 시스템 관리자는 퍼펫 마스터 서버에서 매니페스트만 잘 작성하면 됩니다. 매니페스트는 기능별로 모듈화해서 작성 가능하며 결과적으로 매니페스트 코드의 가독성을 높이고 분리한 모듈을 재사용하는 등 대상 시스템을 유연하게 제어하는 데 도움이 됩니다.

퍼펫 마스터와 에이전트는 보안 프로토콜인 SSLSecureSocketLayer로 인증 과정을 거쳐 자료를 암호화해서 통신합니다. 마스터와 에이전트로 분리해서 동작하기 때문에 모든 관리 대상 시스템마다 매니페스트를 컴파일하는 대신 퍼펫 마스터 서버에서만 컴파일하면 되므로 전체 시스템의 부하를 줄일 수 있고, 전체 매니페스트 대신 해당 시스템에 해당하는 카탈로그만 받아오면 되기 때문에 시스템 제어 정보가 노출되지 않는 장점이 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.