Ansible Playbook을 빠르게 수행하는 방법

Ansible Playbook을 빠르게 수행하는 방법

1. callback 으로 느린 작업 확인

timer, profile_tasks, profile_role 과 같은 callback 플러그인을 활성화하여 작업의 소요 시간을 찾고 어떤 작업이 소요가 많이 되는 지 확인 할 수 있다.

# ansible.cfg
[defaults]
inventory = ./hosts
callbacks_enabled = timer, profile_tasks, profile_roles
$ ansible-playbook site.yml
PLAY [Deploying Web Server] ************
 
TASK [Gathering Facts] **********************
Thursday 23 December 2021  22:55:58 +0800 (0:00:00.055)   0:00:00.055
Thursday 23 December 2021  22:55:58 +0800 (0:00:00.054)   0:00:00.054
ok: [node1]
 
TASK [Deploy Web service] *******************
Thursday 23 December 2021  22:56:00 +0800 (0:00:01.603)  0:00:01.659
Thursday 23 December 2021  22:56:00 +0800 (0:00:01.603)  0:00:01.658
 
...<output removed>...
 
PLAY RECAP **********************************
node1: ok=9  changed=4  unreachable=0  failed=0
       skipped=0  rescued=0  ignored=0

Playbook run took 0 days, 0 hours, 0 minutes, 14 seconds
Thursday 23 December 2021  22:56:12 +0800 (0:00:00.541)       0:00:14.100 ***** 
=============================================================================== 
deploy-web-server : Install httpd and firewalld ------- 5.42s
deploy-web-server : Git checkout ---------------------- 3.40s
Gathering Facts --------------------------------------- 1.60s
deploy-web-server : Enable and Run Firewalld ---------- 0.82s
deploy-web-server : firewalld permitt httpd service --- 0.72s
deploy-web-server : httpd enabled and running --------- 0.55s
deploy-web-server : Set Hostname on Site -------------- 0.54s
deploy-web-server : Delete content & directory -------- 0.52s
deploy-web-server : Create directory ------------------ 0.41s
Deploy Web service ------------------------------------ 0.04s
Thursday 23 December 2021  22:56:12 +0800 (0:00:00.541) 0:00:14.099
===================================================================== 
deploy-web-server ------------------------- 12.40s
gather_facts ------------------------------- 1.60s
include_role ------------------------------- 0.04s
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
total ------------------------------------- 14.04s

2. gathering facts 비활성화

하나의 노드로만 봤을 때는 크게 차이가 안나지만 여러가지 노드에 작업을 수행할 때는 유의미하다.

gather_facts: True 시 작업 시간 : 3.03s

$ time ansible-playbook site.yml
 
PLAY [Deploying Web Server] *********************
 
TASK [Gathering Facts] **************************
ok: [node1]
...<output removed>...
PLAY RECAP **************************************
node1: ok=9  changed=4  unreachable=0  failed=0
       skipped=0  rescued=0  ignored=0
 
ansible-playbook site.yml  3.03s user 0.93s system 25% cpu 15.526 total

gather_facts: False 시 작업 시간 : 2.96s

$ time ansible-playbook site.yml
 
PLAY [Deploying Web Server] ****************
 
...<output removed>...
 
PLAY RECAP **************************************
node1: ok=8  changed=4  unreachable=0  failed=0
       skipped=0    rescued=0    ignored=0
 
ansible-playbook site.yml  2.96s
user 1.00s
system 26%
cpu 14.992 total$ time ansible-playbook site.yml
 
PLAY [Deploying Web Server] ****************
 
...<output removed>...
 
PLAY RECAP **************************************
node1: ok=8  changed=4  unreachable=0  failed=0
       skipped=0    rescued=0    ignored=0
 
ansible-playbook site.yml  2.96s
user 1.00s
system 26%
cpu 14.992 total

3. 병렬 처리

ansible은 fork 기본 값이 5이며, 처음 5개의 호스트에서 작업을 실행하고 작업이 완료될 때까지 기다린 다음 5개의 호스트로 구성된 다음 배치 작업을 진행한다.

# ansible.cfg
[defaults]
inventory = ./hosts
forks=50
$ ansible-playbook site.yaml --forks 50

혹은 --forks 옵션으로 지정할 수 있다.

4. SSH 구성 변경

Last updated