클라우딩 컴퓨팅환경과 함께 조명받고있는 분야가 서버관리 기술중에 하나인 프로비저닝분야인것 같습니다. 그에따라서 많은 서버관리를 자동화 하고 서버관리 또한 코드화하여 자동화 하는 기술인것 같습니다.

 

최근에 Chef쪽에 기웃기리다 최근에 다시 Puppet쪽으로 리서치하고있습니다. 파죽지세로 올라오는 AWS Puppet보다는 Chef쪽에 있는것 같아 Chef 기대볼까 했었는데, 실제로 Job market에서는 Chef보다는 Puppet 값을 처주는 같고 실제 멜번의 경우 DevOps커뮤니티에서Puppet에대한 수요가 많다는 느낌입니다.

 

간단히 Puppet 서버와 Agent설치하는 과정을 정리해보았습니다.

 

기본적으로 설치는 인터넷에 많이 공개된 가이드를 따라하면 되겠으나 다른 일반 패키지와 특이한점은(?) 서버와 에이전트간에 통신을 위해 처음에SSL인증 절차가 필요하기 때문에 이부분을 미리 이해하면 쉬울것 같습니다.

 

 

Prerequisites

1.     Server              : CentOS Linux release 7.3.1611 (Core)     : puppet.example.com (IP:192.168.56.102)

2.     Agent1             : CentOS Linux release 7.3.1611 (Core)     : cent1.example.com

3.     Agent2             : CentOS Linux release 7.3.1611 (Core)     : cnet2.example.com

 

편의상 모든 서버는 CentOS 사용했습니다.

편의상 모든 테스트를 위해서 관리대상이 되는 Node 두개를 마련했습니다.

설치 진행은 VirtualBox guest OS에서 진행했습니다.

 


 

서버 Hostname 설정 Agent 서버에 Master 서버 등록

Puppet Master server

Hostname 설정 합니다.

/etc/sysconfig/network, /etc/hosts 파일을 편집하고 hostname 커맨드를 이용하여 설정할수도 있지만 CentOS 7 에서는hostnamectl 이용하여 간단히 변경할 있습니다.

$> hostnamectl status : 현재 설정확인

$> hostnamectl set-hostname puppet.example.com                 : Hostname 설정 

 

Puppet Agent(cent1, cent2)

Hostname 설정 합니다.

$> hostnamectl set-hostname cent1.example.co                      : For Agent1

$> hostnamectl set-hostname cent2.example.co                      : For Agent2

 

참조 : 

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec_Configuring_Host_Names_Using_hostnamectl.html

 

서버 Hostname 설정 Agent 서버에 Master 서버 등록

Puppet서버는 클라이언트와 8140포트를 통해서 통신하기 때문에 해당포트가 열려있어야 합니다. CentOS firewall-cmd 명령을 이용하여(없으면 설치하셔야할것 같습니다.) 간단히 설정할 있습니다.

$> firewall-cmd –add-port=8140/tcp

$> firewall-cmd –add-port=8140/tcp --permanent      : 영구적으로 반영합니다.

 

그리고 Agent서버의  “/etc/hosts”파일을 열어서 마스터 서버를 등록해줍니다.

 

192.168.56.102 puppet puppet.example.com 






 

이젠 Server Agent 설치할 준비가 되었습니다.

Enable the official Puppet Labs collection repository

대부분 서버에는 기본적으로 Puppet 설치하기위한 리포지토리가 없기때문에 서버와 클라이트쪽 모두에게 Puppet Lab 리파지토리 컬렉션을 등록해줘야 합니다.

 

$> rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

명령을 실행하고 나면, /etc/yum.repos.d/ puppetlabs-xx.repo 등록되어 있는 것을 확인 있을 것입니다.

 

참고로 패키지 관리자별 리포지토리 파일을 다음의 URL에서 확인 있으며 선택적으로 등록할 있습니다.

§  http://yum.puppetlabs.com

§  http://apt.puppetlabs.com/

 



 

Puppet 서버 설치/실행

다음 커맨드로 설치하면 기본 설치는 끝납니다.

$> yum -y install puppetserver

 

Puppet서버는 기본적으로 JVM으로 구동됩니다. 그래서 실제로 프로세스를 확인해보면 서버는 서버에 설치된 java 이용하여 서버를 구동하면서 여러가지 설치된 jar 파일이 –cp 걸려있는 것을 확인할수있습니다.

 

설치후 기본적으로 JVM 메모리옵션 puppet환경 설정 중에 JVM 옵션으로 -Xms3g –Xmx3g 잡혀있는데요 이것은 관리되어지는 Node에따라 조정되어야하는데 현재 로컬에서 테스트 하므로 저의 경우-Xms500m -Xmx500m 조정하는것이 좋을것 같습니다.

$> vi /etc/sysconfig/puppetserver

 

 

이제 서버를 실행합니다.

$> systemctl start puppetserver

$> systemctl enable puppetserver                    : 서버가 시작되면 자동 시작되도록

$> systemctl stop puppetserver                        : 서버 중지

 

 


Puppet Agent서버 설치/실행

다음 커맨드로 에이전트를 설치합니다.

$> yum -y install puppet-agent

 

다음 커맨드로 에이전트를 실행합니다.

$> /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true

 

 

 

에이전트를 처음 실행하면 에이전트는 서버에서 SSL인증 요청을 하게됩니다.

그러면 서버에서 해당 요청에 대해서 Sign 해주면 그때부터 Agent Puppet 관리대상이 되는 Node 되어집니다.

 

위의 명령이 처음 실행된 상태라면 서버에서 요청된 내용을 다음과 같이 확인 할수 있습니다.

$> puppet cert list

 

그러면 대기준인 목록이 나타납니다.

"cent1.example.com" (SHA256) EB:62:~~~

"cent2.example.com" (SHA256) ED:33:~~~

 

그리고 Sign요청된 클라이언트들의 요청은 “/etc/puppetlabs/puppet/ssl/ca/requests” 파일로 생성됩니다.

 

다음의 명령으로 인증 요청에 대해서 Sign 줍니다.

$> puppet cert sign “cent1.example.com”

$> puppet cert sign “cent2.example.com”

또는 다음의 명령으로 일괄적으로 Sign 줄수도 있습니다.

 

$> puppet cert sign --all

 

이렇게 인증이 완료되면

“/etc/puppetlabs/puppet/ssl/ca/requests” 요청된 파일들은 삭제되고

“/etc/puppetlabs/puppet/ssl/ca/signed” 인증이 완료된 파일들로 이관됩니다.

 

다음의 명령으로 인증이 완료된 클라이언트 목록을 확인 수있습니다.

$> puppet cert list --all

 

 

이렇게 하므로써 Puppet 서버와 Agent 기본설치는 마무리 됩니다.

 



 

Puppet Server/Agent테스트

“/etc/puppetlabs/code/environments/production/manifests” site.pp라는 파일로 다음의 내용을 작성합니다.

 

file {'/tmp/example-ip':                    # resource type file and filename

  ensure  => present,                       # make sure it exists

  mode    => '0644',                                # file permissions

  content => "My Public IP Address: ${ipaddress_eth0}.\n", 

}

 

 

그리고 30(기본값) 기다리거나 에이전에에서 다음의 커맨드를 실행시켜서

$> puppet agent --test

 

/tmp/example-ip 파일의 내용과 생성된 권한을 확인해 봅니다.



*** 위에서 작성된 site.pp파일에서 ipaddress_eh0변수는 팩터(Facter) 가 수집해온 정보 변수중 하나입니다.

Puppet 서버에서 다음의 명령을 실행시켜 보면 팩터가 관리대상이 되는 노드들로 부터 어떤 정보들을 수집해왔는지 확인 할 수 있습니다.

$> facter



참고 : https://www.digitalocean.com/community/tutorials/how-to-install-puppet-4-in-a-master-agent-setup-on-centos-7

https://www.digitalocean.com/community/tutorials/how-to-install-puppet-4-on-ubuntu-16-04









 

 

Posted by Steven J.S Min

댓글을 달아 주세요