OpenNebula เป็นโซลูชันมิดเดิลแวร์ระบบคลาวด์แบบโอเพ่นซอร์สที่ใช้ในการจัดการโครงสร้างพื้นฐานของศูนย์ข้อมูลแบบกระจายได้หลากหลายแบบ รองรับการจัดการระบบคลาวด์แบบส่วนตัว ระบบคลาวด์แบบสาธารณะ และระบบคลาวด์แบบไฮบริด OpenNebula ถูกออกแบบให้เป็นโซลูชันแบบพร้อมใช้ที่เรียบง่ายแต่มีความสามารถมากมายและมีความยืดหยุ่นในการใช้งาน สามารถปรับแต่งเพื่อสร้างและจัดการระบบคลาวด์ขององค์กร ง่ายต่อการติดตั้ง ปรับปรุง และดำเนินการโดยผู้ดูแลระบบรวมถึงผู้ใช้งานทั่วไป OpenNebula ได้รวมเอาเทคโนโลยี virtualization ที่มีอยู่เข้ากับคุณลักษณะขั้นสูงสามารถรองรับสำหรับผู้เช่าหลายคน สามารถควบคุมและจัดการได้อย่างอัตโนมัติ มีความยืดหยุ่นในการใช้งาน มีความสามารถในการจัดการเครือข่ายเสมือนในตัวสามารถแมพเครือข่ายเสมือนกับเครือข่ายจริงได้ รองรับการใช้งานกับ Xen KVM และVMWare ไฮเปอร์ไวเซอร์ ระบบปฏิบัตการลินุกซ์ดิสโทรยอดนิยม เช่น Ubunu และ RHEL รองรับการทำงานร่วมกับ OpenNebula
รูปแบบการติดตั้ง OPenNebula จะเป็นการติดตั้งและทำงานอยู่บนสถาปัตยกรรมคลัสเตอร์แบบดั้งเดิม โดยแบ่งออกเป็น 2 ส่วนคือ

Master Node : เป็นเครื่องที่ทำหน้าที่เกตเวย์ (single gateway) หรือส่วนหน้าบ้าน (front-end) จะทำหน้าที่ในการจัดคิว (queuing) จัดตารางการทำงาน (scheduling) และสั่งงาน (submitting job) ไปยังเครื่องอื่นๆในคลัสเตอร์ โดยบริการต่างๆของ OPenNebula จะทำงานบนเครื่องนี้ เช่น ให้บริการส่วนติดต่อกับผู้ใช้งานในการสร้างและติดตามสถานะของเครื่องเสมือน (virtual machine) ให้บริการส่วนติดต่อกับผู้ใช้งานเพื่อจัดการและเฝ้าดูเครื่องเสมือนของโหนดต่างๆในคลัสเตอร์ เป็นโฮสต์ที่เก็บเครื่องเสมือนและให้บริการในการถ่ายโอนเพื่อจัดการการถ่ายโอนอิมเมจของเครื่องเสมือนไปยังโหนดที่ต้องการ มีเครื่องมือที่ช่วยให้การตั้งค่าเครือข่ายเสมือนในระบบคลาวด์สามารถทำได้ง่าย
Worker Node : เป็นเครื่องเสมือนในคลัสเตอร์ในรูปแบบเวอร์ช่วลไฮเปอร์ไวเซอร์ เช่น Xen KVM และVMWare
OpenNebula เป็นหนึ่งในระบบคลาวด์ที่ติดตั้งและกำหนดค่าได้ง่าย แพ็คเกจสำหรับติดตั้งมีรองรับในลินุกซ์หลายดิสโทรเช่น Red Hat Enterprise Linux, Ubuntu, Fedora และ openSUSE โดยเฉพาะใน Ubuntu มีเป็นแพ็คเกจมาตรฐานของตนเองทำให้ติดตั้งได้ง่ายมาก ตัวอย่างด้านล่างจะเป็นการสร้างระบบคลาวด์แบบส่วนตัวโดยใช้เครื่องคอมพิวเตอร์ที่เป็นดิสโทร Ubuntu 3 เครื่อง โดยเครื่องหนึ่งจะเป็น master node เรียกว่า nebula-cloud-server และอีก 2 เครื่องจะเป็น worker node ที่ติดตั้ง KVM โดยกำหนดชื่อเป็น open-nebula-wn และ open-nebula-wn2
1. ที่เครื่อง master node : การติดตั้ง master node เราใช้คำสั่ง
sudo apt-get install opennebula
ซึ่งจะเป็นการติดตั้งตัวจัดการ (deamon) ชื่อ “oned” ซึ่งใช้ในการจัดการบริการของ OpenNebula และสร้างผู้ใช้งานชื่อ “oneadmin” ขึ้นมาซึ่งเป็นชื่อผู้ใช้งานของตัว OpenNebula เอง นอกจากนี้ยังมีการสร้างกุญแจคู่ (key pair) ในแบบ SSH RSA ขึ้นมาเพราะแต่ละโหนดจะคุยกันด้วย SSH และ worker node จะต้องรับรองกุญแจสาธารณะของ master node ด้วย
2. ที่เครื่อง worker node ทั้ง 2 เครื่อง: เราจะติดตั้ง worker node และรับรองกุญแจจาก master node ด้วยคำสั่ง
sudo apt-get install opennebula-node
sudo tee /var/lib/one/.ssh/authorized_keys << EOT
ซึ่งจะเป็นการติดตั้งแพคเกจที่จำเป็นต่างๆและสร้างผู้ใช้งานชื่อ “oneadmin” ขึ้นมาและเราต้องเช่นเดียวกัน
3. ที่เครื่อง master node : เนื่องจาก master node จะสื่อสารกับ worker node ด้วยโปรโตคอล SSH ดังนั้น oneadmin บนเครื่อง master node จะต้องการเชื่อมต่อด้วย SSH ไปยัง oneadmin@open-nebula-wn และ oneadmin@open-nebula-wn2 ด้วยคำสั่ง
sudo -u oneadmin ssh open-nebula-wn
sudo -u oneadmin ssh open-nebula-wn2
ในการจัดการคลัสเตอร์เราใช้คำสั่งในรูปแบบ “onehost [option] command [parameters]” โดย command คือการดำเนินการที่เราต้องการทำ เช่น การเพิ่มเครื่องเสมือนในคลัสเตอร์ การดูข้อมูลของเครื่องเสมือน การกำหนดลำดับการเปิดหรือปิดเครื่องเสมือน แสดงเครื่องเสมือนที่ทำงานอยู่ เป็นต้น โดยเราจะใช้คำสั่งที่เครื่อง master node
4. ที่เครื่อง master node : ในการเพิ่ม worker node ในคลัสเตอร์ เราใช้คำสั่ง “onehost create hostname in_mad vmm_mad tm_mad” โดย hostname คือชื่อหรือที่อยู่ ip ของเครื่องที่ต้องการเพิ่มเป็น worker node ส่วนพารามิเตอร์ด้านหลังเป็นการบอกข้อมูลเกี่ยวกับเวอร์ช่วลไฮเปอร์ไวเซอร์และวิธีการเชื่อมต่อที่ใช้งาน เช่น ในกรณีของตัวอย่างของเรา คำสั่งจะเป็น
onehost add open-nebula-wn im_kvm vmm_kvm tm_ssh
onehost add open-nebula-wn2 im_kvm vmm_kvm tm_ssh
5. ที่เครื่อง master node : เราสามารถตรวจสอบการติดตั้งได้ด้วยคำสั่ง list ซึ่งแสดวข้อมูลของ woker node ดังตัวอย่าง
onehost list
HID NAME RVM TCPU FCPU ACPU TMEM FMEM STAT
0 open-nebula-wn 0 100 99 100 1068948 921356 on
1 open-nebula-wn2 0 100 12 100 1173072 1027776 on
เราสามารถระบุการกำหนดค่าสำหรับการตั้งค่า OpenNebula ได้ในไฟล์ oned.conf โดยไฟล์นี้มีความสำคัญต่อการปรับใช้ OpenNebula โดยค่าที่เป็นไปได้ทั้งหมดสำหรับไดรเวอร์ที่รองรับถูกกำหนดเป็นมาตรฐานไว้อยู่แล้ว เราสามารถเลือกใช้โดยการเอาเครื่องหมายคอมเมนท์ (#) ของชุดการตั้งค่าที่ต้องการออกตามที่ต้องการ เช่น หากจะใช้ Xen ให้เอาเครื่องหมายคอมเมนท์ในบรรทัดที่แสดงด้านล่างออก
#IM_MAD = [
# name = “im_xen”,
# executable = “one_im_ssh”,
# arguments = “im_xen/im_xen.conf”,
# default = “im_xen/im_xen.conf” ]
#VM_MAD = [
# name = “vmm_xen”,
# executable = “one_vmm_xen”,
# default = “vmm_xen/vmm_xen.conf”,
11 # type = “xen” ]
หลังจากที่เพิ่ม worker node แล้วระบบคลาวด์ส่วนตัวแบบสามโหนดตามตัวอย่างก็พร้อมใช้งาน อย่างไรก็ตามก่อนที่สร้างเครื่องเสมือน เราต้องกำหนดเครือข่ายเสมือนเสียก่อน จากนั้นจึงจะสร้างและเปิดใช้เครื่องเสมือน เราสามารถสร้างเครือข่ายเสมือนได้หลายเครือข่ายใน OpenNebula และติดตั้งเครื่องเสมือนในเครือข่ายเสมือนเหล่านี้ ซึ่งแต่ละเครือข่ายเสมือนก็จะมีกลุ่มของเครื่องเสมือนที่แตกต่างกัน และหากเราต้องเชื่อมระบบคลาวด์ส่วนตัวของเรากับอินเตอร์เนต เครื่องที่เชื่อมต่อกับอินเตอร์เนตควรจะเชื่อมต่อเครือข่ายเสมือนที่กำหนดไว้เฉพาะกิจเพียงเครือข่ายเดียว
ในการกำหนดเครือข่ายเสมือนเราต้องเขียนไฟล์เทมเพลต ซึ่งไวยากรณ์ของไฟล์เทมเพลตเพื่อสร้างเครือข่ายเสมือนค่อนข้างเรียบง่าย ใน OpenNebula เราสามารถกำหนดเครือข่ายเสมือนแบบคงที่ (fix) หรือแบบช่วง (range) เครือข่ายแบบคงที่จะระบุที่อยู่ IP กับเครื่องเสมือนแบบเจาะจงโดยใช้ MAC Address ของเครื่องเสมือน แต่ถ้าเป็นการกำหนดแบบช่วงจะเหมือนกับการกำหนดค่า DHCP ตัวอย่างเทมเพลต
NAME = “Private Cloud”
TYPE = FIXED
BRIDGE = vbr0
LEASES = [IP=192.168.0.1, MAC=50:20:20:20:20:20]
Ranged Network Template
NAME = “wanNetwork”
TYPE = RANGED
BRIDGE = vbr0
NETWORK_SIZE = C
NETWORK_ADDRESS = 192.168.0.0
และสั่งสร้างเครือข่ายเสมือนด้วยคำสั่งดังนี้
nebula-user@nebula-cloud-server:~$ onevnet create nebula.template
nebula-user@nebula-cloud-server:~$ onevnet list
NID NAME TYPE BRIDGE
0 Private Cloud Fixed eth0
ที่เครื่อง master node เราสร้างเครื่องเสมือนด้วย KVM ด้วยคำสั่งด้านล่าง ซึ่งเป็นตัวอย่างการสร้างเครื่องเสมือนที่ใช้ลินุกซ์ดิสโทร Ubuntu โดยในคำสั่งที่ 2 จะถามหาแผ่นซีดีของ Ubuntu
dd if=/dev/zero of= ubuntu_server.img bs=1M count=4096
kvm -m 512 -cdrom /isos/ubuntu.iso -boot d ubuntu_server.img
หลังจากที่สร้างอิมเมจไฟล์ขึ้นมาแล้ว เราต้องสำเนาอิมเมจไฟล์ไปที่ไดเร็คทอรี่สำหรับเก็บไฟล์อิมเมจ (repository location) โดยในที่นี้เราจะเก็บอิมเมจไฟล์ที่ /opt/vmImages/จากนั้นแก้ไขไฟล์ oned.conf โดยกำหนดค่าไดเร็คทอรี่ดังกล่าวให้กับตัวแปรชื่อ VM_DIR และยกเลิกการคอมเมนท์เพื่อให้มีผลในการใช้งาน ดังนั้น /opt/vmImages/ จะเป็นไดเร็คทอรี่สำหรับเก็บไฟล์อิมเมจของคลาวด์ของเรา จากนั้นเราต้องรีสตาร์ทเดมอน oned เพื่อให้การตั้งค่ามีผลในการใช้งาน
หลังจากสร้างไฟล์อิมเมจแล้วเราจะสร้างไฟล์เทมเพลตของเครื่องเสมือน โดยในที่นี้เราสร้างไฟล์ชื่อ kvmVM.template และระบุรายละเอียดดังตัวอย่าง (ในการใช้งานต้องเอาคอมเมนท์ทั้งหมดออก ไม่เช่นนั้นจะเกิดข้อผิดพลาดในขั้นตอนการสร้างเครื่องเสมือน)
NAME = kvmVM #specify the name
CPU = 1 # How many CPUs required?
MEMORY = 512 # RAM in MB
OS = [
KERNAL = “/boot/vmlinuz-2.6.32-24-generic”, # Kernel to use
INITRD = “/boot/initrd.img-2.6.32-24-generic”, # initrd to use
ROOT = “sda1”, #Root partition
BOOT = hd #boot form harddisk
]
DISK = [
SOURCE = “/opt/vmImages/ubuntu_server.img”, #location of source image
TARGET = “sda1”, # mount as partition ]
DISK = [
TYPE = “swap”, #swap drive
SIZE = 1024, # size of swap drive
TARGET = “sdb” #mount to partition
]
NIC = [ NETWORK = “Private Cloud” ] #connect to specified virtual network, several NIC can be specified, # is you want to connect to several VNs
ในการสร้างเครื่องเสมือนเราใช้คำสั่ง “onevm [options] subcommand [parameters]” โดย subcommand ที่ใช้ได้คือ create, deploy, shutdown, livemigrate, migrate, hold, release, stop, cancel, suspend, resume, delete, list, show, top และ history คำสั่ง create จะสร้างและส่งเครื่องเสมือนใหม่ไปยังคลัสเตอร์โดยเราต้องระบุไฟล์เทมเพลตเครื่องเสมือนที่จะใช้ เมื่อสร้างเครื่องเสมือนแล้วเราสามารถใช้คำสั่ง show เพื่อดูสถานะของเครื่องเสมือน เราสามารถ shutdown, stop, cancel, suspend และ resume ได้ด้วยการระบุ ID ของเครื่องเสมือน OpenNebula อนุญาตให้ผู้ใช้ย้ายเครื่องเสมือนจากโฮสต์หนึ่งในคลัสเตอร์ไปยังอีกโฮสต์หนึ่ง โดยเครื่องเสมือนจะถูกหยุดทำงานก่อนจากนั้นจึงเริ่มทำงานใหม่อีกครั้งในเครื่องอื่น และยังมี livemigrate ซึ่งจะโยกย้ายเครื่องเสมือนโดยไม่หยุดการทำงาน ในการย้ายเครื่องเสมือนต้องระบุทั้ง ID ของโฮสต์ และ ID ของเครื่องเสมือน
ที่เครื่อง master node : ในการสร้างและเปิดใช้งานเครื่องเสมือนเราใช้คำสั่งดังตัวอย่างด้านล่าง
nebula-user@nebula-cloud-server:~$ onevm create kvmVM.template
nebula-user@nebula-cloud-server:~$ onevm list
ID NAME STAT CPU MEM HOSTNAME TIME
0 kvmVM pend 0 0 00 00:00:07
ซึ่งมาถึงขั้นตอนนี้เราๆได้สร้างระบบคลาวด์แบบส่วนตัวสำเร็จแล้ว
นอกจากการจัดการด้วยบรรทัดคำสั่งแล้ว เราสามารถใช้ OpenNebula Sunstone ซึุ่งเป็น GUI สำหรับทั้งผู้ใช้และผู้ดูแลระบบ ซึ่งช่วยลดความยุ่งยากในการดำเนินการจัดการทั่วไปในโครงสร้างพื้นฐานคลาวด์ส่วนตัวและไฮบริด OpenNebula Sunstone ช่วยให้จัดการทรัพยากร OpenNebula ทั้งหมดได้อย่างง่ายดายและสามารถจัดการทรัพยากรเสมือนและทรัพยากรจริงได้เช่นเดียวกับที่เราใช้บรรทัดคำสั่ง
