Recent Comments
Link
Recent Posts
Today
Total
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
관리 메뉴

Study Memory Work

[Ansible] Ansible이란? 본문

Data

[Ansible] Ansible이란?

Hera Choi 2023. 1. 3. 18:21

Ansible이란 ? 

  • 여러 서버를 효율적으로 관리하는 환경 구성 자동화 도구
  • Infrastructure As a Code : 환경의 배포와 구성을 규격화된 코드로 정의해 사용하는 것. 인프라 상태를 코드로 선언하고 이를 모든 서버에 배포하는 것. ( 특정 환경을 동일하게 유지할 수 있다는 장점이 있다. )

 Ansible 역할

  • 환경 배포, 서버/클러스터의 체계적인 관리, 확장 가능한 모듈 사용 등

Ansible 구조

  • 서버/클라이언트 구조로 되어있다.
  • 서버는 제어할 호스트(클라이언트) 정보와, 어떤 명령을 내릴 것인 지 정의된 파일을 가지고 있다. 

Ansible 설치

  •  서버 노드에는 Ansible 설치
apt install ansible
  • 클라이언트 노드에는 Agent를 별도로 설치하지 않고, SSH 데몬이 Agent역할을 대신한다. 
    즉, SSH 접속이 가능한 모든 호스트는 Ansible 제어 대상이 될 수 있다.
  • Ansible 사용 조건
 1. 각 서버/클라이언트 노드들은 SSH 데본이 실행중이며,
 2. SHH로 접속이 가능해야 하며,
 3. 서버와 클라이언트는 호스트 전용 브릿지를 이용해 상호 통신이 가능하다.

 

Ansible 구성요소 : Inventory, Playbook, Module

1) Inventory (where 어디에서)

  •  제어대상 서버의 목록을 정의하는 파일 ( host.ini)
  • 구성 :
    - 호스트명 : ansible에서 호스트를 제어할 때 사용하기 위해 고유하게 지정하는 이름.
    - IP(Port) : 호스트의 IP
    - User : 접근을 위한 호스트 계정명
  • 여러 호스트를 구성할 때, 호스트를 그룹화할 수도 있다.
  • host.ini  예) 
# 각 호스트 3개를 정의한 것.
# 띄어쓰기를 구분자로 호스트명, ansible_host, ansible_user 로 나뉨
agent_1 ansible_host=192.168.50.145 ansible_user=ubuntu
agent_2 ansible_host=192.168.50.177 ansible_user=ubuntu
ls_1 ansible_host=192.168.50.38 ansible_user=ubuntu

# '[그룹명]'을 이용하여 위 정의된 호스트를 그룹화 한 것
[agents]
agent_1
agent_2

[logstash]
ls_1

 

2) Playbook (what 무엇을)

  • 제어 대상 호스트들이 할 일을 정의하는 파일로 Yaml 형식의 파일이다. (.yml)
  • Ansible을 사용한다는 것은 곧 Playbook을 사용한다는 말과 같다.
  • Inventory + Playbook 조합으로 어디에서 무엇을 할지 정의하는 것이 Ansible의 핵심이다.
  • playbook.yml  예)
- name: metricbeat					# 플레이북 명
  hosts: agents						# 제어대상 호스트 or 호스트 그룹
  become: true						# root권한으로 실행할 지 여부
  vars:								# 반복해서 쓰이는 것 변수화
          beat_name: metricbeat
          beat_dir: metricbeat-6.5.0-linux-x86_64
          beat_dir_path: "./{{beat_dir}}"
  tasks:							# 실제 작업 기술
          - name: download beat tar file
            get_url:
                    url: "https://artifacts.elastic.co/downloads/beats/{{beat_name}}/{{beat_dir}}.tar.gz"
                    dest: ./
          - name: unarchive beat tar file
            unarchive:
                    src: "./{{beat_dir}}.tar.gz"
                    dest: ./
                    remote_src: True

 

3) Module (How 어떻게)

  • Playbook 내에 tasks 부분에 들어가는 액션들을 모듈이라 한다.
  • 500개 정도의 모듈을 제공하고 있다.
  • Module  예)
- name: metricbeat					
  hosts: agents						
  become: true						
  vars:								
          beat_name: metricbeat
          beat_dir: metricbeat-6.5.0-linux-x86_64
          beat_dir_path: "./{{beat_dir}}"
  tasks:							
          - name: download beat tar file
            get_url:				# Web에서 다운받는 모듈
                    url: "https://artifacts.elastic.co/downloads/beat..." 	# get_url모듈의 하위 옵션들
                    dest: ./
          - name: unarchive beat tar file
            unarchive:				# 압축을 푸는 모듈
                    src: "./{{beat_dir}}.tar.gz"		# unarchive모듈의 하위 옵션들
                    dest: ./
                    remote_src: True