Puppet 자동화 도구 상세 설명

자동화 관리 툴 Puppet에 대한 상세 안내

목차

  • Puppet 소개
    1. Puppet 정의
    1. Puppet 작동 메커니즘
    1. 모델 구조
    1. 작업 프로세스
    1. 사용 사례 모델
    1. Puppet 용어 설명
  • Puppet 리소스 분석
    1. 설치 및 환경 설정
    1. 리소스 요약
    1. 추상화
    1. 정의 방법
    1. 특수 속성
    1. 일반적인 리소스 활용
    1. 특별 속성: 태그
    1. 변수
    1. 종류
    1. 스코프
    1. 제어문
    1. if 문
    1. case 문
    1. 선택자

위로 이동

1. Puppet 소개

Puppet은 IT 인프라를 자동으로 관리하는 도구입니다. 시스템 운영자의 주요 업무인 배포(provisioning), 설정(configuration), 조정(orchestration), 보고(reporting)를 효율적으로 수행합니다. Puppet을 통해 반복적인 작업을 자동화하고, 중요한 애플리케이션을 신속하게 배포하며, 클라우드 또는 로컬에서 변경사항을 적극적으로 관리할 수 있습니다. GPL 라이선스 (2.7.0-) 기반으로 Ruby 언어로 개발되었으며, 이후 버전은 Apache 2.0 라이선스를 따릅니다.

1) 모델 구조

Puppet은 선언적이고 모델 기반 방식으로 IT 자동화를 수행합니다. 설정 목표 상태를 정의한 후, 적용 전에 시뮬레이션을 실행하고, 필요시 강제로 적용하며, 상태 변화를 보고합니다.

2) 작업 프로세스

작업 프로세스는 Master/Agent 모델과 단일 시스템 모델로 나뉩니다. Master/Agent 모델에서는 Agent가 Master로부터 설정 데이터를 주기적으로 요청하여 로컬에서 실행합니다.

3) 사용 사례 모델

단일 시스템 모델에서는 여러 매니페스트(manifests)를 컴파일하여 카탈로그(catalog)를 생성한 후 이를 적용합니다.

2. Puppet 설치 및 환경

CentOS 기본 저장소에는 포함되지 않으므로 PuppetLabs 공식 저장소를 추가해야 합니다:

wget http://yum.puppetlabs.com/puppetlabs-release-pc1-el-6.noarch.rpm
yum install puppetlabs-release-pc1-el-6.noarch.rpm
yum install -y ruby facter puppet-server (서버)
yum install -y ruby facter puppet (클라이언트)

주 구성 파일은 /etc/puppet/puppet.conf이며, 주 프로그램은 /usr/bin/puppet입니다.

3. 리소스 정의 및 예제

1) 리소스 추상화

Puppet은 리소스를 세 가지 측면에서 추상화합니다:

  • 유사한 리소스를 동일한 "타입"으로 그룹화합니다.
  • 리소스 속성을 구현 방식과 분리합니다.
  • 리소스의 목표 상태만을 정의합니다.
type {'제목':
	속성1 => 값1,
	속성2 => 값2,
}

예를 들어, 'nginx'라는 이름의 "service"와 "package" 리소스를 동시에 가질 수 있습니다.

2) 리소스 속성

특수 속성으로 Namevar, ensure, Provider 등이 있습니다.

4. 리소스 예제

1) group 리소스

group{'mygrp':
	name => 'mygrp',
	ensure => present,
	gid => 2000,
}

2) user 리소스

user{'keerr':
	ensure => present,
	system => false,
	comment => 'Test User',
	shell => '/bin/tcsh',
	home => '/data/keerr',
	managehome => true,
	groups => 'mygrp',
	uid => 3000,
}

3) package 리소스

package{'nginx':
	ensure => installed,
	provider => yum,
}

4) service 리소스

service{'nginx':
	ensure => running,
	enable => false,
}

5) file 리소스

file{'aaa':
	path => '/data/aaa',
	source => '/etc/aaa',
	owner => 'keerr',
	mode => '611',
}

6) exec 리소스

exec{'cmd':
	command => 'mkdir /data/testdir',
	path => ['/bin','/sbin','/usr/bin','/usr/sbin'],
}

7) cron 리소스

cron{'timesync':
	command => '/usr/sbin/ntpdata 172.16.0.1',
	ensure => present,
	minute => '*/3',
	user => 'root',
}

5. 리소스 간 의존성

Puppet은 require, before, notify, subscribe 등의 파라미터를 제공하여 리소스 간 의존성을 정의합니다.

Package['redis'] -> File['/etc/redis.conf'] -> Service['redis']

6. 변수 및 제어문

1) 변수

변수는 $로 시작하며, 스코프는 top, node, class로 나뉩니다.

2) 제어문

if 문
if $osver == '7' {
	$db_pkg='mariadb-server'
} else {
	$db_pkg='mysql-server'
}

package{"$db_pkg":
	ensure => installed,
}
case 문
case $osfamily {
	'RedHat': { $webserver='httpd' }
	/(?i-mx:debian)/: { $webserver='apache2' }
	default: { $webserver='httpd' }
}
selector 문
$pkgname = $os ? {
	/(?i-mx:(ubuntu|debian))/ => 'apache2',
	/(?i-mx:(redhat|fedora|centos))/ => 'httpd',
	default => 'httpd',
}

태그: Puppet ruby ConfigurationManagement SystemAutomation

8월 3일 14:23에 게시됨