Ansible이란?
대표적인 DevOps 툴로 서버마다 대상 및 변수를 지정하여 서버를 구성 하기에 적합한 도구이다.
- 패키지 설치, 설정 변경, 파일 전송, 서비스 시작/정지 등을 원격 조작이 가능하다.
- 서버, 네트워크, 서비스, 로드 벨런스, 방화벽 설정 및 배포를 자동화 가능(오케스트레이션)
- 신규 시스템 구축이나 일상적인 운영 업무를 텍스트 파일화한다.
Ansible의 장점
- 멱등성을 지원한다.
- YAML 형식을 지원하여 특별한 코딩 스킬이 필요치 않다.
- 높은 생산성
- OpenSSH 와 WinRM을 지원한다.
- 안전성과 단순한 관리
- 대상 서버에 별도 에이전트 설치 불필요
- 700개 이상 대다수의 서버와 네트워크 장비 지원
- 동시에 다수의 대상 서버에서 실행
- Bootstrap 부터 설정 변경까지 원스톱 실행
- 완벽한 구성관리, 오케스트레이션, 배포 (작업자에게 의존하지 않는다.)
멱등성이란?
- 여러번 적용해도 결과가 바뀌지 않는 특성
Ansible Architecture
1. Control Node
- Ansible이 설치된 모든 장치를 의미한다.
- Python이 설치된 모든 컴퓨터를 Control Node로 사용이 가능하다
- 여러개의 Contol Node를 가질 수 있다.
- 명령어나 Playbook 실행이 가능하다.
2. Managed Node
- Ansible로 관리하는 장치를 의미한다.
3. Inventory
- 자동화 대상(Managed Node) 목록을 작성하는 곳이다.
- 관리 대상 서버를 호스트명 또는 IP 주소나 ssh 사용자 명으로 지정한다.
4. Playbook
- 자동화 코드 Set을 의미한다.
- 순서가 있는 작업 목록을 반복적으로 실행 가능하다.
- YAML 형식으로 작성된다.
5. Module
- 자동화 기능 내장 패키지로 하나의 완전한 단위 기능을 제공한다.
6. API
- Ansible Python API를 사용하여 노드를 제어하고 Ansible을 확장하여 다양한 Python 이벤트에 응답하고, 다양한 플러그인을 작성할 수 있으며, 플러그를 연결 가능
7. Plugin
- Ansible의 핵심 기능을 보강하는 코드 조각
- Ansible은 플러그인 아키텍처를 사용하여 풍부하고 유연하며 확장 가능한 기능 세트를 활성화
Ansible 설치 및 구성
# vi /etc/hosts
172.16.0.200 anm
172.16.0.201 ann1
172.16.0.202 ann2
172.16.0.203 ann3
각 서버에서 /etc/hosts 파일에 위 내용을 추가한다.
# hostnamectl set-hostname anm (Master 서버에서 명령어 입력)
# hostnamectl set-hostname ann1 (Ann1 서버에서 명령어 입력)
# hostnamectl set-hostname ann2 (Ann2 서버에서 명령어 입력)
# hostnamectl set-hostname ann3 (Ann3 서버에서 명령어 입력)
각 서버에서 각자에게 맞는 hostname을 위의 명령어를 사용하여 설정한다.
# ping anm
# ping ann1
# ping ann2
# ping ann3
각 서버에 ping test를 진행하여 통신이 정상적인지 테스트한다.
# ssh keygen (입력값은 모두 입력하지 않고 엔터만 입력)
# ssh copy-id root@ann1
# ssh copy-id root@ann2
# ssh copy-id root@ann3
ssh keygen 명령어로 ssh 공개키와 개인키를 생성하고 ssh copy-id 명령어로 공개키를 각 서버들에게 전달해준다.
# ssh root@ann1
# ssh root@ann2
# ssh root@ann3
ssh 접속을 ann1~3까지 시도해봤을 때 비밀번호를 요구하지 않고 접속이 가능하면 설정이 완료된 것이다.
# yum -y install epel-release
# yum -y intsall ansible
anm 서버에 yum을 사용하여 ansible을 설치해준다.
'Ansible' 카테고리의 다른 글
Ansible Playbook 작성 시 꿀팁 (0) | 2021.07.12 |
---|---|
Ansible Playbook 정의 및 작성하기 (0) | 2021.07.12 |
Ansible 모듈 사용하기 (0) | 2021.07.12 |
Ansible의 구성 파일, 명령어 옵션 (0) | 2021.07.12 |
Ansible 인벤토리 생성 및 모듈 활용 (0) | 2021.07.11 |