IaC(Infrastructure as Code - 코드형 인프라)
인프라를 웹 인터페이스 및 대화형식의 도구를 사용해 수동적으로 인프라를 구성하는 것이 아닌 시스템이 읽을 수 있는 인프라 정의 파일을 통해 인프라의 구성 관리 및 배포를 자동화 하는 것.
인프라를 물리적 하드웨어뿐만 아니라 가상 컴퓨터, 클라우드 등 관련 리소스를 IaC를 통해 구성관리 및 배포 가능
IaC는 폭발적으로 확장하는 컴퓨팅과 차세대 웹 프레임워크와 같은 새로운 기술을 구현하고 구성하는 어려움에 대한 해결책으로 발전하게 되었고, 기업들은 이런 기술을 통해 스케일링 확장하는 문제도 해결가능
IaC의 장점
- 비용 절감 - 인프라 관리를 수동적으로 하지 않음
- 빠른 속도 - 인프라 구성과 관리 및 배포를 자동화 함으로써 신속한 실행
- 안정성 - 수동으로 구성할 때와 같은 사람의 실수를 줄임
- 코드화 및 버전 관리 : 코드 문서 누구나 읽고 확인, 코드 변경사항 이력을 남김
- 재사용성 : 인프라를 코드화, 리소스를 그룹, 모듈화
Ansible
애플리케이션 및 IT인프라를 자동화 할 수 있는 도구
Ansible을 사용하여 호스트를 구성하고, 소프트웨어를 배포하고, 지속적인 배포 및 다운타임 없는 롤링 업데이트 등 고급 IT 작업 조율 가능
Ansible의 주요목적은 간결성과 사용용이성 또한 보안과 신뢰성을 바탕으로 OpenSSH를 기본 전송 방식으로 사용
컨트롤 노드는 리눅스나 유닉수 시스템만 가능
관리노드는 상관없음
시스템관리에 특별한 에이전트가 필요하진 않지만 모두 파이썬이 설치되어 있어야 함
Ansible의 장점
- SSH 기반으로 원격노드에 에이전트 설치 불필요
- YAML 언어 기반 → 쉬움
- 플레이북 구조는 간단, 명확하게 구조화 되어있음
- 변수기능을 사용해서 같은 작업에 대해 다른 구성으로 쉽게 구성 가능
Ansible 용어
컨트롤 노드(로드,머신)
- Ansible이 설치된 모든 host
- 컨트롤 노드에선 ansible또는 ansible-playbook 명령을 이용해 작업 실행 가능
- python 이 설치된 모든 호스트를 control node로 가능
관리 노드
- 컨트롤 머신에서 접근하여 모듈을 설치하고, 원격의 명령을 실행하는 작업을 수행하는 시스템
- Ansible 설치 불필요
플러그인
- Ansible의 핵심기능을 확장할 수 있도록 다양한 plugin 제공
인벤토리
- 관리노드의 목록으로 관리노드에 대한 호스트 이름이나 IP주소와 같은 정보를 지정
- 여러 관리노드를 그룹으로 조직화 할 수 있고, 중첩 그룹을 사용할 수 있음
모듈
- Ansible을 실행하는 python 코드 단위
- 각 모듈을 호스트에 패키지를 설치 및 관리하고, 데이터베이스의 사용자를 관리하고, 네트워크 장치의 VLAN 인터페이스를 관리하는 등 약 3000개의 모듈이 있음
- 하나의 모듈은 하나의 작업을 실행할 수 있고, 플레이북을 이용해 여러 모듈을 선언해 여러 작업을 수행가능
작업(Task)
- Ansible의 작업 실행 단위
- 하나의 모듈이 하나의 작업이 되며, Ad-hoc 명령을 통해 단일 작업을 실행하거나, 플레이북을 작성해 여러 작업을 실행할 수 있음
플레이
- 특정관리 노드를 대상으로한 순서가 지정된 작업 목록
플레이북
- 관리노드에서 실행할 모듈을 인자와 함께 정의한 파일
- YAML으로 작성되며, Ansible의 핵심
- ansible-playbook명령을 통해 플레이북 실행 가능
Ad-hoc 명령
- ansible 명령을 이용하여 단일 작업을 실행 가능
Ansible 아키텍쳐
- 시스템 유형으로 컨트롤 머신, 관리 노드
- 컨트롤 머신에 Ansible이 설치되며 관리노드들은 컨트롤머신에 의해 관리
- 관리노드들은 인벤토리 파일에 나열되어야 하며, 여기에는 호스트이름 또는 IP주소로 저장
- 인벤토리에 각 관리 노드들의 기능별로 그룹화시켜서 저장가능
- 시스템관리자는 컨트롤 머신에 로그인하여 플레이북 또는 원격 전송 명령을 사용하여 관리노드를 제어할 수 있고 이 때 인벤토리에 저장된 관리노드들을 패턴형식으로 지정하여 제어가능
- 컨트롤로드는 기본적으로 SSH를 사용하여 관리노드와 통신
- 플레이 북에서 참조한 모듈은 관리노드에 복사되며, 관리 노드에서 실행
- 사용 모듈 종류 - 코어 모듈, 사용자 지정 모듈
Ansible 구성 파일
- Ansible의 작동 방식을 구성하는 파일
- 인벤토리 파일의 위치, 관리 노드에 연결하는 방법, 연결 한 후 작동방법 등 무수히 많은 구성을 지정할 수 있음
- 기본 위치 : /etc/ansible/ansible.cfg
Ansible 구성 파일 우선 순위
- ANSIBLE_CONFIG 환경변수
- 현재 디렉토리의 ansible.cfg
- 홈 디렉토리의 ~/.ansible.cfg
- /etc/ansible/ansible.cfg
Ansible 작동 방식 제어 우선 순위
Ansible 작동 방식을 제어하기 위해 Ansible 구성파일 외에도 ansible 명령의 옵션, 플레이북 키워드, 변수를 이용해 동작 제어 가능
- -e 옵션에 지정한 변수
- 변수
- 플레이북 키워드
- 명령의 옵션
- Ansible 구성 파일
ansible.cfg 구성 파일 설정
[default] 섹션
inventory - 인벤토리 파일의 위치
remote_user - SSH 인증하기위한 사용자
ask_pass - SSH 인증하기 위한 패스워드 요청/입력 여부
[privilege_escalation] 섹션
become - 권한 상승 여부
become_method - 권한 상승 방법
become_user - 권한 상승할 사용자
become_ask_pass - 권한 상승 방법의 패스워드 요청/입력 여부
인벤토리
- Ansible은 인프라에 존재하는 여러 호스트들을 관리함
- 호스트의 목록 또는 글부을 지정한 인벤토리 파일이 필요하며 인벤토리가 정의되면 패턴을 사용하여 Ansible을 실행할 노드 또는 그룹을 선택
- 기본 인벤토리 파일은 /etc/ansible/hosts 이며, -i 옵션을 사용하여 다른 인벤토리 파일을 지정 가능
- 인벤토리 파일은 일반적으로 INI 파일 형식, YAML 가능