본문 바로가기
DevOps/IaC 자동화

[Ansible] 설치 및 실습 환경 구축, Ansible이란? 왜 사용하는 것인가?

by 🌻♚ 2020. 12. 6.

Ansible은 무엇이고 왜 사용하는 것인가?

  Ansible에 대한 검색을 하셨다는 것은 자동화나 DevOps를 이미 Researching 했을 것이라고 생각됩니다. 주변에서 Ansible, Puppet, Chef 혹은 Salt와 같은 배포 자동화 관리 툴을 들어보셨을텐데 도대체 어떤 기능을 할 수 있고 왜 사용하는지에 대해서 알아보도록 합시다.

 

 시스템을 이루기 위해 여러 서비스가 모여 하나의 시스템으로 운영이 됩니다. 예를 들어 배달앱 시스템을 구성하는데 필요한 서비스들을 나열해보면... 고객 및 배달원들이 앱을 사용하기 위한 로그인 서비스, 고객들의 주문 서비스, 배달원들이 배달하기 위해 사용되는 서비스, 주문 결제 서비스, DB 서비스 등... 여러개의 서비스가 운영됩니다. 그런데 각각 서비스들은 여러대의 서버에서 따로 운영이 되는 경우가 대부분 입니다. 특히 규모가 커질 수록 관리하는 서버의 수도 많아지고 관리가 점점 힘들어집니다.

 

 이때 매달 배달 시스템을 패치를 진행하고 패치할 때는 테스트를 꼭 진행하고 배포를 한다고 가정해보겠습니다. 서버가 1대면 한번만 배포과정을 실행해도 되겠지만.... 만약 패치하는 서버가 100대.... 1000대.... 이렇다면 모든 서버에 붙어서 반복적인 작업을 해야 됩니다. 만약 이런 반복적인 작업을 대신 해주는 툴이 있다면 어떨까요? 시간적 비용도 많이 줄일 수 있고, Human Error도 줄일 수 있지 않을까요?

 

 Ansible은 위와 같이 서버에 반복적인 작업을 자동화할 수 있는 배포 자동화 관리 툴 중 하나로서 DevOps 업무에 필요하고 업무적 효율을 증진 시킬 수 있는 툴입니다.

 

Puppet, Chef, Salt와 비교되어 Ansible을 사용하는 이유

Ansible 말고도 Puppet, Chef, Salt와 같이 배포 자동화 관리 툴이 있습니다. 게다가 이 4개 툴 중 Ansible이 가장 늦게 만들어 졌습니다. 그런데 왜 Ansible을 사용할까요?

 

 가장 큰 차이는 agent 설치가 필요 없다는 것 입니다. 다른 툴에서는 agent 설치 후, agent가 master에게 무엇을 해야할지 물어보는 형식으로 사용되는데... Ansible에서는 관리되는 Host에 어떠한 Process를 작동 시킬 필요 없이 SSH 통신을 통해 master가 직접 관리하는 Host에 명령을 전달합니다.

 

 이러한 이유로 기술적으로도 복잡도가 낮아지는 장점을 갖고 많은 지지를 받고 있습니다.

 

 

실습 환경 구성

Virtual box를 이용해서 master와 관리할 node 서버들의 환경 구성을 하겠습니다.

가상 머신 : Virtual Box : https://www.virtualbox.org/wiki/Downloads
OS : CentOS 7 Minimal : http://mirror.kakao.com/centos/7.9.2009/isos/x86_64/
master : Ansible 설치
node1, node2 : 관리 대상 서비
실습은 Mac OS에서 진행하지만... 가상머신을 사용하기 때문에 윈도우에서 진행해도 차이는 없습니다.

 

Master 서버 환경 구성

Virtual Box 설치 및 이미지 생성 준비

Virtual Box 실행 > 새로 만들기

운영체제 종류와 이름을 선택

 

각각 환경에 맞게 메모리 크기 설정.

 

새 가상 하드 디스크를 만들겠습니다.

 

디스크 이미지로 생성

 

동적 할당으로 지정

 

동정할당으로 지정하여 우선 최대치로 잡겠습니다.

이미지를 실행하기 전에 몇가지 설정하고 진행하겠습니다.

 

이미지 설정 > 네트워크

외부 통신과 node끼리 통신을 위해 네트워크는 브릿지를 사용하겠습니다.

 

이미지 선택 > 저장소

저장소에 드라이브가 비어있다고 나와있을겁니다. 다운받은 CentOS 이미지를 선택해주고 이미지를 실행해줍니다.

 

 

이미지 실행 CentOS 설치

한글 지원도 되지만... trouble shooting 하거나 검색할 때, 영어로 검색하는 것이 더 많은 자료를 찾을 수 있습니다.

 

Installation Destination 설정을 클릭하여 Done 버튼만 클릭하고 나옵니다.

 

 

Network 설정

Hostname을 수정하고 network를 실행합니다. 네트워크 정보는 나중에 변경 가능합니다. 각각 네트워크 상황에 따라 IP 정보는 다를 수 있습니다.

여기까지 설정을 완료하고 설치를 마무리하고 재부팅합니다.

 

Network 수동 설정

네트워트 수동 설정은 머신이 재부팅될 때 환경이 변경될 수 있어서 고정 시키기 위해 수동 설정을 합니다.

네트워크 설정하는데... 잘안되고... 어려움을 겪고 있다면 아래와 같은 편법을 사용하면 쉽게 외부와 내부 통신 모두 가능합니다.

 

# yum install -y net-tools
# ifconfig

네트워크 정보를 확인하기 위해 net-tools를 설치해줍니다.

 

# ip route
# ifconfig
# cat /etc/resolv.conf

자동으로 설정된 gateway, ip subnet mask, dns server정보를 확인하고 수동으로 설정하여 고정시키는 방법입니다.

 

# nmtui

네트워크를 수정합니다.

 

Edit a connection

미리 확인해둔 정보를 입력하고 저장합니다.

 

# systemctl restart network
# ifconfig

변경한 네트워크를 반영하기 위해 network 서비스를 재실행하고 확인해줍니다.

 

 

Network 확인

# ping google.com

외부 통신이 가능한지 확인합니다.

문제없이 통신이 되면 네트워크 설정 완료입니다.

 

# shutdown now

다음은 Node 서버를 구성하기 위해 이미지를 종료합니다.

 

 

Node 환경구성

master 이미지 우클릭 > 복제

머신 이름을  변경하고

MAC 주소 정책은 '모든 네트워크 어댑터의 새 MAC 주소 생성'으로 변경 하고 계속해서 완전한 복제로 진행

 

새로 생성한 Node 실행 > 네트워크 수정

# hostnamectl set-hostname node1.test
# hostname

hostname을 변경합니다.

 

master의 네트워크 수정하는 방법과 같이 수정합니다.

 

 

node를 2개 만들어 줄 예정이기 때문에 이름과 네트워크 정보만 변경해서 하나의 node를 더 만들어 줍니다.

 

 

설정 확인

앞으로 실습을 진행할 때, 3개의 서버를 모드 실행한 상태에서 하게됩니다.

그럼 설치한 3개의 서버를 모드 실행하고 master에서 node로 통신이 가능한지 확인하고 ansible 설치를 진행하겠습니다.

 

# vi /etc/hosts

#아래 내용을 추가합니다.
220.86.186.1 node1.test
222.111.61.161 node2.test

hostname으로 통신하기 위해 host를 추가해줬습니다.

각 host에 맞는 ip로 저정해줍니다.

 

# ping -c 3 node1.test
# ping -c 3 node2.test

서로 통신이 된가면 환경 설정은 끝입니다.

이후 패키지 설치나 관리하는 node에서도 외부 통신을 할 수 있도록... google.com에 ping이 가는지 각각 확인해주면 됩니다.

 

Ansible 설치

Ansible을 설치하는 서버는 당연! Master 서버에 해줍니다.

# root@master # yum install -y epel-release ##Ansible 설치 패키지를 받을 수 있는 패키지 설치
# root@master # yum install -y ansible

설치 끝입니다.

 

Ansible 실행 확인

# root@master # vi /etc/ansible/hosts

############# 아래 내용 추가
[nodes]
node1.test
node2.test

/etc/ansible/hosts 파일에 관리되는 Host의 IP 정보를 저장합니다.

 

 

# ansible all -m ping -k

각각 Host에 ping을 보내는 명령을 보내면 우선 에러가 발생한다. 이는 SSH 연결이 처음이어서 인증을 위한 과정입니다.

만약 연결을 계속 진행할 요청이 안나오면 직접 ssh 연결을 한번씩 해주고 명령을 실행하면 문제가 해결됩니다.

 

# ssh root@node1.test
# ssh root@node2.test

 

# ansible all -m ping -k

다시 실행하면 이상없이 명령이 실행된 것을 확인할 수 있습니다.

 

 

태그

댓글0