Managing Virtual Machine Images 3.0

The Image Repository system allows OpenNebula administrators and users to set up images, which can be operative systems or data, to be used in Virtual Machines easily. These images can be used by several Virtual Machines simultaneously, and also shared with other users.

If you want to customize the Image Repository in your system, visit the Storage subsystem guide.

inlinetoc

Image Types

There are three different types of images.

  • OS: An OS image contains a working operative system. Every VM template must define one DISK referring to an image of this type.
  • CDROM: This images are readonly data. Only one image of this type can be used in each VM template.
  • DATABLOCK: A datablock image is a storage for data, which can be accessed and modified from different Virtual Machines. This images can be created from previous existing data, or as an empty drive.

The Virtual Machines can use as many datablocks as needed. Refer to the VM template documentation for further information.

Managing Images

Users can manage the image repository using the command line interface command oneimage. The complete reference is here.

You can also manage your images using Sunstone. Select the Images tab, and there you will be able to create, enable, disable, delete your images and even manage their persistence and publicity in a user friendly way.

Create Images

The three types of images can be created from an existing file, but for datablock images you can specify a size and filesystem type and let OpenNebula create an empty image in the repository.

If you want to create an OS image, you need to prepare a contextualized virtual machine, and extract its disk.

Please read first the documentation about the MAC to IP mechanism in the virtual network management documentation, and how to use contextualization here.

Once you have a disk you want to upload, you need to create a new image template, and submit it using the oneimage create command.

The complete reference for the image template is here. This is how a sample template looks like:

<xterm> $ cat ubuntu_img.one NAME = “Ubuntu” PATH = /home/cloud/images/ubuntu-desktop/disk.0 TYPE = OS PUBLIC = YES DESCRIPTION = “Ubuntu 10.04 desktop for students.” </xterm>

To submit the template, you just have to issue the command <xterm> $ oneimage create ubuntu_img.one ID: 0 </xterm>

Listing Available Images

You can use the oneimage list command to check the available images in the repository.

<xterm> $ oneimage list

ID USER     GROUP    NAME            SIZE TYPE          REGTIME PUB PER STAT  RVMS
 0 oneadmin oneadmin Ubuntu           10G   OS   09/27 06:28:03 Yes  No  rdy     0

</xterm>

To get complete information about an image, use oneimage show, or list images continuously with oneimage top.

Publishing Images

The users can list all the images in their group with the oneimage list g command. Public images in their group can be shown (oneimage show <id>), and used in Virtual Machines.

To share an image with other users in the same group, use the oneimage publish and oneimage unpublish commands to manage the public flag.

:!: In previous 2.x versions, the public flag allowed all users in the system to see and use resources. In 3.0, the public flag scope is limited only to the users in the resource's group.

<xterm> $ oneimage list

ID USER     GROUP    NAME            SIZE TYPE          REGTIME PUB PER STAT  RVMS
 0 oneadmin oneadmin Ubuntu           10G   OS   09/27 06:28:03 Yes  No  rdy     0

$ oneimage unpublish Ubuntu $ oneimage list

ID USER     GROUP    NAME            SIZE TYPE          REGTIME PUB PER STAT  RVMS
 0 oneadmin oneadmin Ubuntu           10G   OS   09/27 06:28:03  No  No  rdy     0

$ oneimage publish 0 $ oneimage list

ID USER     GROUP    NAME            SIZE TYPE          REGTIME PUB PER STAT  RVMS
 0 oneadmin oneadmin Ubuntu           10G   OS   09/27 06:28:03 Yes  No  rdy     0

</xterm>

Making Images Persistent

Use the oneimage persistent and oneimage nonpersistent commands to make your images persistent or not.

A persistent image saves back to the repository the changes made inside the VM after it is shut down. More specifically, the changes are correctly preserved only if the VM is ended with the onevm shutdown or onevm cancel commands. Read more about the low-level considerations of persistent images in Shared File Systems and Non-Shared File Systems.

<xterm> $ oneimage list

ID USER     GROUP    NAME            SIZE TYPE          REGTIME PUB PER STAT  RVMS
 0 oneadmin oneadmin Ubuntu           10G   OS   09/27 06:28:03 Yes  No  rdy     0

$ oneimage persistent Ubuntu $ oneimage list

ID USER     GROUP    NAME            SIZE TYPE          REGTIME PUB PER STAT  RVMS
 0 oneadmin oneadmin Ubuntu           10G   OS   09/27 06:28:03 Yes Yes  rdy     0

$ oneimage nonpersistent 0 $ oneimage list

ID USER     GROUP    NAME            SIZE TYPE          REGTIME PUB PER STAT  RVMS
 0 oneadmin oneadmin Ubuntu           10G   OS   09/27 06:28:03 Yes  No  rdy     0

</xterm>

:!: When images are published they are always cloned, and persistent images are never cloned. Therefore, an image cannot be public and persistent at the same time. To manage a public image that won't be cloned, unpublish it first and make it persistent.

How to Use Images in Virtual Machines

This a simple example on how to specify images as virtual machine disks. Please visit the virtual machine user guide and the virtual machine template documentation for a more thorough explanation.

Assuming you have an OS image called “Ubuntu desktop” with ID 1, you can use it in your virtual machine template as a DISK. When this machine is deployed, the first disk will be taken from the image repository.

CPU    = 1
MEMORY = 3.08

DISK = [ IMAGE_ID   = 1 ]

DISK = [ type   = swap,
         size   = 1024  ]

NIC    = [ NETWORK_ID = 1 ]
NIC    = [ NETWORK_ID = 0 ]

# FEATURES=[ acpi="no" ]

GRAPHICS = [ 
  type    = "vnc",              
  listen  = "1.2.3.4",
  port    = "5902"  ]


CONTEXT = [
    files      = "/home/cloud/images/ubuntu-desktop/init.sh"  ]

Save Changes

Once the VM is deployed you can save the changes made to any disk as a new image. To do so, use the onevm saveas command. This command takes three: The VM name (or ID), the disk_id to save and the name of the new image to register.

To know the DISK_ID of the disk you want to save, just take a look at the onevm show output for your VM.

<xterm> $ onevm show 5 VIRTUAL MACHINE 5 INFORMATION ID : 5 NAME : one-5 STATE : ACTIVE LCM_STATE : RUNNING START TIME : 07/27 14:43:58 END TIME : - DEPLOY ID: : one-5

VIRTUAL MACHINE TEMPLATE CONTEXT=[

FILES=/home/cloud/images/ubuntu-desktop/init.sh,
TARGET=hdb ]

CPU=1 DISK=[

CLONE=YES,
DISK_ID=0,
IMAGE=Ubuntu Desktop,
IMAGE_ID=1,
READONLY=NO,
SAVE=NO,
SOURCE=/home/cloud/opennebula/var/images/147f94ddb708851e71651f05caf81da0131cc904,
TARGET=hda,
TYPE=DISK ]

DISK=[

DISK_ID=1,
SIZE=1024,
TARGET=hdd,
TYPE=swap ]

GRAPHICS=[

LISTEN=1.2.3.4,
PORT=5902,
TYPE=vnc ]

MEMORY=3.08 NAME=one-5 NIC=[

BRIDGE=bpub,
IP=1.2.3.4,
MAC=02:00:01:02:03:04,
NETWORK=Public network,
NETWORK_ID=1 ]

NIC=[

BRIDGE=bpriv,
IP=192.168.30.1,
MAC=02:00:c0:a8:1e:01,
NETWORK=Private network,   
NETWORK_ID=0 ]

VMID=5 </xterm>

The DISK_IDs are assigned in the same order the disks were defined in the VM template.

<xterm> $ onevm saveas one-5 0 “Ubuntu with Apache and MySQL” </xterm>

This will register a new image called “Ubuntu with Apache and MySQL”, that will be ready as soon as the VM is shut down.

The disks can be saved even if they were defined from a local disk file (see the VM template reference guide for more information on the different kinds of disks).