ENCORE CLOUD ARCHITECTURE TIL 4/5 Ansible

신민창·2021년 4월 5일
0

TIL

목록 보기
35/46

Ansible을 학습하기 위해서 먼저 리눅스 환경을 세팅해야 한다.

Control Node
IP: 192.168.100.10/24
gateway: 192.168.100.2
dns: 192.168.100.2

Managed hosts1
IP: 192.168.100.21/24
gateway: 192.168.100.2
dns: 192.168.100.2

Managed hosts2
IP: 192.168.100.22/24
gateway: 192.168.100.2
dns: 192.168.100.2

IaC 개요

기존 시스템 관리 방식
수동관리. 직접 콘솔을 통해서 관리, 네트워크를 통한 접근
직접 관리방식은 사용자에 의한 오류 발생 등의 가능성이 높음
수행결과에 대한 검증
각자 다른 환경에 대한 일관적인 구성이 어려움
유지관리 어려움
자동화된 관리의 필요성 : IaC

IaC (Infrastructure as Code)

코드형 인프라
코드에 의하여 자동적으로 인프라를 구성하도록 하는 방식
인프라 자체에 대한 배포
구성 설정을 관리
클라우드 등과 결합하여 더 강력한 힘을 가지게 됨

IaC 특징

시스템이 자동으로 읽어서 처리할 수 있는 언어(Code)를 사용
상태에 대해서 이해를 하고, 변경사항을 반영할 수 있도록 구성
텍스트 형태의 파일로 구성되어 버전 관리가 용이
인적 오류 완화

Ansible

오픈소스 자동화 관리도구 플랫폼
상용화된 기능도 제공됨 : Ansible Tower
구성관리의 포지션을 담당
일회성 명령, 플레이북(Playbook) 사용
플레이북은 YAML(YAML Ain't Markup Language) 문법을 사용
Agentless(에이전트가 없음) - SSH, Python
Idempotency : 멱등성. 반복적으로 작업을 실행하여도 이미 실행한 작업은 다시 수행하지 않음

Ansible 아키텍처

제어 노드 (Control Node)
Ansible을 사용하여 Managed hosts 를 관리하는 역할
Ansible이 실제 설치되어야 하는 위치
프로젝트 파일 작성, 보관
관리 호스트 (Managed host)
Ansible을 통해 관리되는 실제 인프라
인벤토리(Inventory)를 사용하여 관리 호스트 목록을 제어
개별 호스트, 그룹 지정 가능
정적 인벤토리/동적 인벤토리 사용 가능
플레이북
YAML 형태의 언어로 구성된 텍스트 파일
플레이북은 하나 이상의 플레이로 구성
플레이는 하나 이상의 작업(Tasks)로 구성
작업
모듈(Module)을 실행
거의 대부분의 모듈은 멱등성을 지원 (command, shell, raw 등은 제외)
플레이북 내에서 작업 실행 중 실패시 나머지 작업이 중단

Ansible 설치 (제어 노드)

제어노드는 유닉스/리눅스만 가능 (Windows는 안됨)
파이썬 2.6 이상 또는 3버전 이상 필요
ssh 명령 사용 가능
CentOS 에서는 EPEL 레포지토리가 활성화되어 있어야 설치 가능
yum install epel-release
yum install ansible

관리노드 설정 확인
리눅스/유닉스/Windows/네트워크 장비 등을 사용가능
리눅스/유닉스/네트워크장비 : SSH 연결 + Python (2.6 이상)
Windows : WinRM (Windows Remote Management) + PowerShell
SSH 연결 : 키 기반 인증 설정

인벤토리 생성
인벤토리 파일은 INI 파일 형식 또는 YAML 형식으로 작성 (주로 INI)
[항목]
Key=Value

호스트 그룹 사용시 [그룹이름]
기본적으로 지정되어 있는 그룹
all : 인벤토리 내의 모든 호스트들을 중복을 제거하고 출력
ungrouped : 특정 그룹에 포함되어 있지 않은 호스트
인벤토리 확인 : --list-hosts
ansible -i [인벤토리] --list-hosts <대상>
인벤토리에 호스트 지정시 범위 사용가능
server1.example.local ~ server10.example.local 호스트 등록시
server[1:10].example.local

Ad-hoc 명령 실행
ansible 명령을 사용하여 단일 모듈을 대상에 대하여 실행
ansible -m [사용할 모듈] -a [모듈 사용시 필요한 argument] -i [인벤토리] <대상>

Ansible 주요 파일

/etc/ansible/hosts : 기본 Ansible 인벤토리 파일
/etc/ansible/ansible.cfg : 기본 Ansible 설정 파일
이 파일은 우선순위가 높지 않음
Ansible 설정파일 우선순위
ANSIBLE_CONFIG : 환경변수로 지정한 경로의 파일이 사용. 유연한 관리
./ansible.cfg : ansible 명령을 실행하고 있는 working directory 내 설정파일
~/.ansible.cfg : 사용자에게 적용되는 Ansible 설정 파일
/etc/ansible/ansible.cfg
사용중인 설정파일 확인방법
ansible --version : 현재 위치에서 ansible 명령 사용시 쓰는 설정파일 확인
ansible-config 
view : 설정파일 내용 출력
dump : 전체 설정항목 값 출력
초록색 : 기본값
노란색 : 설정파일에 의해 변경된 값
Ansible 설정 파일 내 주요 항목
[defaults] : Ansible 동작의 기본 설정. 인벤토리 등
inventory : 인벤토리 파일/디렉토리의 경로
기본값 : /etc/ansible/hosts
remote_user : 관리 호스트 접근시 사용할 계정. root 권장하지 않음
기본값 : 사용자이름
ask_pass : ansible 실행 시 패스워드 물어볼지 여부 (yes/no/true/false)
기본값 : False
[privilege_escalation] : 권한 상승
become : 관리자 권한 상승여부 (Y/N/T/F)
기본값 : False
become_method : 관리자 권한 상승 방법 (sudo/su)
기본값 : sudo
become_user : 권한 상승시 변경할 사용자 (root)
기본값 : root
become_ask_pass : 권한 상승시 필요한 암호 입력 (Y/N/T/F)
기본값 : False

샘플

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

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

테스트 명령

$ ansible -m user -a 'name=testuser state=present' all

0개의 댓글