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.04s2. 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 totalgather_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 total3. 병렬 처리
ansible은 fork 기본 값이 5이며, 처음 5개의 호스트에서 작업을 실행하고 작업이 완료될 때까지 기다린 다음 5개의 호스트로 구성된 다음 배치 작업을 진행한다.
# ansible.cfg
[defaults]
inventory = ./hosts
forks=50$ ansible-playbook site.yaml --forks 50혹은 --forks 옵션으로 지정할 수 있다.
4. SSH 구성 변경
Last updated