2023. 7. 8. 16:58ใSystem ์์ ์ค/DevOps
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ IaC Ansible์ ์ด์ฉํ Client(ํด๋ผ์ด์ธํธ) ์๋ฒ ๊ณ์ ๋ง๋ค๊ธฐ
๐ฝ ๊ฐ์
๐ฆ ์๊ฐ
์ด๋ฒ์ ํ ์์ ์ ๊ฝค ๋ง์ ์ฐ๋ถํฌ(Ubuntu) ๊ฐ์ ๋จธ์ (Virtual Machine)์ Ansible์ ์ด์ฉํด์ ํฌ๋ฃจ(crew)๋ค์ ๊ณ์ ์ ๋ง๋ค์ด ์ฃผ๋ ค๊ณ ํด์.
์ฐ๋ถํฌ ๊ฐ์ ๋จธ์ ์ด ๊ฝค ๋ง๊ธฐ๋ ํ๊ณ , ํจ๊ป ํ๋ก์ ํธ ํ๋ ๋ถ๋ค๋ ๋ง๊ธฐ ๋๋ฌธ์ ํ๋ํ๋ ์์์
์ผ๋ก ๋ง๋ค๊ธฐ์ ๋๋ฌด ํ ์ผ๋ ๋ง๊ณ , ๊ทธ๋ ๊ฒ ํ๋ค๋ฉด ์ง์ ํ IT์ธ์ด ์๋๋ผ๊ณ ์๊ฐํด์!
Ansible์ ๋ํ ๊ตฌ์ถ ๋ฐฉ๋ฒ์ ์ด ๊ณณ์ ๋จ๊ฒจ ๋์์ผ๋ ๋ง์ ๊ด์ฌ ๋ถํ๋๋ฆฝ๋๋ค.
๐ฝ Ansible
๐ฆ Client(ํด๋ผ์ด์ธํธ) Server(์๋ฒ) ์ฐ๊ฒฐ
Ansible์์ ๊ฐ๊ฐ์ ํด๋ผ์ด์ธํธ์๊ฒ ์์
์ ํ ๋นํ๊ธฐ ์ํด์ SSH๋ฅผ ์ด์ฉํด ์ฐ๊ฒฐํ๊ณ , ํต์ ํ๊ณ , ์์
์ ํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์์ด์. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ ํด๋ผ์ด์ธํธ์ SSH ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ์์
ํด์ฃผ์ด์ผ ํด์.
์ด ๋, ๋งค๋ฒ ๊ณ์ ์ ์
๋ ฅํ๊ธฐ์ ๋ฒ๊ฑฐ๋กญ๊ธฐ๋ ํ๊ณ , ์๋์ผ๋ก ์ฐ๊ฒฐํ๊ฒ ํ ๋, ๊ณ์ ์ ์
๋ ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ์ ์ ๋ง๋ค์๋SSH Key๋ฅผ ๊ฐ์ง๊ณ , ๊ฐ๊ฐ์ ๋์ ํด๋ผ์ด์ธํธ ์๋ฒ์ ๋ฐฐํฌํ๋ ์์
์ ํด ์ค ๊ฑฐ์์.
์ด๋ฒ ๊ธ์์๋ ํ๋์ ํด๋ผ์ด์ธํธ๋ฅผ ๋์์ผ๋ก ์์
์ ํด๋ณด๋ ค๊ณ ํด์.
์ ์๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์์
ํด ๋ณผ๊ฒ์.
์ต์ด ๋์ ํด๋ผ์ด์ธํธ์ SSH๋ฅผ ํตํด root๋ก ์ ์์ด ๊ฐ๋ฅํ๊ฒ ์์
์ ํด์ค์ผ ํด์.
ํ์ง๋ง, root๋ ์ํผ ๊ถํ ์ฆ, ์ํผ ์ ์ (Super User)์ด๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์กฐ๊ธ ์ ๊ฒฝ์จ ๋ณด๋๋ก ํ ๊ฑฐ์์.
์ด ๋ด์ฉ์ ์ด ๊ณณ์ ์ ์ฑ์ค๋ฝ๊ฒ ์ค๋น ํด ๋์์ด์. ๋ง์ ๊ด์ฌ ๋ถํ๋๋ฆฝ๋๋ค.
์์ ๊ฐ์ด Ansible์์ ๋์ ํด๋ผ์ด์ธํธ์๊ฒ SSH Key๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์์
ํด ์ฃผ์์ด์.
์ฐธ๊ณ ๋ก ์ฃผ๋๋ SSH Port(ํฌํธ)๋ฅผ ๋ฐ๊ฟ ์ฌ์ฉํ๊ธฐ ์๊ธฐ ๋๋ฌธ์ -p Option(์ต์
)์ ์ฃผ์์ง๋ง, ๊ธฐ๋ณธ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ฌ์ฉํ์ง ์์๋ ๋ฉ๋๋ค.
์์ ๊ฐ์ด SSH๋ฅผ ํตํด ์ ์ ์๋๋ฅผ ํด๋ณด๋ฉด ๊ณ์ ์ ๋ฌป์ง ์๊ณ , ๋ฐ๋ก ๋ก๊ทธ์ธ์ด ๋๋๊ฑธ ํ์ธํ ์ ์์ด์.
๊ทธ๋ฐ ๋ค Ansible Docker Container(๋์ปค ์ปจํ
์ด๋) ์์ ์๊ฒ๋ ์์ ๊ฐ์ด SSH Key๋ฅผ ์ ๋ฌํด ์ฃผ์์ด์.
๐ก ์ฐธ๊ณ ์ฌํญ
Ansible Module Option
โ -i (--inventory-file) : ์ ์ฉ ๋์ ํด๋ผ์ด์ธํธ๋ค์ ๋ํ ํ์ผ ์ ๋ณด.
ํด๋น ์ต์ ฅ ์ฌ์ฉ ์ /etc/ansible/hosts๊ฐ ์๋ ์ง์ ์์น์ ํ์ผ์ ์ฝ์ด ์ ์ฉ ๋์ ํด๋ผ์ด์ธํธ ๊ด๋ฆฌ.
โ -m (--mocule-name) : Module ์ ํ.
โ -k (--ask-pass): ๊ด๋ฆฌ์ ์ํธ ์์ฒญ.
โ -K (--ask-become-pass) : ๊ด๋ฆฌ์ ๊ถํ ์์น.
โ --list-hosts : ์ ์ฉ ๋์ ํด๋ผ์ด์ธํธ ๋ชฉ๋ก ์ ๋ณด.
โ ๋ฉฑ๋ฑ์ฑ ํน์ง
- ๊ฐ์ ์ค์ ์ ์ฌ๋ฌ๋ฒ ์ ์ฉํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์๊ณ , ํ๋ฒ๋ง ์ ์ฉ๋๋ ์ฑ์ง
- ์์:) echo -e "[giggalgroup]\n172.20.10.22" >> /etc/ansible/hosts
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ด ๋์ ํด๋ผ์ด์ธํธ๋ฅผ ๋ฑ๋กํด ์ฃผ์์ด์.
์ด ๊ณณ์ Ansible Inventory๋ผ๊ณ ๋ถ๋ฌ์.
๋๊ดํธ ์์ ์๋ ๋ฌธ์์ด์ ํด๋ผ์ด์ธํธ๋ค์ ๋ฌถ์ group์ ์ด๋ฆ์ ์ง์ ํด ์ค ๊ฒ์ด์์.
๐ฆ Ansible ๊ธฐ์ด ์ฌ์ฉ
์ต์ด Ansible Module ๊ด๋ จ ๋ฌธ์๋ ์ด ๊ณณ์ ์ฐธ๊ณ ํด ์ฃผ์๋ฉด ์ข์ ๊ฑฐ ๊ฐ์์.
์ ๋ช
๋ น์ด๋ ๋ชจ๋ ๋์ ํด๋ผ์ด์ธํธ์๊ฒ ping Test(ํ ํ
์คํธ)๋ฅผ ํ๋ผ๋ ๋ช
๋ น์ด์์.
ํ์ฌ ์ฃผ๋๋ SSH๋ฅผ 22๋ฒ ํฌํธ๋ก ์ฐ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ด์.
์ฃผ๋์ ๊ฐ์ด 22๋ฒ ํฌํธ๊ฐ ์๋๋ผ๋ฉด ping์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ Module(๋ชจ๋)์ด๊ธฐ ๋๋ฌธ์ SSH ํฌํธ๋ฅผ ๋ฐ๋ก ์ค์ ํ ์ ์์ด์.
์์ ๊ฐ์ด ํน์ ๊ทธ๋ฃน์๋ง ์ ์ฉํ์ฌ ๋ช
๋ น์ด๋ฅผ ๋ ๋ฆด ์๋ ์์ด์.
์์ ๊ฐ์ด 22๋ฒ ํฌํธ๊ฐ ์๋ ๋ค๋ฅธ ๋ฒํธ๋ฅผ ์ฌ์ฉํจ์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ๋ ์์ ๊ฐ์ด ํด๊ฒฐํ ์ ์์ด์.
ansible_port ๋ผ๋ ๊ฒ์ ์ด์ฉํด์ SSH ํฌํธ ๋ฒํธ๋ฅผ ์
๋ ฅํด ์ฃผ๋ฉด ํด๊ฒฐ ํ ์ ์์ด์.
์์์ ์คํจํ๋ ๊ฒ๋ค์ ์์ ๊ฐ์ด ํด๊ฒฐํ ๋ชจ์ต์ด์์.
์ด๋ ๊ฒ ๋์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๊ฒ ํ ์๋ ์์ด์.
# free -h ๋ช
๋ น์ด๋ Memory ์ ๋ณด๋ฅผ GB๋จ์๋ก ํ์ธํ ์ ์๋ ๋ช
๋ น์ด์์.
๐ฆ Ansible์ ์ด์ฉํ์ฌ ํด๋ผ์ด์ธํธ(Linux - ๋ฆฌ๋ ์ค) ์ฌ์ฉ์ ๊ณ์ ๋ง๋ค๊ธฐ
์ด๋ฒ์๋ ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ์ ์ฌ์ฉ์ ๊ณ์ ์ ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํด์.
๊ทธ ์ ์ ์ฌ์ฉ์๋ค์ด ์์๋ Group(๊ทธ๋ฃน)์ ๋ง๋ค์ด ์ค๊ฑด๋ฐ, ๊ทธ๋ฃน์ ํ๋ฒ๋ง ๋ง๋ค๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๋จผ์ ์์
์ ํด๋ณด๋ ค๊ณ ํด์.
์ต์ด ์์ ๊ฐ์ด yml ํ์ผ ํ๋๋ฅผ ๋ง๋ค์ด ๊ทธ๋ฃน์ ๋ง๋ค Playbook(ํ๋ ์ด ๋ถ)์ ๋ง๋ค์ด ์ฃผ์์ด์.
2๋ฒ์งธ ์ค์ Inventory(์ธ๋ฒคํ ๋ฆฌ) ๋ด์ ์ ์ฅ๋ ํด๋ผ์ด์ธํธ ๊ทธ๋ฃน๋ช
์ ์๋ฏธํ๋ ๊ฑฐ์์.
๊ทธ๋ฆฌ๊ณ , 4 ~ 5 ๋ฒ์งธ ์ค์ ํตํด์ ์์ฑ๋ ๋ด์ฉ์ ๊ธ์ด์์ ๋งค๊ฐ ๋ณ์ ํ์์ผ๋ก ๊ฐ๋ค์ ๊ฐ์ ธ์ค๊ฒ ๋๋๋ฐ, ์ด ๋, 11, 12 ๋ฒ์งธ ์ค๊ณผ ๊ฐ์ด item.๋งค๊ฐ ๋ณ์๋ช
์ ์
๋ ฅํด ์ฃผ๋ฉด ๊ทธ ๊ฐ์ ๊ฐ์ ธ์์ Mapping ๋๋ ๋ฐฉ์์ด์์.
๋ง์ง๋ง with_items ์ต์
์ผ๋ก ์ธํด item์ ๋ด์ฉ์ด ๋ค์ด์ค๊ฒ ๋๋ต๋๋ค.
์ด ๊ณณ์์ ๋ฐ๋ก ๊ทธ๋ฃน ์ ๋ณด๋ฅผ ๋ฃ์ด ์ฃผ์์ด์. ์์์ item.๋งค๊ฐ ๋ณ์๋ช
์ด ๋ฐ๋ก ์ด ๊ณณ์ ๊ฐ๊ฐ์ ๋ณ์ ์ด๋ฆ๋ค์ด Mapping ๋๋ ๊ฑฐ์์.
2๋ฒ์งธ ์ค ๋ด์ฉ์ผ๋ก ์ธํด ์์ create_crew_group.yml์ with_items ์ต์
์ผ๋ก ์ธํด item์ ๋ด์ฉ์ด ๋ค์ด์ค๊ฒ ๋๋ต๋๋ค.
๋ง์ฝ ์์์ ๋ง๋ค์๋ /etc/ansible/hosts์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ ํด๋ผ์ด์ธํธ ์ ๋ณด ๋ง๊ณ , ๊ฐ๋ณ๋ก ์ฌ์ฉํ ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ์์ ๊ฐ์ด ๋ง๋ค๋ฉด ๋ฉ๋๋ค.
๋ง์ฝ ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ๋ฐ๋ก ์ง์ ํ์ฌ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์์ ๊ฐ์ด -i ์ต์
์ ํตํด ์ด์ฉํ ์ ์์ด์.
์ฃผ๋๋ ๊ณต์ฉ ์ธ๋ฒคํ ๋ฆฌ ์ฌ์ฉ์ ์ํด ์๋์ ๊ฐ์ด ์งํํ ๊ฑฐ์์.
์์ ๊ฐ์ด ํด๋ผ์ด์ธํธ์ ๊ทธ๋ฃน์ด ๋ง๋ค์ด ์ก๋ค๊ณ ๋์์ด์.
์ด๋ ๊ฒ ๋์ ํด๋ผ์ด์ธํธ์ ๊ทธ๋ฃน์ด ์ ๋ง๋ค์ด์ง๊ฑธ ํ์ธํ ์ ์์ด์.
์ด๋ฒ์๋ ์ฌ์ฉ์ ๊ณ์ ์ ๋ง๋ค์ด ๋ณผ๊ฒ์.
์ต์ด ํด๋น ํด๋ผ์ด์ธํธ์ ์ ์ ๊ฐ๋ฅํ๊ฒ ํ ํฌ๋ฃจ๋ค์ ๊ณ์ ์ ๋ณด๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
backend_crew_list:
- {id: '<์ฌ์ฉ์ ๊ณ์ (ID)>', uid: <์ฌ์ฉ์ UID>, groups: ['<์ฌ์ฉ์ ์์ ๊ทธ๋ฃน ์ด๋ฆ>', '<์ฌ์ฉ์ ์์ ๊ทธ๋ฃน ์ด๋ฆ>', ...], password: '<์ฌ์ฉ์ ๊ณ์ ๋น๋ฐ๋ฒํธ>', comment: '<์ฌ์ฉ์ ๊ณ์ ๋ณ์นญ ํน์ ๋ฉ๋ชจ>'}
์ฃผ๋๋ ํ ๊ณ์ ์ ์ฌ๋ฌ ๊ทธ๋ฃน์ ๋ฑ๋กํ๊ธฐ ์ํด ์์ ๊ฐ์ด ์์ฑ์ ํด ์ฃผ์์ด์.
๊ทธ๋ฃน์ ๋ง๋ค์์ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ณ์ ๊ด๋ จํด์๋ ๋งค๊ฐ ๋ณ์๋ก ๊ฐ์ ธ์์ ๋ด์ ์ ์๋๋ก ์์
ํด ์ฃผ์์ด์.
password ๋ถ๋ถ์ password_hash('sha512') ์ด ๋ถ๋ถ์ Hashing ํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ๊ฒ ํ๊ธฐ ์ํด ๋ฃ์ด์ค ๋ถ๋ถ์ด์์.
์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ์ ์ update_password ๋ถ๋ถ์ด์์. ์ต์
์ผ๋ก on_create์ always๊ฐ ๋ํ์ ์ธ๋ฐ, on_create๋ ๊ณ์ ์์ฑ ์ค ๋ฑ ํ๋ฒ๋ง ๋น๋ฐ๋ฒํธ ์์ ์ด ๊ฐ๋ฅํ ๊ฒ์ด๊ณ , always๋ ๊ธฐ์กด ๊ณ์ ์์ ๋น๋ฐ๋ฒํธ ์์ ์ด ๊ฐ๋ฅํ ์ต์
์ด์์.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ always๋ฅผ ์ฌ์ฉํ๋ ๊ฑธ ์ถ์ฒํด์.
๋ํ, Expiere Date Time Password for Crew ์์
์ shell ๋ถ๋ถ์ ๊ณ์ ๋ค์ ๋ง๋ฃ ๊ธฐ๊ฐ์ ์ค์ ํ ์ ์๋ ๋ฆฌ๋
์ค ๋ช
๋ น์ด๋ฅผ ๋ฃ์ด ์ฃผ์์ด์. ์ต์ 1์ผ ์ด์ ํจ์ค์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๊ณ , 90์ผ ๋์๋ง ์ฌ์ฉํ ์ ์๊ฒ ํด ์ฃผ์์ด์.
์์ ๊ฐ์ด ์ ์์ ์ผ๋ก ๊ณ์ ์์ฑ๊ณผ ์ค์ ์ด ์๋ฃ๋๊ฑธ ํ์ธํ ์ ์์ด์.
ํด๋ผ์ด์ธํธ์์ ํ์ธํด ๋ณด๋ ๊ทธ๋ฃน๋ ์ ๋ง๋ค์ด ์ก๊ณ , ์ฌ์ฉ์ ๊ณ์ ๋ ๋ชจ๋ ๋ง์กฑ์ค๋ฝ๊ฒ ์ค์ ๋๊ฑธ ํ์ธํ ์ ์์ด์.
๐ง ์ฐธ๊ณ ์๋ฃ
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
'System ์์ ์ค > DevOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ฐ์ํ - Container] Docker๋ฅผ ์ด์ฉํ Ansible ์ค์นํ๊ธฐ (0) | 2023.07.14 |
---|---|
[๊ฐ์ํ - Container] Docker Container๋ฅผ ์ด์ฉํ Redmine ์ค์นํ๊ธฐ (0) | 2023.07.12 |
[Linux] SonarQube 9.8 - PostgreSQL 15.2 ์ฐ๋ํ๊ธฐ (0) | 2023.07.08 |
[๊ฐ์ํ - Container] Docker๋ฅผ ์ด์ฉํ PostgreSQL 15 ์ค์น (0) | 2023.07.08 |
[๊ฐ์ํ - Container] Docker๋ฅผ ์ด์ฉํ Jenkins ์ค์น (0) | 2023.07.08 |