mingming

Ansible - 설치 & 인벤토리 및 구성파일 본문

새싹 하이브리드 클라우드/Ansible

Ansible - 설치 & 인벤토리 및 구성파일

mingming_96 2023. 11. 10. 15:39

 

IaC(Infrastrucutre as Code)

코드형 인프라는 인프라를 시스템이 읽을 수 있는 인프라 정의 파일을 통해 인프라의 구성 관리 및 배포를 자동화 하는 것을 의미합니다. 

 

IaC 도구 및 특징

구성 관리 도구 : Ansible , Chef, Puppet, SaltStack 

구성 관리 도구는 베어메탈 시스템 , 가상 컴퓨터 및 클라우드 인스턴스 내에서 패키지 설치 , 애플리케이션 구성, 운영체제 관련 구성 및 구성 변경을 관리하는 도구입니다. 대부분의 구성 관리 도구는 가변 인프라에 초점을 맞추고 있습니다.

 

배포 도구 : CloudFormation , OpenStack Heat, Terraform 

배포 도구는 새로운 인프라 리소스를 배포하고 이미 배포된 인프라 리소스의 생명주기를 관리하는 도구 입니다.

 

절차적 언어 / 선언적 언어

절차적 언어는 원하는 최종 상태에 도달하기 위해 코드가 단계별로 정의되고 실행되는 형태를 의미합니다. Asnble은 절차적 언어의 형태를 띄고 있습니다.

선언적 언어는 최종적으로 원하는 형태를 정의만 하면 필요한 절차는 내부적으로 알아서 진행되는 형태를 의미합니다. 
Terraform, CloudFormation 이 대표적인 선언적 언어 입니다.

 

Ansible

Ansible은 애플리케이션 및 IT 인프라를 자동화 할 수 있는 도구 입니다. Ansible의 주요 목적은 간결성과 사용 용의성입니다 또한 보안과 신뢰성을 바탕으로 OpenSSH를 기본 전송 방법을 사용합니다.

Ansible은 에이전트 없이 호스트를 관리합니다. 관리 대상의 호스트에 데몬이 없기 때문에 데몬의 문제로 호스트를 관리 할 수 없는 문제가 발생하지 않습니다. 

Ansible은 기존 OS 자격증명을 사용하며 필요한 경우 Kerberos, LDAP 및 중앙 집중식 인증 관리 시스템에 쉽게 연결 가능합니다.

 

Ansible 용어

제어노드 

제어노드는 Ansible이 설치된 모든 호스트를 의미합니다. 제어노드에서 ansible 혹은 ansible-playbook 명령을 이용해 관리 노드를 제어할 수 있습니다. 

 

관리노드

관리 노드는 Ansible로 관리하는 호스트 및 네트워크 장치를 의미합니다. 

 

인벤토리

인벤토리는 관리 노드의 목록으로 관리 노드에 대한 호스트 이름이나 IP 주소와 같은 정보를 지정합니다. 여러 관리 노드를 그룹으로 조직화할 수 있습니다.

 

Task

Ansible의 작업 실행 단위입니다. 하나의 모듈이 하나의 작업이 되며, Ad-hoc 명령을 통해 단일 작업을 실행하거나, 플레이북을 작성해 작업을 실행할 수 있습니다.

 

Ad-hoc 명령

ansible 명령을 이용하여 단일 작업을 실행할 수 있습니다.

 

플레이북 

플레이북은 하나 이상의플레이를 가지고 있는 YAML 파일을 의미합니다. ansible-playbook 명령을 이용해 플레이북을 실행할 수 있습니다.

 

역할 

역할은 알려진 파일/디렉터리 구조를 기반으로 변수, 파일, 작업 등 아티팩트의 모음이다.

 

컬렉션

컬렉션(Collection)은 플레이북 및 역할, 모듈, 플러그인 포함하는 Ansible 콘텐츠 배포 형식입니다.

 

 

Ansbile 설치

요구사항

  • python 2.6 버전 이상 설치
  • RedHat , Debian, CentOS, Ubuntu, macOS, BSD 등 Unix 계열

사전 준비사항 

 

1. 패키지 설치를 위한 저장소 확장 설치

sudo yum install -y epel-release

 

2. ansible 설치

sudo yum install -y ansible

 

3. 버전 확인

ansible --version

 

인벤토리 파일

Ansible은 인프라에 조내하는 여러 호스트를 관리합니다. 이런 호스트의 목록 또는 그룹을 지정한 인벤토리 파일이 필요합니다. 기본 인벤토리 파일은 /etc/ansible/hosts 이며 -i 옵션을 사용하여 다른 인벤토리 파일을 지정할 수 있습니다.

 

정적 인벤토리 파일

정적 인벤토리 파일은 사용자가 직접 INI 또는 YAML 형식으로 파일을 작성합니다.

 

INI 형식

mail.example.com
192.168.56.51

[webservers]
foo.example.com
bar.example.com

[dbservers]
one.example.com
two.example.com
three.example.com

 

YAML 형식

all:
  hosts:
    mail.example.com:
    192.168.56.51:
  children:
    webservers:
      hosts:
        foo.example.com:
        bar.example.com:
    dbservers:
      hosts:
        one.example.com:
        two.example.com:
        three.example.com:

 

인벤토리 확인

ansible all --list-hosts
ansible webservers --list-hosts
ansible foo.exmple.com --list-hosts
ansible-inventory --list
ansible-inventory --host foo.example.com
ansible-inventory --graph

 

 

구성 파일

Ansible 구성 파일은 Ansible의 작동 방식을 구성하는 파일입니다. Ansible 구성 파일에는 인벤토리 파일의 위치, 관리 노드에 연결하는 방법, 연결 한 후 작동 방법 등 무수히 많 구성을 지정할 수 있습니다.  
기본 Ansible 구성 파일의 위치는 /etc/ansible/ansible.cfg 이며, 변형된 INI 형식을 사용합니다.

 

Ansible 구성 파일 우선 순위

  •  ANSIBLE_CONFIG 환경 변수
  •  현재 디렉터리의 ansible.cfg
  •  홈 디렉터리의 ~/.ansible.cfg
  •  /etc/ansible/ansible.cfg 

Ansible 구성 파일 설정 

Ansible 구성 파일은 [section] 대괄호로 묶어진 여러 섹선이존재하며 각 섹션에는 키 = 값으로 설정됩니다. 

 

[defaults]
inventory=./inventory
remote_user=vagrant
ask_pass=false

[privilege_escalation]
become=true
become_method=sudo
become_user=root
become_ask_pass=false

 

[defaults] 섹션 

  • inventory: 인벤토리 파일의 위치를 명시합니다.
  • remote_user: SSH 인증하기 위한 사용자 (관리 노드의 사용자)
  • ask_pass: SSH 인증하기 위한 패스워드 요청/입력 여부 

 

[privilege_escalation] 섹션

  • become: 권한 상승 여부 ( default false )
  • become_method: 권한 상승 방법 ( default sudo )
  • become_user: 권한 상승할 사용자  ( default root )

구성 파일 및 설정 확인

ansible-config view ## 현재 적용된 구성 파일의 내용 확인

ansible-config dump ## 현재 적용된 모든 구성 정보 확인  

ansible-config list ## 설정 가능한 모든 설정 항목