Puppet์ด๋?
Puppet์ ruby๋ก ๋ง๋ค์ด์ง ์์คํ ๊ด๋ฆฌ ์๋ํ ํด์ด๋ค. ์ฃผ๋ก ์ค์ , ๊ด๋ฆฌ, ๋ฐฐํฌ, orchestrate์ ๊ฐ์ ์ผ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. puppet์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฐ๋ณต๋๋ ์ ๋ฌด๋ฅผ ์๋ํํ๊ธฐ ์ํจ์ด๋ค. ์๋ฅผ ๋ค์ด ํจํค์ง๋ฅผ 5๊ฐ์ ์๋ฒ์ ์ค์นํด์ผํ๋ค๊ณ ๊ฐ์ ํ๋ฉด... ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง ์์ ๋ฐ๋ณต๋๋ ์์ ์ ์ง์ ๋ถ์ด์ ํ ์ ์๋ค. ํ์ง๋ง, ๋ง์ฝ 100๊ฐ, 1000๊ฐ ์ด์์ ์๋ฒ์ ๊ฐ์ ์์ ์ ํด์ผํ๋ค๋ฉด? ์ง์ ํ๊ธฐ์๋ ์์๋๋ ๋น์ฉ์ด ๋๋ฌด ํฝ๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ์ธํ๋ผ, ๋ฐ๋ธ์ต์ค ์์ง๋์ด๊ฐ ์กฐ์ง์ ์ ๋ฌด๋ฅผ ์๋ํํ๊ธฐ ์ํด ๋ง์ด ์ฌ์ฉํ๋ค.
puppet ์ฃผ์ ํน์ง
Master Agent Pull ๊ธฐ๋ฐ
์์คํ ๊ด๋ฆฌ ํด์ Pull๊ธฐ๋ฐ๊ณผ Push๊ธฐ๋ฐ์ผ๋ก ๋๋๋ค. Puppet์ Pull๊ธฐ๋ฐ ํด์ด๋ฉฐ Master์ Agent๋ก ๊ตฌ์ฑ๋๋ค.
puppet์ฒ๋ฆผ ์์คํ ์ ๊ด๋ฆฌํ ์ ์๋ ํด ์ค์ Push Base ํด์ Ansible์ด ์๋ค. ์ฉ์ด๋ ๊ทธ๋ฆผ์์ ์ ์ ์๋ฏ์ด... Pull Base๋ master์๊ฒ ์์ฒญํด์ ์์ ํด์ผํ๋ ์ ๋ฌด๋ฅผ ํ์ธํ๋ ๊ฒ์ด๊ณ , Push Base๋ Master๊ฐ ์ง์ ์์ ์ ํ๋ฌํ๋ค. Puppet์ ๊ฐ๊ฐ ๊ด๋ฆฌํ๋ ์๋ฒ์ agent ์ค์น๊ฐ ํ์ํ๋ค. agent๋ default 1800์ด ๋ง๋ค Master์๊ฒ ํ์ํ ๋ณ๊ฒฝ์ฌํญ์ ํ์ธํ๊ณ ๋ฐ์ํ๋ค.
Agent ์๋ฒ๋ Linux, Window, Solaris ๋ฑ ๋๋ถ๋ถ์ OS๋ฅผ ์ง์ํ์ง๋ง, Master์๋ฒ์ ๊ฒฝ์ฐ Linux์๋ฒ ์์ ์ค์น๋์ด์ผํ๋ค.
DSL ์ ๊ณต, declarative
Puppet์ DSL(Domain Specific Language)์ ์ ๊ณตํ๊ณ declarative ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ค. ์ด ๊ด์ ์์ imperative vs declarative์ ๋ํ ๊ฐ๋ ์ ๊ฐ๊ณ ์๋๋ฐ... imperative๋ ๋ชจ๋ ์์ ๊ณผ์ ์ ์ผ์ผํ ์์ ํด์ฃผ๋ ๊ฒ์ด๊ณ declarative๋ ์ ์ํ ๋ด์ฉ๋๋ก ์์ ํ๋ ๊ฒ์ด๋ค. ์ง์ ์ด์ ํ๋ ๊ฒ๊ณผ ์์จ์ฃผํ์ผ๋ก ์๋ฅผ ๋ค์ด๋ณด๋ฉด...
์์ ์์์ฒ๋ผ Declarativeํ ํ๋ก๊ทธ๋๋ฐ์ด Imperativeํ ํ๋ก๊ทธ๋๋ฐ ๋ณด๋ค ๊ฐ์ฉ์ฑ์ด ๋์ ์ํ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ฆ, puppet์ ๋ฏธ๋ฆฌ ์ ์ํ resource๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฒด ์ธ์ด๋ฅผ ์ ๊ณตํ์ฌ ๊ธด ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ ๋ด์ฉ์ผ๋ก ๊ตฌํ ๊ฐ๋ฅํ๋ค.
๋ฉฑ๋ฑ์ฑ
์์ ์ ์ฌ๋ฌ ๋ฒ ์ํํด๋ ํญ์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ์ฑ์ง์ ์๋ฏธํ๋ค. ์๋ฅผ๋ค์ด ์ด๋ค ํ์ผ์ "This is first line"์ด๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ๋ฃ๋ ์์ ์ ์ํํ๋๋ฐ ํ ๋ฒ ๋ ์ํํ์ ๋, ํด๋น ๋ฌธ๊ตฌ๊ฐ ์ด๋ฏธ ๋ค์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ๋ ์ํ๋์ง ์๊ณ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋๋ก ํฉ๋๋ค. provision์ด๋ ์๋ํ์ ๊ฐ๋ ์์ ๋งค์ฐ ์ค์ํ ์ฑ์ง์ ๋๋ค.
Puppet ์์ ํ๋ฆ
์ง๊ธ๊น์ง Puppet ์ ๋๋ต์ ์ธ ๊ตฌ์กฐ์ ํน์ง์ ๋ํด์ ์์๋ดค๋ค๋ฉด... ์ด์ ๋ Puppet์ด ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํด์ ์์๋ณด์.
๊ด๋ฆฌ์๋ master์ ์ ์ํด์ agent์ ๋ฐ์ ํ puppet code๋ฅผ ์์ฑํ๋ค. puppet code์์ฑ์ ๋ํ ๋ถ๋ถ์ ๋ค์ ๊ธ์์ ๋ค๋ฃฌ๋ค.
puppet code ์์ฑ์ด ์๋ฃ๋๋ฉด agent๊ฐ master์ ํต์ ํ ์ ์๋๋ก secure certificates๋ฅผ ์ ์ํ๊ณ puppet master๋ 8140ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ์ฌ ํต์ ๊ฐ๋ฅํ๋๋ก ํ๋ค. ์ฌ๊ธฐ๊น์ง๋ ์์ ์ ์ํ ์ค์ ๊ณผ์ ์ด๊ณ , agent๊ฐ master์๊ฒ ๋ณ๊ฒฝ์์ ์ด ํ์ํ์ง ํ์ธํ ๋ ์๋ ํ๋ฆ๋๋ก ์์ ์ด ์ด๋ฃจ์ด์ง๋ค.
- ํต์ ์ด ์ ์๋์๋ค๋ฉด agent๋ master์๊ฒ agent host์ ์ ๋ฐ์ ์ธ ์ ๋ณด์ธ Fact ์ ๋ณด(hostname, kernal detail, ip address ๋ฑ)๋ฅผ ๋ณด๋ธ๋ค.
- puppet์ ์ด๋ฌํ Fact์ ๋ณด๋ฅผ ์ด์ฉํด์ agent์ ๋ฐ์๋์ด์ผํ ์ค์ ๋ชฉ๋ก์ธ Catalog(ํจํค์ง ์ ์ด, ๊ณ์ ์ ์ด, ์์คํ ์ฌ์์ ๋ฑ)๋ฅผ ์ปดํ์ผํ๊ณ agent๋ ๋ฐ์ Catalog๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ๋ค.
- agent๋ ์ดํ master์๊ฒ ๋ณ๊ฒฝ ๊ฒฐ๊ณผ ์ฌ๋ถ๋ฅผ ๋ณด๊ณ ํ๋ Report๋ฅผ ๋ณด๋ธ๋ค.
Puppet ์ค์น
os : CentOS 7.8
hostnames:
master.centos.test
node01.centos.test
node02.centos.test
puppet version : 5.5.22
ํด๋น ์ค์ต์ ์งํํ๊ธฐ ์ํด Vagrant๋ฅผ ์ด์ฉํ provisioning์ ์งํํ์ต๋๋ค.
์๋ฒ ํ๊ฒฝ์ค์ ์ด ์๋กญ๊ฒ ํ์์ Vagrant์ Virtual Box๋ฅผ ์ด์ฉํ ์๋ํ๊ฒฝ ์์ฑ ํ ์ค์ต ์งํ ๊ฐ๋ฅํฉ๋๋ค.
Vagrantfile์ ํฌํจํ ๊ธฐ๋ณธ ์ค์ต ์ค์ ๋ด์ฉ์ ๋๋ค.
yum install -y https://yum.puppetlabs.com/puppet5/puppet5-release-el-7.noarch.rpm
master์ agent ๋ ธ๋ ๋ชจ๋ ์ค์นํด์ค๋ค.
master
yum install -y puppetserver
puppet server๋ฅผ ์ค์นํด์ค๋ค.
/etc/puppetlabs/puppet/puppet.conf
[main]
certname = master.centos.test
environment = node
server = master.centos.test
runinterval = 600
certname: master์ secure connection์ ์ํ name
environment: host ๊ตฌ๋ถ์ ์ํ ํ๊ฒฝ --> manifest ์ ๋ณด๋ฅผ ๋ฐ์์ฌ๋ ์ฌ์ฉ
server: puppet master ์๋ฒ ์ ์
runinterval: ์ด๋จ์๋ก master์๊ฒ ๋ณ๊ฒฝ์ฌํญ ์์ฒญํ๋ ์๊ฐ. default 1800
ํด๋น ์ค์ ์ ๋ํ ๋ถ๋ถ์ master ๋ ธ๋๋ agent๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์ค์ ํ๋ค. ๋ค๋ฅธ agent์์๋ ๋น์ทํ๊ฒ ์ค์ ํ๋ค.
systemctl start puppetserver
netstat -lntup | grep 8140
8140 ํฌํธ๊ฐ ๋์์ ธ ์์ผ๋ฉด ์ด์์์ด puppetserver๊ฐ ์คํ๋จ.
ํ์์ ๋ฐ๋ผ firewall์ ํด์ ํ๊ฑฐ๋ 8140๋ฒ ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ๋ค.
mkdir -p /etc/puppetlabs/code/environments/node/manifest
์ฌ์ฉํ environment node์ manifest ๊ฒฝ๋ก๋ฅผ ์์ฑํด์ค๋ค. ์ดํ์ agent์์ ํต์ ํ์ธํ๋ ์์ ์ค... ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋, ๋ฏธ๋ฆฌ ์์ฑํด์ค๋ค.
agents
๊ด๋ฆฌํ ๋ ธ๋์ ๊ฐ๊ฐ puppet agent๋ฅผ ์ค์นํ๊ณ ์ค์ ํ์ผ์ ์์ ํ๋ค.
ํด๋น ์์ ์์๋ node01, node02๋ฒ ์๋ฒ์ ์ค์ ํ๋ค.
yum install -y puppet
puppet agent๋ฅผ ์ค์นํ๋ค.
/etc/puppetlabs/puppet/puppet.conf
[main]
certname = node01.centos.test
environment = node
server = master.centos.test
runinterval = 600
certname์๋ ๊ฐ๊ฐ hostname์ ๋ง๊ฒ ์ค์ ํ๋ค.
์ค์น๋ ์ด๋ ๊ฒ ๋๋๊ณ ํต์ ์ํ๊ธฐ ์ํ sercure certification ์ค์ ์ด ํ์ํ๋ค.
secure certification
master์ ํต์ ํ๊ธฐ ์ํด secure certification ๋ฑ๋ก์ด ํ์ํ๋ค. ํด๋น ์์ ์ ์งํํ๊ธฐ ์ด์ ์ master server์ 8140ํฌํธ๊ฐ ๊ฐ๋ฐฉ๋์ด ์์ด์ผํ๋ค.
agents
๊ฐ๊ฐ agent์์ puppet ํต์ ์ ์ํ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
puppet agent -tv
ํด๋น ๋ช ๋ น์ ์คํํ๋ฉด ssl key๋ฅผ ์์ฑํ๊ณ ํต์ ์ ์๋ํ์ง๋ง... certificate์ ์ฐพ์ ์ ์๋ค๋ ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์๋ค.
master์์ certificate์ ๋ํด์ ๋ฑ๋กํด์ค์ผํ๋ค.
master
puppet cert list
certification ์์ฒญ์ ํ์ธํ๊ณ ๋ฑ๋ก์ ์งํํ๋ค.
puppet cert sign node01.centos.test
puppet cert sign node02.centos.test
cert list ๋ช ๋ น์ด๋ก ํ์ธํ certname์ ์ธ์๋ก ๋ฑ๋กํ๋ค.
puppet cert list --all
์ ์์ ์ผ๋ก ๋ฑ๋ก๋์๋์ง ํ์ธํ๋ค.
agents ํ์ธ
๋ค์ agent ์๋ฒ๋ก ๋์ด์์ ์ฐ๊ฒฐ์ด ์ด์์์ด ๋์๋์ง ํ์ธํ๋ค.
puppet agent -tv
์๊น์๋ ๋ค๋ฅด๊ฒ ์ ์์ ์ผ๋ก ํต์ ์ด node environment๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ฒฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ง๊ธ์ manifest๊ฐ ์์ด ์๋ฌด๋ฐ ์์ ์ ํ์ง ์์ง๋ง, manifest๋ฅผ ๋ฑ๋กํด์ฃผ๊ณ ํ์ํ ์์ ์ ์ค์ ํด์ฃผ๋ฉด ์์ ์ ๋ํ ๋ก๊ทธ๊ฐ ๋จ๊ฒ ๋๋ค.
๋๊ธ