Ansible์ ๋ฌด์์ด๊ณ ์ ์ฌ์ฉํ๋ ๊ฒ์ธ๊ฐ?
Ansible์ ๋ํ ๊ฒ์์ ํ์ จ๋ค๋ ๊ฒ์ ์๋ํ๋ DevOps๋ฅผ ์ด๋ฏธ Researching ํ์ ๊ฒ์ด๋ผ๊ณ ์๊ฐ๋ฉ๋๋ค. ์ฃผ๋ณ์์ Ansible, Puppet, Chef ํน์ Salt์ ๊ฐ์ ๋ฐฐํฌ ์๋ํ ๊ด๋ฆฌ ํด์ ๋ค์ด๋ณด์ จ์ํ ๋ฐ ๋๋์ฒด ์ด๋ค ๊ธฐ๋ฅ์ ํ ์ ์๊ณ ์ ์ฌ์ฉํ๋์ง์ ๋ํด์ ์์๋ณด๋๋ก ํฉ์๋ค.
์์คํ ์ ์ด๋ฃจ๊ธฐ ์ํด ์ฌ๋ฌ ์๋น์ค๊ฐ ๋ชจ์ฌ ํ๋์ ์์คํ ์ผ๋ก ์ด์์ด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ๋ฌ์ฑ ์์คํ ์ ๊ตฌ์ฑํ๋๋ฐ ํ์ํ ์๋น์ค๋ค์ ๋์ดํด๋ณด๋ฉด... ๊ณ ๊ฐ ๋ฐ ๋ฐฐ๋ฌ์๋ค์ด ์ฑ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ก๊ทธ์ธ ์๋น์ค, ๊ณ ๊ฐ๋ค์ ์ฃผ๋ฌธ ์๋น์ค, ๋ฐฐ๋ฌ์๋ค์ด ๋ฐฐ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์๋น์ค, ์ฃผ๋ฌธ ๊ฒฐ์ ์๋น์ค, DB ์๋น์ค ๋ฑ... ์ฌ๋ฌ๊ฐ์ ์๋น์ค๊ฐ ์ด์๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ๊ฐ ์๋น์ค๋ค์ ์ฌ๋ฌ๋์ ์๋ฒ์์ ๋ฐ๋ก ์ด์์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ ์ ๋๋ค. ํนํ ๊ท๋ชจ๊ฐ ์ปค์ง ์๋ก ๊ด๋ฆฌํ๋ ์๋ฒ์ ์๋ ๋ง์์ง๊ณ ๊ด๋ฆฌ๊ฐ ์ ์ ํ๋ค์ด์ง๋๋ค.
์ด๋ ๋งค๋ฌ ๋ฐฐ๋ฌ ์์คํ ์ ํจ์น๋ฅผ ์งํํ๊ณ ํจ์นํ ๋๋ ํ ์คํธ๋ฅผ ๊ผญ ์งํํ๊ณ ๋ฐฐํฌ๋ฅผ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค. ์๋ฒ๊ฐ 1๋๋ฉด ํ๋ฒ๋ง ๋ฐฐํฌ๊ณผ์ ์ ์คํํด๋ ๋๊ฒ ์ง๋ง.... ๋ง์ฝ ํจ์นํ๋ ์๋ฒ๊ฐ 100๋.... 1000๋.... ์ด๋ ๋ค๋ฉด ๋ชจ๋ ์๋ฒ์ ๋ถ์ด์ ๋ฐ๋ณต์ ์ธ ์์ ์ ํด์ผ ๋ฉ๋๋ค. ๋ง์ฝ ์ด๋ฐ ๋ฐ๋ณต์ ์ธ ์์ ์ ๋์ ํด์ฃผ๋ ํด์ด ์๋ค๋ฉด ์ด๋จ๊น์? ์๊ฐ์ ๋น์ฉ๋ ๋ง์ด ์ค์ผ ์ ์๊ณ , Human Error๋ ์ค์ผ ์ ์์ง ์์๊น์?
Ansible์ ์์ ๊ฐ์ด ์๋ฒ์ ๋ฐ๋ณต์ ์ธ ์์ ์ ์๋ํํ ์ ์๋ ๋ฐฐํฌ ์๋ํ ๊ด๋ฆฌ ํด ์ค ํ๋๋ก์ DevOps ์ ๋ฌด์ ํ์ํ๊ณ ์ ๋ฌด์ ํจ์จ์ ์ฆ์ง ์ํฌ ์ ์๋ ํด์ ๋๋ค.
Puppet, Chef, Salt์ ๋น๊ต๋์ด Ansible์ ์ฌ์ฉํ๋ ์ด์
Ansible ๋ง๊ณ ๋ Puppet, Chef, Salt์ ๊ฐ์ด ๋ฐฐํฌ ์๋ํ ๊ด๋ฆฌ ํด์ด ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์ด 4๊ฐ ํด ์ค Ansible์ด ๊ฐ์ฅ ๋ฆ๊ฒ ๋ง๋ค์ด ์ก์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ Ansible์ ์ฌ์ฉํ ๊น์?
๊ฐ์ฅ ํฐ ์ฐจ์ด๋ agent ์ค์น๊ฐ ํ์ ์๋ค๋ ๊ฒ ์ ๋๋ค. ๋ค๋ฅธ ํด์์๋ agent ์ค์น ํ, agent๊ฐ master์๊ฒ ๋ฌด์์ ํด์ผํ ์ง ๋ฌผ์ด๋ณด๋ ํ์์ผ๋ก ์ฌ์ฉ๋๋๋ฐ... Ansible์์๋ ๊ด๋ฆฌ๋๋ Host์ ์ด๋ ํ Process๋ฅผ ์๋ ์ํฌ ํ์ ์์ด SSH ํต์ ์ ํตํด master๊ฐ ์ง์ ๊ด๋ฆฌํ๋ Host์ ๋ช ๋ น์ ์ ๋ฌํฉ๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ๊ธฐ์ ์ ์ผ๋ก๋ ๋ณต์ก๋๊ฐ ๋ฎ์์ง๋ ์ฅ์ ์ ๊ฐ๊ณ ๋ง์ ์ง์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ค์ต ํ๊ฒฝ ๊ตฌ์ฑ
Virtual box๋ฅผ ์ด์ฉํด์ master์ ๊ด๋ฆฌํ node ์๋ฒ๋ค์ ํ๊ฒฝ ๊ตฌ์ฑ์ ํ๊ฒ ์ต๋๋ค.
๊ฐ์ ๋จธ์ : Virtual Box : https://www.virtualbox.org/wiki/Downloads
OS : CentOS 7 Minimal : http://mirror.kakao.com/centos/7.9.2009/isos/x86_64/
master : Ansible ์ค์น
node1, node2 : ๊ด๋ฆฌ ๋์ ์๋น
์ค์ต์ Mac OS์์ ์งํํ์ง๋ง... ๊ฐ์๋จธ์ ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋์ฐ์์ ์งํํด๋ ์ฐจ์ด๋ ์์ต๋๋ค.
Master ์๋ฒ ํ๊ฒฝ ๊ตฌ์ฑ
Virtual Box ์ค์น ๋ฐ ์ด๋ฏธ์ง ์์ฑ ์ค๋น
Virtual Box ์คํ > ์๋ก ๋ง๋ค๊ธฐ
์ด์์ฒด์ ์ข ๋ฅ์ ์ด๋ฆ์ ์ ํ
๊ฐ๊ฐ ํ๊ฒฝ์ ๋ง๊ฒ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ์ค์ .
์ ๊ฐ์ ํ๋ ๋์คํฌ๋ฅผ ๋ง๋ค๊ฒ ์ต๋๋ค.
๋์คํฌ ์ด๋ฏธ์ง๋ก ์์ฑ
๋์ ํ ๋น์ผ๋ก ์ง์
๋์ ํ ๋น์ผ๋ก ์ง์ ํ์ฌ ์ฐ์ ์ต๋์น๋ก ์ก๊ฒ ์ต๋๋ค.
์ด๋ฏธ์ง๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ช๊ฐ์ง ์ค์ ํ๊ณ ์งํํ๊ฒ ์ต๋๋ค.
์ด๋ฏธ์ง ์ค์ > ๋คํธ์ํฌ
์ธ๋ถ ํต์ ๊ณผ node๋ผ๋ฆฌ ํต์ ์ ์ํด ๋คํธ์ํฌ๋ ๋ธ๋ฆฟ์ง๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
์ด๋ฏธ์ง ์ ํ > ์ ์ฅ์
์ ์ฅ์์ ๋๋ผ์ด๋ธ๊ฐ ๋น์ด์๋ค๊ณ ๋์์์๊ฒ๋๋ค. ๋ค์ด๋ฐ์ CentOS ์ด๋ฏธ์ง๋ฅผ ์ ํํด์ฃผ๊ณ ์ด๋ฏธ์ง๋ฅผ ์คํํด์ค๋๋ค.
์ด๋ฏธ์ง ์คํ CentOS ์ค์น
ํ๊ธ ์ง์๋ ๋์ง๋ง... trouble shooting ํ๊ฑฐ๋ ๊ฒ์ํ ๋, ์์ด๋ก ๊ฒ์ํ๋ ๊ฒ์ด ๋ ๋ง์ ์๋ฃ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
Installation Destination ์ค์ ์ ํด๋ฆญํ์ฌ Done ๋ฒํผ๋ง ํด๋ฆญํ๊ณ ๋์ต๋๋ค.
Network ์ค์
Hostname์ ์์ ํ๊ณ network๋ฅผ ์คํํฉ๋๋ค. ๋คํธ์ํฌ ์ ๋ณด๋ ๋์ค์ ๋ณ๊ฒฝ ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ๊ฐ ๋คํธ์ํฌ ์ํฉ์ ๋ฐ๋ผ IP ์ ๋ณด๋ ๋ค๋ฅผ ์ ์์ต๋๋ค.
์ฌ๊ธฐ๊น์ง ์ค์ ์ ์๋ฃํ๊ณ ์ค์น๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ณ ์ฌ๋ถํ ํฉ๋๋ค.
Network ์๋ ์ค์
๋คํธ์ํธ ์๋ ์ค์ ์ ๋จธ์ ์ด ์ฌ๋ถํ ๋ ๋ ํ๊ฒฝ์ด ๋ณ๊ฒฝ๋ ์ ์์ด์ ๊ณ ์ ์ํค๊ธฐ ์ํด ์๋ ์ค์ ์ ํฉ๋๋ค.
๋คํธ์ํฌ ์ค์ ํ๋๋ฐ... ์์๋๊ณ ... ์ด๋ ค์์ ๊ฒช๊ณ ์๋ค๋ฉด ์๋์ ๊ฐ์ ํธ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์ธ๋ถ์ ๋ด๋ถ ํต์ ๋ชจ๋ ๊ฐ๋ฅํฉ๋๋ค.
# yum install -y net-tools
# ifconfig
๋คํธ์ํฌ ์ ๋ณด๋ฅผ ํ์ธํ๊ธฐ ์ํด net-tools๋ฅผ ์ค์นํด์ค๋๋ค.
# ip route
# ifconfig
# cat /etc/resolv.conf
์๋์ผ๋ก ์ค์ ๋ gateway, ip subnet mask, dns server์ ๋ณด๋ฅผ ํ์ธํ๊ณ ์๋์ผ๋ก ์ค์ ํ์ฌ ๊ณ ์ ์ํค๋ ๋ฐฉ๋ฒ์ ๋๋ค.
# nmtui
๋คํธ์ํฌ๋ฅผ ์์ ํฉ๋๋ค.
Edit a connection
๋ฏธ๋ฆฌ ํ์ธํด๋ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ฅํฉ๋๋ค.
# systemctl restart network
# ifconfig
๋ณ๊ฒฝํ ๋คํธ์ํฌ๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด network ์๋น์ค๋ฅผ ์ฌ์คํํ๊ณ ํ์ธํด์ค๋๋ค.
Network ํ์ธ
# ping google.com
์ธ๋ถ ํต์ ์ด ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค.
๋ฌธ์ ์์ด ํต์ ์ด ๋๋ฉด ๋คํธ์ํฌ ์ค์ ์๋ฃ์ ๋๋ค.
# shutdown now
๋ค์์ Node ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ด๋ฏธ์ง๋ฅผ ์ข ๋ฃํฉ๋๋ค.
Node ํ๊ฒฝ๊ตฌ์ฑ
master ์ด๋ฏธ์ง ์ฐํด๋ฆญ > ๋ณต์
๋จธ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ณ
MAC ์ฃผ์ ์ ์ฑ ์ '๋ชจ๋ ๋คํธ์ํฌ ์ด๋ํฐ์ ์ MAC ์ฃผ์ ์์ฑ'์ผ๋ก ๋ณ๊ฒฝ ํ๊ณ ๊ณ์ํด์ ์์ ํ ๋ณต์ ๋ก ์งํ
์๋ก ์์ฑํ Node ์คํ > ๋คํธ์ํฌ ์์
# hostnamectl set-hostname node1.test
# hostname
hostname์ ๋ณ๊ฒฝํฉ๋๋ค.
master์ ๋คํธ์ํฌ ์์ ํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.
node๋ฅผ 2๊ฐ ๋ง๋ค์ด ์ค ์์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฆ๊ณผ ๋คํธ์ํฌ ์ ๋ณด๋ง ๋ณ๊ฒฝํด์ ํ๋์ node๋ฅผ ๋ ๋ง๋ค์ด ์ค๋๋ค.
์ค์ ํ์ธ
์์ผ๋ก ์ค์ต์ ์งํํ ๋, 3๊ฐ์ ์๋ฒ๋ฅผ ๋ชจ๋ ์คํํ ์ํ์์ ํ๊ฒ๋ฉ๋๋ค.
๊ทธ๋ผ ์ค์นํ 3๊ฐ์ ์๋ฒ๋ฅผ ๋ชจ๋ ์คํํ๊ณ master์์ node๋ก ํต์ ์ด ๊ฐ๋ฅํ์ง ํ์ธํ๊ณ ansible ์ค์น๋ฅผ ์งํํ๊ฒ ์ต๋๋ค.
# vi /etc/hosts
#์๋ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค.
220.86.186.1 node1.test
222.111.61.161 node2.test
hostname์ผ๋ก ํต์ ํ๊ธฐ ์ํด host๋ฅผ ์ถ๊ฐํด์คฌ์ต๋๋ค.
๊ฐ host์ ๋ง๋ ip๋ก ์ ์ ํด์ค๋๋ค.
# ping -c 3 node1.test
# ping -c 3 node2.test
์๋ก ํต์ ์ด ๋๊ฐ๋ฉด ํ๊ฒฝ ์ค์ ์ ๋์ ๋๋ค.
์ดํ ํจํค์ง ์ค์น๋ ๊ด๋ฆฌํ๋ node์์๋ ์ธ๋ถ ํต์ ์ ํ ์ ์๋๋ก... google.com์ ping์ด ๊ฐ๋์ง ๊ฐ๊ฐ ํ์ธํด์ฃผ๋ฉด ๋ฉ๋๋ค.
Ansible ์ค์น
Ansible์ ์ค์นํ๋ ์๋ฒ๋ ๋น์ฐ! Master ์๋ฒ์ ํด์ค๋๋ค.
# root@master # yum install -y epel-release ##Ansible ์ค์น ํจํค์ง๋ฅผ ๋ฐ์ ์ ์๋ ํจํค์ง ์ค์น
# root@master # yum install -y ansible
์ค์น ๋์ ๋๋ค.
Ansible ์คํ ํ์ธ
# root@master # vi /etc/ansible/hosts
############# ์๋ ๋ด์ฉ ์ถ๊ฐ
[nodes]
node1.test
node2.test
/etc/ansible/hosts ํ์ผ์ ๊ด๋ฆฌ๋๋ Host์ IP ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
# ansible all -m ping -k
๊ฐ๊ฐ Host์ ping์ ๋ณด๋ด๋ ๋ช ๋ น์ ๋ณด๋ด๋ฉด ์ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ SSH ์ฐ๊ฒฐ์ด ์ฒ์์ด์ด์ ์ธ์ฆ์ ์ํ ๊ณผ์ ์ ๋๋ค.
๋ง์ฝ ์ฐ๊ฒฐ์ ๊ณ์ ์งํํ ์์ฒญ์ด ์๋์ค๋ฉด ์ง์ ssh ์ฐ๊ฒฐ์ ํ๋ฒ์ฉ ํด์ฃผ๊ณ ๋ช ๋ น์ ์คํํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
# ssh root@node1.test
# ssh root@node2.test
# ansible all -m ping -k
๋ค์ ์คํํ๋ฉด ์ด์์์ด ๋ช ๋ น์ด ์คํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋๊ธ