본문 바로가기
Work/Conference

HashiCorp 밋업 - 당근마켓에서 Packer와 Vagrant 사용기

by ★용호★ 2018. 8. 15.

발표자

  • nackot
  • 당근마켓

Packer

  • 커스텀 이미지 빌드 도구
    • Base 이미지를 기반으로 타겟 어플리케이션에 필요한 구성을 프로비저닝 완료한 이미지 생성
  • 기존에는 만들어진 이미지를 실행시키고 수정 후 다시 이미지로 생성해서 사용하는 것이 혁신적이었음
    • 이미지 빌드 과정을 재현할 수 없기 때문에 자동화가 어려움
    • 이미지 빌드/삭제를 손수 해야함
    • 이미지가 계속 쌓이기만 하고 지울 수 없는 상태가 됨
  • 패커의 핵심 도구
    • 빌더 / 프로비저너의 조합으로 구성됨
      • 빌더 : 특정 플랫폼의 이미지를 만드는 플러그인
      • 프로비저너 : 프로비저닝을 수행하는 플러그인
        • 실제 Packer가 하는 것은 아니고 쉘 스크립트나, 쉐프, 앤서블과 같은 도구로 프로비저닝
    • AWS뿐만아니라 docker, virtual box 이미지 빌드까지 일관된 방식(빌더와 프로비저너의 조합)으로 이미지 생성
  • 이미지 빌드 특징
    • 프로비저너와 함께 코드로 관리
    • 변경이 있을 때마다 매번 이미지 새로 빌드
    • 변경사항이 모두 저장되기 때문에 재현 가능
    • 코드로 관리되므로 자동화 가능
  • 빌드 과정
    • 인스턴스 및 임시 리소스 생성
  • 단점
    • 모든 과정이 한방에 이루어짐
      • 빌드 시간이 길어짐
      • 빌드 과정에 개입이 불가능
      • 문제가 생기면 롤백하고 처음부터 다시 진행

Vagrant

  • 가상머신의 특정 상태를 만들어주는 도구
  • 구성요소
    • 프로바이더와 프로비저너로 구성
      • 프로바이더 : 결과물을 VM 이미지로 만들어줌
      • 프로비저너는 Packer와 의미가 동일
  • Packer는 코드 업데이트 시 이미지를 제거하고 다시 만들지만 Vagrant는 변경된 부분만 프로비저닝
  • 가상환경은 Packer를 사용하는 환경과 다를 수 있음
    • 이를 위해 vagrant-aws 사용
    • Vagrant AWS 프로바이더
    • VM 대신 AWS 인스턴스가 실행 됨
    • 마지막 커밋이 2016년이라는 문제점
  • Packer의 경우 키 파일까지 생성해서 이미지에 넣어주지만 Vagrant는 환경 변수로 등록해서 사용
  • 라이프사이클 관리가 필요
    • Destroy 하지 안흐면 인스턴스가 AWS상에 그대로 남아잇음
    • 자동적으로 종료하도록 구성하는 것이 좋음
  • Vagrant는 업데이트된 부분만 프로비저닝 하기 때문에 이 과정에서 Packer와 결과물이 달라질 소지가 있음
    • 업데이트 시 제거 후 잘 동작하는지 테스트 필요

당근마켓에서 사용하는 방법

  • 패커를 통해 이미지 빌드 자동화 하고 Vagrant로 동작 테스트
  • 프로덕션에서 잘 사용하고 있음


댓글