Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

자동화

자유자재로 모양과 크기가 변하는 구름처럼, 클라우드 역시 모양과 크기가 자유롭게 변할 수 있어야 한다. 형상이 자유롭게 변화할 수 있어야 한다는건데, 형상이라는 것은 결국 "설정(configuration)"으로 표현된다.

이 설정을 사람이 손으로 관리할 수는 없는 법이다. 기존의 호스팅 서비스라면 하드웨어 인프라의 관리 주체가 서비스 사용자 였다. 따라서 서비스 제공자는 하드웨어의 설정에 직접 관여할 필요가 없다. 고객이 원할 경우 운영체제를 설치해 주는 정도로 역할이 끝나기 때문에 자동화의 필요성이 그리 크지 않았다.

하지만 클라우드 시스템은 모든 설정을 서비스 제공자가 관리해야 한다. 사람이 손으로 설정관리를 하는 건 불가능하므로 반드시 자동화 시스템 구축이 필요하다.
  1. VM 혹은 baremetal 프로비저닝 자동화
  2. 운영체제 설정 자동화
  3. 네트워크장비 설정 자동화
1,2의 경우 chef 같은 설정관리 소프트웨어로 자동화가 가능하다. L2, L3 장비에 대한 설정 자동화는 고려하지 않는다. 이 문서에서 고려하기에는 이슈가 많다.

L4 장비에 대한 설정관리만 하기로 한다. Citrix와 F5의 경우 클라우드 환경을 고려해서 풍부한 API를 제공하고 있다. 이들 API를 이용해서 네트워크 장비의 설정관리가 가능하다. 공통 API가 없기 때문에 장비마다 직접 개발해야 한다는 점이 부담이다. 혹은 직접 개발해도 된다. 직접 개발할 경우 다른 운영체제와 같은 레벨에서의 설정관리가 가능할 것이다. 통합측면에서 좋기는 한데, 개발 부담이 좀 더 커진다는 문제가 있다.

모니터링

자동화를 위해서는 주변의 환경과 상호작용이 필요하다. 자동화의 예는 생명체에서 찾아볼 수 있다. 가장 단순한 생명체인 바이러스에서 사람까지, 주변 상황을 인식하고 반응함으로써 스스로 행동을 제어한다. 생명체는 수용체를 이용해서 환경을 인식한다.

기계역시 (하드웨어, 소프트웨어적인)센서를 이용해서 주변 환경을 인식해야지만 "자동화"를 할 수 있다.

많은 경우 모니터링은 그다지 중요하지 않게 생각하거나 중요하다고 인식하면서도 막상 모니터링 시스템 구성에 비용을 투자하는 것을 아까워하는 경향이 있는데, 클라우드 시스템 구성을 위한 가장 중요한 기술 중 하나라고 할 수 있다. 모니터링 시스템을 이용해서 아래의 것들을 할 수 있다.
  • Auto VM provisioning
  • Auto scaling
  • Auto service provisioning
  • HA
  • Deploy management
Zabbix와 Zenoss, collectd, syslog-ng, snmp, rrd, 로그분석 시스템등 다양한 기술을 융합한 솔류션 개발이 필요하다. 환경에 딱 맞아떨이지는 솔류션이라는게 없이, 네트워크/시스템 환경에 따라서 솔류션을 개발해야 한다.

Hypervisor

가상화를 위한 기반 도구라고 할 수 있다. 상용을 포함해서 여러 하이퍼바이저가 있는데, 개인적인 취향이 오픈소스라서 Xen과 KVM에만 관심을 가지고 있다.

데스크탑용 하이퍼바이저로는 virtualbox를 아주 잘 사용하고 있는데, 클라우드 환경에서도 사용가능한지에 대한 확신이 없다.

Xen은 AWS에서 사용하고 있다. 최근들어 주목받고 있는 KVM역시 cloudStack, openstack 등에서 직접지원하고 있으며, 여러 기업들이 관심을 가지고 있는 것으로 알고 있다. virtualbox는 성능지표를 보면 쓸만한데, 딱히 레퍼런스는 없는 것 같다. Virtualbox 기반으로 클라우드 환경을 구축할 경우 한 가지 걸리는 점이라면, Tagged vlan을 지원하지 않는다는 점이다. Account 별로 VLAN을 할당할 수 없다는 의미인데, 뭐 VLAN으로 isolation하지 않을 거라면 뭐 별 문제가 아닐 수도 있다. 하지만 어차피 KVM을 기반으로 하고 있는데 굳이 한 단계 추상화된 virtualbox를 사용해야 하나라는 생각이 드는게 사실이다.

vmware나 ovm은 모르겠다.

Cloud OS

일단 대세는 openstack과 cloudstack인것 같다. 만약 충분한 개발인력과 시간을 가지고 있다면 openstack의 선택도 괜찮다. 모든 기능이 컴포넌트 별로 분리돼 있어서, 자신의 환경에 맞춰서 유연한 개발이 가능하다. 하지만 설치와 동시에 클라우드 환경을 구축할 수 있으리라는 기대는 접어야 할 거다.

Cloudstack은 설치와 동시에 클라우드 환경을 구축할 수 있을 정도로 잘 패키징 돼 있다. 컴포넌트가 중앙에 집중해 있기 때문에, 환경에 맞게 확장 개발하기가 쉽지않다. 애플리케이션 구조자체가 그다지 클라우드 스럽지 않다고 보면 된다. 하지만 데이터센터를 유지관리하기 위한 자체 클라우드 솔류션을 개발할 생각이 아니라면, 충분히 좋은 툴이다.

목적과 역략에 맞는 적정한 솔류션을 선택하자.

언어와 툴들

클라우드를 개발하고 관리하기 위한 언어와 툴들을 나름의 기준으로 정리해보았다.
  • perl : 시스템/네트워크 관리를 위한 최적의 언어. CPAN만 믿고 가는거다.
  • shell : 지저분하다고 욕하고 싶겠지만, perl과 함께 가장 중요한 언어다.
  • ruby : chef 때문에 사용한다. 아니라면 그냥 perl만 믿고 갔을거다.
  • chef : puppet아니면 chef 둘 중 하나인 것 같다. puppet은 안써봐서 모르겠다.
  • zabbix, zenoss : 모니터링은 해야지.
  • collected : 모니터링은 해야지.
  • rrd : 모니터링 정보를 통계정보로 만들고 이를 시각화
  • splunk : 로그 분석툴. 좀 비싸다. 개발여력이 있다면 직접 개발해 보시기 바란다. 검색엔진 개발 능력이 좀 많이 필요하지 싶다.
  • php : 빠르게 웹 기반 서비스를 만들 때, 유용하게 사용할 수 있다.
  • c/c++
  • java

Sys/net admin

시스템/네트워크 관리 능력 필수다. 아래의 기술들에 대한 어드민 능력이 필요하다.

히스토리

  • 작성일 :