Ansible 튜토리얼 - 반복 실행하기

개발자들은 귀찮음을 싫어한다

게으름이야 말로 개발자에게 있어서 중요한 성향 중 하나가 아닐까 싶다.

게으르다는 말은 일반적으로는 부정적인 의미로 쓰이지만, IT 업계에서 개발자가 게으르다는 말은 반복적인 작업을 싫어한다라는 의미를 갖기도 한다.

우리는 앞서 매번 노드 컨테이너를 구동할때 마다 service ssh restart를 입력해주어야 했다.

하지만 이러한 별거 아닌 명령어도 매번 입력하면 귀찮다.

지금은 노드의 수가 많지 않지만 프로덕션 환경에서 많은 수의 노드를 관리하는 경우라면 자동화는 필수이다.

이것은 내가 Devops를 배우는 이유이기도 하다.

컨테이너가 구동될 때 마다 service ssh restart를 입력하는 것은 귀찮다.

그래서 나는 Dockerfile을 사용해서 다음과 같이 이미지를 만들었다.

스크린샷 2020-04-15 오후 10 34 37

참고로 Dockerfile은 현재 로컬에 이미지가 존재하면 로컬의 이미지를 먼저 가져온다.

Dockerfile은 로컬에서 만들어둔 node라는 이름의 이미지를 베이스 이미지로 가져올 것이다.

ENTRYPOINT를 사용하여 구동 시에 service ssh restart를 구동하게 하고 이 이미지를 빌드하자.

스크린샷 2020-04-15 오후 10 36 31

마스터 컨테이너와 노드 컨테이너들을 구동하고 핑 명령어를 동작시켜보면 정상적으로 잘 동작하는 것을 확인할 수 있다.

사소한 부분이지만 이러한 부분까지 자동화를 해놓으면 매번 빌드,테스트 시에 조금 더 쉽게 작업할 수 있다.

그리고 이렇게 사소한 작업들을 자동화하여 시간을 아낌으로써 다른 업무를 수행할 수 있는 것이다.

Playbook 이란

사용자가 원하는 내용을 미리 정의해둔 파일을 의미한다.

Playbook의 사전적 의미는 각본,작전,계획이라는 뜻을 갖고 있다.

Ansible에서 Playbook은 어떤 상황에서 사용할까?

예를들어, 대량의 서버에 웹서비스를 설치하고 기동해야하는 상황이 있을 수 있다.

그 경우 시나리오는 다음과 같다.

  1. 웹서버용 서버(가상머신 or 물리서버)에 nginx를 설치

  2. 웹서버의 메인 페이지에 해당하는 파일을 전송

  3. 서비스 재시작

위의 시나리오를 Ansible Playbook에 명시함으로써 자동화할 수 있다.

Playbook의 주요한 특성은 멱등성이다.

멱등성이란 여러 번 연산을 하더라도 매번 같은 결과를 갖는 성질을 의미하는 수학적 용어이다.

그러면 직접 로컬에서 Playbook을 사용해보자.

테스트 해볼 시나리오는 간단한데, 우선은 로컬에 test라는 이름의 파일을 하나 만들고, 거기에 my name is harry라는 내용을 추가해볼 것이다.

스크린샷 2020-04-15 오후 11 32 52

Playbook은 위와 같이 .yml 파일로 구성된다.

harry.yml로 저장하고 ansible-playbook 명령어로 실행해보자.

스크린샷 2020-04-15 오후 11 34 20 스크린샷 2020-04-15 오후 11 35 29

친절하게도 Playbook은 테스트파일에 주석으로 Playbook으로 추가된 영역을 표시해주고 있다.

this is test file은 이미 test에 입력해뒀던 값이고 my name is harryPlaybook으로 추가된 내용인 것을 확인할 수 있다.

만약 한번 더 실행하면 어떻게 될까?

스크린샷 2020-04-15 오후 11 37 32

이전 실행결과와 같은 점은 ok=2이고 차이점은 changed=0이라는 점이다.

이전에 수행했던 명령과 현재 수행한 명령 사이에 바뀐 부분이 없기 때문에 Ansible은 이 명령을 다시 실행하지 않는다.

Ansible에서 멱등성을 지켰다는 것을 확인할 수 있다.

이로써 간단하게 Ansible with docker로 실습을 진행해보았다.

이제 앞으로 이것을 응용해서 다양한 시나리오들을 만들고 환경 설정 자동화를 진행할 수 있을 것이다.

Reference

인프런 조훈님 강의 - 처음부터 설치하며 배우는 Ansible



© 2022. by minkuk

Powered by minkuk