제어 노드(Control node)
앤서블을 실행하는 노드입니다. 제어 노드에서 관리 노드들을 관리합니다.
매니지드 노드(Managed node)
앤서블로 관리하는 서버를 매니지드 노드라고 합니다. 매니지드 노드에는 앤서블이 설치 되지 않습니다.
인벤토리(Inventory)
매니지드 노드 목록을 인벤토리라고 합니다. 인벤토리 파일은 호스트 파일이라고도 합니다. 인벤토리는 각 매니지드 노드에 대한 IP 주소, 호스트 정보, 변수와 같은 정보를 지정할 수 있습니다.
모듈(Module)
앤서블이 실행하는 코드 단위입니다. 각 모듈은 데이터베이스 처리, 사용자 관리, 네트워크 장치 관리 등 다양한 용도로 사용됩니다. 단일 모듈을 호출하거나 플레이북에서 여러 모듈을 호출 할 수도 있습니다.
태스크(Task)
앤서블의 작업 단위입니다. 애드훅(ad-hoc)명령을 사용하여 단일 작업을 한 번 실행할 수 있습니다.
플레이북 (Playbook)
순서가 지정된 태스크 목록이 저장되어 지정된 작업을 해당 순서로 반복적으로 실행할 수 있습니다. 플레이 북에는 변수와 작업이 포함될 수 있습니다. 플레이 북은 YAML로 작성됩니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
우선 제어 노드를 Cloud9 환경에서 만들어주었습니다. (아마존리눅스2)
EC2 생성으로 동일한 VPC와 서브넷으로 매니지드 노드를 3개 생성해주었습니다.
컨트롤 노드로 접속하여 엔시블을 설치하고 버전 정보를 확인합니다.
sudo yum update
sudo yum install ansible
ansible --version
etc/ansible/ 폴더로 이동해 hosts 파일을 수정해 줍니다.
cd /etc/ansible/
sudo vim hosts
worker 그룹의 모든 호스트에 대해
ansible_user=ec2=user
ansible_ssh_private_key_file 변수를 설정 하였습니다.
SSH 접속을 위해 해당하는 .Pem 파일이 있는 경로를 잡아주었습니다.
pem파일에 부여한 권한 chmod 600
ansible_host=프라이빗IP주소
해당 설정으로 호스트에 접속하기 위해 프라이빗 IP 주소로 연결을 시도합니다.
Ansible이 사용하는 인벤토리 파일을 지정하기 위해 ansible.cfg를 수정해 줍니다
인벤토리에서 주석을 제거하고 /etc/ansible/hosts 파일을 인벤토리로 사용하게 설정합니다.
명령어를 통해 worker1,2,3이 연결 된걸 확인 할 수 있습니다.
ansible all -m ping
ansible 명령어를 사용하여 worker 그룹에 속한 모든 호스트에 대해 command 모듈을 실행해 각 호스트에서 uptime 명령어를 실행하고 정보를 표시합니다.
ansible 명령어
/etc/ansible/hosts 파일에 정의했던 호스트 그룹 이름 (worker)
-m command: 사용할 Ansible 모듈을 지정 (-m 모듈 커맨드 )
-a "uptime": 모듈에 전달되는 명령어 및 매개변수 (uptime 명령어를 실행)
예시로 worker 그룹에 속한 호스트들에게 yum update -y 명령어를 실행시켰습니다.
ansible () -m setup 명령은 Ansible을 사용하여 ()의 정보 모든 사양등을 수집하여 출력합니다. 이 정보에는 CPU, 메모리, 네트워크 설정, OS 버전 등이 포함될 수 있습니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Playbook으로 아파치 웹 서버를 이용하여 worker1,2,3에 동시에 간단한 문구가 나오게 index.html을 이용하여 홈페이지를 띄워보겠습니다.
worker 그룹의 ip 주소를 퍼블릭 ip로 변경하였습니다.
sudo vim hosts
play book으로 실행 할 yml 파일을 생성해 줍니다.
sudo vim web.yml
yml에서 파일 경로 src: files/index.html로 잡아주었기 때문에
(src: 복사할 파일 위치 지정) 현재 작업중 디렉토리 files 폴더의 index.html 복사, 전송)
명령어를 통해 files 디렉토리를 생성하였습니다.
mkdir files
files 디렉토리로 이동후
cd files/
KYS ansible Palybook 이라는 글자가 나오는 간단한 index.html을 만들어 주었습니다.
이후 playbook을 통해 worker 1,2,3에 web.yml 을실행합니다.
명령에 -i /etc/ansible/hosts를 포함하여 특정 inventory 파일을 지정하고 있습니다.(Ansible이 관리할 호스트들의 목록을 포함하고 있습니다.)
ansible-playbook -i /etc/ansible/hosts /etc/ansible/web.yml
워커 노드들의 ip로 접속해 보면 정상적으로 실행 된 것을 확인 할 수 있습니다.