Ansible/Study
Ansible 기초 정리
식사법
2024. 1. 9. 10:31
1. Ansible 기초 용어 정리
1) 제어 노드 ( Control Node)
- 관리 노드에 Ansible을 통해 명령을 전달하는 주체 대체로 Ansible 명령어는 이 제어노드를 통해 실행됨
2) 관리 노드 ( Managed Node )
- 관리 노드의 PlayBook에 정의된 작업들을 실제로 수행하는 노드
3) 인벤토리 ( Inventory)
- 관리 노드 및 playbook에 사용될 변수를 정의한 파일
4) 모듈 ( Modules )
- PlayBook 작성시 작업( task ) 를 정의할 때 사용함
5) 플레이북 ( Playbook)
- 관리노드에서 수행할 작업들을 Yaml 문법을 통해 정의해 둔 파일
용어 | 설명 |
제어 노드 (Control Node) | 관리 노드에 Ansible을 통해 명령을 전달하는 주체 대체로 Ansible 명령어는 이 제어노드를 통해 실행됨 |
관리 노드( Managed Node) | 관리 노드의 PlayBook에 정의된 작업들을 실제로 수행하는 노드 |
인벤토리 ( Inventory ) | 관리 노드 및 관리노드에서 사용되는 변수가 정의되어 있는 파일 |
모듈 ( Modules) | PlayBook 작성시 작업( task ) 를 정의할 때 사용함 |
플레이북 ( Playbook ) | 관리노드에서 수행할 작업들을 Yaml 문법을 통해 정의해 둔 파일 |
2. 인벤토리 ( Inventory ) 설명
- 관리 노드들에 대한 정보를 기입한다.
1) 관리 노드 설정
- IP를 이용한 관리 노드 설정
# inventory 파일 생성
cat <<EOT > inventory
10.10.1.11
10.10.1.12
10.10.1.13
EOT
# inventory 검증 : -i 특정 인벤토리 지정
ansible-inventory -i ./inventory --list | jq
- 호스트명을 이용한 관리 노드 설정 ( 단, /etc/hosts 상 노드와 ip 가 기입되어 있을 것)
# /etc/hosts 파일 확인
cat /etc/hosts
# inventory 파일 생성
cat <<EOT > **inventory**
tnode1
tnode2
tnode3
EOT
# inventory 검증
ansible-inventory -i ./inventory --list | jq
2) 관리 노드 그룹 설정
- webservers 와 db-servers 라는 그룹 생성
- 해당 그룹등록시 PlayBook 에서 Host 등록시 그룹명으로 여러 관리 노드에 작업 실행 가능하다.
[webservers]
10.10.1.11
10.10.1.13
[db-servers]
10.10.1.12
- 중첩 그룹
- 그룹 M 개를 1개의 그룹으로 묶을 수 있다
- 단, :children 이라는 접미사를 추가하여아함
[webservers]
web1.example.com
web2.example.com
[db-servers]
db01.example.com
db02.example.com
[datacenter:children]
webservers
dbservers
- 선언 간소화
#10.0.0.1~10.0.0.10 까지의 관리노드 선언
10.0.0.[1:10]
#test1, test2, test3 라는 이름의 관리 노드 선언
test[1:3]
3. 플레이북 ( Playbook ) 설명
중요) ansible.cfg 설정
- ansible.cfg 이란 ansible명령어를 실행하면서 특정 옵션값을 미리 설정해 놓는 파일이다. 예시) inventory , playbook 등
1) 플레이북 작성 && 구조 설명 (주석 참조)
# 제어 노드에 메세지를 출력하고, 관리노드에 메세지를 출력하는 Playbook
- hosts: all #어떤 host에 task를 전달할 것인가
tasks: # 작업 정의
- name: Print message # task 명 지정
**debug**: # 어떤 module을 사용하는지 명시
**msg**: Hello CloudNet@ Ansible Study # msg 내용 기입
tasks: # 작업 정의
- name: shell module # 작업명 정의
shell: | # 어떤 module을 사용하는지 명시
echo "testtesttest" # 관리 노드에 전달할 명령어
2) 플레이북 실행
- 플레이북 문법 체크
ansible-playbook --syntax-check first-playbook.yml
- 플레이북 실행하기
ansible-playbook first-playbook.yml
4. 변수 설명
1) 그룹 변수
- 인벤토리에 정의된 호스트 그룹에 적용되는 변수
#inventory
[web]
tnode1
tnode2
[db]
tnode3
[all:children]
web
db
[all:vars]
user=ansible
- [all:vars] 하위에 선언되며 이렇게 선언된 변수는 모든 관리 노드에 적용된다
2) 호스트 변수
- 인벤토리에 정의된 호스트 하나에 적용되는 변수
#inventory
[web]
tnode1
tnode2
[db]
tnode3 user=ansible1
[all:children]
web
db
[all:vars]
user=ansible
- [db] 하위의 tnode3에만 변수가 적용된다
3) 플레이 변수
- 플레이북 내에서 선언되는 변수
#playbook.yml
- hosts: all
vars:
- message: test
tasks:
- name: Print message
debug:
msg: "{{msg}}"
tasks:
- name: shell module
shell: |
echo "{{msg}}"
- hosts 하위 vars에 message 라는 변수 선언
4) 추가 변수
ansible-playbook -e message=test test.yml
- -e 를통해 변수 값 전달
번외) 변수 우선 순위
추가변수 > 플레이 변수 > 호스트 변수 > 그룹 변수
[도전과제1] Ansible 모듈을 활용하여 user 생성 및 삭제
1) 유저 생성 yml
- hosts: all
tasks:
- name: Create User {{ user }}
ansible.builtin.user:
name: "{{ user }}"
state: present
2) 유저 삭제 yml
- hosts: all
tasks:
- name: Delete User {{ user }}
ansible.builtin.user:
name: "{{ user }}"
state: present
remove: yes
[도전과제2] Ansible 모듈을 활용하여 관리 노드의 uptime 시간 확인 하기
1) uptime 시간 체크 yml
- hosts: all
tasks:
- name: Utime
ansible.builtin.shell: /usr/bin/uptime
register: result
- ansible.builtin.debug:
var: result
[도전과제3] Ansible 모듈을 활용하여 관리 노드의 Kernel Version 과 OS 종류 출력하기
1) Kernel Version 과 OS check yml
- hosts: all
tasks:
- name: Print all facts
ansible.builtin.debug:
msg: >
The Kernel_version is {{ ansible_facts.kernel_version }} and os is {{ ansible_facts.lsb.description }}