IaC
를 지향)멱등성
이 특징Agentless
방식으로 agent 없이 구동이 가능► NVIDIA-Driver를 설치하는 절차를 ansible로 구성하여 기능 테스트 진행
key-gen
명령어를 통한 공개키를 생성scp, ssh-copy-id
등의 명령어를 사용하여 client의 authorized_keys로 복사Ansible로 관리하려는 노드들 즉 Managed node들에 대해서 관리하려면 Inventory 파일을 먼저 작성을 해야한다.
Inventory 파일이 hosts 파일이다. 다음과 같이 그룹으로 나누어 진행할 수 있다.
hosts: all
로 지정hosts: client-group1
로 지정playbook에서 지정하여 논리적인 적용이 가능케한다.
(/etc/ansible/hosts)
[client-group1]
133.186.155.10
133.186.155.11
133.186.155.12
[client-group2]
133.186.152.10
133.186.152.11
133.186.152.12
(test.yaml)
1 - name: Insert Full name
2 gather_facts: false
3 hosts: all
4 vars:
5 vars_name: 'This is Variable contents'
6 tasks:
7 - name: Insert function name
8 shell: echo "{{vars_name}}"
9 register: shell_command_result
- name:
(Line-1) - yaml 파일의 이름 (line-1)gather_facts:
- 각기 노드들의 정보들을 수집hosts:
- playbook을 적용시킬 host 지정 / hosts 파일 기준으로 작동vars:
- 변수를 제작하여 task에서 사용 가능tasks:
- 실제 수행시킬 작업을 위 구문 아래에 작성- name:
(Line-7) - 개별 task의 이름 / 위 구문 아래로 command 작성shell:
- shell command를 사용할 수 있는 모듈register:
- 결과 값을 담는 변수 생성 / 이후 다른 task에서 사용 가능ansible-playbook test.yaml
(detail debug)
-v
-vv
-vvv
(yaml 파일 적용 테스트)
--check
ansible은 Push를 진행하였을 때, 클라이언트들은 작업을 병렬적으로 수행한다.
클라이언트(관리 노드)로 작업 Push
모든 클라이언트(관리 노드)들이 작업 완료 시 다음 task 진행
하지만, 이러한 동시 시작에 대한 분기 처리는 소분화 된 단위(block 혹은 task) 로 진행
reboot_tool을 이용하여 다음과 같이 분기가 끝나야만 동시에 다음 테스크로 넘어가는 것을 검증할 수 있었다.
NVIDIA-Driver 설치를 위해 사용된 Ansible의 여러 모듈들로 복잡한 설치 과정을 간소화 할 수 있다.
여러가지 모듈이 존재하지만 NVIDIA-Driver 설치를 위해 사용한 모듈에 대해 정리하였다.
<file 모듈, apt 모듈, lineinfile 모듈>
\<stat 모듈, reboot 모듈, copy 모듈, pause 모듈>
<vars, block, when, get_url 모듈>
위와 같은 준비가 끝나고 ansible을 실행하게되면 다음과 같은 결과를 볼 수 있다.
사용자는 설정한 task의 이름을 기준으로 진행상황을 확인 가능하다. 하지만 task의 이름이 중복되거나 이름의 고유성이 없게 되면 확실하게 식별할 수 없다.
그렇기 때문에 -debug: msg:
모듈 및 log 파일을 사용한다면 정확한 상태 확인 메시지를 출력이 가능해진다.
ansible.cfg
파일 생성ansible.cfg
속 log_path 검색 및 수정gather_facts
를 사용, 노드들의 IP주소를 받아와 서버 별 msg를 시각화 하면 활용도가 높아질 것이다.비교 | shell script | anisble-yaml |
---|---|---|
함수 사용 시 | 함수 제작 | 모듈 사용 |
직관성 | 낮음 | 높음 |
호환성 | 중간 | 높음 |
유지보수 | 어려움 | 쉬움 |
함수 제작 가능 여부 | 가능 | 가능 |
재사용 | 가능 | 가능 |
변수 사용 | 가능 | 가능 |
클라이언트 변수 사용 | 가능 | 가능 |
조건문 처리 | 가능 | 가능 |
ansible-yaml
은 협업하여 프로젝트를 수행하는 경우 짧은 시간안에 직관적으로 코드를 이해할 수 있음shell-script
는 작성자 자신만의 색으로 작성하기 때문에 타인이 유지보수하는데 어려움이 있음Ansible을 사용하여 GPU에 대한 NVIDIA-Driver를 설치하는 것은 많은 이점이 있다고 생각한다.
사용자 친화적인 공식문서로 인하여 학습에 어려움이 적으며, 유지보수 시에 모듈을 검색만 하면 빠른 습득이 가능하다.
다양한 모듈이 존재하기 때문에 실질적인 함수 제작에 시간이 들지 않아 프로젝트의 빠른 진행이 가능할 것이라고 생각한다.
또한, 가장 중요한 반복적인 작업의 자동화를 통하여 불필요 시간이 낭비되지 않는다.