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

문서설명

Puppet을 사용하기 위한 Puppet 기능 분석 및 설정 분석을 위한 페이지입니다.

Puppet

문서 : http://docs.puppetlabs.com/
서적 : Pulling Strings with Puppet: Configuration Management Made Easy

처음에 puppet 테스팅을 할 때는 위키문서보다 Pulling Strings with Puppet 책이 더 낫습니다.

시스템구성

Puppet Master server : puppet certs 서버. puppet client 에 대한 인증 기능 수행
Puppet File server : puppet file 배포용
Puppet Reporting server : puppet reporting 용

summary

  • puppet 에서 필요한 프로그램 설치하기 : ruby, ruby-libs, facter, libselinux-ruby, ruby-augeas, ruby-shadow, augeas-libs, puppet
  • Puppet Master server 구성 : puppet 설치, puppet-server 설치, master 서버 구성, apache 및 passenger 연동하기
  • Puppet File server 구성 : puppet 설치, puppet-server 설치, apache 및 passenger 연동하기
  • Puppet client 구성 : puppet 설치

puppet 설치 및 구성

puppet, puppet-server 설치

설치 매뉴얼http://docs.puppetlabs.com/guides/installation.html

Puppet 다운로드 사이트에서 2010.12.07 현재 stable 버전은 2.6.4 이며 legacy 버전은 0.25.5 이다. EPEL 에 올라와 있는 패키지는 2010.12.07 현재 puppet-0.25.5-1, puppet-server-0.25.5-1 이다.

Puppet 다운로드 사이트에서 Facter 최신 버전은 1.5.8 이다.

puppet 에서 필요한 패키지는 다음과 같다.
CentOS 5.x : ruby(CentOS 포함. ruby-libs 함께 설치함), facter(EPEL), libselinux-ruby(CentOS 포함), ruby-augeas(EPPL), ruby-shadow(EPEL), augeas-libs(ruby-augeas 에서 필요. EPEL), puppet(EPEL)

http://download.fedora.redhat.com/pub/epel/5/x86_64/repoview/facter.html
http://download.fedora.redhat.com/pub/epel/5/x86_64/repoview/ruby-augeas.html
http://download.fedora.redhat.com/pub/epel/5/x86_64/repoview/ruby-shadow.html
http://download.fedora.redhat.com/pub/epel/5/x86_64/repoview/augeas-libs.html
http://download.fedora.redhat.com/pub/epel/5/x86_64/repoview/puppet.html
http://download.fedora.redhat.com/pub/epel/5/x86_64/repoview/puppet-server.html

CentOS 4.x : ruby(CentOS 포함. ruby-libs 함께 설치함), facter(EPEL), libselinux-ruby(CentOS 포함), ruby-augeas(EPPL), ruby-shadow(EPEL), augeas-libs(ruby-augeas 에서 필요. EPEL), puppet(EPEL)

http://download.fedora.redhat.com/pub/epel/4/x86_64/repoview/facter.html
http://download.fedora.redhat.com/pub/epel/4/x86_64/repoview/ruby-augeas.html
http://download.fedora.redhat.com/pub/epel/4/x86_64/repoview/ruby-shadow.html
http://download.fedora.redhat.com/pub/epel/4/x86_64/repoview/augeas-libs.html
http://download.fedora.redhat.com/pub/epel/4/x86_64/repoview/puppet.html

참고로 EPEL 레포지토리를 사용하는 경우에는 EPEL/FAQ를 참고하여 yum 레파지토리에 등록하여 사용을 할 수 있다.

rpm 으로 설치하는 경우 puppet rpm 에서 puppet 사용자, puppet 그룹을 자동으로 생성하고 puppet service 를 등록한다. puppet-server rpm 에서는 puppetmaster service 를 등록한다.
옵션에서 help를 이용 도움말을 보려면 ruby-rdoc 패키지도 설치를 해야 한다.

puppet 에서 server, client 기본 포트는 8140이다. passenger 는 8145 port이다.

puppet CentOS 5 설치하기

CentOS 5 x86_64 다운로드

CentOS 5 i386 다운로드

CentOS 5 i386 의 경우 EPEL에서 ruby-augeas, ruby-shadow 파일만 다운로드가 안되어 임시로 다른 곳에서 받음.

Puppet 설치하기. 참고로 EPEPL 에서 설치하는 패키지 중 ruby-augeas, ruby-shadow, augeas-libs 는 x86_64, i386 이 나누어져 있으며 facter, puppet, puppet-server 는 구분없이 설치 가능하다.

puppet 패키지 삭제하기

EPEL 에 있는 puppet 과 새로 만든 puppet rpm 에서 의존성 패키지가 다르게 나온다.

puppet CentOS 4 설치하기

CentOS 4 x86_64 다운로드

CentOS 4 i386 다운로드

CentOS 4 i386 의 경우 EPEL에서 facter, ruby-augeas, puppet 파일만 다운로드가 안되어 임시로 다른 곳에서 받음.

Puppet 설치하기.

puppet-server

puppet-server 는 서버용으로 사용하기 위한 몇가지 서비스 프로그램을 포함하고 있다.

puppet master 설정하기

puppet, puppet-servers 는 미리 설치가 되어 있어야 한다.

/etc/puppet/puppet.conf

manifest : /etc/puppet/prod-manifests/site.pp
modulepath : /etc/puppet/prod-modules

puppetd 에서 server, reportserver, ca_server 를 서로 다르게 구성한다.
puppetmaster 에서 certdnsnames 를 지정해 주어야 SSL 을 이용할 경우 여러 도메인을 사용할 수 있다.

puppetmasterd 에 certdnsnames 를 지정함. 처음 설치하고나면 puppet 호스트는 자동으로 서버 및 클라이언트에서 puppet 으로 된다. 별도의 도메인 네임을 이용하여 클라이언트에서 접속을 하려면 아래와 같이 호스트네임이 서버 certificate 와 다르다고 나온다.

manifest, module 설정

manifest 는 puppet 의 설정파일이 들어가는 디렉토리를 말한다.
별도 설정하지 않는 경우 /etc/puppet/manifests/ 로 지정이 되며 puppetmasterd 실행시 site.pp 파일을 읽어온다.
아래에서는 subversion rpm 이 설치되어 있는지 확인하여 설치가 안 되어 있다면 설치하고 test 모듈에서 puppet-test-source 파일을 /tmp/puppet-test-target 으로 복사하는 설정이다.
fileservername 은 puppet 서버를 지정하는 변수이다. apache 와 passenger 연동을 해야 8145 port를 이용할 수 있다. apache, passneger 세팅을 하기 전에는 port를 지정하지 않고 사용을 하면 되며 기본 포트인 8140을 이용한다.

module 설정하기

syslog 를 local3 로 지정했기 때문에 /etc/syslog.confg 설정에 내용을 추가해 주어야 한다.

이제 puppetmaster 를 실행한다.

이제 /var/log/message 파일이나 /var/log/puppet/puppetmaster.log 파일에서 로그를 살펴보면 된다.

apache, Passenger 연동하기

연동을 하기 전에 puppet client 를 설정하여 정상 작동하는지 부터 먼저 확인을 하는 것이 좋다.

Passenger 는 Apacche 2.x 확장기능으로 Apache 에서 Rails 나 Rack applicaiton 을 실행할 수 있다. Puppet (>0.24.6) now ships with a Rack application which can embed a puppetmaster. Puppet (>0.24.6) 은 이제 puppetmaster 를 내장할 수 있는 Rack applicaiton 이 포함되어 있다.

passenger 설치http://projects.puppetlabs.com/projects/puppet/wiki/Using_Passenger

puppetmaster 서버의 puppet.conf 설정에 아래 내용 추가

Apache2, Rack and Passenger 설치
rubygems 를 설치하려면 ruby-rdoc 패키지 필요함. passenger 는 문서에서 추천하는 2.2.11 버전을 명시하여 설치함.

passenger-install-apache2-module 를 실행하면서 추가로 설치가 필요한 프로그램을 알려준다. 그러면 그 프로그램을 설치하면 되다.

설치 후 다음의 내용을 apache 설정에 추가하라고 나온다.

The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.11/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.11
PassengerRuby /usr/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Enable Apache modules "ssl" and "headers":

apache 설정하기

/etc/httpd/conf.d/puppetmaster.conf 설정은 해당 모듈을 로딩하도록 하고 문서를 참고하여 몇가지 옵션을 튜닝하였음. 도메인 이름을 puppet master 서버로 설정함.
port 는 puppet 의 기본 포트인 8140 으로 설정을 하였음.

여러개의 도메인을 이용해야 하므로 SSL 설정에서 ServerName, ServerAlias 에 사용할 모든 도메인을 설정해 주어야 한다. 안 그러면 puppet client 에서 접속시 인증서와 관련한 에러가 난다. (certificate verify failed 등의 메시지)

/var/lib/puppet/ssl/ca/ca_crt.pem 파일은 /var/lib/puppet/ssl/certs/ca.pem 으로 설정을 하는 것이 편리하다.

rack application 을 설치함

httpd 시작

모든 것이 정상작동을 하면 이제 puppetmaster 는 직접 실행을 하지 않아도 된다. puppet client 에서 요청을 하면 httpd 에서 puppetmaster 를 띄운다. httpd 를 내리면 puppetmaster 도 내려간다.

puppetca 기능 이해 및 puppet master 서버 재구성 관련

해당 장비의 호스트명이 h0-s23.p36-icn 일 경우로 가정하고 진행.

/etc/puppet/puppet.conf 의 puppetmasterd 섹션에서 certdnsnames 을 아래와 갈이 세팅한 후 자료임. puppetmasterd 에서 certdnsnames 를 세팅해야 SSL에서 에러가 없음.
certdnsnames=puppet-apac.example.com:puppetreport-apac.example.com:puppetmaster-apac.example.com

해당 호스트의 인증서에서 DNS를 확인할 수 있다.

/var/lib/puppet/ssl 디렉토리 살펴보기

전체 디렉토리 구조

edge 서버 ssl tree 구조 puppet-test.localdomain.pem

puppet certs 에서 특정 edge 의 SSL 요청에 sing을 하면 puppet certs 서버의 ca/signed 에 해당 edge 의 인증서가 저장이 된다.
edge 에서는 puppet certs 서버에서 다음의 파일을 받아 저장을 한다.

ca/ca_crt.pem -> certs/ca.pem : 처음 puppet master 서버에 접근하는 경우 받아옴 . (아니면 puppet master 서버의 certs/ca.pem)
ca/signed/puppet-test.localdomain.pem -> certs/puppet-test.localdomain.pem : puppet master 서버에서 인증 후 받아옴
ca/ca_crl.pem -> crl.pem : puppet master 서버에서 인증 후 받아옴

puppet client 에서 master 서버에 접속시 master 서버의 certs/ca.pem 파일을 확인하는 것 같다.

참고로 puppet client 에서 certs/ca.pam , certs/자신의 인증서, crl.pem 파일을 다운로드 받은 후에는 puppet master 서버에서 ca/singed 에 있는 해당 호스트의 인증서를 없애도 puppet master 에 접근이 잘 되었다. 이미 인증서를 가지고 있기 때문에 puppetca 에서 삭제해도 상관이 없는 것 같다.

ca 디렉토리 복사하여 puppet certs 서버 구성하기

puppet master 서버에서 /var/lib/puppet/ssl/ca 디렉토리를 먼저 백업받아 놓는다.

기존 백업한 ssl/ca 디렉토리를 새로 구성한 서버에 동일하게 복사함.
ca/ca_crl.pem -> crl.pem 으로 복사

해당 시스템에 certs 서버로 구성하려는 호스트의 인증서가 등록되어 있을 경우 인증서를 삭제함.

키를 새로 생성해야 하므로 private_keys, public_keys 의 키를 삭제함

이렇게 한 후 puppetmaster 시작을 함.

puppetmaster 에서 아래와 같이 인증서가 생성될 것임.

생성된 인증서 확인하기

키를 변경한 경우 apache ssl 의 설정에서도 key 를 변경해 주어야 한다.변경작업이 필요하다.

/var/lib/puppet/ssl/ca/ca_crt.pem 파일은 /var/lib/puppet/ssl/certs/ca.pem 으로 설정을 한다.

puppet master 서버 및 puppet client 동시 구성하기

예를 들어 A 도메인의 puppet master 에 대해서는 puppet client 로 동작을 하고 자신은 B 도메인에 대한 puppet master 로 동작을 하는 것은 문제가 있는 것 같다.

certs 디렉토리에 A puppet master 의 ca.pem 파일과 자신의 인증서를 가지고 있어야 하고 B 도메인에 대해서는 자신이 ca가 되어야 하는데 서로 다른 두개의 도메인에 대해서 ca.pem 을 설정하는 방법은 모르겠다.

이를 회피하는 방법은 A 도메인의 ca 디렉토리를 복사해와서 이용하는 방법이다. 그러면 ca 디렉토리에 동일한 ca_crl.pem, ca_crt.pem 파일을 가지고 있고 certs/ca.pem, crl.pem 도 동일하게 구성이 된다. B 도메인에 대한 puppet master 가 되기 위해서 A 도메인의 master 서버에 등록을 할 때 B에서 사용할 도메인을 certdnsnames 를 이용 등록을 해 주어야 한다.

  • B 의 puppet master 서버를 A puppet master 서버의 client 로 등록을 한다. 등록을 하면서 B에서 사용할 도메인을 함께 등록해 주어야 한다. 다음과 같은 형태이다. puppet client 가 잘 동작하는지 확인을 한다.

  • A puppet master 서버의 ssl/ca 디렉토리를 B puppet master 서버로 복사해온다.
  • B puppet master 서버에서 puppetca 를 이용, 불필요한 인증서를 모두 삭제한다.
  • B puppet master 서버의 puppetmasterd 를 설정한다. puppetd 는 A 서버를 바라보면 되지만 puppetmasterd 설정은 B 도메인을 이용할 것이다.
  • 이제 B 의 puppet master 서버를 실행하여 다른 clinet 에서 등록을 하고 사용을 해본다.
  • 향후 B puppet masert 서버의 재구성을 위하여 B puppet masert 서버의 ssl/ca 디렉토리를 백업 받아둔다.

참고로 처음 puppetmaster 를 실행을 하면 ssl/ca 디렉토리를 생성하고 필요한 파일을 만들면서 ssl/ca/ca_crt.pem 을 certs/ca.pem 으로 복사한다. 그러므로 만약 A 도메인의 puppet client 로 설정이 되어 있는 상태에서 puppetmaster 를 실행하여 ssl/ca 디렉토리가 새로 생기면 certs/ca.pem 파일도 새로 생성된 puppetmastet의 ssl/ca/ca_crt.pem 파일로 대체가 된다. 이렇게 되면 A도메인에 대한 puppet client 로 작동을 하지 않게 된다. A puppet master 의 ca 디렉토리를 복사하여 이용하는 경우에는 동일한 파일을 이용하므로 문제가 없다.

puppet file 서버 구성

puppet certs 서버는 ca 에 모든 파일이 있는데 file 서버는 ca/ca_crl.pem 만 들어있다.

puppet file 서버에 pupppet, puppet-server 를 설치하고 puppet 을 실행한다.

certs 서버에서 인증서에 사인을 하면서 도메인을 추가해야 한다.

그러면 certs 서버에서 아래 두 파일은 edge 서버와 동일하게 certs 서버(master 서버)에서 복사가 된다.
ca/ca_crt.pem -> certs/ca.pem (edge 와 동일. 자동으로 진행됨.)
ca/ca_crl.pem -> crl.pem (edge 와 동일. 자동으로 진행됨.)

초기 puppet file 서버 ssl tree 구조.

puppet file 서버를 구성할 경우에는 ca 디렉토리를 생성하고 certs 서버에서 생성된 ca/ca_crl.pem 파일을 file 서버에도 동일하게 ca/ca_crl.pem 으로 복사하여 준다.
이미 ca/ca_crl.pem 파일이 crl.pem 으로 복사가 되어 있기 때문에 아래에서는 crl.pem 파일을 복사하여 주었다.

puppet.conf 는 master 서버와 대부분 동일하지만 file 서버는 ca 기능을 하지 않으므로 이 부분만 false 로 둔다.

이제 puppetmaster 를 실행한다.

apache 와 passenger 연동도 동일한데 ssl 연동에서 키 부분만 다르다.

puppet client 설정

puppet 실행. 아무 옵션없이 실행을 하면 daemonize 옵션을 사용함. -t 옵션을 이용 테스팅을 해 볼 수 있다.
처음에 실행을 하면 SSL key 를 생성하고 puppetmaster 서버에 등록요청을 한다. puppet.conf 의 puppetd 에서 server 설정을 하면 server 옵션은 입력하지 않아도 된다.

puppetmaster 에서 해당 클라이언트를 등록해 주어야 한다. puppetca 프로그램에서 list 옵션을 이용하면 현재 요청을 하고 있는 호스트를 볼 수 있다. sign 에서 --all 옵션을 주면 한꺼번에 현재 요청중인 호스트를 등록할 수 있다.

다시 puppetd 를 실행하면 이제 필요한 설정이 진행된다. certs 서버와 file 서버를 별로로 구성한 경우 처음에는 certs 서버(master server)로 접속을 하고 인증서를 사인한 이후에는 file 서버로 접속을 하면 된다.

-t (--test) 옵션 : Enable the most common options used for testing. These are onetime, verbose, ignorecache, no-daemonize, and no-usecacheonfailure.
--noop : Run in NOOP or dry-run mode. noop 옵션은 실제 실행하지 않고 실행하면 어떤 일이 생길지를 보여줌

참고로 puppetd 를 실행하면 자신의 호스트네임을 이용한다. 호스트네임에 도메인 네임이 없으면 해당 호스트네임.localdomain 형태로 호스트가 등록이 된다.

puppet 고급기능

puppet 기능 이해

Resources : resource, class, classes relationships, class inheritance, definitions, variables, arrays, conditionlas
Nodes : node inheritance, default nodes, node conditionals . node 에서 정규표현식 가능함
Virtual Resources : 시스템 그룹별로 다른 그룹과 사용자를 할당할 경우 유용
Facts : 호스트에 대한 정보 제공. OS, 커널 등
Resource Types : cron, filebucket, hosts, ssh host keys, tidy, etc
Functions : Logging, templating, etc. 템플릿 활용은 중요함

기타

Environments : dev, stage, production 등 구분하여 이용하면 편리

Puppet 사용하기

manifest 구조화 하기 : 템플릿, 노드, 클래스, users, groups, os, 등으로 구조화하는 것이 사용하기에 편리함
manifests 는 subversion 같은 버전관리 시스템을 통하여 관리
노드 정의, 클래스 정의
사용자 및 그룹 관리
파일 서빙 : 독자적으로 파일 서빙을 할 수 있도록 구성할 수 있지만 모듈별로 위치 하는 것이 편리하다. fileserver.conf 에 ip 또는 호스트별로 접근제어를 할 수 있지만 apache 같은 웹서버와 연동을 하여 사용을 하는 것이 편리하다.
각 설정 모듈화하기 : 각 모듈명 밑에 아래와 같은 구조로 이용. 각 모듈은 모듈명밑의 manifests/init.pp 파일을 통하여 초기화가 됨

Reporting

레포팅방법에는 store(디스크), log(syslog 등), tagmail(이메일 발송), rrdgraph(RRD 기반의 그래프로 변환) 등이 있음.

Docs: Puppet Labs Documentation 에서 Installing Dashboard , Using Dashboard 참고

Puppet 고급 기능

External Node Classification : 노드 정의를 puppet 외부에 두는 것을 말함. 스크립트, database, LDAP 등을 이용가능함

Scalability : 고가용성, 로드 밸런싱을 위해서는 heartbeat 등 다른 방법을 이용해야 함. 고성능을 위해서는 Mongrel 이나 Passenger 를 이용함.

Puppet 확장

Facter 확장

자신만의 Custom Facts 를 구성할 수 있음.

Puppet 확장

Type 생성, Provider 생성 및 새로운 타입 배포 등.

Puppet용 rpm 구성하기

puppet srpm 으로 rpm 만들기.

build 할 때는 ruby, facter 가 필요함. 사전에 미리 설치. puppuet.conf 파일을 필요에 따라서 변경을 함.

Labels
  • No labels