VM 템플릿 작성 방법

advertisement
Open Source를 이용한 클라우드 플랫폼 개발 기술
I.
오픈소스 플랫폼 SW 현황
II.
OpenNebula 소개
III.
OpenNebula 운영
1.1 국내 클라우드 구축 현황
 통신 사업자 중심의 오픈 소스 퍼블릭 클라우드 플랫폼을 구축하여 서비스 시행 중
• 자사 클라우드 환경을 테스트 베드로 활용하여 퍼블릭 클라우드 시장으로 확장을 추진하고 있음
 하드웨어 밴더(HP, IBM, CISCO 등)는 자사 하드웨어를 바탕으로 소프트웨어를 결합한 퍼블릭 및
프라이빗 클라우드 솔루션을 제공하며 시장의 지배력을 강화하고 있음
 VMWare, Citrix, Microsoft, Oracle 등이 제공하는 솔루션 기반의 프라이빗 클라우드 플랫폼 구축이
대기업/공공기관을 중심으로 추진되고 있음
 퍼블릭 클라우드 대명사인 아마존 AWS가 한국에서 서비스 준비 중
 Hostway 같은 외국 클라이드 서비스 업체가 국내에서 서비스 시행 중
1.2 상용 클라우드 플랫폼 VS 오픈소스 클라우드 플랫폼
오픈 소스 플랫폼
장점
상용 플랫폼
 비용적인 면에서 개발된 소스만 공개하면 대부분
무료로 사용할 수 있다.
 단기간에 안정적인 솔루션 제공 및 클라우드
센터를 구축할 수 있다.
 개발자 스스로 오픈 소스 커뮤니티에 참여하거나
클라우드 환경을 구성하고 개발할 수 있는 여건이
조성되어 있다.
 필요에 따라 밴더사로 부터 기술적인 지원을
쉽게 받을 수 있다.
 필요에 따른 확장이 쉽고 부가적인 시스템에 개발
에 능동적으로 대처할 수 있다.
 솔루션의 안정화를 위한 기술적인 지식과 많은
시간적인 노력이 필요하다.
 고가의 SW 라이선스 비용으로 인한 향후 클라우
드 센터의 확장에 재정적인 문제점이 될 수 있다.
 상용 시스템과 같은 기술적 지원이 부족하다.
 시스템에 부가적인 개발이 쉽지 않다.
 OpenNebula
 HP Matrix X
 Eucalyptus
 IBM SmartCloud
대표
 CloudStack
 MS Azure
솔루션
 OpenStack
단점
 Nimbus
1.3 오픈소스 클라우드 플랫폼 SW 및 환경구성 예
APIs
Monitoring System
Ganglia
Zabbix
Hypervisor
KVM, Xen
Management Toolkit
OpenNebula
Eucalyptus
CloudStack
OpenStack
Nimbus
Network
Open vSwitch
802.1Q
ebtables
Image Transfer
SSH
Shared FS
(NFS, GlusterFS, Lustre, etc)
Linux
1.4 Open Source Community Activity
사용자와 개발자들이 사이에서 일어나는 활동을 근거로 4개의 대표적인 오픈 소스 플랫폼 SW 비교 분석 자료
CloudStack vs OpenNebula vs OpenStack vs Eucalyptus 출처 (Qingye Jiang (John) qjiang@ieee.org )
2.1 OpenNebula 소개
 OpenNebula는 완전한 오픈 소스 툴킷으로 Private, Public, Hybrid 클라우딩 컴퓨팅 환경을 구성할 수 있도록
해주며, 다수의 서버 가상화 (KVM, Xen, VMWare, Hyver-V) 를 지원한다.
 debian, OpenSUSe, Ubuntu, RHEL/CentOs 등 대부분의 Linux를 지원하며 현재 3.8 버전이 2012년 10월 릴리스
되었다.
 가상화, 네트워크, 스토리지 등의 서비스를 독립적인 레이어로 실행됨으로써 다양한 서비스와 쉽게 통합할 수
있도록 되어 있으며 OpenNebula가 제공하는 모듈화된 서비스는 이미 구축된 데이터 센터에 있는 다양한 제품
과 서비스와 통합을 가능하게 한다.
 Ruby와 Java를 사용하여 새로운 클라우드 인터페이스를 생성할 수 있는 프로그래밍 인터페이스를 제공하며,
XML RPC API를 통하여 OpenNebula 시스템에 액세스하여 새로운 부가 기능 등을 add-on 할 수 있다.
2.2 OpenNebula Community
2.3 OpenNebula Scalable Architecture and APIs
OpenNebula 는 타 시스템과 연동이 가능하고 새로운 컴포넌트를 통합하기 쉽게 설계되어 있다
클라우드 인터페이스
 EC2-Query: Amazon’s EC2 API에 제공되는 기능 구현
 OCCI API : Open Cloud Computing Interface 제공
시스템 인터페이스
 XML-RPC: OpenNebula 데몬과 연결되는 API를 사용
하여 가상머신, 네트워크, 사용자, 호스트, 클러스트 등
의 리소스를 제어하거나 관리
 OCA (OpenNebula Core API) : Java 또는 Ruby 언어
를 이용하여 OpenNebula Core와 인터페이스 제공
시스템 인터페이스 - Drivers
 Storage ( TM Driver) : 저장소 액세스 드라이버
 Virtualization (VM Drier) : 가상화 지원 드라이버
 Monitoring (IM Driver): 모니터링 지원 드라이버
 Authorization ( Auth Driver) : 인증 관련 드라이버
Database
 Mysql, sqlite 지원
One account
 클라우드 시스템 관리자 및 사용자 계정 관리
2.4 OpenNebula 기본적인 Architecture
Image
Repository
Shared FS
3.1 OpenNebula 주요 기능
강력한 사용자 보안 관리
 패스워드, ssh ras keypairs, X509 또는 LDAP 에 근거한 인증 및 승인 프레임웍
 다양한 환경의 사용자들을 위한 승인 메커니즘
가상 머신 이미지 관리
 기본 관리 기능 : register, enable, disable, delete, publish, unpublish, show, update,
saveas, list
 이미지 템플레이트로부터 복수의 사용자 환경 구성
 실행중인 가상 머신으로 부터 이미지 생성
 카타로그와 이미지 관리 기능이 있는 이미지 레포지토리
가상 네트워크 관리





가상 머신 인스턴스 관리
 가상 머신 기본 관리 기능 : submit, deploy, migrate, livemigration, stop, save, resume,
cancel, shutdown, suspend, restart, delete, monitoring, list
 스크립트를 사용한 VM 상태 변경 기능
 다수의 하이퍼바이저를 분산환경에서 관리할 수 있는 환경 제공
 이기종의 하이퍼바이저 통합 지원 가능
인터페이스
 Sunstone을 이용한 GUI 제공
 Command Line 인터페이스
스토리지 관리
 iSCSI, NAS, local SCSI/SAS/SATA, FiberChannel 지원
 가상 머신 이미지 관리를 위한 기능
서비스 관리
 MS, 리눅스 머신 이미지 지원
 내부적으로 연결된 가상 머신 그룹에 대한 multi-tier deploy 및 부팅시 자동 환경 구성
 Public ssh keys, 소프트웨어 라이센스, 인증서 등의 정보를 가상 머신에 적용하는 기능
가상 머신과 통신할 수 있는 가상 네크워크를 구성할 수 있는 기능 제공
Ranged 또는 Fixed 가상 네트워크 생성
게이트웨이, DNS, Subnet mask 등을 가상 머신의 Context에 포함하여 네트워크 구성
가상 네트워크 구성을 publish 하여 다른 사용자와 공유
가상 네트워크 create, delete, list, monitoring 기능
3.2 OpenNebula 주요 컴포넌트
호스트 및 가상화 지원 기능
 KVM, Xen, ESX, Hyper-V 지원
 호스트 머신 관리
 호스트 머신 모니터링
 Ganglia 모니터링 시스템 지원 드라이버
네트워크 지원
 VLAN
 Ebtables
 Open vSwitch
스토리지 및 이미지
 Shared 또는 Non-Shared 파일 시스템 지원
 Local Volume Manager를 사용할 수 있는 드라이
버 지원
사용자 관리
Access Control List를 통한 사용자 및 그룹 통제
LDAP, X509, SSH 등을 이용한 외부 인증
Accounting Toolset은 리소스 사용에 대한 기본적
인 정보와 청구에 필요한 정보 제공
인터페이스
 Amazon Web Service, Open Cloud Computing
Interface 지원
 java, ruby 언어를 통한 API 제공
 Sunstone GUI 제공
3.3 OpenNebula 와 Hyper-V 운영 개념도
마이크로 소프트사는 Hyper-V 하이퍼바이저를 OpenNebula에 지원 한다고 2012년 2월에 발표
WinRM Server
Power
Shell
Shared
Storage
WIN 2008 R2
API
Images
API
Images
Hyper-V
Hyper-V
WIN 2008 R2
WIN 2008 R2
OpenNebula
Drivers
Images
Image
Repository
Linux
API
Images
Hypervisor
Linux
API
Images
Hypervisor
Linux
3.4 OpenNebula Hybrid Cloud

OpenNebula는 로컬에 있는 클러스트 노드를 관리하는 것처럼 아마존의 WorkNode들을 관리

Virtual Machines can be instantiated locally or in EC2
3.5 OpenNebula 이용하기 – VM 템플릿 작성 방법
# 가상 머신을 이름을 지정한다.
NANE = "name" # 이름은 선택사항이며 디폴트 값은
one-$VMID 이다
# CPU 및 메모리 용량을 지정한다
CPU = "1" # 소수로도 사용 가능하다. 예를 들어 0.5
MEMORY = "2048" #KB
# OS 및 boot 선택 사항 지정
kernel = "path_to_os_kernel", # 반 가상화에 적용
initrd = "path_to_initrd_image", # 반 가상화에 적용
kernel_cmd = "kernel_command_line",
root = "device to be mounted as root"
bootloader = "path to the boot loader exec
# 네트워크 구성
NIC = [
network = "name_of_the_virtual_network",
ip = "ip_address",
bridge = "name_of_bridge_to_bind_if",
target = "device_name_to_map_if",
mac = "HW_address",
script = "path_to_script_to_bring_up_if",
Model = "NIC model"]
# I/O 인터페이스
INPUT = [
type = "mouse|tablet",
bus = "usb|ps2|xen" ]
GRAPHICS = [
type = "vnc|sdl",
listen = "IP-to-listen-on",
port = "port_for_VNC_server",
passwd = "password_for_VNC_server" ]
#Features
FEATURES = [
pae = "yes|no", # Optional, KVM
acpi = "yes|no" ] # Optional, KVM # power management
#VM 디스크
DISK = [
type = "floppy|disk|cdrom|swap|fs|block",
source = "path_to_disk_image_file|physical_dev",
format = “type for fs disks”,
size = "size_in_GB",
target = "device_to_map_disk",
bus = "ide|scsi|virtio|xen",
readonly = "yes|no",
clone = "yes|no",
save = "yes|no" ]
# Raw Hypervisor attributes
RAW = [
type = "xen|kvm",
data = "raw_domain_configutarion“]
3.6 OpenNebula 이용하기 – Network 템플릿 작성 방법
Fixed Network 작성 방법
Ranged Network 작성 방법
NAME = "fixed_network"
TYPE = FIXED
NAME = "ranged_network"
TYPE = Ranged
#YES = 다른 사용자에 의해 조회되고 사용되는 것 가능
PUBLIC = YES | NO
# YES = 다른 사용자에 의해 조회되고 사용되는 것 가능
PUBLIC = NO | YES
BRIDGE = br0
LEASES = [IP=192.168.10.120]
LEASES = [IP=192.168.10.121]
LEASES = [IP=192.168.10.122]
LEASES = [IP=192.168.10.123]
LEASES = [IP=192.168.10.124]




# 브릿지 이름
BRIDGE = br0
NETWORk_ADDRESS = 192.168.10.100
NETWORK_SIZE = 126
NETMASK = 255.255.255.0
GATEWAY = 192.168.10.1
DNS = 168.126.63.1
3.7 OpenNebula 이용하기 – VM 템플릿 작성 샘플
KVM 템플릿 작성 방법
Xen 템플릿 작성 방법
$ vi ttylinux_kvm_vm.template
$ vi ttylinux_xen_vm.template
NAME = tlinux
CPU = 1
MEMORY = 124
NAME = tlinux
CPU = 1
MEMORY = 124
OS=[ARCH=x86_64]
OS=[
KERNEL="/boot/vmlinuz-2.6.18-238.19.1.el5xen",
INITRD="/boot/initrd-2.6.18-238.19.1.el5xen.img",
ROOT="sda1"]
DISK=[
source = "/srv/cloud/image/ttylinux.img",
target = "hda",
readonly = "no" ]
NIC = [ NETWORK_ID = 0]
FEATURES=[acpi="no"]
GRAPHICS = [
type = "vnc",
listen = "0.0.0.0",
port = "5902"]
RAW=[ TYPE=kvm ]
DISK=[
source = "/srv/cloud/image/ttylinux.img",
target = "hda",
readonly = "no" ]
NIC = [ NETWORK_ID = 0]
FEATURES=[acpi="no"]
GRAPHICS = [
type = "vnc",
listen = "0.0.0.0",
port = "5903"]
RAW=[ TYPE=Xen ]
3.8 Java OpenNebula Cloud API 예제
VM을 생성하고 VM에 제어하고 정보를 쿼리하는 JAVA 샘플 소스
Client oneClient;
try
{
oneClient = new Client();
String vmTemplate =
"NAME
= vm_from_java CPU = 0.1 MEMORY = 64\n"
+ "DISK
= [\n"
+ "\tsource =
\"/home/user/vmachines/ttylinux/ttylinux.img\",\n"
+ "\ttarget = \"hda\",\n"
+ "\treadonly = \"no\" ]\n"
+ "FEATURES = [ acpi=\"no\" ]";
System.out.print("Trying to allocate the virtual machine... ");
OneResponse rc = VirtualMachine.allocate(oneClient, vmTemplate);
if( rc.isError() ) {
System.out.println( "failed!");
throw new Exception( rc.getErrorMessage() ); }
// The response message is the new VM's ID
int newVMID = Integer.parseInt(rc.getMessage());
System.out.println("ok, ID " + newVMID + ".");
// We can create a representation for the new VM, using the
returned
// VM-ID
VirtualMachine vm = new VirtualMachine(newVMID, oneClient);
// Let's hold the VM, so the scheduler won't try to deploy it
System.out.print("Trying to hold the new VM... ");
rc = vm.hold();
if(rc.isError()) {
System.out.println("failed!");
throw new Exception( rc.getErrorMessage() ); }
// And now we can request its information.
rc = vm.info();
if(rc.isError())
throw new Exception( rc.getErrorMessage() );
System.out.println();
System.out.println(
"This is the information OpenNebula stores for the new VM:");
System.out.println(rc.getMessage() + "\n");
// This VirtualMachine object has some helpers, so we can access its
// attributes easily (remember to load the data first using the info
// method).
System.out.println("The new VM " +
vm.getName() + " has status: " + vm.status());
// And we can also use xpath expressions
System.out.println("The path of the disk is");
System.out.println( "\t" + vm.xpath("template/disk/source") );
// We have also some useful helpers for the actions you can perform
// on a virtual machine, like cancel or finalize:
rc = vm.finalizeVM();
System.out.println("\nTrying to finalize (delete) the VM " +
vm.getId() + "...");
}
catch (Exception e) {
System.out.println(e.getMessage());}
3.9 OpenNebula Sunstone: The Cloud Operations Center
Q&A
Download