앤서블(Ansible) 개념
앤서블은 효율적인 서버 자동화 관리 도구이다.
기업에서 일일이 서버에 접속하지 않아도, 앤서블은 한 번의 엔터로 수많은 서버를 관리할 수 있다.
즉, 많은 서버에 동시 배포 및 관리가 가능하다.
클라이언트는 에이전트 설치가 별도로 필요하지 않아 편리하고, 리눅스, 유닉스, 윈도우 환경 어디든 적용할 수 있다.
이러한 앤서블은 클라이언트에 대해 SSH 접근만 필요하고, 효울적인 형상 관리 구조이기 때문에
데브옵스 환경에 최적화 된 도구이다.
기업 입장에서 생산성을 높이고 편리한 서비스 운영을 제공하는 매력정인 모듈이다.
Ansible이 가진 특징
1. Agentless
Chef/Pupeet과 같은 기존 IaC 솔루션들은 원격 서버에 에이전트를 설치할 필요가 있었다.
따라서 명령을 내려주는 Controller 서버와 원격 서버에 설치된 Agent들이 명령을 주고 받는
식으로 동작했다.
하지만 Ansible은 SSH 기반으로 원격 서버에 명령을 전달하기 때문에 에이전트가 필요 없다.
Agent가 필요 없다는 건, 각 원격 서버에 접속해서 agent를 설치할 필요가 없다는 것이고
agent 설치 단계를 생략하여 인프라 구축을 더 자동화에 가깝게 만든 것이다.
2. 접근 용이성
앤서블은 Controller 서버가 원격 서버들에게 무언가 명령을 전달하도록 동작한다.
물론 한 줄 한 줄 Controller 서버에서 명령어를 입력해도 되지만
이는 자동화의 의미와는 거리가 멀다.
진정한 의미의 자동화를 위해서는 명령어들을 모아서 한번에 처리할 수 있어야 한다.
쉘 스크립트 파일을 실행만 시키면 쉘 스크립트 파일 안 모든 명령이 실행되듯,
앤서블은 명령 모음집(playbook)을 YAML형식의 파일로 관리한다.
3. 멱등성 (idempotence)
멱등성이란 여러번 수행해도 같은 결과를 뱉는 성질을 말한다.
앤서블은 YAML로 관리되는 명령집을 여러번 수행하더라도 언제나 같은 결과가 나올 수 있도록
여러가지 관리를 한다.
Ansible 용어
- Controller 서버
(앤서블에서 사용되는 용어 아님)
(쉽게 이해하고자 정의한 용어)
Ansible을 설치하는 서버로, 명령을 여러 원격 서버에 전달하는 주체가 되는 서버이다. - 인벤토리(Inventory) (= Ansible hosts 라고도 함)
Controller 서버가 명령을 전달할 원격 서버들의 목록을 말한다.
/etc/ansible/hosts 파일에 이 원격 서버들 목록이 저장되어 있으며,
이 파일을 인벤토리라고 한다. - 플레이북(PlayBook)
원격 서버에 전달할 명령들을 모아둔 명령집이다.
스크립트 파일이라고 생각하면 이해하기 쉽다.
가운데 로고가 Controller 서버에 해당된다.(Ansible이 설치된…)
Ansible 설치와 초기 설정 (Amazon Linux)
Ansible 설치
AWS의 EC2 인스턴스에 Ansible을 설치하고
내 공유기에 사용되는 ESXi Ubuntu Server에 원격으로 테스트를 진행하겠다.
sudo amazon-linux-extras install ansible2 -y
EC2 인스턴스에 접속 후 해당 명령어로 ansible을 설치해준다.
💡 Ansible을 사용하러면 Python이 설치되어있어야 한다.python -v 로 설치 및 버전 확인 가능하다.
(Amazon Linux와 Ubuntu는 파이썬이 자동 내장되어있다.)
ansible —version으로 앤서블 버전을 확인한다.
SSH Key 생성
Ansible은 SSH 접속을 기반으로 원격 서버들에게 명령을 전달한다.
따라서 Controller 서버와 원격 서버간 SSH Key가 공유되어야 한다.
Controller 서버에서 SSH Key를 하나 생성한다.
$ ssh-keygen
이제 생성된 key를 원격 서버에 복사한다.
중간에 원격 서버의 계정 비밀번호를 입력해야한다.
$ ssh-copy-id [원격서버계정ID]@[원격서버IP]
정상적으로 ssh key가 복사되었다면,
Controller 서버에서 원격 서버로 ssh 접속을 시도할 때
비밀번호 입력 없이 바로 접속이 되어야 한다.
비밀번호 없이 ssh 접속이 되는것을 확인했다.
인벤토리 파일 작성
/etc/ansible/hosts 가 인벤토리 파일이라고 알고 있을 것이다.
이 파일을 열고 원격 서버 ip를 작성한다.
본인은 기초적인 ansible 테스트만 해볼거라 가장 기초 기능만 활용하겠다.
vi /etc/ansible/hosts
인벤토리 목록에 있는 서버들로 접속이 정상적으로 이루어지는지 확인한다.
나는 공유기 안에 여러 서버중 한 서버를 포트포워딩하여 진행하였기때문에, 외부IP에 포트를 넣고, 명령어에 -u 계정 을 함께 작성해었다.
모든 원격 서버 목록이 SUCCESS가 되었다.
Ansible 명령 (파일 복사 실습)
Ansible 명령 구조는 다음과 같다.
⚙ $ ansible [host 또는 host그룹] options
[host 또는 host그룹]에 ansible 명령을 전달할 원격 서버들을 설정한다.
일반적으로 ‘all;을 사용하면 인벤토리에 적혀있는 모든 원격 서버에 명령을 전달한다.
가장 많이 사용되는 옵션은 ‘-m’ 옵션으로,
ansible에서 실행할 모듈을 불러오는 옵션이다.
모듈마다 필요한 인자값들이 다르니 그때그때 확인해야한다.
이제 Controller 서버에 test.txt라는 파일을 생성하고
이 파일을 ansible을 통해 원격 서버에 복사해보겠다.
아래 명령으로 수행할 수 있다.
$ ansible all -m copy -a "src=./test.txt dest=./test.txt"
host 값에는 all을 넣어 인벤토리에 있는 모든 원격 서버에 명령을 전달하게끔 했고,
copy라는 모듈을 불러와서 파일 복사 명령을 수행하도록 했다.
‘-a’ 옵션은 copy 모듈에 필요한 인자값을 전달하는 옵션으로,
src file 경로와 dest file 경로를 전달해주었다.
상단의 Controller 서버에서 명령을 수행하여,
하단의 원격 서버에 test.txt 파일이 복사된것을 확인할 수 있다.
'IaC > Ansible_앤서블' 카테고리의 다른 글
[Ansible] When 조건문 트리구조 생성(includ_tasks) (0) | 2023.01.30 |
---|---|
[Ansible] When 조건문 (0) | 2023.01.25 |
[Ansible] 작업 제어 구현 - 오류처리 (0) | 2023.01.19 |
[Ansible] 앤서블(Ansible) Playbook 만들기 - update, shutdown, 파일 복사하기 (0) | 2023.01.13 |
[Ansible] 앤서블(Ansible) 호스트 명령 내리기 (0) | 2023.01.12 |