'Basic Computer Engineering/Basic Infrastructure'에 해당되는 글 4건

  1. [Infra] 버전관리의 효율화 - git 개요
  2. [Infra] 서버관리의 효율화 - Puppet Master to Agent 연동
  3. [Infra] 서버관리의 효율화 - Puppet 설치
  4. [Infra] 서버관리의 효율화 - Puppet 개요





DVCS (Distributed Version Control System)

소스 코드나, 이미지 등을 수정할 때 마다 각각의 형태를 보존하고 싶어하는 경우, 고객에 의해 각 의미있는 변화 (기능개선, 버그 수정) 들을 관리하는 체계를 형상관리, 버전관리 라고 합니다.

버전관리 시스템을 사용하면 소프트웨어의 상태, 프로젝트의 상태를 이전 상태로 되돌리거나 시간에 따른 갱신 기록등을 살펴볼 수 있는 장점이 있습니다. 대표적인 버전관리 소프트웨어로는 SVN(Subversion), mercurial, bazaar, Git 등이 존재합니다.


버전 관리의 방식으로는 로컬 버전 관리 시스템, 중앙집중식 버전 관리 시스템, 분산버전 관리 시스템으로 나눌수 있는데, 오늘 소개할 git은 분산 버전 관리 시스템(Distributed Version Control System; DVCS)에 해당됩니다. 분산 버전 관리 시스템은 클라이언트들이 파일의 마지막 스냅샷 정보를 가져오는 대신 해당 저장소(repository)를 통째로 복사하여, 만약 이상 상태(서버 이상)에 빠지더라도 해당 저장소를 다시 다른 서버로 복사하면 서버가 복구되는 형태입니다. 다시 말해 체크아웃(checkout) 이벤트가 발생 될 때마다 소스 Full Backup이 발생하는 셈입니다.


이로 인해 내부에 저장소 생성 되므로 기존 버전 관리 시스템인 SVN과 비교하였을 때 월등히 빠른 속도를 나타내며, 로컬 저장소에서 부담없이 테스트할 수 있습니다.


SVN vs Git

Git 을 처음 접할 경우 SVN과 많이 다른점을 발견할 수 있습니다.


저장소 (repository)

SVN은 저장소가 외부의 서버에 존재합니다. 하지만 Git은 로컬 저장소가 존재합니다. 테스트 역시 로컬 저장소에서 테스트 할 수 있어 SVN보다 빠른 속도로 처리 될 수 있습니다. 대부분의 명령어가 네트워크 속도에 영향을 받는데, Git은 프로젝트의 모든 히스토리가 로컬 저장소에 존재하기 때문에 실행 속도가 매우 빠릅니다.


파일 변화 처리

기존 VCS 시스템의 파일 변화 처리 과정에서 시간순으로 데이터 전체를 처리 했다면, Git에서는 데이터를 저장하지 않고 시스템의 스냅샷을 활용하여 파일이 달라질 경우에만 시간순으로 프로젝트 스냅샷을 저장합니다. 만약 파일이 이전 버전과 달라지지 않았다면 Git은 성능 향상을 위해 파일을 저장하지 않고 이전 상태의 파일에 대한 링크만 저장합니다.


Fig.01: 기존의 VCS 시스템 (http://git-scm.com/book/ko/v1)


Fig.02: git의 시스템


무결성

Git은 모든 데이터를 저장하기 전에 체크섬(또는 해시)을 구하고 그 체크섬으로 데이터를 관리합니다. 체크섬 없이 어떠한 파일, 디렉토리도 변경 하지 못합니다. Git은 SHA-1 해시를 사용하여 체크섬을 만듭니다. 만든 체크섬은 40자 길이의 16진수 문자열입니다. 파일의 내용이나 디렉토리 구조를 이용하여 체크섬을 구합니다.

Git은 모든 것을 해시로 식별하고, 실제로 git은 파일을 이름으로 저장하지 않고 해당 파일 해시 값으로 저장합니다.


git의 상태

Git은 파일을 Committed, Modified, Staged 이렇게 세 가지 상태로 관리합니다.

Commited

데이터가 로컬 데이터베이스에 안전하게 저장된 상태입니다.

Modified

수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 상태입니다.

Staged

현재 수정한 파일을 곧 커밋할것이라고 표시한 상태입니다.


Fig.03: 워킹 디렉토리, Staging Area, Git 디렉토리


Git 디렉토리는 Git의 프로젝트 메타데이터객체 데이터베이스가 저장됩니다. Git 디렉토리가 Git의 핵심이라고 볼 수 있습니다. 원격에서 Clone을 할 경우 Git 디렉토리가 생성됩니다.

Working 디렉토리프로젝트를 특정 버전으로 Checkout 한 것 입니다. Git 디렉토리에는 지금 작업하는 디스크에 있고 그 디렉토리에 압축된 데이터베이스를 가져와서 Working 디렉토리를 생성합니다.

Staging Area는 Git 디렉토리에 존재합니다. 단순한 파일이고 곧 커밋할 파일에 대한 정보가 저장되어 있습니다.


Staging Area

Git에는 로컬 저장소에 저장하기 전 단계인 스테이지 영역이 존재 합니다. 인덱스라고도 불립니다.

Git은 Working 디렉토리에서 파일을 수정하고 Staging Area에 파일을 Stage해서 커밋할 스냅샷을 생성합니다. 그리고 Staging Area에 있는 파일들을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장합니다.

기존 SVN에서는 변경 된 파일들은 무조건 커밋 대상이 되지만, Git 에서는 Staging Area에 커밋할 파일들만 추가 하여 커밋이 가능합니다.


저작자 표시 비영리 동일 조건 변경 허락
신고





Puppet Master to Agent 연동 개요

지금까지 Puppet Master Server, Puppet Agent Server를 설치하였습니다. 


이제 Master, Agent 1, Agent 2를 연동하는 작업에 대해 알아보겠습니다.

앞서 이야기 했듯이 Master Agent는 서로 SSL 통신을 하고,  쌍방향의 SSL 키값의 승인 작업이 수행되어야합니다. Puppet은 SSL 통신을 위해 기존의 CA(certificate authority)을 사용합니다. 또 장점으로는 Puppet에서 CA를 커스터마이징 가능합니다. 이에 관련되어 자세한 내용은 매뉴얼을 참조하시기 바랍니다.


Configure the Puppet SSL Steps

1. Agent 서버에서 Master(target)으로 접속을 요청합니다.

2. Master에서 Agent Domain 정보를 얻은 후, 승인이 되면 SSL을 발급합니다. (발급된 파일은 ".pem" 확장자를 갖고 있습니다.)

3. Agent는 "/etc/puppet/ssl" 폴더 아래 서버 정보와 본인의 SSL 인증 파일을 저장합니다.

4. 이후 Connection 시부터는 인증 완료된 SSL Key를 통해 바로 접속합니다.


Puppet Master to Agent 연동 테스트


All Node] # Ping Test (Agent 1, Agent 2 Node 수행)

[root@master ~]# ping agent1
PING agent1.example.com (192.168.66.137) 56(84) bytes of data.
64 bytes from agent1.example.com (192.168.66.137): icmp_seq=1 ttl=64 time=0.655 ms
64 bytes from agent1.example.com (192.168.66.137): icmp_seq=2 ttl=64 time=0.397 ms
64 bytes from agent1.example.com (192.168.66.137): icmp_seq=3 ttl=64 time=0.767 ms
^C
--- agent1.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.397/0.606/0.767/0.156 ms

[root@master ~]# ping agent2
PING agent2.example.com (192.168.66.143) 56(84) bytes of data.
64 bytes from agent2.example.com (192.168.66.143): icmp_seq=1 ttl=64 time=1.26 ms
64 bytes from agent2.example.com (192.168.66.143): icmp_seq=2 ttl=64 time=1.43 ms
64 bytes from agent2.example.com (192.168.66.143): icmp_seq=3 ttl=64 time=0.774 ms
^C
--- agent2.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 0.774/1.155/1.430/0.278 ms

[root@master ~]# cd /etc/
[root@master etc]# ps -ef | grep puppet
root     11444 11384  0 22:26 pts/1    00:00:00 grep --color=auto puppet
....
# Agent 1, Agent 2 Node도 교차 테스트 진행

Master Node] # Puppet Master Server 실행

[root@master etc]# puppet master --no-daemonize -d -v
Debug: Using settings: adding file resource 'confdir': 'File[/etc/puppet]{:path=>"/etc/puppet", :ensure=>:directory, :loglevel=>:debug, :links=>:follow, :backup=>false}'
Debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dsimport does not exist
Debug: Failed to load library 'ldap' for feature 'ldap'
Debug: Puppet::Type::User::ProviderLdap: feature ldap is missing
Debug: Puppet::Type::User::ProviderPw: file pw does not exist
Debug: Puppet::Type::User::ProviderUser_role_add: file roleadd does not exist
Debug: Puppet::Type::Group::ProviderDirectoryservice: file /usr/bin/dscl does not exist
Debug: Failed to load library 'ldap' for feature 'ldap'
Debug: Puppet::Type::Group::ProviderLdap: feature ldap is missing
Debug: Puppet::Type::Group::ProviderPw: file pw does not exist
...
# Debuge 모드로 실행 (Foreground 모드로 실행 --- 로그를 보기 위해서)
...
Info: Creating a new SSL key for ca
Info: Creating a new SSL certificate request for ca
Info: Certificate Request fingerprint (SHA256): 38:F9:A2:72:BA:46:7D:D3:55:84:C7:DF:17:5E:A6:3F:FD:8C:B4:07:06:BB:85:10:65:EF:48:29:90:35:D1:92
Notice: Signed certificate request for ca
Debug: Using cached certificate for ca
Info: Creating a new certificate revocation list
Debug: Runtime environment: puppet_version=3.7.1, ruby_version=2.0.0, run_mode=master, default_encoding=UTF-8
Info: Creating a new SSL key for master.example.com
Debug: Using cached certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for master.example.com
Info: Certificate Request fingerprint (SHA256): 27:52:EA:97:6F:B4:AE:7F:02:C4:2D:D6:90:31:88:4C:50:5D:95:08:25:20:86:FF:D2:3A:5D:2A:ED:CB:26:FE
Notice: master.example.com has a waiting certificate request
Debug: Using cached certificate for ca
Debug: Using cached certificate_request for master.example.com
Notice: Signed certificate request for master.example.com
Notice: Removing file Puppet::SSL::CertificateRequest master.example.com at '/var/lib/puppet/ssl/ca/requests/master.example.com.pem'
Notice: Removing file Puppet::SSL::CertificateRequest master.example.com at '/var/lib/puppet/ssl/certificate_requests/master.example.com.pem'
Debug: Using settings: adding file resource 'config': 'File[/etc/puppet/puppet.conf]{:path=>"/etc/puppet/puppet.conf", :ensure=>:file, :loglevel=>:debug, :links=>:follow, :backup=>false}'
Debug: /File[/etc/puppet/puppet.conf]/seluser: Found seluser default 'system_u' for /etc/puppet/puppet.conf
Debug: /File[/etc/puppet/puppet.conf]/selrole: Found selrole default 'object_r' for /etc/puppet/puppet.conf
Debug: /File[/etc/puppet/puppet.conf]/seltype: Found seltype default 'puppet_etc_t' for /etc/puppet/puppet.conf
Debug: /File[/etc/puppet/puppet.conf]/selrange: Found selrange default 's0' for /etc/puppet/puppet.conf
Debug: Finishing transaction 15087260
Notice: Starting Puppet master version 3.7.1

Agent 1 Node] # Puppet Server 실행

[root@agent1 etc]# puppet agent --server master.example.com --no-daemonize --verbose
Info: Creating a new SSL key for agent1.example.com
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent1.example.com
Info: Certificate Request fingerprint (SHA256): D1:3E:61:97:50:E9:E5:AA:6F:89:2F:FF:01:E8:61:B6:C7:92:75:5E:64:FA:82:CB:A7:BA:C0:D4:19:50:73:D6
Info: Caching certificate for ca
# 더 이상 진행되지 않습니다. ( SSL 인증서가 발급되지 않았기 때문에, 발급 요청 중입니다. -> Master Server Log를 보세요.)

Master Node] # Agent 1 SSL 승인 (Debug 모드이기 때문에 새로운 SSH를 열어서 수행하세요.)

# + 표시는 CA에 인증된 Node이고, + 표시가 없는 Node는 지금 Master에 접속한 Node면서 SSL이 발급되지 않은 Node 입니다.
[root@master etc]# puppet cert --all --list
  "agent1.example.com" (SHA256) D1:3E:61:97:50:E9:E5:AA:6F:89:2F:FF:01:E8:61:B6:C7:92:75:5E:64:FA:82:CB:A7:BA:C0:D4:19:50:73:D6
+ "master.example.com" (SHA256) 36:7B:3C:22:B3:C2:B7:C9:D6:30:8D:3F:25:F8:2F:76:B3:72:53:D5:52:5D:85:5A:C5:61:63:A0:EC:99:C1:96 (alt names: "DNS:master.example.com", "DNS:puppet", "DNS:puppet.example.com")

# SSL 요청을 승인합니다.
[root@master etc]# puppet cert --sign agent1.example.com
Notice: Signed certificate request for agent1.example.com
Notice: Removing file Puppet::SSL::CertificateRequest agent1.example.com at '/var/lib/puppet/ssl/ca/requests/agent1.example.com.pem'

# 결과를 확인합니다.
[root@master etc]# puppet cert --all --list
+ "agent1.example.com" (SHA256) 02:1F:B1:29:FE:DE:A6:D4:1E:F5:D6:94:D8:F7:B1:F5:6F:31:CF:C2:3C:F8:BD:EA:B6:56:A0:92:0C:E5:02:8D
+ "master.example.com" (SHA256) 36:7B:3C:22:B3:C2:B7:C9:D6:30:8D:3F:25:F8:2F:76:B3:72:53:D5:52:5D:85:5A:C5:61:63:A0:EC:99:C1:96 (alt names: "DNS:master.example.com", "DNS:puppet", "DNS:puppet.example.com")

Agent 1 Node] # 새로 다시 접속합니다.

# 정상 접근 가능합니다.
[root@agent1 etc]# puppet agent --server master.example.com --no-daemonize --verbose
Info: Caching certificate for agent1.example.com
Info: Caching certificate_revocation_list for ca
Info: Caching certificate for agent1.example.com
Notice: Starting Puppet client version 3.7.1
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.example.com
Info: Applying configuration version '1413167462'
Notice: Finished catalog run in 0.01 seconds
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.example.com
Info: Applying configuration version '1413167462'
Notice: Finished catalog run in 0.01 seconds
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.example.com
Info: Applying configuration version '1413167462'
Notice: Finished catalog run in 0.01 seconds
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.example.com
Info: Applying configuration version '1413167462'
Notice: Finished catalog run in 0.01 seconds
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.example.com
Info: Applying configuration version '1413167462'
Notice: Finished catalog run in 0.09 seconds

Agent 2 Node] # Agent 2 Node도 동일 수행합니다. (인증 후 Master Node에서의 검증 화면입니다.)

[root@master etc]# puppet cert --all --list
  "agent2.example.com" (SHA256) B2:71:0F:3B:F7:16:81:E7:C7:97:95:45:14:CF:8F:19:B3:64:2E:72:84:5F:CE:F7:65:C7:8E:2B:41:F2:93:C5
+ "agent1.example.com" (SHA256) 02:1F:B1:29:FE:DE:A6:D4:1E:F5:D6:94:D8:F7:B1:F5:6F:31:CF:C2:3C:F8:BD:EA:B6:56:A0:92:0C:E5:02:8D
+ "master.example.com" (SHA256) 36:7B:3C:22:B3:C2:B7:C9:D6:30:8D:3F:25:F8:2F:76:B3:72:53:D5:52:5D:85:5A:C5:61:63:A0:EC:99:C1:96 (alt names: "DNS:master.example.com", "DNS:puppet", "DNS:puppet.example.com")

[root@master etc]# puppet cert --sign agent2.example.com
Notice: Signed certificate request for agent2.example.com
Notice: Removing file Puppet::SSL::CertificateRequest agent2.example.com at '/var/lib/puppet/ssl/ca/requests/agent2.example.com.pem'

[root@master etc]# puppet cert --all --list
+ "agent1.example.com" (SHA256) 02:1F:B1:29:FE:DE:A6:D4:1E:F5:D6:94:D8:F7:B1:F5:6F:31:CF:C2:3C:F8:BD:EA:B6:56:A0:92:0C:E5:02:8D
+ "agent2.example.com" (SHA256) DF:98:0F:23:C4:FA:D5:93:13:04:C5:27:F3:B2:A1:BB:25:19:85:26:D2:B5:28:B7:01:D5:A3:A7:D2:F2:17:C3
+ "master.example.com" (SHA256) 36:7B:3C:22:B3:C2:B7:C9:D6:30:8D:3F:25:F8:2F:76:B3:72:53:D5:52:5D:85:5A:C5:61:63:A0:EC:99:C1:96 (alt names: "DNS:master.example.com", "DNS:puppet", "DNS:puppet.example.com")


저작자 표시 비영리 동일 조건 변경 허락
신고





How to Install Puppet Open Source on CentOS 7.0 & Ubuntu 14.04 LTS

서버 구성환경

 

Master

Agent 1

Agent 2

공통 환경

Vmware Workstation 10.0.0 / 각 서버당 1GB 할당

OS

Cent OS 7.0

Cent OS 7.0

Ubuntu 14.04 LTS

IP

192.168.66.135

192.168.66.137

192.168.66.143

Domain

master.example.com

agent1.example.com

agent2.example.com


Puppet Master Server 구성

# Enable the Puppet Labs Package Repository

## 기본적으로 비 활성화되어 있는 릴리즈 후보 버전을 테스트하기 위해 repo를 설치합니다.
[root@localhost ~]# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
Retrieving http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
warning: /var/tmp/rpm-tmp.H83xAl: Header V4 RSA/SHA1 Signature, key ID 4bd6ec30: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:puppetlabs-release-7-11          ################################# [100%]

# /etc/yum.repos.d/puppetlabs.repo file editing

## [puppetlabs-devel] 부분을 enabled key를 0 에서 1로 수정합니다.
[root@localhost ~]# vi /etc/yum.repos.d/puppetlabs.repo 
...
[puppetlabs-devel]
name=Puppet Labs Devel El 7 - $basearch
baseurl=http://yum.puppetlabs.com/el/7/devel/$basearch
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puppetlabs
#enabled=0
enabled=1
gpgcheck=1
...

# /etc/hosts file editing

[root@localhost ~]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.66.135  netmask 255.255.255.0  broadcast 192.168.66.255
        inet6 fe80::20c:29ff:feeb:85a9  prefixlen 64  scopeid 0x20
        ether 00:0c:29:eb:85:a9  txqueuelen 1000  (Ethernet)
        RX packets 3822  bytes 442665 (432.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1440  bytes 185170 (180.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 22  bytes 2240 (2.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22  bytes 2240 (2.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]# vi /etc/hosts
127.0.0.1   		localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        			localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.66.135  master.example.com      master
192.168.66.137  agent1.example.com      agent1
192.168.66.143  agent2.example.com      agent2

# change hostname (터미널을 재 실행하면 프롬프트에 표시됩니다.)

[root@localhost ~]# vi /etc/hostname 
#localhost.localdomain 수정
master.example.com

[root@localhost ~]# hostname
master.example.com

Port Open (8140 port) ※ 테스트를 위해 방화벽 해제수행

# Cent OS 7.0 부터 방화벽 해제 명령어가 달라졌습니다. 매뉴얼을 확인해주세요.

[root@master ~]# systemctl list-unit-files | grep fire
firewalld.service                           enabled 

[root@master ~]# systemctl list-unit-files | grep iptables
iptables.service                            disabled

[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl stop ip6tables
[root@master ~]# systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
[root@master ~]# systemctl disable iptables
[root@master ~]# systemctl disable ip6tables

[root@master ~]# systemctl list-unit-files | grep fire
firewalld.service                           disabled
[root@master ~]# systemctl list-unit-files | grep iptables
iptables.service                            disabled

Install Puppet on the Puppet Master Server

[root@master ~]# yum install puppet-server
Loaded plugins: fastestmirror, langpacks
base                                                                                                       | 3.6 kB  00:00:00     
extras                                                                                                     | 3.4 kB  00:00:00     
puppetlabs-deps                                                                                            | 2.5 kB  00:00:00     
puppetlabs-devel                                                                                           | 2.5 kB  00:00:00     
puppetlabs-products                                                                                        | 2.5 kB  00:00:00     
updates                                                                                                    | 3.4 kB  00:00:00     
(1/7): base/7/x86_64/group_gz                                                                              | 157 kB  00:00:01     
(2/7): puppetlabs-deps/x86_64/primary_db                                                                   | 5.2 kB  00:00:01     
(3/7): extras/7/x86_64/primary_db                                                                          |  26 kB  00:00:02     
(4/7): puppetlabs-devel/x86_64/primary_db                                                                  |  11 kB  00:00:02     
(5/7): puppetlabs-products/x86_64/primary_db                                                               |  24 kB  00:00:02     
(6/7): updates/7/x86_64/primary_db                                                                         | 3.5 MB  00:00:02     
(7/7): base/7/x86_64/primary_db                                                                            | 4.9 MB  00:03:12     
Loading mirror speeds from cached hostfile
 * base: ftp.daum.net
...
... ## 중간 중간 Is this ok [y/N] 메시지 표시 -> y 선택
...
Installed:
  puppet-server.noarch 0:3.7.1-1.el7                                                                                              

Dependency Installed:
  facter.x86_64 1:2.2.0-1.el7            hiera.noarch 0:1.3.4-1.el7                   libselinux-ruby.x86_64 0:2.2.2-6.el7        
  libyaml.x86_64 0:0.1.4-10.el7          puppet.noarch 0:3.7.1-1.el7                  ruby.x86_64 0:2.0.0.353-20.el7              
  ruby-augeas.x86_64 0:0.4.1-3.el7       ruby-irb.noarch 0:2.0.0.353-20.el7           ruby-libs.x86_64 0:2.0.0.353-20.el7         
  ruby-shadow.x86_64 1:2.2.0-2.el7       rubygem-bigdecimal.x86_64 0:1.2.0-20.el7     rubygem-io-console.x86_64 0:0.4.2-20.el7    
  rubygem-json.x86_64 0:1.7.7-20.el7     rubygem-psych.x86_64 0:2.0.0-20.el7          rubygem-rdoc.noarch 0:4.0.0-20.el7          
  rubygems.noarch 0:2.0.14-20.el7       

Complete!

/etc/puppet/puppet.conf file editing

[root@master ~]# ls -alrt /etc/puppet/modules/
total 4
drwxr-xr-x. 2 root root    6 Sep 15 16:34 .
drwxr-xr-x. 5 root root 4096 Oct  6 05:00 ..

# moduledir 과 master certname 추가
# certname은 도메인 정보를 설정하는 속성입니다. 추후 이 도메인 명으로 SSL 인증키를 발급합니다.
[root@master ~]# vi /etc/puppet/puppet.conf 
[main]
...

    moduledir = /etc/puppet/modules

[master]
certname = master.example.com

[agent]
...

# Upgrading

# Puppet 최선 버전으로 업그레이드 합니다.
[root@master ~]# puppet resource package puppet-server ensure=latest
Warning: The package type's allow_virtual parameter will be changing its default value from false to true in a future release. If you do not want to allow virtual packages, please explicitly set allow_virtual to false.
   (at /usr/share/ruby/vendor_ruby/puppet/type/package.rb:430:in `block (3 levels) in  <module:Puppet>')
package { 'puppet-server':
  ensure => '3.7.1-1.el7',
}


Puppet Agent Server 구성 (Cent OS 7.0)

# Puppet Master 구성시와 동일하며, Puppet Master Server 설치 패키지와 hostname 부분만 다릅니다.

# Enable the Puppet Labs Package Repository

## 기본적으로 비 활성화되어 있는 릴리즈 후보 버전을 테스트하기 위해 repo를 설치합니다.
[root@localhost ~]# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
Retrieving http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
warning: /var/tmp/rpm-tmp.0KIn8D: Header V4 RSA/SHA1 Signature, key ID 4bd6ec30: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:puppetlabs-release-7-11          ################################# [100%]

# /etc/yum.repos.d/puppetlabs.repo file editing

## [puppetlabs-devel] 부분을 enabled key를 0 에서 1로 수정합니다.
[root@localhost ~]# vi /etc/yum.repos.d/puppetlabs.repo 
...
[puppetlabs-devel]
name=Puppet Labs Devel El 7 - $basearch
baseurl=http://yum.puppetlabs.com/el/7/devel/$basearch
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puppetlabs
#enabled=0
enabled=1
gpgcheck=1
...

# /etc/hosts file editing

[root@localhost ~]# ifconfig
eno16777736: flags=4163<up,broadcast,running,multicast>  mtu 1500
        inet 192.168.66.137  netmask 255.255.255.0  broadcast 192.168.66.255
        inet6 fe80::20c:29ff:fe3f:b2d8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:3f:b2:d8  txqueuelen 1000  (Ethernet)
        RX packets 452  bytes 75011 (73.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 255  bytes 37374 (36.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<up,loopback,running>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10>/host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 14  bytes 1388 (1.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 1388 (1.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]# vi /etc/hosts
127.0.0.1   		localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        			localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.66.135  master.example.com      master
192.168.66.137  agent1.example.com      agent1
192.168.66.143  agent2.example.com      agent2
# change hostname (터미널을 재 실행하면 프롬프트에 표시됩니다.)

[root@localhost ~]# vi /etc/hostname 
#localhost.localdomain 수정
agent1.example.com

[root@localhost ~]# hostname
agent1.exampl.ecom 

Port Open (8140 port) ※ 테스트를 위해 방화벽 해제수행
# Cent OS 7.0 부터 방화벽 해제 명령어가 달라졌습니다. 매뉴얼을 확인해주세요.

[root@agent1 ~]# systemctl list-unit-files | grep fire
firewalld.service                           enabled 

[root@agent1 ~]# systemctl list-unit-files | grep iptables
iptables.service                            disabled

[root@agent1 ~]# systemctl stop firewalld
[root@agent1 ~]# systemctl stop iptables
[root@agent1 ~]# systemctl stop ip6tables
[root@agent1 ~]# systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
[root@agent1 ~]# systemctl disable iptables
[root@agent1 ~]# systemctl disable ip6tables

[root@agent1 ~]# systemctl list-unit-files | grep fire
firewalld.service                           disabled
[root@agent1 ~]# systemctl list-unit-files | grep iptables
iptables.service                            disabled

Install Puppet on Agent Nodes

[root@agent1 ~]# yum install puppet
Loaded plugins: fastestmirror, langpacks
puppetlabs-deps                                                                                            | 2.5 kB  00:00:00     
puppetlabs-devel                                                                                           | 2.5 kB  00:00:00     
puppetlabs-products                                                                                        | 2.5 kB  00:00:00     
(1/3): puppetlabs-deps/x86_64/primary_db                                                                   | 5.2 kB  00:00:00     
(2/3): puppetlabs-devel/x86_64/primary_db                                                                  |  11 kB  00:00:00     
(3/3): puppetlabs-products/x86_64/primary_db                                                               |  25 kB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: ftp.kaist.ac.kr
...
... ## 중간 중간 Is this ok [y/N] 메시지 표시 -> y 선택
...
Installed:
  puppet.noarch 0:3.7.1-1.el7                                                                                                     

Dependency Installed:
  facter.x86_64 1:2.2.0-1.el7                 hiera.noarch 0:1.3.4-1.el7                  libselinux-ruby.x86_64 0:2.2.2-6.el7   
  libyaml.x86_64 0:0.1.4-10.el7               ruby.x86_64 0:2.0.0.353-20.el7              ruby-augeas.x86_64 0:0.4.1-3.el7       
  ruby-irb.noarch 0:2.0.0.353-20.el7          ruby-libs.x86_64 0:2.0.0.353-20.el7         ruby-shadow.x86_64 1:2.2.0-2.el7       
  rubygem-bigdecimal.x86_64 0:1.2.0-20.el7    rubygem-io-console.x86_64 0:0.4.2-20.el7    rubygem-json.x86_64 0:1.7.7-20.el7     
  rubygem-psych.x86_64 0:2.0.0-20.el7         rubygem-rdoc.noarch 0:4.0.0-20.el7          rubygems.noarch 0:2.0.14-20.el7        

Complete!

/etc/puppet/puppet.conf file editing

[root@agent1 ~]# ls -alrt /etc/puppet/modules/
total 0
drwxr-xr-x. 2 root root  6 Sep 15 16:34 .
drwxr-xr-x. 3 root root 54 Oct 11 06:01 ..

# certname은 도메인 정보를 설정하는 속성입니다. 추후 이 도메인 명으로 SSL 인증키를 발급합니다.
[root@agent1 ~]# vi /etc/puppet/puppet.conf 
[main]
...
[agent]
...
    certname=agent1.example.com
...

Upgrading

# Puppet 최선 버전으로 업그레이드 합니다.
[root@agent1 ~]# puppet resource package puppet ensure=latest
Warning: The package type's allow_virtual parameter will be changing its default value from false to true in a future release. If you do not want to allow virtual packages, please explicitly set allow_virtual to false.
   (at /usr/share/ruby/vendor_ruby/puppet/type/package.rb:430:in `block (3 levels) in <module:puppet>
package { 'puppet':
  ensure => '3.7.1-1.el7',
}


Puppet Agent Server 구성 (Ubuntu 14.04 LTS)

# Enable the Puppet Labs Package Repository

# 1. Download the “puppetlabs-release” package for your OS version.
# Download Like (https://apt.puppetlabs.com/)
# check OS version
root@ubuntu-virtual-machine:~# cat /etc/issue
Ubuntu 14.04 LTS \n \l

root@ubuntu-virtual-machine:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04 LTS
Release:        14.04
Codename:       trusty

# Donwload
root@ubuntu-virtual-machine:~# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
--2014-10-13 10:41:12--  https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
Resolving apt.puppetlabs.com (apt.puppetlabs.com)... 198.58.114.168, 2600:3c00::f03c:91ff:fe69:6bf0
Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|198.58.114.168|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7384 (7.2K) [application/x-debian-package]
Saving to: ?쁯uppetlabs-release-trusty.deb??

100%[========================================================================================>] 7,384       --.-K/s   in 0s      

2014-10-13 10:41:13 (191 MB/s) - ?쁯uppetlabs-release-trusty.deb??saved [7384/7384]

# 2. Install the package.
root@ubuntu-virtual-machine:~# dpkg -i puppetlabs-release-trusty.deb
Selecting previously unselected package puppetlabs-release.
(Reading database ... 166418 files and directories currently installed.)
Preparing to unpack puppetlabs-release-trusty.deb ...
Unpacking puppetlabs-release (1.0-11) ...
Setting up puppetlabs-release (1.0-11) ...

# 3. get the new list of available packages.
root@ubuntu-virtual-machine:~# apt-get update
Ign http://kr.archive.ubuntu.com trusty InRelease
Ign http://kr.archive.ubuntu.com trusty-updates InRelease                                                  
Ign http://kr.archive.ubuntu.com trusty-backports InRelease                                                 
Hit http://kr.archive.ubuntu.com trusty Release.gpg                                                         
Get:1 http://kr.archive.ubuntu.com trusty-updates Release.gpg [933 B]                                       
Hit http://kr.archive.ubuntu.com trusty-backports Release.gpg                                                                    
...
...
...
Ign http://kr.archive.ubuntu.com trusty/main Translation-en_US                                                                   
Ign http://kr.archive.ubuntu.com trusty/multiverse Translation-en_US                                                             
Ign http://kr.archive.ubuntu.com trusty/restricted Translation-en_US                                                             
Ign http://kr.archive.ubuntu.com trusty/universe Translation-en_US                                                               
Fetched 889 kB in 9s (91.9 kB/s)                                                                                                 
Reading package lists... Done

# Enable Prereleases

root@ubuntu-virtual-machine:~# vi /etc/apt/sources.list.d/puppetlabs.list 
## [puppetlabs-devel] 부분의 주석을 제거합니다.
# Puppetlabs products
deb http://apt.puppetlabs.com trusty main
deb-src http://apt.puppetlabs.com trusty main

# Puppetlabs dependencies
deb http://apt.puppetlabs.com trusty dependencies
deb-src http://apt.puppetlabs.com trusty dependencies

# Puppetlabs devel (uncomment to activate)
deb http://apt.puppetlabs.com trusty devel ---> 주석제거
# deb-src http://apt.puppetlabs.com trusty devel

# /etc/hosts file editing

root@ubuntu-virtual-machine:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:3b:4b:dc  
          inet addr:192.168.66.143  Bcast:192.168.66.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe3b:4bdc/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5814 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3018 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5914852 (5.9 MB)  TX bytes:332853 (332.8 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:205 errors:0 dropped:0 overruns:0 frame:0
          TX packets:205 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:17308 (17.3 KB)  TX bytes:17308 (17.3 KB)

root@ubuntu-virtual-machine:~# vi /etc/hosts
127.0.0.1       localhost
127.0.1.1       ubuntu-virtual-machine

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.66.135  master.example.com      master
192.168.66.137  agent1.example.com      agent1
192.168.66.143  agent2.example.com      agent2          

# change hostname (터미널을 재 실행하면 프롬프트에 표시됩니다.)

root@ubuntu-virtual-machine:~# vi /etc/hostname 
ubuntu-virtual-machine

root@ubuntu-virtual-machine:~# hostname
agent2.example.com     

Port Open (8140 port) ※ 테스트를 위해 방화벽 해제 수행

root@agent2:~# ufw status verbose
Status: inactive

root@agent2:~# ufw disable
Firewall stopped and disabled on system startup 

Install Puppet on Agent Nodes

root@agent2:~# apt-get install puppet
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  augeas-lenses debconf-utils facter hiera libaugeas-ruby libaugeas0 libruby1.9.1 libyaml-0-2 puppet-common ruby ruby-augeas
  ruby-json ruby-shadow ruby1.9.1 virt-what
...
... ## 중간 중간 Is this ok [y/N] 메시지 표시 -> y 선택
...
Setting up facter (2.2.0-1puppetlabs1) ...
Setting up ruby1.9.1 (1.9.3.484-2ubuntu1) ...
Setting up libruby1.9.1 (1.9.3.484-2ubuntu1) ...
Setting up ruby-augeas (0.5.0-2) ...
Setting up libaugeas-ruby (0.5.0-2) ...
Setting up ruby-shadow (2.2.0-1) ...
Setting up ruby-json (1.8.0-1build1) ...
Setting up hiera (1.3.4-1puppetlabs1) ...
Setting up puppet-common (3.7.1-1puppetlabs1) ...
Setting up puppet (3.7.1-1puppetlabs1) ...
 * Starting puppet agent

puppet not configured to start, please edit /etc/default/puppet to enable
   ...done.
Processing triggers for libc-bin (2.19-0ubuntu6) ...
Processing triggers for ureadahead (0.100.0-16) ...

Upgrading

# Puppet 최선 버전으로 업그레이드 합니다.
root@agent2:~#  puppet resource package puppet ensure=latest
Warning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations
   (at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1117:in `issue_deprecation_warning')
package { 'puppet':
  ensure => '3.7.1-1puppetlabs1',
}



저작자 표시 비영리 동일 조건 변경 허락
신고





효율적인 서버관리를 실현하는 툴 Puppet

관리하고 있는 서비스가 성장해나가면서 물리적인 서버 대수가 증가하거나 자바 환경의 프로젝트에서 빌드/배포의 artifact등이 증가될 경우, 운영중에 human error가 염려될 경우, 도래하고 있는 클라우드 컴퓨팅 환경에서의 로그램 형상 관리등 여러 가지 이유로 기업에서는 비용이 증대하게 됩니다.


서비스 성장을 예를 들면, 물리적인 서버 대수가 증가하면서 서버 엔지니어 한사람이 1대 ~ 수대의 서버를 관리하는 방법으로 기업에서 수백 대~ 수천 대의 서버를 관리할 경우로 적용해서는 터무니 없는 시간과 노력이 필요합니다. 따라서 어느 정도의 규모가 있는 기업에서는 서버관리에 있어서 효율적으로 전체 서버의 설정을 변경하고 반영하는 작업을 수행해야 합니다.


Puppet은 이와 같이 효율적인 서버관리를 실행하기 위해 적합한 툴입니다. Puppet은 반복적인 작업을 자동화하고 시스템 구축을 할 수 있는 유연한 프레임 워크를 관리자에게 제공하기 위해 태어난 오픈소스 입니다. Puppet은 루비로 구성되어 있고, 관리하는 시스템에서 Puppet 지침을 실행하는 데몬을 매니페스트 모듈을 작성하고 시스템을 시각화하고 보고서를 만드는데 도움을 줄 수 있는 대시보드를 지원하는 것이 특징입니다. 한마디로 Puppet은 중앙 집중화하여 시스템의 구성 및 관리를 표준화 할 수 있는 시스템입니다.


Puppet 개요

Puppet이란 Reductive Labs에 의해 2003년에 개발이 시작된 Ruby로 구현된 OSS 서버설정 자동화 툴입니다. Puppet은 Enterprise versionOpen source version이 있습니다. Open source 버전은 GPLv2 라이센스를 갖고 있습니다. Puppet은 Unix (including OS X), Linux, Microsoft Windows platforms을 지원합니다.

 

Puppet에서는 각 서버설정(매니페스트)클래스로 정의하거나 정의 완료된 클래스를 상속받아서 새로운 클래스에 정의하는 등, 객체지향적으로 유연하게 기술할 수 있는 것이 특징입니다. 


Puppet은 각 서버에서 실행되는 puppetd와 관리서버에서 실행되는 puppetmasterd 2가지 데몬에 의해 작동됩니다. 

각 서버의 puppetd는 정기적(default 30분)으로 puppetmasterd에 질의해서 얻어진 정의를 현재 상황과 비교해서 반영해야 할 것이 있으면 반영합니다. 이 때, 설정파일은 puppetmasterd로부터 다운로드 됩니다. 또한 정기적으로 질의하는것 뿐 아니라 수동으로 직접 puppetd를 명령어로 실행하여 설정을 확인, 반영 가능합니다. puppetd와 puppetmasterd간 통신은 SSL에 의해 암호화되어 보안도 고려된 설계입니다.


Fig.01: Puppet에 의한 서버관리


The Puppet Forge

Puppet Forge(http://forge.puppetlabs.com/)는 Puppet Community Member들이 작성한 모듈을 공유하는 곳입니다. Puppet 사용자들은 시스템을 관리하는 프로세스를 간소화하기 위해 Forge에서 공유된 콘텐츠를 활용할 수 있습니다.


FACTER and FACTS

Facter는 주로 Puppet Labs에서 개발되는 시스템 인벤토리 관리 툴(cross-platfrom system profiling library) 입니다. Facter 또한 오픈 소스로 Apache 2.0 라이센스를 가지고 있습니다. Facter는 Hostname, IP, 운영체제 및 버전 등 각 노드에 대한 구성항목에이전트가 실행될 때 수집합니다. 이것은 Puppet Master로 전송하고 자동으로  Puppet top scope에서 사용 가능한 변수로 지정됩니다. 클라이언트는 커맨드라인을 통해 사용가능한 facter를 볼 수 있습니다. 이 facter는 key당 하나의 value로 을 이뤄 반환합니다. 개별적으로 호스트를 구성하려면 아래와 같이 사용할 수 있습니다.

## example facter
operatingsystem => Ubuntu
ipaddress => 10.0.0.10


저작자 표시 비영리 동일 조건 변경 허락
신고