상단

배포 자동화 솔루션인 puppet를 정리 합니다.

 
 
 

Puppet 개요


 

http://beyondj2ee.pbworks.com/f/1331172025/puppet-%EC%84%A4%EC%B9%981.png

 

'''Puppet 용어'''

 

{| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" style="line-height: 20.7999992370605px;" 
|- | width="25%" align="center" valign="middle" style="background-color: rgb(238, 238, 238);" | 용어

| width="75%" align="center" valign="middle" style="background-color: rgb(238, 238, 238);" | 상세 
|- | align="center" valign="middle" style="background-color: rgb(238, 238, 238);" | Manifest | 환경 설정 정보 파일
vim /etc/puppet/environments/production/manifests/.pp

node "" { 
  Resource { "~":   attr => value,   } ​}

  • Resource : File, Service, Package, User 등

  • Class : Resource의 집합으로 modules 폴더 아래에 ~.pp 형태로 저장

 
 

puppet  apply  ~.pp      #--- local machine에서 실행, node 부분이 없음
puppet  agent  --test     #--- agent에서 실행

 

|- 
| align="center" valign="middle" style="background-color: rgb(238, 238, 238);" | Catalog

Manifest가 컴파일되어 Puppet Agent에서 전달되는 정보
align="center" valign="middle" style="background-color: rgb(238, 238, 238);"
관리 서버에서 실행되는 데몬
-
align="center" valign="middle" style="background-color: rgb(238, 238, 238);"
각 서버에서 실행되는 데몬
}
 

Puppet 설치


 

Puppet Server 설치

 

yum install puppet-server

 

vi  /etc/puppet/puppet.conf

module=/etc/puppet/modules
certname=puppetserver.jopenbusiness.com

puppet resource package puppet-server ensure=latest

 

/etc/init.d/puppetmaster start

 

netstat -antp | grep LISTEN | grep 8140

 

'''Puppet Agent 인증'''

 

puppet cert --sign  --list                        #--- + 도메인은 인증이 완료된 Puppet Agent

 

puppet cert puppetagent001.jopenbusiness.com

 

puppet cert --sign --all --list

 

Puppet Agent 설치

 

yum install puppet

 

vi  /etc/puppet/puppet.conf

certname=puppetagent001.jopenbusiness.com
runinterval=60                            #--- 초단위

vi  /etc/sysconfig/puppet

 

PUPPET_SERVER=puppetserver.jopenbusiness.com
PUPPET_LOG=/var/log/puppet/puppet.log

 

/etc/init.d/puppet start

 

ps -ef | grep puppet

 

auth.conf

 

참고 문헌

 
  • auth.conf

 
 

hiera.yaml

 

Puppet에서 사용하는 변수=값 을 설정 파일로 지정

 

참고 문헌

 
 
 

Puppet 구성


 

실행 및 검사

 

puppet --version

 

puppet apply /etc/puppet/manifests/site.pp

 

puppet apply /etc/puppet/manifests/site.pp --modulepath=/etc/puppet/modules

 

puppet parser validate nodes.pp                 #--- 구문 오류 검사

 

'''https://forge.puppetlabs.com/ 모듈 사용 '''

puppet module search httpd               #--- 모듈 검색
puppet module install puppetlabs-apache  #--- 검색된 모듈 설치

Folder 구조

 

/etc/puppet/

 
  • manifest/

  • *site.pp (이름 변경 가능)
    import 'nodes.pp'

  • *nodes.pp (이름 변경 가능)
    node '~' {
        include 모듈명
        #--- Class, Resource, Variabled 등 포함
    }

  • modules/모듈명/

  • *manifest/init.pp
    class 모듈명 {
        #--- files, settings, modules, scripts 등 포함
    }

 
 

package

package { 'nginx':
    ensure => installed,    #--- installed. 설치, absent. 삭제, latest. 업데이트, '버전명'. 해당 버전 설치
​}

file

file { '/tmp/nginx.conf':
    #--- nginx(모듈명)/files/default.conf 파일 사용
    source => 'puppet:///modules/nginx/default.conf',   
    notify => Service['nginx']('nginx'.md),            #--- 다른 자원 호출
    content => '~\n",
    ensure => file,
    mode => '06400',
    owner => root,
    group => root,
​}

service

service {'nginx':
    ensure => running,
    require => Package['nginx']('nginx'.md),          #--- 먼저 필요한 자원
    hasrestart => true,
    hasstatus => true,
    subscribe = file ["nginx.conf"]("nginx.conf".md),
​}

exec

exec { 'Run my arbitray command':
```
  command => '/bin/echo I ran this command on `/bin/date` > /tmp/command.output.txt',
  creates => '/tmp/command.output.txt',
  #unless  => '/usr/bin/test -f /tmp/command.output.txt',
  #onlyif  => '/usr/bin/test -f /tmp/command.output.txt',
  #path => ['bin','/usr/bin']('bin','/usr/bin'.md),
```
}

cron

cron { 'test cron':
```
  command => 'touch /tmp/testcron',
  hour    => '04',
  minute  => '00',
```
}

template

 

Template 파일은 Ruby로 작성되어 있기 때문에 <%= @변수명 %>을 사용합니다.

 

Puppet에선s $변수명 을 사용 합니다.

 

vi apache/templates/vhost.conf.erb

Listen <%= @vhost_port %>
>
```
    DocumentRoot /var/www/html
    ServerName <%= @site_name %>
```

vi apache/manifests/init.pp

$vhost_port = "8080"
$site_name = 'example.com'
file { '/etc/httpd/conf.d/example.com.conf':
```
    content => template('apache/vhost.conf.erb'),
    notify => Service['httpd']('httpd'.md),
```
}

define

 

Resource를 그룹하여 사용

 

vi  modules/base/manifests/script_job.pp

define base::script_job ( $hour = '00' ) {
```
        include base
        file { "/usr/local/bin/${name}":
            source => "puppet:///modules/base/${name}",
            mode => '0755',
        }
        cron { "Run ${name}":
            command => "/usr/local/bin/${name}",
            hour => $hour,
            minute => '00',
            user => 'vagrant',
        }
```
}

vi  manifests/nodes.pp

node 'vagrant-centos64.vagrantup.com' {
```
    include base
    base::script_job { 'backup_database1':
        hour => '05',
    }
```
}

class

class appserver($domain, $database) {
​}

user

user { 'user01':
    ensuer => present,
    comment => '~',
    home => '/home/user01',
    managehome => true,
​}

ssh_authorized_key

ssh_authorized_key { 'user001_ssh':
    user => 'user01', 
    type => 'rsa', 
    key => '~',
}

참고 문헌


 
최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :