Home | 문태준 | 시스템어드민 메일링 | Sys Admin 세미나
Skip to end of metadata
Go to start of metadata

이번 장에서는 MCollective 로 다음과 같은 작업을 할 것이다.

  • 필터에서 노드에 적용한 Puppet Classes 사용
  • facts 사용
  • Puppet agent 에 대한 질의, 시작, 정지, 재시작
  • 특수한 커맨드 라인 옵션과 함께 Puppet Agent 실행
  • Puppet resources 를 사용하여 노드의 설정 질의 및 변경하기

MCollective 를 이용하면 agent, cron 으로 실행하기, Puppet 의 CLI 로 할 수 없는 작업을 새로운 방법을 사용할 수 있다.

https://github.com/puppetlabs/mcollective-puppet-agent 참고.

Puppet Agent 설치하기

첫번째로 할 것은 MCollective Puppet agent를 설치하는 것이다. 이제 Puppet 으로 설치를 해 보자.

Hiera 를 사용하고 있다면 mcollective::plugin::agents 배열에 Puppet agent 목록을 나열해서 agent를 설치할 수 있다. 이번 예에서는 Puppet client가 설치되어는지 확인하기 위해 Puppet agent 의존성을 설정하고 있다:

Puppet 상태 체크하기

MCollective Puppet agent를 설치하고 mcollectived 를 재시작 했으면 관리 노드에 MCollective Puppet client를 설치해야 한다. 먼저 확인을 해야 하는 것은 어떤 시스템에 MCollective Puppet agent를 설치했는지 확인하는 것이다.

작 은 리소스만 사용을 하기 때문에 이러한 Puppet runs 은 매우 빠를 것이다. 이 책에서 제공하는 MCollective 모듈을 사용하는 최소한의 환경에서는 오직 몇가지 리소스만 쓴다. 프로덕션 환경에서는 몇백에서 몇천가지 리소스를 사용하기 때문에 실행 시간이 덜 길게 걸릴 것이다.

Puppet 대몬 제어하기

유지보수하는 동안, 특정 노드의 Puppet agent 를 비활성화하고 싶을 것이다. agent 를 비활성화하면서 다른 사람이 알 수 있도록 메시지를 추가할 수도 있다. (message 부분이 어떻게 보여지는지는 이해가 안 감)

다시 Puppet agent를 재활성화한다.

특정 필터에 해당하는 노드에 대해서 Puppet agent 를 활성화, 비활성화하는데 동일한 명령을 사용한다.

Puppet 실행하기

MCollective Puppet agent 는 Puppet 실행을 제어하는 강력한 도구를 제공한다. help 명령어를 이용해서 상세한 옵션을 볼 수 있다.

한 대의 시스템에서 Puppet 을 실행하여 테스팅을 해 볼 수 있다.

모든 CentOS 의 sudoer 파일을 픽스하기 위해서 Puppet 을 실행하려면 어떻게 하면될까?

이 때, Puppet 대몬이 활성화되지 않은 호스트에서는 tags 와 noop 옵션만을 넘길 수 있다. 특정한 커맨드 라인 옵션으로 Puppet 을 실행하려면 Puppet daemon 을 주기적으로 cron 을 이용해 실행하거나  MCollective를 이용해서 실행해야 한다. If you leave the service running, you can still use runonce or runall, buy you cannot pass runtime options.

Puppet 을 로컬 manifests 로 실행을 한다면(Puppet server 없는 환경) 동시에 몇천대의 호스트에서 Puppet을 실행할 수 있을 것이다. 그러나 Puppet server 기반의 환경이라면 동시에 대규모의 호스트에서 Puppet 을 실행하기 힘들 수 있다. 이와 같이 동시에 매우 많은 호스트에서 Puppet 을 실행하는 경우에는 동시에 실행할 호스트 숫자를 제한할 수 있다.

다음 예제에는 동시에 두대씩 처리해서 모든 서버에서 천천히 Puppet 을 실행하는 예제이다.

모든 웹서버에 대해서 Puppet 을 실행하며 동시에 다섯 대씩 작업을 한다.

runall 은 batch 와 비슷하다. 그런데 batch는 sleep time 동안 기다리는데 runall은 다른 노드에서 작업을 시작하기 전에 현재 실행하고 있는 노드의 Puppet 대몬 작업이 실행이 끝나는 것을 기다린다 혹시나 중복되어 실행될 가능성을 줄이려고 한다면 batch 옵션을 이용할 수 있다. ()


mco puppet --batch 명령어는 적용이 안되었음. 확인 필요함. splay 옵션을 이용하여 puppet 을 실행하는 방법도 있을 것임.

Puppet Resource Types 변경하기

MCollective Puppet agent 는 기능이 매우 강력하며 Puppet 의 Resource Abstraction Layer (LAL)에 기반하여 변경을 할 수도 있다. 예를 들어 특정 호스트에서 httpd 서비스가 정지되었다고 확인을 하려면 다음과 같이 할 수 있다.

필터를 이용하여 이러한 제한을 할 수 있다. 예를 들면 다음과 같이 Puppet 에서 apache를 관리하지 않는 호스트에만 작업을 할 수 있다. (이 예제는 실제 작동하지 않음. 확인 필요.)

이번 섹션는 Puppet을 이용하여 강력하게 제어할 수 있는 부분을 설명하고 있다. Puppet RAL을 이용하면 Puppet 이 알고 있는 모든 리소스 타입에 대해서 바로 접근을 할 수 있다. 어떻게 이러한 기능을 제한할지는 다음 섹션을 조심해서 읽어봐야 한다.

 

어떤 리소스를 제어할 수있는지 제한하기

기본은 MCollective 에서 아무런 리소스도 제어할 수 없다. MCollective agent 에서 기능은 활성화 되어 있지만 비어있는 whitelist 목록을 가지고 있다. whitelist 를 통해서 작업을 제한할 수 있다. 조심해서 사용을 해야 한다.

다음이 기본 설정이다.

resource 제어를 원하는 것이 있으면 server.cfg 파일을 편집하여 whitelist 나 blacklist 에 추가할 resource를 지정하면 된다.

특정 resource 만 허용하는 whitelist

특정 resource 만 제외하고 다른 모든 것을 허용하는 blacklist

MCollective 에서는 whitelist 와 blacklist 를 섞어서 함께 사용하는 것은 허용을 하지 않는다.

Puppet Resources 에 대해 MCollective 블락하기

MCollective 에서 Puppet 정책에 어긋나게 변경을 하는 것을 막기 위해서 기본은 MCollective 에서 아무런 Puppet 리소스도 제어할 없도록 되어 있다. MCollective 가 Puppet 에서 제어하는 리소스를 변경할 수 있도록 하려면 아래 설정을 활성화해야 한다. (기본값임)

Labels
  • No labels