ansible 시작

앤서블 소개

앤서블은 컴퓨터의 구성을 관리하기 위한 도구 입니다. 여러 대의 서버를 한 곳에서 자동화로 관리할 수 있게 도와주는 역할을 합니다. 대표적으로 리눅스 서버에서 패키지를 업데이트 하거나 설치하는 것, 변경된 환경 설정 파일을 복사하는 것, 사용자와 그룹을 만드는 것 등이 있습니다. 한 두대의 서버라면 수동으로 관리할 수 있겠지만 서버가 늘어나기 시작하면 사람이 직접 하는 것에는 한계가 있을 수 밖에 없습니다. 게다가 이러한 작업들은 자주 하는게 아니라서 작업 절차를 기억하기 쉽지 않습니다. 이슈가 있으면 그때그때 조치하는 식으로 하는 경우가 많아서 이러한 정보들이 쉽게 소실될 수 있습니다. 나중에 동일한 애플리케이션을 다른 서버에서 실행하려고 할 때 이런 인프라에 가해진 변경들이 애플리케이션 실행에 문제를 일으킬 수 있습니다.

게다가 가상화가 발전하고 컨테이너 기술의 도입에 따라 하나의 노드(가상머신, 도커 컨테이너 등등)의 생명주기가 기존에 비해 훨씬 짧아졌습니다. 예전에는 서버 하나 설치하고 서비스가 돌아가기 시작하면 몇 년 동안 큰 관리 없이 사용하곤 했습니다. 반면에 가상화/컨테이너 환경에서는 노드를 만들고 없애는 비용이 거의 없기 때문에 필요할 때 만들고 쓰고 나면 지우는게 효율적입니다.

가상화/컨테이너 환경의 유연성을 활용하기 위해서는 앤서블과 같은 구성 관리 도구가 필수적입니다. 구성 관리 도구를 이용하면 서비스 실행을 위한 환경을 쉽게, 반복적으로 만들어줄 수 있습니다. 앤서블은 스스로를 IT 자동화 도구라고 말하고 있습니다. 구성 관리 이외에도 다양한 작업에 활용할 수 있기 때문이라 그런 것 같습니다.
개인적으로 운영하고 있는 홈랩에서도 앤서블이 많은 역할을 해주고 있습니다. SW 인프라에 관련이 있는 분이라면 꼭 배워둘만한 툴이라고 생각됩니다.

시작하기

연습 환경 선택

연습을 위한 용도로는 가상머신을 활용하는게 좋습니다. 클라우드 환경에서도 할 수 있지만 비용도 안 들고 제어가 용이하기 때문입니다. 하지만 윈도우에서는 한계가 있어 리눅스 환경에서 하는 것을 추천드립니다.

  • 윈도우 환경에서의 한계 : 윈도우에서 쓸 수 있는 hypervisor는 VirtualBox, Hyper-v가 있는데 양쪽 모두 잘 안되는 부분이 많이 있습니다. 대표적으로 파일 시스템의 퍼미션 관련된 부분이 있습니다.
    • 파일 권한 : 보통 Linux 가상 머신들을 세팅하게 되는데 윈도우와 리눅스의 파일 권한 체계가 다름. Linux의 퍼미션 관련한 문제가 발생함.
    • 파일 시스템 공유 : 윈도우에서는 리눅스에는 있는 link 개념이 없음. Node의 npm에서 이런 문제들이 자주 발생함.

이러한 이유로 Ubuntu Desktop + VirtualBox 를 연습용 환경으로 추천드립니다. 맥도 어차피 UNIX 베이스이므로 거의 동일하게 할 수 있을 것입니다.

필요 SW 설치

소프트웨어 설치는 Ubuntu Bionic(18) Desktop에서 진행했습니다.

  • VirtualBox : 다운로드 받고 설치하면 됩니다. 별다른 설정도 필요 없습니다. 리눅스에서는 KVM이라는 하이퍼바이저도 많이 사용하는 걸로 알고 있는데 사용해본 경험이 없어서 친숙한 버추얼박스로 진행했습니다.
  • Ansible : 리포지토리를 추가하고 apt 로 설치하면 됩니다.
    • $ sudo apt install software-properties-common
    • $ sudo apt-add-repository –yes –update ppa:ansible/ansible
    • $ sudo apt-get update && sudo apt-get install ansible
  • Vagrant : 커맨드로 쉽게 가상머신을 만들 수 있게 해줍니다.

간단한 테스트

  1. vagrant로 가상머신 만들기
    • $ vagrant init ubuntu/trusty64
    • $ vagrant up
  2. ssh 정보 확인 : 앤서블은 ssh 로 접속을 합니다. ssh 키 파일을 찾아 ansible 설정에 추가해줘야 합니다.
    • $ vagrant ssh-config
    • 위 명령어를 실행하면 출력에 IdentityFile 이 표시됩니다. 이 부분을 ansible inventory(host 파일)에 추가해줍니다.
  3. ansible 설정(ansible.cfg, hosts)
    • 현재 디렉토리에 ansible.cfg 파일을 만들어주고 아래 라인을 추가해줍니다. 로컬 가상환경 사용 때문에 발생하는 부분입니다. Virtualbox에서 네트워크를 별도로 만들어주면 설정이 필요 없는데 복잡해서 건너뛰겠습니다..
[defaults]
host_key_checking = False
  • hosts : 앤서블에서 사용하는 노드 정보 파일입니다. Linux에서 사용하는 hosts 파일과 유사한 점이 있습니다.
testvag ansible_host=127.0.0.1 ansible_port=2222 ansible_user=vagrant ansible_private_key_file=2번 과정에서 확인한 IdentityFile 부분을 복사해줍니다.
  1. 명령어 실행 : 기본 설정은 완료되었습니다. 간단한 명령어를 실행해 설정이 정상인지 확인해봅시다.
    $ ansible testvag -i hosts -m ping
    testvag | SUCCESS => {… 이런 메시지 출력되면 성공입니다.

앤서블의 장점

앤서블 말고도 다양한 구성 관리 도구들이 있습니다. 그 중 앤서블이 갖는 장점은 다음과 같습니다.

  • 에이전트리스(agentless) : 설정 대상 호스트에 별도로 클라이언트를 설치하지 않아도 됩니다. 앤서블의 모든 작업은 SSH를 통해 이루어지기 때문입니다. SSH 접속이 가능하고 python만 설치되어 있으면 됩니다.
  • 다양한 모듈 : 앤서블에는 아주 많은 모듈들이 개발되어 있고 계속 추가되고 있습니다. 각 모듈은 노드 관리에 필요한 다양한 기능을 제공합니다. 대표적으로 command 모듈은 쉘에서 명령어를 실행할 수 있게 해줍니다. apt 모듈은 apt 패키지 관리자로 소프트웨어를 설치하고 업데이트할 수 있게 해줍니다. file 모듈은 파일과 디렉토리를 생성하는 작업을 도와줍니다.
  • 레퍼런스 많음 : 공식 문서도 상당히 잘 정리되어 있고 사용자가 많아서 그런지 Stackoverflow에 QnA도 구성관리 툴 중 가장 많이 있습니다.

포스팅 계획

  • (예정)Inventory : 앤서블에게 호스트 정보를 알려주기 위한 인벤토리 파일 작성에 대해 다룰 예정입니다.
  • (예정)Playbook : 앤서블의 중심이라고 할 수 있는 playbook 작성 방법에 대해 다룰 예정입니다.
  • (예정)Case : 사용 사례를 살펴볼 예정입니다.

참고

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다