Ansible Fundamentals I

Dongmin Lee·2024년 1월 7일
0

Ansible

목록 보기
1/7

1. Ansible이란?

  • 오픈소스 IT 자동화 도구로 수작업으로 진행하던 IT 업무를 코드 기반으로 작성하여 여러 환경에 동일하게 적용될 수 있도록 돕는 도구

2. Ansible 특징

  • 에이전트 없음 (Agentless)
  • 멱등성 (Idempotent)
  • 쉬운 사용법과 다양한 모듈 제공

3. Ansible 아키텍처

  • 제어 노드 (Control Node): Ansible core가 설치되고 playbook을 작성하여 실행할 수 있는 노드
  • 관리 노드 (Managed Node): Playbook이 실행되어 애플리케이션 설치나 클라우드 시스템의 가상 서버 생성과 같은 작업이 수행되는 노드
  • 인벤토리 (Inventory): 제어 노드가 제어하는 관리 노드의 목록을 나열해놓은 파일
  • 모듈 (Module): 관리 노드의 작업을 수행할 때 SSH를 통해 연결한 후 'Ansible Module'이라는 스크립트를 푸시하여 작동한다.
  • 플러그인 (Plugin): 모듈이 대상 시스템에서 별도의 프로세스로 실행되는 동안 플러그인은 제어 노드에서 실행된다. (데이터 변환, 로그 출력, 인벤토리 연결 등 기능 제공)
  • 플레이북 (Playbook): 관리 노드에서 수행할 작업들을 YAML 문법을 이용해 순서대로 작성해놓은 파일

4. Ansible Inventory & Playbook

4.1 Inventory

4.1.1 리스트 형태 정보 확인

$ anbile-inventory -i inventory --list

4.1.2 트리 형태 정보 확인

$ anbile-inventory -i inventory --graph

4.1.3 Ping 확인

$ ansible -i inventory -m ping web

4.2 Playbook

4.2.1 문법 체크

$ anbile-playbook --syntax-check playbook.yml

4.2.2 실행 전 사전 점검

$ anbile-playbook --check playbook.yml

4.2.3 실행

$ anbile-playbook playbook.yml

5. Ansible Variable & Fact

5.1 Variable

변수를 사용하여 사용자, 설치하고자 하는 패키지, 재시작할 서비스, 생성 또는 삭제할 파일명 등 시스템 작업 시 사용되는 다양한 값을 저장한다.

5.1.1 그룹 변수

인벤토리에 정의된 호스트 그룹에 적용되는 변수

[web]
tnode1
tnode2

[db]
tnode3

[all:children]
web
db

[all:vars]
user=ansible

5.1.2 호스트 변수

해당 호스트에만 사용할 수 있는 변수

[web]
tnode1
tnode2

[db]
tnode3 user=ansible

5.1.3 플레이 변수

플레이북 내에서 선언되는 변수

---
- hosts: all
  vars:
    user: ansible

5.1.4 추가 변수

외부에서 ansible-playbook을 실행할 때 함께 파라미터로 넘겨주는 변수

$ ansible-playbook -e user=ansible playbook.yml

5.1.5 register 변수

플레이북의 태스크 수행 결과를 저장

---
- hosts: all

  tasks:
  - name: Create User {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      state: present
    register: result
  
  - ansible.builtin.debug:
      var: result

5.1.6 우선순위 (중요★★★★★)

  1. 추가 변수
  2. 플레이 변수
  3. 호스트 변수
  4. 그룹 변수

5.2 Vault

데이터 파일을 암호화하고 암호화된 파일의 내용을 해독할 수 있는 기능이다.

5.2.1 AWS Secrets Manager 활용

get-vault-password.sh

#!/bin/sh
aws secretsmanager get-secret-value \
	--secret-id ansible/password \
	--region ap-northeast-1 \
    | jq -r .SecretString \
    | jq -r .ansible_vault_password

playbook.yml

---
- hosts: all
  vars_files:
    - password.txt
    
  tasks:
    - name: Create password file
      ansible.builtin.lineinfile:
        path: /tmp/password.txt
        line: "password={{ password }}"
        create: true
        mode: '0600'

terminal

$ ansible-playbook playbook.yml \
  --vault-password-file ./get-vault-password.sh

5.3 Fact

Ansible이 관리 호스트에서 자동으로 검색한 변수

5.3.1 수집되는 팩트 정보

  • 호스트 이름
  • 커널 버전
  • 네트워크 인터페이스 이름
  • 운영체제 버전
  • CPU 개수
  • 사용 가능한 메모리
  • 스토리지 장치의 크기 및 여유 공간

5.3.2 팩트 사용하기

- hosts: db

  tasks:
  - name: Print all facts
    ansible.builtin.debug:
      var: ansible_facts

5.3.3 변수로 사용할 수 있는 앤서블 팩트

Factansible_facts.* 표기법
호스트명ansible_facts.hostname
도메인 기반 호스트명ansible_facts.fqdn
기본 IPv4 주소ansible_facts.default_ipv4.address
네트워크 인터페이스 이름 목록ansible_facts.interfaces
/dev/vda1 디스크 파티션 크기ansible_facts.device.vda.partitions.vda1.size
DNS 서버 목록ansible_facts.dns.nameservers
현재 실행 중인 커널 버전ansible_facts.kernel
운영체제 종류ansible_facts.distribution

0개의 댓글