Documentazione di Ubuntu > Ubuntu 10.10 > Guida a Ubuntu Server > Virtualizzazione > UEC

## UEC

### Panoramica

This tutorial covers UEC installation from the Ubuntu 10.10 Server Edition CD, and assumes a basic network topology, with a single system serving as the "all-in-one controller", and one or more nodes attached.

From this Tutorial you will learn how to install, configure, register and perform several operations on a basic UEC setup that results in a cloud with a one controller "front-end" and one or several node(s) for running Virtual Machine (VM) instances. You will also use examples to help get you started using your own private compute cloud.

### Prerequisiti

To deploy a minimal cloud infrastructure, you’ll need at least two dedicated systems:

- Un'interfaccia.

- Uno o più nodi.

The following are recommendations, rather than fixed requirements. However, our experience in developing this documentation indicated the following suggestions.

#### Front End Requirements

Use the following table for a system that will run one or more of:

- Cloud Controller (CLC)

- Cluster Controller (CC)

- Walrus (the S3-like storage service)

- Storage Controller (SC)

Tabella 19.1. UEC Front End Requirements

Hardware | Minimo | Suggerito | Note
--- | --- | --- | ---
CPU | 1 GHz | 2 x 2 GHz | Per un'interfaccia tutta-in-uno è utile avere almeno un processore dual core.
Memoria | 2 GB | 4 GB | Per l'interfaccia Java è utile avere molta memoria disponibile.
Disco | 5400 RPM IDE | 7200 RPM SATA | È possibile utilizzare anche dischi più lenti, ma i tempi di avvio risulteranno più lenti.
Spazio su disco | 40 GB | 200 GB | 40GB è lo spazio sufficiente per una singola immagine, cache, ecc...
Rete | 100 Mbps | 1000 Mbps | La dimensione delle immagini è di centinaia di megabyte ed è necessario copiare il tutto attraverso la rete verso i nodi.

#### Requisiti del nodo

The other system(s) are nodes, which will run:

- il Node Controller (NC)

Tabella 19.2. Requisiti nodo UEC

Hardware | Minimo | Suggerito | Note
--- | --- | --- | ---
CPU | Estensioni VT | VT, 64-bit, Multicore | 64-bit è in grado di eseguire istanze sia i386 che amd64; Eucalyptus eseguirà solamente 1 VM per core di CPU su un nodo.
Memoria | 1 GB | 4 GB | Più memoria significa guest più grandi e numerosi.
Disco | 5400 RPM IDE | 7200 RPM SATA or SCSI | I nodi di Eucalyptus sfruttano molto i dischi, le attese di I/O possono causare cali nelle prestazioni.
Spazio su disco | 40 GB | 100 GB | Le immagini verranno salvate localmente.
Rete | 100 Mbps | 1000 Mbps | La dimensione delle immagini è di centinaia di megabyte ed è necessario copiare il tutto attraverso la rete verso i nodi.

### Installare l'interfaccia Server Cloud/Cluster/Storage/Walrus

1. Scaricare l'immagine di Ubuntu 10.10 Server e masterizzarla su CD.

2. When you boot, select “Install Ubuntu Enterprise Cloud”. The installer will detect if any other Eucalyptus components are present.

3. You can then choose which components to install, based on your chosen topology.

4. When asked whether you want a “Cluster” or a “Node” install, select “Cluster”.

5. It will ask two other cloud-specific questions during the course of the install:

   - Il nome del cluster.

     - per esempio cluster1

   - Un insieme di indirizzi IP pubblici sulla rete che il cloud posso allocare.

     - per esempio 192.168.1.200-192.168.1.249

### Installare i Node Controller

The node controller install is even simpler. Just make sure that you are connected to the network on which the cloud/cluster controller is already running.

1. Boot from the same ISO on the node(s).

2. When you boot, select “Install Ubuntu Enterprise Cloud”.

3. Select “Install Ubuntu Enterprise Cloud”.

4. It should detect the Cluster and preselect “Node” install for you.

5. Confermare lo schema di partizionamento.

6. The rest of the installation should proceed uninterrupted; complete the installation and reboot the node.

### Registrare i nodi

1. Nodes are the physical systems within UEC that actually run the virtual machine instances of the cloud.

   La registrazione dei componenti dovrebbe essere automatica se:

   1. Public SSH keys have been exchanged properly.

   2. The services are configured properly.

   3. The appropriate uec-component-listener is running.

   4. Verify Registration.

   Steps a to e should only be required if you're using the UEC/PackageInstall method. Otherwise, if you are following this guide, these steps should already be completed automatically for you, and therefore you can skip "a" to "e".

2. Exchange Public Keys

   The Cloud Controller's eucalyptus user needs to have SSH access to the Walrus Controller, Cluster Controller, and Storage Controller as the eucalyptus user.

   Install the Cloud Controller's eucalyptus user's public ssh key by:

   - On the target controller, temporarily set a password for the eucalyptus user:

         sudo passwd eucalyptus

   - Then, on the Cloud Controller:

         sudo -u eucalyptus ssh-copy-id -i ~eucalyptus/.ssh/id_rsa.pub eucalyptus@<IP_OF_NODE>

   - You can now remove the password of the eucalyptus account on the target controller, if you wish:

         sudo passwd -d eucalyptus

3. Configurare i servizi

   Nel Cloud Controller:

   - Per la registrazione del Cluster Controller:

     - Define the shell variable CC_NAME in `/etc/eucalyptus/eucalyptus-cc.conf`

     - Define the shell variable CC_IP_ADDR in `/etc/eucalyptus/eucalyptus-ipaddr.conf`, as a space separated list of one or more IP addresses.

   - Per la registrazione del Walrus Controller:

     - Define the shell variable WALRUS_IP_ADDR in `/etc/eucalyptus/eucalyptus-ipaddr.conf`, as a single IP address.

   Nel Cluster Controller:

   - Per la registrazione dello Storage Controller:

     - Define the shell variable CC_NAME in `/etc/eucalyptus/eucalyptus-cc.conf`

     - Define the shell variable SC_IP_ADDR in `/etc/eucalyptus/eucalyptus-ipaddr.conf`, as a space separated list of one or more IP addresses.

4. Publish

   Now start the publication services.

   - Walrus Controller:

         sudo start eucalyptus-walrus-publication

   - Cluster Controller:

         sudo start eucalyptus-cc-publication

   - Storage Controller:

         sudo start eucalyptus-sc-publication

   - Node Controller:

         sudo start eucalyptus-nc-publication

5. Start the Listener

   Nel Cloud Controller e nei Cluster Controller, eseguire:

       sudo start uec-component-listener

6. Verificare la registrazione

       cat /var/log/eucalyptus/registration.log
       2010-04-08 15:46:36-05:00 | 24243 -> Calling node cluster1 node 10.1.1.75
       2010-04-08 15:46:36-05:00 | 24243 -> euca_conf --register-nodes returned 0
       2010-04-08 15:48:47-05:00 | 25858 -> Calling walrus Walrus 10.1.1.71
       2010-04-08 15:48:51-05:00 | 25858 -> euca_conf --register-walrus returned 0
       2010-04-08 15:49:04-05:00 | 26237 -> Calling cluster cluster1 10.1.1.71
       2010-04-08 15:49:08-05:00 | 26237 -> euca_conf --register-cluster returned 0
       2010-04-08 15:49:17-05:00 | 26644 -> Calling storage cluster1 storage 10.1.1.71
       2010-04-08 15:49:18-05:00 | 26644 -> euca_conf --register-sc returned 0

   L'output sul proprio computer potrebbe essere diverso dall'esempio precedente.

### Ottenere le credenziali

After installing and booting the Cloud Controller, users of the cloud will need to retrieve their credentials. This can be done either through a web browser, or at the command line.

#### Da un browser

1. From your web browser (either remotely or on your Ubuntu server) access the following URL:

       https://<indirizzo-ip-cloud-controller>:8443/

   You must use a secure connection, so make sure you use "https" not "http" in your URL. You will get a security certificate warning. You will have to add an exception to view the page. If you do not accept it you will not be able to view the Eucalyptus configuration page.

2. Use username 'admin' and password 'admin' for the first time login (you will be prompted to change your password).

3. Then follow the on-screen instructions to update the admin password and email address.

4. Once the first time configuration process is completed, click the 'credentials' tab located in the top-left portion of the screen.

5. Click the 'Download Credentials' button to get your certificates.

6. Salvare il tutto in `~/.euca`.

7. Unzip the downloaded zip file into a safe location (`~/.euca`).

       unzip -d ~/.euca mycreds.zip

#### Dalla riga di comando

- Alternatively, if you are on the command line of the Cloud Controller, you can run:

      mkdir -p ~/.euca
      chmod 700 ~/.euca
      cd ~/.euca
      sudo euca_conf --get-credentials mycreds.zip
      unzip mycreds.zip
      ln -s ~/.euca/eucarc ~/.eucarc
      cd -

#### Estrarre e utilizzare le credenziali

Now you will need to setup EC2 API and AMI tools on your server using X.509 certificates.

1. Installare gli strumenti richiesti:

       sudo apt-get install euca2ools

2. Per verificare che tutto funzioni correttamente, recuperare i dettagli di disponibilità del cluster locale:

       . ~/.euca/eucarc
       euca-describe-availability-zones verbose
       AVAILABILITYZONE   myowncloud                 192.168.1.1
       AVAILABILITYZONE   |- vm types                free / max   cpu   ram  disk
       AVAILABILITYZONE   |- m1.small                0004 / 0004   1    128     2
       AVAILABILITYZONE   |- c1.medium               0004 / 0004   1    256     5
       AVAILABILITYZONE   |- m1.large                0002 / 0002   2    512    10
       AVAILABILITYZONE   |- m1.xlarge               0002 / 0002   2   1024    20
       AVAILABILITYZONE   |- c1.xlarge               0001 / 0001   4   2048    20

   L'output del comando precedente potrebbe essere diverso.

### Install an Image from the Store

The following is by far the simplest way to install an image. However, advanced users may be interested in learning how to Bundle their own image.

The simplest way to add an image to UEC is to install it from the Image Store on the UEC web interface.

1. Access the web interface at the following URL (Make sure you specify https):

       https://<indirizzo-ip-cloud-controller>:8443/

2. Enter your login and password (if requested, as you may still be logged in from earlier).

3. Click on the Store tab.

4. Browse available images.

5. Click on install for the image you want.

Once the image has been downloaded and installed, you can click on "How to run?" that will be displayed below the image button to view the command to execute to instantiate (start) this image. The image will also appear on the list given on the Image tab.

### Eseguire un'immagine

Ci sono diversi modi per inizializzare un'immagine in UEC:

- Usare la riga di comando.

- Use one of the UEC compatible management tools such as Landscape.

- Use the ElasticFox extension to Firefox.

Di seguito viene descritta la procedura dalla riga di comando:

1. Before running an instance of your image, you should first create a keypair (ssh key) that you can use to log into your instance as root, once it boots. The key is stored, so you will only have to do this once.

   Eseguire il seguente comando:

       if [ ! -e ~/.euca/mykey.priv ]; then
           mkdir -p -m 700 ~/.euca
           touch ~/.euca/mykey.priv
           chmod 0600 ~/.euca/mykey.priv
           euca-add-keypair mykey > ~/.euca/mykey.priv
       fi

   You can call your key whatever you like (in this example, the key is called 'mykey'), but remember what it is called. If you forget, you can always run euca-describe-keypairs to get a list of created keys stored in the system.

2. È necessario consentire accesso alla porta 22 in tutte le istanze:

       euca-authorize default -P tcp -p 22 -s 0.0.0.0/0

3. È quindi possibile creare istanze delle proprie immagini registrate:

       euca-run-instances $EMI -k mykey -t m1.small

   If you receive an error regarding image_id, you may find it by viewing Images page or click "How to Run" on the Store page to see the sample command.

4. The first time you run an instance, the system will be setting up caches for the image from which it will be created. This can often take some time the first time an instance is run given that VM images are usually quite large.

   To monitor the state of your instance, run:

       watch -n5 euca-describe-instances

   In the output, you should see information about the instance, including its state. While first-time caching is being performed, the instance's state will be 'pending'.

5. When the instance is fully started, the above state will become 'running'. Look at the IP address assigned to your instance in the output, then connect to it:

       IPADDR=$(euca-describe-instances | grep $EMI | grep running | tail -n1 | awk '{print $4}')
       ssh -i ~/.euca/mykey.priv ubuntu@$IPADDR

6. And when you are done with this instance, exit your SSH connection, then terminate your instance:

       INSTANCEID=$(euca-describe-instances | grep $EMI | grep running | tail -n1 | awk '{print $2}')
       euca-terminate-instances $INSTANCEID

#### Primo avvio

The cloud-init package provides "first boot" functionality for the Ubuntu UEC images. It is in charge of taking the generic filesystem image that is booting and customizing it for this particular instance. That includes things like:

- Setting the hostname.

- Putting the provided ssh public keys into `~ubuntu/.ssh/authorized_keys`.

- Running a user provided script, or otherwise modifying the image.

Setting hostname and configuring a system so the person who launched it can actually log into it are not terribly interesting. The interesting things that can be done with cloud-init are made possible by data provided at launch time called user-data.

First, install the cloud-init package:

    sudo apt-get install cloud-init

If the user-data starts with '#!', then it will be stored and executed as root late in the boot process of the instance's first boot (similar to a traditional 'rc.local' script). Output from the script is directed to the console.

Per esempio, creare un file chiamato `ud.txt` che contiene quanto segue:

    #!/bin/sh
    echo ========== Hello World: $(date) ==========
    echo "I have been up for $(cut -d\  -f 1 < /proc/uptime) sec"

Ovviare un'istanza con l'opzione --user-data-file:

    euca-run-instances $EMI -k mykey -t m1.small --user-data-file=ud.txt

Attendere che il sistema e la console siano disponibili. Per visualizzare i risultati, digitare:

    euca-get-console-output $EMI | grep --after-context=1 Hello
    ========== Hello World: Mon Mar 29 18:05:05 UTC 2010 ==========
    I have been up for 28.26 sec

L'output del proprio comando potrebbe variare.

The simple approach shown above gives a great deal of power. The user-data can contain a script in any language where an interpreter already exists in the image (#!/bin/sh, #!/usr/bin/python, #!/usr/bin/perl, #!/usr/bin/awk ... ).

For many cases, the user may not be interested in writing a program. For this case, cloud-init provides "cloud-config", a configuration based approach towards customization. To utilize the cloud-config syntax, the supplied user-data must start with a '#cloud-config'.

Per esempio, creare un file di testo chiamato `clout-config.txt` contenente:

    #cloud-config
    apt_upgrade: true
    apt_sources:
    - source: "ppa:ubuntu-server-edgers/server-edgers-apache "

    packages:
    - build-essential
    - pastebinit

    runcmd:
    - echo ======= Hello World =====
    - echo "I have been up for $(cut -d\  -f 1 < /proc/uptime) sec"

Creare una nuova istanza:

    euca-run-instances $EMI -k mykey -t m1.small --user-data-file=cloud-config.txt

Una volta avviato il sistema, dovrebbe avere:

- Added the Apache Edgers PPA.

- Run an upgrade to get all updates available

- Installed the 'build-essential' and 'pastebinit' packages

- Printed a similar message to the script above

The Apache Edgers PPA, in the above example, contains the latest version of Apache from upstream source repositories. Package versions in the PPA are unsupported, and depending on your situation, this may or may not be desirable. See the Ubuntu Server Edgers web page for more details.

The 'runcmd' commands are run at the same point in boot that the '#!' script would run in the previous example. It is present to allow you to get the full power of a scripting language if you need it without abandoning cloud-config.

For more information on what kinds of things can be done with cloud-config, see doc/examples in the source.

### Ulteriori informazioni

How to use the Storage Controller

Controllare i servizi di Eucalyptus

- sudo service eucalyptus [start|stop|restart] (on the CLC/CC/SC/Walrus side)

- sudo service eucalyptus-nc [start|stop|restart] (on the Node side)

Posizione di alcuni dei file importanti:

- File di registro:

  - /var/log/eucalyptus

- File di configurazione:

  - /etc/eucalyptus

- Database:

  - /var/lib/eucalyptus/db

- Chiavi:

  - /var/lib/eucalyptus

  - /var/lib/eucalyptus/.ssh

Don't forget to source your `~/.euca/eucarc` before running the client tools.

### Riferimenti

- Per informazioni sul caricamento delle istanze, consultare la documentazione della comunità internazionale.

- Eucalyptus Project Site (forums, documentation, downloads).

- Eucalyptus on Launchpad (bugs, code).

- Eucalyptus Troubleshooting (1.5).

- Register your cloud with RightScale.

- È anche possibile trovare aiuto nei canali IRC #ubuntu-virt, #eucalyptuse #ubuntu-server sul server Freenode.

### Glossario

The Ubuntu Enterprise Cloud documentation uses terminology that might be unfamiliar to some readers. This page is intended to provide a glossary of such terms and acronyms.

- Cloud - A federated set of physical machines that offer computing resources through virtual machines, provisioned and recollected dynamically.

- Cloud Controller (CLC) - Eucalyptus component that provides the web UI (an https server on port 8443), and implements the Amazon EC2 API. There should be only one Cloud Controller in an installation of UEC. This service is provided by the Ubuntu eucalyptus-cloud package.

- Cluster - A collection of nodes, associated with a Cluster Controller. There can be more than one Cluster in an installation of UEC. Clusters are sometimes physically separate sets of nodes. (e.g. floor1, floor2, floor2).

- Cluster Controller (CC) - Eucalyptus component that manages collections of node resources. This service is provided by the Ubuntu eucalyptus-cc package.

- EBS - Elastic Block Storage.

- EC2 - Elastic Compute Cloud. Amazon's pay-by-the-hour, pay-by-the-gigabyte public cloud computing offering.

- EKI - Eucalyptus Kernel Image.

- EMI - Eucalyptus Machine Image.

- ERI - Eucalyptus Ramdisk Image.

- Eucalyptus - Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems. An open source project originally from the University of California at Santa Barbara, now supported by Eucalyptus Systems, a Canonical Partner.

- Front-end - Physical machine hosting one (or more) of the high level Eucalyptus components (cloud, walrus, storage controller, cluster controller).

- Node - A node is a physical machine that's capable of running virtual machines, running a node controller. Within Ubuntu, this generally means that the CPU has VT extensions, and can run the KVM hypervisor.

- Node Controller (NC) - Eucalyptus component that runs on nodes which host the virtual machines that comprise the cloud. This service is provided by the Ubuntu package eucalyptus-nc.

- S3 - Simple Storage Service. Amazon's pay-by-the-gigabyte persistent storage solution for EC2.

- Storage Controller (SC) - Eucalyptus component that manages dynamic block storage services (EBS). Each 'cluster' in a Eucalyptus installation can have its own Storage Controller. This component is provided by the eucalyptus-sc package.

- UEC - Ubuntu Enterprise Cloud. Ubuntu's cloud computing solution, based on Eucalyptus.

- VM - Virtual Machine.

- VT - Virtualization Technology. An optional feature of some modern CPUs, allowing for accelerated virtual machine hosting.

- Walrus - Eucalyptus component that implements the Amazon S3 API, used for storing VM images and user storage using S3 bucket put/get abstractions.

JeOS e vmbuilder |  | Capitolo 20. Cluster