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

Puppet 초보자를 위한 설명서입니다.

"시스템관리자를 위한 Puppet3" 자료를 기초로 만들었습니다.

 

퍼펫 소개

형상관리 : 형상 관리 자동화. 패키지나 파일 같은 자원에 대한 설정을 기술한 명세서를 메니페스트라고 부름

퍼펫이 하는 일 : 현재의 설정과 매니페스트 비교하여 필요한 액션만 수행. 광범위한 플랫폼과 운영체제 지원.

퍼펫의 장점

  • 매니페스트를 한 번만 작성하면 여러 장치에 중복 작업 없이 적용 가능
  • 모든 서버가 매니페스트를 기준으로 서로 동기화 가능
  • 매니페스트를 문서로 사용 가능
  • 다양한 운영체제, 플랫폼, 명령어 문법 등에 유연
  • 매니페스트는 코드이기 때문에 버전 및 다른 코드 관리 방식이 적용 가능

확장성

퍼펫의 언어 : 선언적인 프로그래밍 언어.

퍼펫 시작

테스팅 환경 준비하기

원하는 리눅스 배포판을 설치한 컴퓨터를 준비한다. 가상머신, Vagrant, 물리적 서버 상관없다. 여기에서는 주로 CentOS 5/CentOS 6 를 기준으로 설명한다.

적절하게 hostname 을 설정한다. (필요하면 /etc/hosts에 등록)

Puppet 설치

Puppet 최신버전은 3.7이다. 2014.11.27 현재 EPEL에 있는 Puppet 은 2.7 이다. "시스템관리자를 위한 Puppet3 자료"에서는 Puppet 3 를 기준으로 설명을 하고 있지만 이 문서에서는 Puppet 2.7 를 기준으로 설명한다.

Puppet 은 CentOS5, CentOS6 에 기본 들어있지 않으며 EPEL 에 있는 패키지 또는 Puppet 에서 제공하는 rpm을 이용하여 설치할 수 있다.

  • EPEL 를 이용하여 설치. CentOS에서 epel 의 yum repo를 이용하려면 epel-release rpm 을 설치하면 되며 이 rpm은 CentOS Extras 레포지토리에 이미 포함이 되어 있으므로 간단히 설치를 할 수 있다.

  • 참고로 CentOS6 에서는 epel-release rpm 을 설치하고 yum 을 실행하면 "Error : Cannot retrieve metalink for repositroy: epel. Please verify its path and try again." 에러가 난다. CentOS5로 CentOS6 으로 넘어가면서 /etc/yum.repos.d/epel.repo 파일의 mirrorlist 가 http에서 https로 바뀐 것과 연관이 있는데 일단 https로 되어 있는 부분을 http로 변경하면 사용은 가능하다. 이게 좋은 방법인지는?

  • puppet rpm 뿐만 아니라 연관된 rpm을 함께 설치한다.

  • Puppetlabs 에서 제공한 패키지를 이용하여 설치하는 경우에는 https://docs.puppetlabs.com/guides/install_puppet/install_el.html 문서를 참고한다.

매니페스트 작성하기

처음 작성하는 manifests

manifests 구조화

  • nodes.pp 생성
  • 노드 선언
  • manifests 파일을 만들어 실습해 보기.

    • site.pp 파일에 file 속성을 이용해서 생성을 하고 puppet apply 명령을 이용 실행을 해봄.

    • 그러고 나서 manifests 디렉토리 밑에 site.pp, nodes.pp 로 구조화를 함.

    • 테스팅을 위해서 github에 샘플 puppet manifests 를 만들었음. git clone https://github.com/taejoonmoon/puppet-training.git

  • site.pp 가 메인 매니케스트 파일임. 아주 작은 site.pp 를 만들고 nodes.pp 처럼 다른 매니페스트 파일을 불러오도록 만든다.

패키지, 파일, 서비스

패키지

  • 특정 버전 설치 : ensure => 'httpd-2.2.15-39.el6.centos.x86_64'
  • 패키지 삭제 : ensure => absent

  • 패키지 업데이트 : ensure => latest

모듈

  • 퍼핏 매니페스트를 모듈로 관리하면 해석과 유비 보수가 매우 용이함. 퍼핏 모듈은 연관된 패키지들을 그룹으로 관리함.
  • 모듈을 사용할 때에는 puppet 에게 모듈 위치를 알려주어야 함. (modulepath)
  • 자주 사용하는 puppet apply 명령어 생성

 

서비스

  • apache/manifests/init.pp 수정
  • require 속성 : 자원들 간의 연관성을 정의. Package 에서 P가 대문자임. 이는 puppet 에세 대괄호 뒤에 오는 이름을 가진 패키지 자원의 인스턴스를 이용한다는 것을 알려줌.
  • enable 속성 : 부팅 할 때 서비스 시작 여부 제어
  • 상태 확인이 어려운 서비스의 경우 hasstatus, pattern 등의  속성 등을 이용할 수 있음. 또는 status 속성을 이용하아여 직접 명령어를 지정해 줄 수 있음.
  • start, stop, restart 등도 다른 명령어로 지정이 가능함.

파일

  • apache/manifests/init.pp 수정

  • source 지정 : puppet:///modules 에서 ///  세개가 들어감. files 는 생략해야 함.
  • notify : 다른 자원 호출.

GIT 으로 Puppet 관리하기

git vs puppet master 장단점

git 사용시 장점

 

사용자 관리

user & ssh_authorized_key

  • User : 계정 상세하려면 ensure 를 absent 로 변경
  • 새로운 ssh 키를 생성하기 위해서는 ssh-keygen 명령어를 사용.

exec, cron, file, templates

exec, cron

템플릿

템플릿 함수 : 약간만 다른 여러 파일을 가지고 있거나, 동적으로 변하는 정보를 포함한 파일이 있을 때 템플릿을 사용할 수 있음.

  • <%= %> 설명
  • Puppet 에서 변수는 $ 를 사용하지만 템플릿에서는 @ 를 이용함. (템플릿이 퍼핏이 아린 루비로 쓰여져 있기 때문임)
  • facter 를 이용하여 각종 시스템값을 이용할 수 있음.

definition 과 class

배열

 

정의(definition)

  • 다른 유형의 자원들을 그룹화 할 때 define 사용.
  • 매개변수를 줄 수 있음. 매개변수를 줄 때는 기본값을 지정하여 사용할 수 있음.

 

클래스(class)

  • 특정 서비스를 구현하는 퍼펫 자원을 그룹화 하기 위해서 사용
  • 클래스도 definition 과 마찬가지로 몇 개의 매개변수를 지정할 수 있음. 또한 매개변수는 기본값을 가질 수 있음.
    • 매개변수를 잘 이용하면 중복된 코드를 만들지 않고 코드의 재활용성을 높일 수 있음.

  • 클래스는 모듈로 구성하는 것이 좋음. 각 클래스는 modules/MODULE_NAME/manifests 디렉토리에 저장해야 하고 하나의 클래스를 포함하는 각 파일은 클래스의 이름을 따서 파일 이름을 생성해야 함. (예외는 init.pp)
  • 클래스 선언은 include MODULE_NAME 또는 require MODULE_NAME 또는 매개변수를 주어서 선언하는 방법이 있음.
  • 클래스와 definition 의 차이점 : 클래스는 단독 개체임. 오직 한 시점에 하나의 노드에 하나의 클래스의 인스턴스만 존재함.
    • 하나의 노드에 여러 인스턴스가 필요한 경우 definition
    • 웹서버처럼 지정한 노드에 같은 용도의 다른 인스턴스끼리 충돌이 발생할 것 같으면 클래스 사용함.

표현식과 로직

조건문 : if, unless, case, 셀렉터

표현식 : 비교문, boolean 연산자, 산술 연산자

  • 비교 연산자 :  == , !=, < , <= , > , >=
  • ‹ Boolean 연산자 : and , or , !
  • 문자열, 배열 또는 해쉬 멤버쉽 연산자 : in
  • 산술 연사자 : + , - , * , / , << , >>

정규표현식

텍스트 대체

문자열을 대체하기 위해서는 regsubst 함수를 이용함.

배열

해쉬

리포팅 및 문제 해결

리포팅

디버그

  • --debug 옵션

Noop 실행

  • Noop은 no-operation을 뜻하며 실제 시스템에 적용하지 않으면서 모든 일을 수행함. 어떤 변경사항을 적용하기 전에 테스팅이 가능함.

 

구문 오류 검사

  • 매니페스트의 구문 오류가 없는지 확인하기 위해서 parser validate 명령어를 이용.

 

디버그 출력

  • notify, exec

모니터링

에러

컴파일 에러, 명령어 옵션 오타

퍼펏과 관련해 알아두면 좋은 내용

퍼펫 스타일

  • 코드를 모듈로 분리
  • 공통 코드를 definition 으로 리팩토링
  • 노드 선언은 간단하게 한다
  • 퍼펫 린트 사용
  • 주석이 필요 없는 코드 제작

퍼펫 관련 학습 자료

  • 참조문서
  • Puppet forge : puppet code 커뮤니티 저장소.  https://forge.puppetlabs.com/

더 나아가기

Labels
  • No labels