๊ธฐ๋ณธ ์ค์ ์ผ๋ก๋ Ansible์ด ์์
์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ํํ ์ ์๋ค๋ ๊ฒ์ ๋น๋ฐ์ด ์๋๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ์ด์ ๋ํ ๋ช ๊ฐ์ง ์ด์ ๋ฅผ ์ง์ ํ๊ณ ์ค์ ๋ก ํ๋ก์ ํธ ์๋๋ฅผ ๋์ผ ์ ์๋ ์ ์ฉํ ์ต์ ์ค์ ์ ์ ๊ณตํ ๊ฒ์
๋๋ค.
์ฌ๊ธฐ์ ์๋์์๋ ์๋ก ์์ฑ๋ virtualenv์ ์ํ๋ ๋ฐฉ์์ผ๋ก ์ค์น๋ Ansible 2.9.x์ ๋ํด ์ค๋ช
ํฉ๋๋ค.
์ค์น ํ ํ๋ ์ด๋ถ ์์ "ansible.cfg" ํ์ผ์ ์์ฑํฉ๋๋ค. ์ด ์์น๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ์ ํจ๊ป ์ด๋ฌํ ์ค์ ์ ์ ์กํ ์ ์์ผ๋ฉฐ ์๋์ผ๋ก ๋ก๋๋ฉ๋๋ค.
ํ์ดํ๋ผ์ด๋
์ผ๋ถ๋ ํ์ดํ๋ผ์ด๋์ ์ฌ์ฉํด์ผ ํ๋ค๋ ์ , ์ฆ ๋์ ์์คํ
์ ํ์ผ ์์คํ
์ ๋ชจ๋์ ๋ณต์ฌํ๋ ๊ฒ์ด ์๋๋ผ Base64๋ก ๋ํ๋ zip ์์นด์ด๋ธ๋ฅผ Python ์ธํฐํ๋ฆฌํฐ์ stdin์ผ๋ก ์ง์ ์ ์กํด์ผ ํ๋ค๋ ์ฌ์ค์ ์ด๋ฏธ ๋ค์์ ์๋ ์์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ ์์ง๋ง ์ฌ์ค์ ์ฌ์ค๋ก ๋จ์์์ต๋๋ค:
pipelining = True
์ฌ์ค ์์ง
๊ธฐ๋ณธ ์ค์ ์ ์ฌ์ฉํ๋ฉด ๊ฐ ํ๋ ์ด์ ๋ํ Ansible์ด ํด๋น ํ๋ ์ด์ ์ฐธ์ฌํ๋ ๋ชจ๋ ํธ์คํธ์ ๋ํ ์ ๋ณด ์์ง์ ์์ํ๋ค๋ ์ฌ์ค์ ์๊ณ ๊ณ์
จ์ต๋๊น? ์ผ๋ฐ์ ์ผ๋ก ๋ชฐ๋๋ค๋ฉด ์ด์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ์ง ์๋๋ก ํ๋ ค๋ฉด ์ฌ์ค ์์ง์ ์ํ ๋ช
์์ ์์ฒญ ๋ชจ๋(๋ช
์์ ) ๋๋ ์ค๋งํธ ๋ชจ๋๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค. ๊ทธ ์์๋ ์ด์ ์ฐ๊ทน์์ ๋ง๋์ง ๋ชปํ ํธ์คํธ๋ก๋ถํฐ๋ง ์ฌ์ค์ด ์์ง๋ฉ๋๋ค.
UPD. ๋ณต์ฌํ ๋ ๋ค์ ์ค์ ์ค ํ๋๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
gathering = smart|explicit
SSH ์ฐ๊ฒฐ ์ฌ์ฌ์ฉ
๋๋ฒ๊น ๋ชจ๋("v" ์ต์ , XNUMX~XNUMXํ ๋ฐ๋ณต)์์ Ansible์ ์คํํ ์ ์ด ์๋ค๋ฉด SSH ์ฐ๊ฒฐ์ด ์ง์์ ์ผ๋ก ์์ฑ๋๊ณ ๋์ด์ง๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ๋ฏธ๋ฌํจ์ด ์์ต๋๋ค.
SSH ํด๋ผ์ด์ธํธ์์ ์ง์ , ๊ทธ๋ฆฌ๊ณ ๊ด๋ฆฌ์์์ ๊ด๋ฆฌ ํธ์คํธ๋ก ํ์ผ์ ์ ์กํ ๋ ๋ ์์ค์์ ๋์์ SSH ์ฐ๊ฒฐ์ ๋ค์ ์ค์ ํ๋ ๋จ๊ณ๋ฅผ ํผํ ์ ์์ต๋๋ค.
์ด๋ฆฐ SSH ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉํ๋ ค๋ฉด ํ์ํ ํค๋ฅผ SSH ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค์ ์์
์ ์์ํฉ๋๋ค. ์ฒ์์ผ๋ก SSH ์ฐ๊ฒฐ์ ์ค์ ํ ๋ ์์ ์ ์ด ์์ผ์ ์ถ๊ฐ๋ก ์์ฑํ๊ณ , ํ์ ์ค์น ์ ๋ฐ๋ก ์ด ์์ผ์ ์กด์ฌ๋ฅผ ํ์ธํ๊ณ , ์ฑ๊ณตํ๋ฉด ๊ธฐ์กด SSH ์ฐ๊ฒฐ. ์ด ๋ชจ๋ ๊ฒ์ด ์ดํด๋๋๋ก ํ๊ธฐ ์ํด ๋นํ์ฑ ์ํ์์ ์ฐ๊ฒฐ์ ์ ์งํ๋ ์๊ฐ์ ์ค์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์์์ ์ฝ์ ์ ์์ต๋๋ค.
ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"
ํ์ผ์ ๊ด๋ฆฌ ํธ์คํธ๋ก ์ ์กํ ๋ ์ด๋ฏธ ์ด๋ ค ์๋ SSH ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉํ๋ ค๋ฉด ์ ์ ์๋ ๋ค๋ฅธ ์ค์ ssh_tranfer_method๋ฅผ ์ง์ ํ๋ฉด ๋ฉ๋๋ค. ์ด ์ฃผ์ ์ ๋ํ ๋ฌธ์๋ ๋งค์ฐ
transfer_method = piped
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , "๊ฐ๋ฐ" ๋ถ๊ธฐ์๋ ์ด ์ค์ ์ด ์กด์ฌํฉ๋๋ค.
์นผ์ ๋๋ ค์ํ์ง ๋ง๊ณ ํฌํฌ๋ฅผ ๋๋ ค์ํ๋ผ
๋ ๋ค๋ฅธ ์ ์ฉํ ์ค์ ์ ํฌํฌ์
๋๋ค. ํธ์คํธ์ ๋์์ ์ฐ๊ฒฐํ๊ณ ์์
์ ์ํํ ์์
์ ํ๋ก์ธ์ค์ ์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ธ์ด๋ก์์ Python์ ํน์ฑ์ผ๋ก ์ธํด ์ค๋ ๋๊ฐ ์๋ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. Ansible์ ์ฌ์ ํ โโPython 2.7์ ์ง์ํ๊ธฐ ๋๋ฌธ์ asyncio๊ฐ ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ๋น๋๊ธฐ ๋์์ ๋์
ํ ํ์๊ฐ ์์ต๋๋ค! ๊ธฐ๋ณธ์ ์ผ๋ก Ansible์ด ์คํ๋ฉ๋๋ค.
forks = 20
์ ์ด ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ์๊ณผ ๊ด๋ จํ์ฌ ์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ์ด๋ ค์์ด ์์ ์ ์์์ ์ฆ์ ๊ฒฝ๊ณ ํฉ๋๋ค. ์ฆ, ๋ฌผ๋ก forks=100500์ผ๋ก ์ค์ ํ ์ ์์ง๋ง ๋๊ฐ ๊ทธ๋ ๊ฒ ํ ์ ์๋ค๊ณ ๋งํ์ต๋๊น?
ํจ๊ป ๋ชจ์์
๊ฒฐ๊ณผ์ ์ผ๋ก ansible.cfg(ini ํ์)์ ๊ฒฝ์ฐ ํ์ํ ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped
๊ฑด๊ฐํ ์ฌ๋์ ์ผ๋ฐ YaML ์ธ๋ฒคํ ๋ฆฌ์์ ๋ชจ๋ ๊ฒ์ ์จ๊ธฐ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค.
---
all:
vars:
ansible_ssh_pipelining: true
ansible_ssh_transfer_method: piped
ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m
๋ถํํ๊ฒ๋ ์ด๋ "gathering = smart/explicit" ๋ฐ "forks = 20" ์ค์ ์์๋ ์๋ํ์ง ์์ต๋๋ค. YaML์ ํด๋นํ๋ ํญ๋ชฉ์ ์กด์ฌํ์ง ์์ต๋๋ค. ansible.cfg์ ์ค์ ํ๊ฑฐ๋ ํ๊ฒฝ ๋ณ์ ANSIBLE_GATHERING ๋ฐ ANSIBLE_FORKS๋ฅผ ํตํด ์ ๋ฌํฉ๋๋ค.
๋ฏธํ ๊ฒ ์๊ฐ
- ๋ฏธํ ๊ฒ์ ์ด๋์ ์๋์? - ๋
์ ์ฌ๋ฌ๋ถ, ๋ฌผ์ด๋ณผ ๊ถ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ด ๊ธฐ์ฌ ์ด๋์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๋๋ฅผ ์ฝ๊ณ ํ๋ ์ด๋ถ์ด Mitogen๊ณผ ์ถฉ๋ํ์ง๋ง ๋ฐ๋๋ผ Ansible์์๋ ์ ์๋ํ๋ ์ด์ ๋ฅผ ์์๋ผ ์ค๋น๊ฐ ๋์๊ฑฐ๋, ๋์ผํ ํ๋ ์ด๋ถ์ด ์ด์ ์๋ ์ ์๋ํ์ง๋ง ์
๋ฐ์ดํธ ํ์ ์ด์ํ ์ผ์ด ์์๋ ์ด์ ๋ฅผ ์์๋ผ ์ค๋น๊ฐ ๋์๋ค๋ฉด - ์, Mitogen ์ ์ฌ์ ์ผ๋ก ๋น์ ์ ๋๊ตฌ๊ฐ ๋ ์ ์์ต๋๋ค. ์ ์ฉํ๊ณ , ์ดํดํ๊ณ , ๊ธฐ์ฌ๋ฅผ ์ฐ์ธ์. ํฅ๋ฏธ๋กญ๊ฒ ์ฝ์ด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก Mitogen์ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๊ธ๋ผ๋์ฌ๋ฌ์ค๋ ์์ ์ด ์ ๋ง ๊ฐ๋จํ๊ณ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ ๊ฒฝ์ฐ์๋ง ์๋ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์กฐ๊ธ ๋๋ฆฌ๋ฉด ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ์ด์ ๋ํ ์๋ต์ผ๋ก ๋ช ๊ฐ์ง ๋์ ๋์ง ์๋ ์์ธ๊ฐ ๋ ์๊ฐ๊ณ ๊ทธ๋ฆผ์ ์์ฑํ๊ธฐ ์ํด ๋น ์ง ๊ฒ์ "๋ชจ๋ ๊ฐ์ฌํฉ๋๋ค"๋ผ๋ ์ผ๋ฐ์ ์ธ ๋ฌธ๊ตฌ๋ฟ์ ๋๋ค. , ๋ชจ๋๊ฐ ๋ฌด๋ฃ์ ๋๋ค.โ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ ๋ค์ "์งํ ๋ ธํฌ"์ ์์ธ์ ์ฐพ๋ ๋ฐ ์๊ฐ์ ๋ญ๋นํ๊ณ ์ถ์ง ์์ต๋๋ค.
์ด๋ฌํ ์ค์ ์ค ์ผ๋ถ๋ ์ฝ๊ธฐ ๊ณผ์ ์์ ๋ฐ๊ฒฌ๋์์ต๋๋ค.
๋ฑ๋ก๋ ์ฌ์ฉ์๋ง ์ค๋ฌธ ์กฐ์ฌ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
๋ค์ ์ค ํ๋ก์ ํธ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ด๋ค Ansible ์ค์ ์ ์ฌ์ฉํ์ญ๋๊น?
-
69,6%ํ์ดํ๋ผ์ด๋=true32
-
34,8%์์ง = ์ค๋งํธ/๋ช ์16
-
52,2%ssh_args = "-o ControlMaster=์๋ -o ControlPersist=..."24
-
17,4%transfer_method = ํ์ดํ8
-
63,0%ํฌํฌ = XXX29
-
6,5%์ด ์ค ์๋ฌด๊ฒ๋ ์์, ๋จ์ง Mitogen3
-
8,7%Mitogen + ์ด ์ค์ ์ค ์ด๋ ๊ฒ์ ๊ธฐ๋กํ๊ฒ ์ต๋๋ค4
46๋ช ์ ์ฌ์ฉ์๊ฐ ํฌํํ์ต๋๋ค. 21๋ช ์ ์ฌ์ฉ์๊ฐ ๊ธฐ๊ถํ์ต๋๋ค.
Ansible์ ๋ํด ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ํ์๋์?
-
78,3%์, ๋ฌผ๋ก ์ด์ง54
-
21,7%์, ๋ ๊ทธ๋ฅ ์ข ๋ ํ๋์ฝ์ดํ ๊ฑธ ์ํ ๋ฟ์ด์ผ!15
-
0,0%์๋์, ๊ทธ๋ฆฌ๊ณ ์๋ฌด๊ฒ๋ ํ์ํ์ง ์์ต๋๋ค0
-
0,0%์๋ ๋ณต์กํด!!!0
69๋ช
์ ์ฌ์ฉ์๊ฐ ํฌํํ์ต๋๋ค. 7๋ช
์ ์ฌ์ฉ์๊ฐ ๊ธฐ๊ถํ์ต๋๋ค.
์ถ์ฒ : habr.com