클라우딩 컴퓨팅환경과 함께 조명받고있는 분야가 서버관리 기술중에 하나인 프로비저닝분야인것 같습니다. 그에따라서 많은 서버관리를 자동화 하고 서버관리 또한 코드화하여 자동화 하는 기술인것 같습니다.
최근에 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
참조 :
서버 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-on-ubuntu-16-04
'DevOps' 카테고리의 다른 글
VirtualBox와 CentOS / Ubuntu 간에 공유폴더 설정 (0) | 2017.07.25 |
---|---|
기본 Docker 커맨드 For Tomcat (0) | 2017.07.24 |
AWS Route table 설정과 해석 (0) | 2017.06.10 |
Backup & Recovery : RTP vs RPO (0) | 2017.06.10 |
성공적인 Git branching model 전략 (0) | 2017.06.06 |