2015년 12월 18일 금요일

Terraform과 Consul을 이용한 DevOps


오늘은 InfoQ에 올라온 기사를 번역해 소개해 보고자 한다.

Automating the Modern Datacenter with Terraform and Consul


이 기사에는 DevOps와 관련해서 중요한 개념들을 알기 쉽게 설명하고 있다. 영어에 어느정도 자신이 있고Terraform과  Consul에 대해서 좀 더 깊이있게 알아보고자 한다면 아래 링크를 통해 Hashimoto의 강연을 직접 보시길 권한다.

Mitchell Hashimoto (HashiCorp) - Automating the Modern Datacenter, Development to Production


CraftConf 2015 에서 Mitchell Hashimoto 는 대중적으로 사용되고 있는 프로비저닝 및 구성 도구에 대해 '현재의 데이터 센터'를 관리하기에는 적합하지 않은 것이라고 평했다. 오늘날의 데이터 센터에는 민첩하고 탄력성이 요구된다. 그리고 컴퓨팅리소스나 DNS, CDN 등 응용 프로그램의 배포에 필요한 '서비스'는 다양한 공급 업체가 제공하는 이기종 플랫폼이 조합될 가능성이 있다. 이러한 과제를 안고 있는 오늘날의 비즈니스 환경에서 자동화를 제공하는 방법으로 그는 Hashicorp의 TerraformConsul 두 가지 도구를 소개했다.

Hashimoto는 Hashicorp 의 창업자이며, VagrantPacker 의 프로젝트 리더이기도하다. 그의 강연은 데이터 센터 기술의 역사를 설명하는 것으로부터 시작되었다. 기업의 관점에서 데이터 센터의 이용은 하나의 물리적 서버에서 발전하여 여러 베어 메탈 서버로 옮겨 결국 여러 가상화 인스턴스에 도달하고있다. 그리고 이 진화의 최신 트렌드가 바로 컨테이너화 의 움직임이다. 이러한 진화에 따라 프로비저닝 및 배포, 유지 보수 등의 작업은 복잡해지고 자동화에 요구는 급박한 과제가되었다. 초기에 이러한 요구 사항을 충족하기 위해 나타난 것이 CFEngineChef , Puppet , Ansible 과 같은 툴들이다.

공용 및 사설 클라우드 기술의 보급으로 우리는 지금 새로운 도전을 안고 '모던 데이터 센터'를 운영하고 계속하고 있다고 Hashimoto 는 설명했다. 일단 핵심 인프라 스택에 통합 된 DNS와 CDN 또는 데이터베이스와 같은 기술이 현재는 서버 기반 제품으로 전환하고있다. 또한 기업 측에서도 서로 다른 벤더를 사용하여 인프라 플랫폼을 개발하는 것이 많아졌다. 이러한 두 가지 변화에 따라 기존의 프로비저닝은 새로운 복잡한 레이어를 추가하고있다. 이러한 요구에 대해 앞에서 언급한 툴들로는 요구를 충족시킬수 없다는 것이 Hashimoto 의 주장이다.

설치하고자하는 응용 프로그램의 하나 하나에 Chef 나 Puppet의 자동화를 제공 할 수는 있을 것입니다. 그렇지만 만약 필요한 서비스 모든 설정을 자동화하는 방법이 없다고한다면 무슨 일이 벌어질까요? 즉, 응용 프로그램이 동작하지 않는 상황이 발생하는 겁니다 ...

데이터 센터에서 벌어지는 활동의 중심은 서버와 데이터 저장소,로드 밸런서 등 자원의 취득(acquisition), 제공(provision), 업데이트(update), 폐기(destruction) 등의 작업으로 구성되는 경우가 많다. 일단 이러한 과정은 느리고, 그 결과 또한 어느쪽인가 하면 정적이라 할 수 있었지만, 현재는 이러한 활동이 점차 빨라지고 출력도 탄력적으로 확장 가능하게 되는 추세이다. 이러한 예는 컴퓨팅 리소스의 프로비저닝이라 볼 수 있을것이다. 기존의 데이터 센터라면 서버를 구입하고 물리적 랙에 담아 프로비저닝 한 후 고정적인 단위로 배치하는 것이었다. 그러나 현대적 데이터 센터에서 컴퓨팅 인스턴스는 API 호출을 통해 획득 도고 기동시에 구성이 지정된다. 인스턴스를 그 자리에서 수평적으로 확장하거나 혹은 수평적 확장을 위해 인스턴스를 추가하는 것도 매우 간단하다.

오늘날의 데이터 센터에서 제공하는 작업 속도와 유연성은 수작업으로는 불가능한 것이라고 Hashimoto는 말하고 있다. 즉, 자동화는 필수인 것이다. 현대 데이터 센터를 자동화하기위한 요건으로서 그는 다음과 같은 요소를 꼽았다.

  • 제로상태로부터 단 하나의 명령으로 모든 자원의 배치가 가능
  • 분산 시스템에 의한 고장내성
  • 자동 확장 및 자동 복구
  • 체계화 된 지식에 의한 팀워크 향상

Hashimoto는 여러 데이터 센터 나 서로 다른 벤더에 걸쳐저 있는 인프라를 효율적으로 구축, 조합, 출시한다는 요구 사항을 충족 할 수있는 도구로 Hashicorp의 Terraform 을 소개했다. 예를 들어, Amazon Web Service (AWS)의 EC2 컴퓨팅 인스턴스와 DigitalOceanDroplet 컴퓨팅 인스턴스를 구성하고, Dyn DNS 서비스를 통해 그들에게 접근을 설정하는 작업이 Terraform에서 가능하다. 또한 Terraform는 인간 친화적 인 텍스트 형식으로 인프라의 선언으로 정의 할 수있다. 특정한  저수준의 설정 작업을 수행하는 Terraform 모듈을 생성하는 것도 가능하다.



Terraform은 'terraform apply'명령 하나로 시작한다. 'terraform plan'명령으로 apply가 할 활동을 미리 볼 수도 있다. plan 명령을 실행하면 현재의 인프라 상태에서 요구 된 선언적 정의에 대해 실행될 변경 내용이 정렬 된 목록으로 출력된다. 변경이 즉시 실행 가능한 것인가, 파괴적인 성격의 것인가 (서버 재부팅처럼)도 그 안에서 나타나고있다. 어떠한 조작을 수행한다고 가정했을때, 이러한 정보가 메인터넌스 윈도우에 표시됨으로서 적절한 판단을 내리는데 도움을 준다.

plan 명령의 출력을 파일에 저장하여 후이있을 인프라의 변경에 고정적으로 적용시키는것도 가능하다. 인프라의 변화를 미리 볼 수있는 것은 Terraform의 가장 중요한 기능 중 하나 다라고 Hashimoto 는 한다. 인프라 코드의 변경과 그 결과로 인한 프로비저닝 계획의 조합은 개발워크플로(역자주:아마도 Git-Flow와 같은 형태의)에 대해 Pull-Request에 대한 변경사항을 차등으로 검토하고 변경을 수용할 것인지 등에 사용할 수있다.

Terraform 등장 이전에는, 운영팀은 프로덕션 시스템의 스택 관리에 대해 믿을 수 없을 정도로 과중한 책음을 지고 있었다 라고 Hashimoto는 말한다. 서비스중인 여러종류의 클라우드 플랫폼을 깊이 이해 한 후에 인프라 상태를 확인하고 상태 전환 결과를 계산해야했던 것이다. 오래전 많은 개발자가 어셈블리 언어 에서 제 3 세대 프로그래밍 언어 로 전환한 사례와 같이, 운용 담당자와 DevOps기술자들 가운데에는 '스택을 위쪽으로 이동'시키고 Terraform 같은 도구를 이용해 목표를 달성하기를 원하고 있을지도 모른다고 그는 강연에서 말하고 있다.
코어 운영자 및 애플리케이션 운영자의 차이점은 여기에 있다고 나는 생각합니다. 어떤 기업도 고가용성 데이터베이스 클러스터를 구축하는 방법을 이해하는 운영자와 이해하지 못했지만, 고 가용성 데이터베이스 클러스터를 원하는 운영자가있는 것입니다. 그들을 교육하고 이해시키는것은 가능하며, (Terraform처럼) 추상화하여 제공하는것도 가능합니다.
프레젠테이션의 2부에서는 Hashicorp의 Consul 도구가 소개되었다. 서비스 검색 및 구성 오케스트레이션 등의 기능을 데이터 센터에 걸쳐 가용성이 높은 방식으로 제공하는 도구이다. 기업 인프라의 '서비스X는 어디에 있는가', '서비스Y의 상태는 어떤가', '현재 실행중인 것은 무엇인가', '사비스Z의 구성은 어떻게되어 있는지', 또는 '나의 플랫폼에서 작업 A를 실행하는 사람이 있는지'등의 질문에 Consul를 사용하여 대답 할 수있다고 Hashimoto 는 말한다.



Consul은 DNS 또는 HTTP API를 통해 복수의 데이터 센터에서 복합적으로 동작하는 서비스 감지가 가능한 서비스 검색기능을 제공한다. 쉘 스크립트로 구현 된 상태 점검 기능은 자신의 서비스 검증 프로토콜을 구현할 수있다. 또한 고 가용성의 kwy-value 타입의 데이터 저장소도 제공하고 있어, 일관성을 갖춘 정보를 배포 할 수 있는 능력을 갖추고있다. 이것을 이용하면, 구성 관리 도구를 실행할 필요 없이 구성 매개 변수의 '튜닝'을 할 수있다. 조정 가능한 예로는 서비스 위치 지정 및 시스템 유지 보수 모드 공지 및, 서비스의 QoS 파라미터 설정 등이있다.

Cosul의 또 다른 기능으로서 그는 오케스트레이션과 관련된 기능의 제공뿐만 아니라, UDP를 통해 데이터 센터 전체에 비동기로 브로드 캐스트를 하는 'event'와 TCP를 사용하여 특정 컴퓨터에서 동시에 작업을 수행하는 ' exec ', 그리고 event와 exec의 장기적인 폴링 처리를 가능하게 한 'watch '를 언급했다.

Mitchell Hashimoto의 CraftConf 강연 ' Automating the Modern Datacenter, Development to Production '에 대한 영상 등 더 자세한 자료는 컨퍼런스의 Web 사이트에서 확인 가능하다. Terraform v0.5Terraform.io 웹 사이트에서 Consul v5.0은 Consul.io 웹 사이트에서 각각 다운로드 할 수있다.