웹사이트 검색

서버 인프라를 관리하기 위해 Puppet을 설치하는 방법


참고: Puppet with Passenger 대신 Puppet Server를 사용하는 이 자습서의 최신 버전은 Ubuntu 14.04의 Master-Agent 설정에서 Puppet 4를 설치하는 방법에서 찾을 수 있습니다.

소개

Puppet Labs의 Puppet은 시스템 관리자가 서버 인프라의 프로비저닝, 구성 및 관리를 자동화하는 데 도움이 되는 구성 관리 도구입니다. 미리 계획하고 Puppet과 같은 구성 관리 도구를 사용하면 기본 작업을 반복하는 데 소요되는 시간을 줄이고 인프라 전체에서 구성이 일관되고 정확하도록 보장할 수 있습니다. Puppet 및 기타 자동화 도구를 사용하여 서버를 관리하는 데 익숙해지면 전체 설정의 다른 측면을 개선하는 데 사용할 수 있는 시간을 확보할 수 있습니다.

Puppet은 Puppet Enterprise와 오픈 소스 Puppet의 두 가지 종류로 제공됩니다. 대부분의 Linux 배포판, 다양한 UNIX 플랫폼 및 Windows에서 실행됩니다.

이 자습서에서는 에이전트/마스터 설정에서 오픈 소스 Puppet을 설치하는 방법을 다룹니다. 이 설정은 모든 구성 데이터가 관리되고 배포되는 중앙 Puppet Master 서버로 구성되며 나머지 모든 서버는 Puppet Agent 노드가 됩니다. 꼭두각시 마스터 서버에서 구성해야 합니다.

전제 조건

이 자습서를 따르려면 Puppet을 구성하려는 모든 서버에 대한 루트 액세스 권한이 있어야 합니다. 또한 Puppet 마스터 서버 역할을 할 새 Ubuntu 14.04 VPS를 생성해야 합니다. 기존 인프라가 없는 경우 필수 DNS 설정 자습서에 따라 예제 인프라(아래 설명)를 자유롭게 다시 생성하십시오.

Puppet 설치를 시작하기 전에 다음 전제 조건이 있는지 확인하십시오.

  • 사설 네트워크 DNS: 순방향 및 역방향 DNS를 구성해야 하며 모든 서버에는 고유한 호스트 이름이 있어야 합니다. 다음은 개인 네트워크 DNS 서버를 구성하는 자습서입니다. DNS를 구성하지 않은 경우 이름 확인을 위해 hosts 파일을 사용해야 합니다. 인프라 내 통신을 위해 사설 네트워크를 사용한다고 가정합니다.
  • 방화벽 열린 포트: Puppet 마스터는 포트 8140에서 도달할 수 있어야 합니다. 방화벽이 너무 제한적이라면 이 UFW 자습서에서 포트 8140에서 들어오는 요청을 허용하는 방법에 대한 지침을 확인하십시오.

예제 인프라

다음 인프라를 사용하여 Puppet을 설정하는 방법을 시연합니다.

Hostname Role Private FQDN
host1 Generic Ubuntu 14.04 VPS host1.nyc2.example.com
host2 Generic Ubuntu 14.04 VPS host2.nyc2.example.com
ns1 Primary nameserver ns1.nyc2.example.com
ns2 Secondary nameserver ns2.nyc2.example.com

꼭두각시 에이전트는 이러한 모든 호스트에 설치됩니다. 이러한 호스트는 DNS의 ".nyc2.example.com\ 하위 도메인에 매핑되는 사설 네트워크 인터페이스에서 참조합니다. 이는 전제 조건 자습서: BIND를 사설 네트워크로 구성하는 방법에 설명된 것과 동일한 인프라입니다. Ubuntu 14.04의 DNS 서버

전제 조건을 모두 갖추었다면 Puppet 마스터 서버 생성으로 넘어갑시다!

꼭두각시 마스터 서버 만들기

"puppet\을 호스트 이름으로 사용하여 새 Ubuntu 14.04 x64 VPS를 만듭니다. 다음 세부 정보를 사용하여 사설 네트워크를 DNS에 추가합니다.

Hostname Role Private FQDN
puppet Puppet Master puppet.nyc2.example.com

방금 DNS를 설정했고 호스트를 DNS에 추가하는 방법을 잘 모르는 경우 DNS 자습서의 DNS 레코드 유지 섹션을 참조하십시오. 기본적으로 "A\ 및 "PTR\ 레코드를 추가하고 새 호스트가 재귀 쿼리를 수행하도록 허용해야 합니다. 또한 서버가 짧은 호스트 이름을 사용하여 서로를 조회할 수 있도록 검색 도메인을 구성해야 합니다.

"puppet\을 Puppet 마스터의 호스트 이름으로 사용하면 에이전트가 마스터에 연결을 시도할 때 사용할 기본 이름이기 때문에 에이전트 설정이 약간 간소화됩니다.

이제 NTP를 설정해야 합니다.

NTP 설치

에이전트 노드에 대한 인증 기관 역할을 하기 때문에 puppet 마스터 서버는 에이전트 인증서를 발급할 때 잠재적인 문제를 방지하기 위해 정확한 시스템 시간을 유지해야 합니다. 인증서는 시간 불일치가 있는 경우 만료된 것으로 나타날 수 있습니다. 이를 위해 NTP(Network Time Protocol)를 사용합니다.

먼저 ntpdate 명령을 사용하여 일회성 동기화를 수행합니다.

sudo ntpdate pool.ntp.org

시스템 시간이 업데이트되지만 NTP 데몬을 설치하여 시간 드리프트를 최소화하려면 시간을 자동으로 업데이트해야 합니다. 다음 apt 명령으로 설치하십시오.

sudo apt-get update && sudo apt-get -y install ntp

NTP 서버에 지리적으로 더 가까운 "풀 영역\을 사용하도록 NTP 구성을 업데이트하는 것이 일반적입니다. 웹 브라우저에서 http://www.pool.ntp.org/zone/us로 이동합니다. 서버가 뉴욕 데이터 센터에 있기 때문입니다.

편집을 위해 ntp.conf를 엽니다.

sudo vi /etc/ntp.conf

NTP 풀 프로젝트 페이지의 시간 서버를 파일 맨 위에 추가합니다.

server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org

저장 및 종료. 새 시간 서버를 추가하려면 NTP를 다시 시작하십시오.

sudo service ntp restart

서버가 정확한 시간을 유지하고 있으므로 Puppet 마스터 소프트웨어를 설치해 보겠습니다.

꼭두각시 마스터 설치

오픈소스 Puppet을 설치하는 방법은 다양합니다. Puppet Labs에서 제공하는 puppetmaster-passenger라는 데비안 패키지를 사용합니다. puppetmaster-passenger 패키지에는 기본 puppetmaster 패키지를 사용할 때와 비교하여 몇 가지 구성 단계가 필요 없는 Puppet 마스터와 프로덕션 준비 웹 서버(Apache 포함 Passenger)가 포함되어 있습니다.

Puppet Labs 패키지 다운로드:

cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

패키지를 설치합니다:

sudo dpkg -i puppetlabs-release-trusty.deb

apt의 사용 가능한 패키지 목록 업데이트:

sudo apt-get update

puppetmaster-passenger 패키지를 설치합니다.

sudo apt-get install puppetmaster-passenger

이제 Puppet 마스터, Passenger, Apache 및 기타 필수 패키지가 설치되었습니다. Passenger with Apache를 사용하고 있기 때문에 Puppet 마스터 프로세스는 Apache에 의해 제어됩니다. 즉, Apache가 실행 중일 때 실행됩니다.

계속하기 전에 apache2 서비스를 중지하여 Puppet 마스터를 중지합니다.

sudo service apache2 stop

다음으로 Puppet의 버전을 잠급니다.

버전 잠금

버전 간 변경으로 인해 때때로 Puppet 환경이 제대로 작동하지 않을 수 있습니다. 이러한 이유로 전체 인프라에서 일관된 Puppet 버전을 유지해야 합니다. 최신 버전으로 업그레이드하기로 결정한 경우 에이전트 노드보다 먼저 마스터를 업그레이드해야 합니다. 마스터는 버전 번호가 더 높은 에이전트를 관리할 수 없기 때문입니다.

다음 명령을 사용하여 Puppet 설치 버전을 찾아보겠습니다.

puppet help | tail -n 1

작성하는 동안 이전 명령의 출력은 Puppet v3.6.2입니다. apt의 핀 기능을 사용하여 Puppet 설치를 3.6.*로 잠글 수 있습니다. 이렇게 하면 apt가 Puppet을 더 높은 주요 릴리스로 업그레이드하는 것을 방지할 수 있습니다. apt 환경 설정 디렉토리에서 호출되는 새 파일을 작성하십시오.

sudo vi /etc/apt/preferences.d/00-puppet.pref

다음 줄을 추가하여 puppet, puppet-commonpuppetmaster-passenger 패키지를 3.6.* 에 잠급니다. (설치된 버전과 일치하도록 변경):

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common puppetmaster-passenger
Pin: version 3.6*
Pin-Priority: 501

저장 및 종료. 이제 Puppet 버전이 잠겼습니다.

다음 단계는 Puppet 마스터 이름과 인증서를 설정하는 것입니다.

이름 및 인증서 설정

Puppet은 SSL 인증서를 사용하여 마스터 노드와 에이전트 노드 간의 통신을 인증합니다. Puppet 마스터는 인증 기관(CA) 역할을 하며 에이전트 인증서 요청에 서명하는 데 사용되는 자체 인증서를 생성해야 합니다. 이제 마스터 인증서를 설정하겠습니다.

기존 인증서 삭제

패키지 설치 중에 생성된 기존 SSL 인증서를 삭제합니다. Puppet SSL 인증서의 기본 위치는 /var/lib/puppet/ssl입니다.

sudo rm -rf /var/lib/puppet/ssl

인증서 구성

Puppet 마스터의 인증서를 생성할 때 에이전트 노드가 마스터에 연결할 수 있는 모든 DNS 이름을 포함합니다. 이 예제의 경우 짧은 호스트 이름과 FQDN인 "puppet\ 및 "puppet.nyc2.example.com\을 각각 사용합니다.

마스터의 puppet.conf 파일을 편집합니다.

sudo vi /etc/puppet/puppet.conf

다음과 같이 표시됩니다.

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates

[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

이 옵션은 더 이상 사용되지 않으므로 templatedir 옵션이 있는 행을 삭제하십시오.

[main] 섹션 끝에 다음 두 줄을 추가합니다(강조 표시된 텍스트를 개인 FQDN으로 바꿉니다).

certname = puppet
dns_alt_names = puppet,puppet.nyc2.example.com

Apache/Passenger 구성에서는 인증서 이름이 "puppet\일 것으로 예상하므로 assign certname을 "puppet\에 사용하는 것이 중요합니다. 다른 certname 설정을 원할 경우 Apache 구성 파일(/etc/apache2/sites-available/puppetmaster.conf)을 편집하여 SSL 인증서 경로의 이름입니다.

저장 및 종료.

새 인증서 생성

이제 다음 명령을 실행하여 새 CA 인증서를 만듭니다.

sudo puppet master --verbose --no-daemonize

SSL 키와 인증서가 생성되고 있음을 알리는 여러 줄의 출력이 표시됩니다. Notice: Starting Puppet master version 3.6.2가 표시되면 인증서 설정이 완료된 것입니다. CTRL-C를 눌러 셸로 돌아갑니다.

샘플 출력:

Info: Creating a new SSL key for ca
Info: Creating a new SSL certificate request for ca
Info: Certificate Request fingerprint (SHA256): EC:7D:ED:15:DE:E3:F1:49:1A:1B:9C:D8:04:F5:46:EF:B4:33:91:91:B6:5D:19:AC:21:D6:40:46:4A:50:5A:29
Notice: Signed certificate request for ca
...
Notice: Signed certificate request for puppet
Notice: Removing file Puppet::SSL::CertificateRequest puppet at '/var/lib/puppet/ssl/ca/requests/puppet.pem'
Notice: Removing file Puppet::SSL::CertificateRequest puppet at '/var/lib/puppet/ssl/certificate_requests/puppet.pem'
Notice: Starting Puppet master version 3.6.2

방금 생성한 인증서의 인증서 정보를 보려면 다음과 같이 입력합니다.

sudo puppet cert list -all

이전 명령은 실제로 모든 서명된 인증서와 서명되지 않은 인증서 요청을 나열합니다. 현재 다른 인증서가 아직 추가되지 않았기 때문에 마스터 인증서만 표시됩니다.

+ "puppet" (SHA256) 05:22:F7:65:64:CF:46:0E:09:2C:5D:FD:8C:AC:9B:31:17:2B:7B:05:93:D5:D1:01:52:72:E6:DF:84:A0:07:37 (alt names: "DNS:puppet", "DNS:puppet.nyc2.example.com")

Puppet 마스터 서비스를 시작할 준비가 거의 되었습니다. 먼저 마스터 구성을 살펴보겠습니다.

Puppet 마스터 구성

기본 퍼펫 구성 파일인 puppet.conf[main], [master][agent]의 세 섹션으로 구성됩니다. ]. 짐작하셨겠지만 "main\ 섹션에는 전역 구성이 포함되어 있고 "master\ 섹션은 puppet 마스터에 고유하며 "agent\는 puppet 에이전트를 구성하는 데 사용됩니다. 이전에 변경한 사항 외에 , 기본값은 기본 설정에 적합합니다.

구성 파일에는 자신의 설정과 관련된 많은 옵션이 있습니다. 파일에 대한 전체 설명은 Puppet Labs: 기본 구성 파일(puppet.conf)에서 볼 수 있습니다.

편집하려면 다음 명령을 실행하십시오.

sudo vi /etc/puppet/puppet.conf

기본 매니페스트 파일을 살펴보겠습니다.

메인 매니페스트 파일

Puppet은 도메인별 언어를 사용하여 시스템 구성을 설명하고 이러한 설명은 파일 확장명이 .pp인 "매니페스트\라는 파일에 저장됩니다. 기본 기본 매니페스트 파일은 /etc/puppet/manifests/site.pp. 나중에 몇 가지 기본 매니페스트를 다루겠지만 지금은 자리 표시자 파일을 만듭니다.

sudo touch /etc/puppet/manifests/site.pp

퍼펫 마스터 시작

이제 Puppet 마스터를 시작할 준비가 되었습니다. apache2 서비스를 실행하여 시작합니다.

sudo service apache2 start

Puppet 마스터가 실행 중이지만 아직 에이전트 노드를 관리하지 않습니다. Puppet 에이전트 설치 및 추가 방법을 알아봅시다!

꼭두각시 에이전트 설치

Puppet 에이전트는 Puppet 마스터가 관리할 모든 서버에 설치해야 합니다. 대부분의 경우 여기에는 인프라의 모든 서버가 포함됩니다. 소개에서 언급했듯이 Puppet 에이전트는 모든 주요 Linux 배포판, 일부 UNIX 플랫폼 및 Windows에서 실행할 수 있습니다. 각 OS마다 설치가 약간 다르기 때문에 Ubuntu 및 Debian 서버에서의 설치만 다룹니다.

다른 플랫폼에 Puppet을 설치하는 지침은 Puppet Labs 문서에 있습니다. 선택한 OS의 \에이전트 노드에 Puppet 설치\ 섹션을 따르십시오.

참고: 에이전트 노드를 포함한 모든 Puppet 노드가 DNS를 사용하도록 구성되어 있다고 가정합니다. 새로운 서버를 생성하는 경우 Puppet 에이전트를 설치하기 전에 DNS에 추가해야 합니다.

우분투/데비안 에이전트 노드

참고: 모든 예제 에이전트 노드인 host1, host2, ns1ns2는 Ubuntu 14.04 VPS입니다. . Puppet 마스터가 각 서버를 관리할 수 있도록 각 서버에 대해 이 단계를 반복합니다.

Puppet 에이전트 노드에서 Puppet Labs 패키지를 다운로드합니다.

cd ~; wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

패키지를 설치합니다:

sudo dpkg -i puppetlabs-release-trusty.deb

apt의 사용 가능한 패키지 목록 업데이트:

sudo apt-get update

Puppet 에이전트 패키지(puppet)를 설치합니다.

sudo apt-get install puppet

꼭두각시 에이전트는 기본적으로 비활성화되어 있습니다. 이를 변경하려면 기본 파일을 업데이트하십시오.

sudo vi /etc/default/puppet

그리고 START 값을 "yes\로 변경합니다.

START=yes

/etc/default/puppet을 저장하고 종료합니다.

버전 잠금

Puppet 마스터와 마찬가지로 Puppet 에이전트의 버전을 잠그기 위해 apt pin 기능을 사용하려고 합니다.

sudo vi /etc/apt/preferences.d/00-puppet.pref

다음 줄을 추가하여 puppetpuppet-common 패키지를 3.6.*에 잠급니다(설치된 버전과 일치하도록 변경).

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common
Pin: version 3.6*
Pin-Priority: 501

저장 및 종료. 이제 Puppet 버전이 잠겼습니다.

에이전트 구성

에이전트를 실행하기 전에 몇 가지 구성을 변경해야 합니다.

에이전트의 puppet.conf를 편집합니다.

sudo vi /etc/puppet/puppet.conf

꼭두각시 마스터의 초기 구성 파일과 똑같이 보일 것입니다.

다시 templatedir 행을 삭제합니다. 그런 다음 [master] 섹션과 그 아래의 모든 줄을 삭제합니다.

"puppet\에서 Puppet 마스터에 연결할 수 있다고 가정하면 에이전트가 마스터에 연결할 수 있어야 합니다. "puppet\에서 마스터를 사용할 수 없는 경우 Puppet 마스터의 FQDN을 추가해야 합니다. 관계없이 이를 구성하는 것이 좋습니다(FQDN을 자신의 것으로 대체).

[agent]
server = puppet.nyc2.example.com

저장 및 종료.

Puppet 에이전트를 실행할 준비가 되었습니다. 다음 명령을 실행하여 수행하십시오.

sudo service puppet start

모든 것이 올바르게 구성되었으면 출력이 표시되지 않아야 합니다. Puppet 에이전트를 처음 실행하면 SSL 인증서가 생성되고 Puppet 마스터에 서명 요청이 전송됩니다. Puppet 마스터가 에이전트의 인증서에 서명한 후 에이전트 노드와 통신할 수 있습니다.

참고: 첫 번째 Puppet 에이전트인 경우 다른 에이전트를 추가하기 전에 Puppet 마스터에서 인증서 서명을 시도하는 것이 좋습니다. 모든 것이 제대로 작동하는지 확인한 후에는 안심하고 돌아가서 나머지 에이전트 노드를 추가할 수 있습니다.

마스터에 서명 요청

Puppet은 에이전트 노드에서 처음 실행될 때 Puppet 마스터에 인증서 서명 요청을 보냅니다. 마스터가 에이전트 노드와 통신하고 제어하려면 먼저 해당 에이전트 노드의 인증서에 서명해야 합니다. 서명 요청에 대한 서명 및 확인 방법에 대해 설명합니다.

현재 인증서 요청 나열

Puppet 마스터에서 다음 명령을 실행하여 서명되지 않은 모든 인증서 요청을 나열합니다.

sudo puppet cert list

첫 번째 에이전트 노드를 방금 설정한 경우 하나의 요청이 표시됩니다. 에이전트 노드의 FQDN을 호스트 이름으로 사용하여 다음과 같이 표시됩니다.

"host1.nyc2.example.com" (SHA256) B1:96:ED:1F:F7:1E:40:53:C1:D4:1B:3C:75:F4:7C:0B:A9:4C:1B:5D:95:2B:79:C0:08:DD:2B:F4:4A:36:EE:E3

앞에 +가 없다는 점에 유의하십시오. 이는 아직 서명되지 않았음을 나타냅니다.

요청에 서명

인증서 요청에 서명하려면 서명하려는 인증서의 호스트 이름과 함께 puppet cert sign 명령을 사용하십시오. 예를 들어 host1.nyc2.example.com에 서명하려면 다음 명령을 사용합니다.

sudo puppet cert sign host1.nyc2.example.com

인증서 요청이 서명되었음을 나타내는 다음 출력이 표시됩니다.

Notice: Signed certificate request for host1.nyc2.example.com
Notice: Removing file Puppet::SSL::CertificateRequest host1.nyc2.example.com at '/var/lib/puppet/ssl/ca/requests/host1.nyc2.example.com.pem'

Puppet 마스터는 이제 서명된 인증서가 속한 노드와 통신하고 제어할 수 있습니다.

모든 현재 요청에 서명하려면 다음과 같이 -all 옵션을 사용하십시오.

sudo puppet cert sign --all

인증서 취소

Puppet에서 호스트를 제거하거나 호스트를 다시 빌드한 다음 Puppet에 다시 추가할 수 있습니다. 이 경우 Puppet 마스터에서 호스트의 인증서를 취소해야 합니다. 이렇게 하려면 clean 작업을 사용해야 합니다.

sudo puppet cert clean hostname

지정된 호스트의 연결된 인증서가 Puppet에서 제거됩니다.

모든 서명된 요청 보기

서명된 요청과 서명되지 않은 모든 요청을 보려면 다음 명령을 실행하십시오.

sudo puppet cert list --all

모든 요청 목록이 표시됩니다. 서명된 요청 앞에는 +가 있고 서명되지 않은 요청에는 +가 없습니다.

  "ns2.nyc2.example.com"   (SHA256) E4:F5:26:EB:B1:99:1F:9D:6C:B5:4B:BF:86:14:40:23:E0:50:3F:C1:45:D0:B5:F0:68:6E:B2:0F:41:C7:BA:76
+ "host1.nyc2.example.com" (SHA256) 71:A2:D3:82:15:0D:80:20:D4:7E:E3:42:C2:35:87:83:79:2B:57:1D:D5:5A:EC:F6:8B:EE:51:69:53:EB:6B:A1
+ "host2.nyc2.example.com" (SHA256) F4:79:A6:7C:27:0C:EA:8E:BC:31:66:FF:F2:01:AB:B1:35:7B:9F:5E:C8:C9:CE:82:EE:E8:2F:23:9F:0C:2B:ED
+ "puppet"                 (SHA256) 05:22:F7:65:64:CF:46:0E:09:2C:5D:FD:8C:AC:9B:31:17:2B:7B:05:93:D5:D1:01:52:72:E6:DF:84:A0:07:37 (alt names: "DNS:puppet", "DNS:puppet.nyc2.example.com")

축하해요! 이제 Puppet에서 인프라를 관리할 준비가 되었습니다!

꼭두각시 시작하기

인프라가 Puppet으로 관리되도록 설정되었으므로 시작하기 위한 몇 가지 기본 작업을 수행하는 방법을 보여드리겠습니다.

사실 수집 방법

Puppet은 facter라는 도구를 사용하여 각 노드에 대한 정보를 수집합니다. 기본적으로 팩터는 시스템 구성에 유용한 정보(예: OS 이름, 호스트 이름, IP 주소, SSH 키 등)를 수집합니다. 구성을 수행하기 위해 다른 팩트가 필요한 경우 사용자 지정 팩트를 추가할 수 있습니다.

수집된 사실은 많은 상황에서 유용할 수 있습니다. 예를 들어 웹 서버 구성 템플릿을 만들고 특정 가상 호스트에 대한 적절한 IP 주소를 자동으로 채울 수 있습니다. 또는 서버의 OS가 "Ubuntu\라고 판단할 수 있으므로 httpd 대신 apache2 서비스를 실행해야 합니다. 이들은 기본적인 예이지만 다음을 제공해야 합니다. 팩트가 어떻게 사용될 수 있는지에 대한 아이디어.

에이전트 노드에서 자동으로 수집되는 사실 목록을 보려면 다음 명령을 실행하십시오.

facter

기본 매니페스트가 실행되는 방식

꼭두각시 에이전트는 주기적으로 꼭두각시 마스터를 확인합니다(일반적으로 30분마다). 이 시간 동안 마스터에 자신에 대한 사실을 보내고 현재 카탈로그(주 매니페스트에 의해 결정된 에이전트와 관련된 리소스 및 원하는 상태의 컴파일된 목록)를 가져옵니다. 그런 다음 에이전트 노드는 원하는 상태를 달성하기 위해 적절한 변경을 시도합니다. 이 주기는 Puppet 마스터가 실행되고 에이전트 노드와 통신하는 동안 계속됩니다.

특정 에이전트 노드에서 즉시 실행

또한 해당 에이전트 노드에서 다음 명령을 실행하여 특정 에이전트 노드에 대한 검사를 수동으로 시작할 수도 있습니다.

puppet agent --test

이를 실행하면 테스트를 실행하는 에이전트에 기본 매니페스트가 적용됩니다. 다음과 같은 출력이 표시될 수 있습니다.

Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts in /var/lib/puppet/lib/facter/pe_version.rb
Info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb
Info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb
Info: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb
Info: Caching catalog for host1.nyc2.example.com
Info: Applying configuration version '1407966707'

이 명령은 기본 매니페스트가 단일 서버에 즉시 영향을 미치는 방식을 확인하는 데 유용합니다.

일회성 매니페스트

puppet apply 명령을 사용하면 요청 시 기본 매니페스트와 관련되지 않은 매니페스트를 실행할 수 있습니다. 적용을 실행하는 노드에만 매니페스트를 적용합니다. 다음은 예입니다.

sudo puppet apply /etc/puppet/modules/test/init.pp

이 방식으로 매니페스트를 실행하는 것은 에이전트 노드에서 새 매니페스트를 테스트하려는 경우 또는 매니페스트를 한 번만 실행하려는 경우(예: 에이전트 노드를 원하는 상태로 초기화하려는 경우)에 유용합니다.

간단한 매니페스트

Puppet 마스터의 기본 매니페스트 파일은 /etc/puppet/manifests/site.pp에 있습니다.

마스터에서 지금 편집하십시오.

sudo vi /etc/puppet/manifests/site.pp

이제 다음 줄을 추가하여 파일 리소스를 설명합니다.

file {'/tmp/example-ip':                                            # resource type file and filename
  ensure  => present,                                               # make sure it exists
  mode    => 0644,                                                  # file permissions
  content => "Here is my Public IP Address: ${ipaddress_eth0}.\n",  # note the ipaddress_eth0 fact
}

이제 저장하고 종료합니다. 인라인 주석은 우리가 정의하는 리소스를 설명해야 합니다. 평이한 영어로 이렇게 하면 모든 에이전트 노드가 /tmp/example-ip-rw-r--r- 파일이 있는지 확인하게 됩니다. - 권한 및 노드의 공용 IP 주소를 포함하는 텍스트.

에이전트가 마스터에 자동으로 체크인할 때까지 기다리거나 (에이전트 노드 중 하나에서) puppet 에이전트 --test 명령을 실행할 수 있습니다. 그런 다음 다음 명령을 실행하여 파일을 인쇄합니다.

cat /tmp/example-ip

다음과 같은 출력이 표시되어야 합니다(해당 노드의 IP 주소 포함).

Here is my Public IP Address: 128.131.192.11.

노드 지정

특정 노드에 대한 리소스를 정의하려면 매니페스트에서 노드를 정의합니다.

마스터에서 site.pp를 편집합니다.

sudo vi /etc/puppet/manifests/site.pp

이제 다음 줄을 추가합니다.

node 'ns1', 'ns2' {    # applies to ns1 and ns2 nodes
  file {'/tmp/dns':    # resource type file and filename
    ensure => present, # make sure it exists
    mode => 0644,
    content => "Only DNS servers get this file.\n",
  }
}

node default {}       # applies to nodes that aren't explicitly defined

저장 및 종료.

이제 Puppet은 /tmp/dns의 파일이 ns1ns2에 존재하는지 확인합니다. 예약된 Puppet 에이전트 가져오기를 기다리지 않으려면 puppet agent --test 명령(ns1 또는 ns2에서)을 실행할 수 있습니다.

리소스를 정의하지 않으면 Puppet은 리소스를 건드리지 않도록 최선을 다합니다. 따라서 매니페스트에서 이러한 리소스를 삭제해도 Puppet은 생성된 파일을 삭제하지 않습니다. 파일을 삭제하려면 ensureabsent로 변경하세요.

이러한 예제는 유용한 작업을 수행하지 않지만 Puppet이 제대로 작동하고 있음을 증명합니다.

모듈 사용

이제 모듈을 사용해 봅시다. 모듈은 작업을 함께 그룹화하는 데 유용합니다. Puppet 커뮤니티에는 사용 가능한 많은 모듈이 있으며 직접 작성할 수도 있습니다.

Puppet 마스터에서 forgeapi의 puppetlabs-apache 모듈을 설치합니다.

sudo puppet module install puppetlabs-apache

경고: 기존 Apache 설정에서 이 모듈을 사용하지 마십시오. Puppet에서 관리하지 않는 모든 Apache 구성을 제거합니다.

이제 site.pp를 편집합니다.

sudo vi /etc/puppet/manifest/site.pp

이제 다음 줄을 추가하여 host2에 Apache를 설치합니다.

node 'host2' {
  class { 'apache': }             # use apache module
  apache::vhost { 'example.com':  # define vhost resource
    port    => '80',
    docroot => '/var/www/html'
  }
}

저장 및 종료. 이제 Puppet이 host2를 업데이트하면 Apache 패키지를 설치하고 "example.com\이라는 가상 호스트를 구성하여 포트 80에서 수신하고 문서 루트 /var/www/html 를 사용합니다. .

host2에서 다음 명령을 실행합니다.

sudo puppet agent --test

Apache가 설치되고 있음을 나타내는 많은 출력이 표시되어야 합니다. 완료되면 host2의 공개 IP 주소로 이동합니다. 기본 Apache 시작 페이지가 표시되어야 합니다.

축하해요! 첫 번째 Puppet 모듈을 사용했습니다!

결론

이제 기본 에이전트/마스터 Puppet 설치가 있으므로 Puppet을 사용하여 서버 인프라를 관리하는 방법에 대해 자세히 알아볼 준비가 되었습니다. 다음 자습서를 확인하십시오: Puppet 코드 시작하기: 매니페스트 및 모듈.