-
Notifications
You must be signed in to change notification settings - Fork 0
Automation
클라우드는 컴퓨터 자원과 네트워크 자원, 그리고 소프트웨어를 통합한다. 따라서 자동화가 중요하다. 이 문서는 자동화를 다룬다.
클라우드는 연산 자원을 추상화했다. 클라우드 서비스 제공자는 사용자에게 물리적인 하드웨어와 네트워크를 제공하는 대신에 추상화된 소프트웨어(VM)을 제공한다.
이전에 사용자는 물리적인 하드웨어에 대한 직접적인 접근 권한을 가지고 있었으며, 기본적으로 운영체제의 모든 설정을 도맡아서 관리했다. 이른바 호스팅 서비스다. 호스팅 측은 시스템과 네트워크 인프라가 갖추어지면, (방문하기 귀찮아하는 사용자를 위해서) 최소한의 운영체제의 설치를 도와주거나 문제가 생겼을 때 시스템을 재시작 해주는 게 전부였다.
하지만 클라우드가 도입되면서, 하드웨어와 네트워크가 사용자로부터 분리되었다. 이제 사용자는 하드웨어와 네트워크를 관리할 필요가 없어졌다. 서비스 제공자가 모든 하드웨어와 네트워크의 설정을 담당해야 하는 상황에 이르렀다.
수백/수천 대의 하드웨어와 네트워크를 발로 뛰어다니면서 관리할 수는 없는 법, 운영체제 설치와 네트워크 설정을 자동화해야 할 필요성이 생겨났다. 물론 클라우드 이전에도 자동화 전략을 세우긴 했지만 공개된 형태로 이루어지진 않았다. 지금은 공개된 영역에서 클라우드 시스템을 자동화하기 위한 논의가 이루어지고 있다.
클라우드와 빅데이터는 함께 발전한다. 가장 밑에 IaaS가 있을 것이고 이 위에서 SaaS와 PaaS가 올라갈 것이고, 이위에 빅데이터 솔루션과 데이터들이 올라갈 것이다. 클라우드 위에서 작동하는 빅데이터는 서비스의 오버헤드를 제거하고 설정과 제어를 중앙에서 관리할 수 있게 해서 빠르게 서비스를 전개하도록 도와줄 것이다.
자동화 툴이라는 것은 개발자의 개인의 의지와 역량에 종속되고, 많은 시간을 들여서 제대로 작동하는 자동화툴을 유지하는 것도 상당한 일이였기 때문에, 그 상황에서만 쓸 수 있는 경우가 대부분이었다.
다행히 지금은 표준화되고, 잘 유지/보수 되는 툴들이 있다. chef와 puppet, cfengine, Bcfg2 등이 대표적인 자동화 툴들이다. 그 중 pubbpet와 chef가 자동화 분야를 이끄는 것으로 보인다. 여기서는 chef를 다룬다.
chef는 infrastructure를 자동화 하기 위한 프레임워크다. 전체 시스템 형상을 코드화 하고, 코드를 자동으로 수행함으로써 손쉽게 시스템을 운영, 유지, 확장, 복제할 수 있도록 도와준다.
chef는 컴퓨팅 리소스를 __provisioning__하고, __설정을 관리__하고 이 것들을 __통합__하는 일을 한다.
Chef는 RESTfule API 혹은 knife의 CLI를 이용해서, 시스템을 프로비저닝할 수 있다. 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는 server & client 모델을 따르는 프레임워크로 chef server, workstations, node로 구성된다.
- Chef Server:
Chef Server는 인프라 (설정)정보 코드를 저장하기 위한 Chef 코드 저장소를 가지고 있다. 모든 chef 코드는 chef server에 집중해서 관리한다. chef server는 REST API를 이용해서 접근할 수 있다. 추가적으로 WebUI를 이용해서 인프라스트럭쳐를 관리할 수도 있다. 데이터는 couchdb로 관리를 하며, solr을 이용해서 검색 서비스를 제공한다.
- Node:
인프라를 구성하는 단위 시스템으로 chef client가 설치된다. Bearmetal 혹은 VM 환경일 수 있다. 노드는 chef-client 프로그램을 실행해서 chef server로 부터 run list를 가져와서 설정을 변경하고 패키지를 설치하고 애플리케이션을 실행한다. 노드는 클라이언트라고 부르기도 한다.
- Workstation :
Chef server는 (자동화를 위한)데이터와 로직을 가지고 있다. 데이터와 로직은 knife를 이용해서 개발을 하는데, knife가 설치된 서버를 workstation이라고 한다. 즉 chef 개발 노드라고 할 수 있다. chef 개발자는 workstation에 설치된 knife를 이용해서 데이터와 코드를 개발하고 이 정보를 chef server에 upload 한다.