Ansible 101

Ansible์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•„์š”

Reference: brownbears.tistory.com

What is Ansible?

  • **IaC(Infrastructure as Code)**๋ฅผ ์ง€ํ–ฅํ•˜๋Š” ์ž๋™ํ™” ๊ด€๋ฆฌ ๋„๊ตฌ

  • Open-source ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์ž‘๋˜์—ˆ๋‹ค

  • Ansible์„ ๊ตฌ๋™ํ•˜๋Š” module ๋ฐ library๋Š” Python ๊ธฐ๋ฐ˜์ด๋‹ค

  • YAML format์„ ๊ธฐ๋ฐ˜์œผ๋กœ playbook์„ ์‹คํ–‰์‹œ์ผœ์„œ

    1. ์›ํ•˜๋Š” ์ž๋™ํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜,

    2. Ad hoc mode๋กœ module์„ ์‹คํ–‰์‹œ์ผœ ์ƒํƒœ๋ฅผ ์กฐํšŒํ•ด ๋ณผ ์ˆ˜ ์žˆ๋”ฐ

  • SSH๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Target Host์— agentless ๋ฐฉ์‹์œผ๋กœ ์ž๋™ํ™”๋ฅผ ๊ตฌ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•œ๋‹ค

Advantages of Ansible

1. Agentless

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ IaC ๋„๊ตฌ๋“ค์ด ์ž๋™ํ™” ๋Œ€์ƒ ์žฅ๋น„๋“ค์— agent๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” pull ๋ฐฉ์‹์ธ ๊ฒƒ์— ๋ฐ˜ํ•ด,

    • Ansible์€ ์ž๋™ํ™” ๋Œ€์ƒ ์žฅ๋น„๋“ค์— agentless ๊ธฐ๋ฐ˜์˜ push ๋™์ž‘ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค

  • ๋Œ€์ƒ ์žฅ๋น„์— agent๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, Data center ๋˜๋Š” IT Infra ๋‹ด๋‹น์ž๋“ค์ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ฑฐ๋ถ€๊ฐ์ด ๋œํ•˜๋‹ค

  • SSH ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ€๋ถ€๋ถ„ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์ˆ ์  ์ ‘๊ทผ์„ฑ๋„ ์šฉ์ดํ•˜๋‹ค

2. ์ ‘๊ทผ ์šฉ์ด์„ฑ

  • Ansible์€ Python ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์ง€๋งŒ, Python์— ๋Œ€ํ•œ ์ง€์‹์ด ์—†์–ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๋งŒํผ ์ง„์ž…์žฅ๋ฒฝ์ด ๋‚ฎ์€ ํŽธ์ด๋‹ค

3. ๋‹ค์–‘ํ•œ Module ์ง€์›

  • Version์ด ์ง€์†์ ์œผ๋กœ patch๋˜๊ณ , ๋„“์€ ์‚ฌ์šฉ์ž์ธต์„ ํ™•๋ณดํ•˜๋ฉด์„œ ๋งŽ์€ module์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค

  • ๋‹ค์–‘ํ•œ cloud infra, ๊ฐ€์ƒํ™”, ์„œ๋ฒ„ OS, Platform ๋ฐ Network ์žฅ๋น„์™€ Storage๊นŒ์ง€ ๋งค์šฐ ํญ๋„“์€ module๋“ค์„ version upgrade๋งˆ๋‹ค ํ™•์žฅํ•˜๊ณ  ์žˆ๋”ฐ

4. ๋ฉฑ๋“ฑ์„ฑ (Idempotence)

  • Ansible์—์„œ๋Š” YAML script file๋กœ ์ž‘์„ฑ๋œ Playbook์„ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋ฐ˜๋ณต ์‹คํ–‰ํ•ด๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ์‹œ์ผœ, ๋ฉฑ๋“ฑ์„ฑ์„ ์ผ๊ด€๋˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค

    • ์—ฌ๋Ÿฌ๋ฒˆ ์ ์šฉํ•ด๋„ ๊ฒฐ๊ณผ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค

      • ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์—†์œผ๋ฉด ๋‹น์—ฐํžˆ ๋ฐฐํฌ๋˜์–ด๋„ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค

      • ๋ฐ”๋€Œ๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๊ทธ ๋ถ€๋ถ„๋งŒ ๋ฐ˜์˜๋œ๋‹ค

    • Shell, command, file module์€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค

  • Ansible์„ ์‹คํ–‰ํ•˜๋ฉด Task๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— module์˜ ์ƒํƒœ๋ฅผ ๋จผ์ € ์ฒดํฌํ•˜๊ณ ,

    • Task๋ฅผ ์ˆ˜ํ–‰ ํ• ๋•Œ๋„ ์ถ”๊ฐ€๋œ ๊ฒƒ๊ณผ ๋ณ€ํ™”๋œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ •๋ณด๋“ค์„ ์ œ๊ณตํ•˜์—ฌ ์ผ๊ด€์„ฑ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค

Ansible Architecture

ansible-architecture

Control Node

  • ์ค‘์•™ ์ œ์–ด node์ด๋ฉฐ, Ansible์ด ์„ค์น˜๋˜๋Š” node

    • Windows๋Š” ์„ค์น˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ winrm ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค

Managed Node

  • Ansible Control Node์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์„œ๋ฒ„

    • hosts ์— ๋“ฑ๋ก๋œ ๋Œ€์ƒ

  • Ansible Control Node์—์„œ SSH๋ฅผ ํ†ตํ•ด Managed Node์— ๋ฐฐํฌํ•œ๋‹ค

Inventory

  • Managed Node ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ๋ชฉ๋ก

    • ์ž‘์—…ํ•  node ํ˜น์€ server๋“ค์˜ ์ ‘์† ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŒŒ์ผ

    • Remote server์— ๋Œ€ํ•œ meta data๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ํŒŒ์ผ

  • ๊ธฐ๋ณธ ํŒŒ์ผ์€ /etc/ansible/hosts ๋ฅผ ์ฝ๊ฒŒ ํ•˜๊ฑฐ๋‚˜, ๋”ฐ๋กœ Inventory ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  option์„ ์ฃผ์–ด ๋™์ž‘ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค

    • ๋งŒ์•ฝ ๊ณ ์ • IP๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , hosts ํŒŒ์ผ ์•ˆ์— ๋“ค์–ด๊ฐ€ ์žˆ์ง€ ์•Š๋Š” server๊ฐ€ ์žˆ๋‹ค๋ฉด ์„ค์ • ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•˜๋‹ค

Modules

  • Ansible์—์„œ ์‹คํ–‰๋˜๋ฉด์„œ ์ž‘์—…ํ•˜๋Š” ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋‹จ์œ„

  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ๊ฐ„๋‹จํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ

    • Package, service ์„ค์น˜

    • File์— ๋Œ€ํ•œ ๊ถŒํ•œ ์„ค์ •

    • Database ์ž‘์—…

    • Cloud ์ž‘์—…

    • Network ์ž‘์—…

Tasks

  • Module์˜ ์ง‘ํ•ฉ

  • ์ž‘์—… ๋‹จ์œ„

Playbooks

  • ๊ณ„ํš๋œ ์ž‘์—…์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋˜๋Š” YAML file

Last updated

Was this helpful?