Skip to content
Joshua Jung edited this page Jun 2, 2014 · 3 revisions

소개

자동화(Automation)

클라우드는 컴퓨터 자원과 네트워크 자원, 그리고 소프트웨어를 통합한다. 따라서 자동화가 중요하다. 이 문서는 자동화를 다룬다.

클라우드와 자동화

클라우드는 연산 자원을 추상화했다. 클라우드 서비스 제공자는 사용자에게 물리적인 하드웨어와 네트워크를 제공하는 대신에 추상화된 소프트웨어(VM)을 제공한다.

이전에 사용자는 물리적인 하드웨어에 대한 직접적인 접근 권한을 가지고 있었으며, 기본적으로 운영체제의 모든 설정을 도맡아서 관리했다. 이른바 호스팅 서비스다. 호스팅 측은 시스템과 네트워크 인프라가 갖추어지면, (방문하기 귀찮아하는 사용자를 위해서) 최소한의 운영체제의 설치를 도와주거나 문제가 생겼을 때 시스템을 재시작 해주는 게 전부였다.

하지만 클라우드가 도입되면서, 하드웨어와 네트워크가 사용자로부터 분리되었다. 이제 사용자는 하드웨어와 네트워크를 관리할 필요가 없어졌다. 서비스 제공자가 모든 하드웨어와 네트워크의 설정을 담당해야 하는 상황에 이르렀다.

수백/수천 대의 하드웨어와 네트워크를 발로 뛰어다니면서 관리할 수는 없는 법, 운영체제 설치와 네트워크 설정을 자동화해야 할 필요성이 생겨났다. 물론 클라우드 이전에도 자동화 전략을 세우긴 했지만 공개된 형태로 이루어지진 않았다. 지금은 공개된 영역에서 클라우드 시스템을 자동화하기 위한 논의가 이루어지고 있다.

빅데이터와 클라우드

클라우드와 빅데이터는 함께 발전한다. 가장 밑에 IaaS가 있을 것이고 이 위에서 SaaSPaaS가 올라갈 것이고, 이위에 빅데이터 솔루션과 데이터들이 올라갈 것이다. 클라우드 위에서 작동하는 빅데이터는 서비스의 오버헤드를 제거하고 설정과 제어를 중앙에서 관리할 수 있게 해서 빠르게 서비스를 전개하도록 도와줄 것이다.

chef

자동화 툴이라는 것은 개발자의 개인의 의지와 역량에 종속되고, 많은 시간을 들여서 제대로 작동하는 자동화툴을 유지하는 것도 상당한 일이였기 때문에, 그 상황에서만 쓸 수 있는 경우가 대부분이었다.

다행히 지금은 표준화되고, 잘 유지/보수 되는 툴들이 있다. chefpuppet, cfengine, Bcfg2 등이 대표적인 자동화 툴들이다. 그 중 pubbpet와 chef가 자동화 분야를 이끄는 것으로 보인다. 여기서는 chef를 다룬다.

chef는 infrastructure를 자동화 하기 위한 프레임워크다. 전체 시스템 형상을 코드화 하고, 코드를 자동으로 수행함으로써 손쉽게 시스템을 운영, 유지, 확장, 복제할 수 있도록 도와준다.

chef가 하는 일들

chef는 컴퓨팅 리소스를 __provisioning__하고, __설정을 관리__하고 이 것들을 __통합__하는 일을 한다.

Provisioning

Chef는 RESTfule API 혹은 knifeCLI를 이용해서, 시스템을 프로비저닝할 수 있다. Baremetal 호스트의 경우 Chef는 리눅스의 kickstart나 solaris의 jumpstart 혹은 AIX의 NIM과 같은 일을 한다. 가상화 환경의 경우 chef는 libvirt와 XEN, KVM, VMware API를 이용해서 프로비저닝할 수 있다.

클라우드의 경우 chef는 AWS나 vCloud의 cloud API를 직접 호출하는 방식으로 프로비저닝 한다. 또한 Java의 jclouds나 ruby의 fog등의 클라우드 소프트웨어와도 통합할 수 있다.

설정 관리

chef는 설정 관리를 위한 모든 기능을 제공한다. Role과 recipes에는 서버가 어떻게 설정돼야 하는지에 대한 설정 정보와 설정 정보의 수행을 위한 코드를 가지고 있다. 예컨데 mysql, apache, hadoop을 위한 설정을 관리할 수 있다. 단지 설정만을 관리할 뿐만 아니라, 패키지를 검사해서 설치하고, 실행하고, 중단할 수도 있다.

시스템 통합

Chef의 최종 목적은 인프라를 자동으로 구성하고 이를 통합하는 것이다. Chef의 가장 강력한 점 중에 하나는 설정 로직으로 부터 설정 데이터가 분리돼 있다는 점이다. 설정 데이터는 NoSQL 형태로 바로 동적으로 색인되어서 저장되며, search API를 이용해서 인프라 정보를 즉시 확인해서 설정로직에 적용할 수 있다. 다른 말로 Chef recipes는 데이터를 기반으로 시스템과 서버들을 통합할 수 있다. 예를 들어 웹서버는 search api를 이용해서 database와 memcache 서버들을 찾을 수 있으며, 자동으로 웹 서버 설정에 반영 이들을 서로 묶을 수 있다.

chef 구조

chef는 server & client 모델을 따르는 프레임워크로 chef server, workstations, node로 구성된다.

  1. Chef Server:

Chef Server는 인프라 (설정)정보 코드를 저장하기 위한 Chef 코드 저장소를 가지고 있다. 모든 chef 코드는 chef server에 집중해서 관리한다. chef server는 REST API를 이용해서 접근할 수 있다. 추가적으로 WebUI를 이용해서 인프라스트럭쳐를 관리할 수도 있다. 데이터는 couchdb로 관리를 하며, solr을 이용해서 검색 서비스를 제공한다.

  1. Node:

인프라를 구성하는 단위 시스템으로 chef client가 설치된다. Bearmetal 혹은 VM 환경일 수 있다. 노드는 chef-client 프로그램을 실행해서 chef server로 부터 run list를 가져와서 설정을 변경하고 패키지를 설치하고 애플리케이션을 실행한다. 노드는 클라이언트라고 부르기도 한다.

  1. Workstation :

Chef server는 (자동화를 위한)데이터와 로직을 가지고 있다. 데이터와 로직은 knife를 이용해서 개발을 하는데, knife가 설치된 서버를 workstation이라고 한다. 즉 chef 개발 노드라고 할 수 있다. chef 개발자는 workstation에 설치된 knife를 이용해서 데이터와 코드를 개발하고 이 정보를 chef server에 upload 한다.

Chef 구성요소들

Nodes, Run List

노드는 chef client가 설치되는 호스트 컴퓨터다. 노드 자동화는 데이터인 attributes와 로직을 담고 있는 run list에 의해서 이루어진다. Attributes는 노드의 속성 값들이 저장된다. 노드 변수라고 생각하면 이해가 쉽다.

Run list는 자동화를 위한 로직을 담고 있는 코드 조각이다. 하나의 노드는 하나 이상의 run list를 가지고 있는데, run list는 코드와 attributes를 이용해서 자동화를 수행한다. 코드와 변수로 이루어진 실행 가능한 조각 프로그램의 목록이 run list의 정체다..

Roles

Chef는 대량의 노드를 자동화하는 것을 목표로 하고 있다. 이들 노드들은 동일한 속성을 가진 그룹이루 이루어질 것이다. 예컨데, 웹 서비스 노드들이라면 apache, dbms, php를 포함해서 동일한 속성을 가질 것이다.

Role를 이용해서 같은 특성을 가지는 node들을 그룹으로 묶어서 관리할 수 있다. Role는 하나 이상의 run list를 가지고 있는데, 같은 role을 공유하는 node들은 모두 동일한 설정과정을 거치게 된다.

Cookbooks

Cookbooks는 recipe, resource definition, attribute, library, cookbook file 그리고 template 파일, 기타 메타데이터의 모음이다. 일반적으로 Cookbook는 애플리케이션 단위로 개발한다. 즉 mysql cookbook, apache cookbook, DHCP cookbook 형식으로 개발한다.

일반적으로 chef 코드의 개발은 cookbook을 개발하는 것을 의미한다.

Recipes

Recipe는 cookbook의 구성요소로 설정 로직을 담고 있는 코드다. recipe는 ruby 코드로 만들어져 있으며, ruby 코드와 attribute, resource 등을 이용해서 만든다.

Resources

리소스는 자동화를 위해서 많이 사용하는 코드를 라이브러리 형태로 개발해 둔 chef 구성요소다. Chef는 user(유저관리), group, directory, file, cron, service 등 시스템 자동화에 필수적으로 사용하는 기능들을 resource 형태로 제공한다.

리소스는 멀티 플랫폼을 지향한다. 예를 들어 package리소스를 이용하면 패키지를 설치할 수 있는데, apt, yum, BSD ports등의 플렛폼에 맞는 패키징 시스템을 사용한다.

Data Bags

Data bags는 chef server에 저장되는 key - value 형식의 데이터다. data bags의 데이터는 모든 cookbook에서 전역변수처럼 사용할 수 있다. 인프라스트럭쳐 전체에서 사용되는 데이터를 저장하기 위해서 사용한다.

Clone this wiki locally