OpenStack : Exemple d’utilisation pour présenter Glance

Written by admin on April 23, 2014 Categories: OpenStack Tags: , , , , , ,

Glance est la stack de gestion des images (équivalent des templates chez VMWare) sur OpenStack. Son rôle va être de stocker, organiser et fournir les images systèmes aux instances.

Une image glance est un système d’exploitation qui peut être de différente nature et stocké de différente manière. On peut ainsi retrouver des imges Windows Server en format RAW, des images RHEL au format QCOW2 ou encore un Linux Live au format ISO. Associé à ce système, certaines caractéristiques minimale de l’enveloppe peuvent y être ajoutée.

Glance peut supporter plusieurs type de backend pour son stockage comme par exemple : des File System, de l’Object Storage (Swift), S3, HTTP (Read Only), RDB, GridFS.

Pour plus de détails, voir directement le projet sur openstack.org.

Contexte de l’exemple

Dans le cadre d’un POC, nous allons essentiellement nous servir de machines virtuelles x86.

  +-------------------------+           +--------------------------+
  |                         |           |                          |
  |                         |           |                          |
  |     controller01        |           |       compute01          |
  |                         |           |                          |
  |                         |           |                          |
  |  eth0     eth2    eth3  |           |  eth3    eth2      eth0  |
  +-------------------------+           +--------------------------+
      |        |       |                    |       |         |
      |        |       |                    |       |         |
      |        |       |   Réseau "privé"   |       |         |
      |        |       +--------------------+       |         |
      |        |           Réseau "public"          |         |
      |        +------------------------------------+         |
      |                    Réseau "admin"                     |
      +-------------------------------------------------------+

L’exemple que nous allons voir sera très simple, il consistera créer une image dans glance et l’utiliser en démarrant une instance. Nous verrons également comment créer une image en utilisant la fonctionnalité de snapshoting de cinder.

Pour faciliter le déroulement, les opérations seront effectuées avec le compte admin même si certaines pourraient être faite en tant que simple user du tenant “admin”.

Prérequis

Comme les méthodes de déploiement d’OpenStack varient beaucoup, nous n’allons pas détailler ici comment mettre en place le service. Nous partons du principe que le service est “up and running”. Nous avons donc un service qui fonctionne avec les stack suivantes : keystone, glance, nova, horizon et neutron.
Nous avons également les droits d’administration du service chargés dans l’environnement de la ligne de commande.

[root@hostnamedab ~(keystone_admin)]# keystone service-list
+----------------------------------+------------+----------------+----------------------------+
|                id                |    name    |      type      |        description         |
+----------------------------------+------------+----------------+----------------------------+
| b0bee0b0e9f34f8bafd4ba7d54ba3d6e | ceilometer |    metering    | Openstack Metering Service |
| 2a06e498c2b84cb48ebd578f6fa48297 |   cinder   |     volume     |       Cinder Service       |
| 14fa9ec07e34443bba5daac33266671f | cinder_v2  |    volumev2    |     Cinder Service v2      |
| 1f4e441ee6d5489281d3aa8d64e2a746 |   glance   |     image      |  Openstack Image Service   |
| d189a66300e04e9b8ac8cacad3eca3a1 |    heat    | orchestration  |          Heat API          |
| f96774576d8846d7bdd04ec9ccefabb5 |  heat-cfn  | cloudformation |  Heat CloudFormation API   |
| 9365681a0e3945e2806e83d85b8319bf |  keystone  |    identity    | OpenStack Identity Service |
| f13396b4b11c45baa59f9de685f25020 |  neutron   |    network     | Neutron Networking Service |
| 6cf6626654b04b89a988483fb566508d |    nova    |    compute     | Openstack Compute Service  |
| f783eff435804e449d529ef6d03745bf |  nova_ec2  |      ec2       |        EC2 Service         |
+----------------------------------+------------+----------------+----------------------------+
[root@hostnamedab ~(keystone_admin)]# nova service-list
+------------------+-------------+----------+---------+-------+----------------------------+-----------------+
| Binary           | Host        | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+------------------+-------------+----------+---------+-------+----------------------------+-----------------+
| nova-consoleauth | hostnamedab | internal | enabled | up    | 2014-02-26T14:29:25.000000 | None            |
| nova-scheduler   | hostnamedab | internal | enabled | up    | 2014-02-26T14:29:25.000000 | None            |
| nova-conductor   | hostnamedab | internal | enabled | up    | 2014-02-26T14:29:24.000000 | None            |
| nova-cert        | hostnamedab | internal | enabled | up    | 2014-02-26T14:29:25.000000 | None            |
| nova-compute     | hostnamedbj | nova     | enabled | up    | 2014-02-26T14:29:28.000000 | None            |
| nova-console     | hostnamedab | internal | enabled | down  | 2014-02-26T09:30:20.000000 | None            |
+------------------+-------------+----------+---------+-------+----------------------------+-----------------+

Composition de la stack Glance

Glance est un des services les plus simples d’OpenStack. Il est constitué d’un service d’API (glance-api) et d’un service de catalogue (glance-registry).

Configuration

Ce n’est pas le lieu ici pour discuter de la configuration, mais voici tout de même un extrait des éléments les plus importants pour permettre de resituer le contexte.

[root@hostnamedab ~(keystone_admin)]# cat /etc/glance/glance-registry.conf | grep -v "^#" |grep -v "^$"
[DEFAULT]
verbose=False
debug=False
bind_host = 0.0.0.0
bind_port = 9191
backlog = 4096
sql_connection=mysql://glance:patapouf@192.168.41.129/glance
sql_idle_timeout = 3600
api_limit_max = 1000
limit_param_default = 25
use_syslog = False
[keystone_authtoken]
auth_host=192.168.41.129
auth_port=35357
auth_protocol=http
admin_tenant_name=services
admin_user=glance
admin_password=patapouf
auth_uri=http://192.168.41.129:5000/
[paste_deploy]
flavor=keystone
[root@hostnamedab ~(keystone_admin)]# cat /etc/glance/glance-cache.conf | grep -v "^#" |grep -v "^$"
[DEFAULT]
verbose=False
debug=False
image_cache_stall_time = 86400
image_cache_invalid_entry_grace_period = 3600
image_cache_max_size = 10737418240
registry_host = 0.0.0.0
registry_port = 9191
auth_url = http://localhost:5000/v2.0
admin_tenant_name = services
admin_user = glance
admin_password = patapouf
filesystem_store_datadir = /var/lib/glance/images/
swift_store_auth_version = 2
swift_store_auth_address = 127.0.0.1:5000/v2.0/
swift_store_user = jdoe:jdoe
swift_store_key = a86850deb2742ec3cb41518e26aa2d89
swift_store_container = glance
swift_store_create_container_on_put = False
swift_store_large_object_size = 5120
swift_store_large_object_chunk_size = 200
swift_enable_snet = False
s3_store_host = 127.0.0.1:8080/v1.0/
s3_store_access_key = 
s3_store_secret_key = 
s3_store_bucket = glance
s3_store_create_bucket_on_put = False

Exemple 1 : Création d’une image par simple upload

Récupération de l’image cirros. Cette image est souvent utilisés dans les tests sur OpenStack car elle est très légère et fournie les fonctionnalités de bases pour les tests.

[root@hostnamedab ~(keystone_admin)]# wget -q http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img

Upload de l’image.

[root@hostnamedab ~(keystone_admin)]# glance image-create --name cirros-3.2 --disk-format qcow2 --container-format bare --is-public True --file cirros-0.3.2-x86_64-disk.img
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 64d7c1cd2b6f60c92c14662941cb7913     |
| container_format | bare                                 |
| created_at       | 2014-03-24T15:11:13                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
| id               | 38de0608-74fd-47c3-8839-e0d839711171 |
| is_public        | True                                 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros-3.2                           |
| owner            | 5f8ffb039ce844bc94ba031be85e0936     |
| protected        | False                                |
| size             | 13167616                             |
| status           | active                               |
| updated_at       | 2014-03-24T15:11:14                  |
+------------------+--------------------------------------+
[root@hostnamedab ~(keystone_admin)]# glance image-list
+--------------------------------------+------------+-------------+------------------+----------+--------+
| ID                                   | Name       | Disk Format | Container Format | Size     | Status |
+--------------------------------------+------------+-------------+------------------+----------+--------+
| 38de0608-74fd-47c3-8839-e0d839711171 | cirros-3.2 | qcow2       | bare             | 13167616 | active |
+--------------------------------------+------------+-------------+------------------+----------+--------+
[root@hostnamedab ~(keystone_admin)]# glance image-show cirros-3.2
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 64d7c1cd2b6f60c92c14662941cb7913     |
| container_format | bare                                 |
| created_at       | 2014-03-24T15:11:13                  |
| deleted          | False                                |
| disk_format      | qcow2                                |
| id               | 38de0608-74fd-47c3-8839-e0d839711171 |
| is_public        | True                                 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros-3.2                           |
| owner            | 5f8ffb039ce844bc94ba031be85e0936     |
| protected        | False                                |
| size             | 13167616                             |
| status           | active                               |
| updated_at       | 2014-03-24T15:11:14                  |
+------------------+--------------------------------------+

Il est possible de mettre à jour les propriétés.

[root@hostnamedab ~(keystone_admin)]# glance image-update --min-disk 5 --min-ram 1024 cirros-3.2
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 64d7c1cd2b6f60c92c14662941cb7913     |
| container_format | bare                                 |
| created_at       | 2014-03-24T15:11:13                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
| id               | 38de0608-74fd-47c3-8839-e0d839711171 |
| is_public        | True                                 |
| min_disk         | 5                                    |
| min_ram          | 1024                                 |
| name             | cirros-3.2                           |
| owner            | 5f8ffb039ce844bc94ba031be85e0936     |
| protected        | False                                |
| size             | 13167616                             |
| status           | active                               |
| updated_at       | 2014-03-24T15:29:20                  |
+------------------+--------------------------------------+

La même image est visible depuis nova

[root@hostnamedab ~(keystone_admin)]# nova image-list
+--------------------------------------+------------+--------+--------+
| ID                                   | Name       | Status | Server |
+--------------------------------------+------------+--------+--------+
| 38de0608-74fd-47c3-8839-e0d839711171 | cirros-3.2 | ACTIVE |        |
+--------------------------------------+------------+--------+--------+
[root@hostnamedab ~(keystone_admin)]# nova image-show cirros-3.2
+----------------------+--------------------------------------+
| Property             | Value                                |
+----------------------+--------------------------------------+
| status               | ACTIVE                               |
| updated              | 2014-03-24T15:29:20Z                 |
| name                 | cirros-3.2                           |
| created              | 2014-03-24T15:11:13Z                 |
| minDisk              | 5                                    |
| progress             | 100                                  |
| minRam               | 1024                                 |
| OS-EXT-IMG-SIZE:size | 13167616                             |
| id                   | 38de0608-74fd-47c3-8839-e0d839711171 |
+----------------------+--------------------------------------+

Maintenant que tout est près, on peux démarrer une instance à partir de cette image.

[root@hostnamedab ~(keystone_admin)]# nova boot --flavor m1.small --image cirros-3.2 --security-groups allowall --nic net-id=00bcfcc4-236e-40bd-ba54-74c85ae0d05e instance2
+--------------------------------------+--------------------------------------+
| Property                             | Value                                |
+--------------------------------------+--------------------------------------+
| OS-EXT-STS:task_state                | scheduling                           |
| image                                | cirros-3.2                           |
| OS-EXT-STS:vm_state                  | building                             |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000010                    |
| OS-SRV-USG:launched_at               | None                                 |
| flavor                               | m1.small                             |
| id                                   | d49d6328-289d-4a17-a3d6-7847dfe3fdec |
| security_groups                      | [{u'name': u'allowall'}]             |
| user_id                              | ab1435cbeb5d46829299525fc4b37c7d     |
| OS-DCF:diskConfig                    | MANUAL                               |
| accessIPv4                           |                                      |
| accessIPv6                           |                                      |
| progress                             | 0                                    |
| OS-EXT-STS:power_state               | 0                                    |
| OS-EXT-AZ:availability_zone          | nova                                 |
| config_drive                         |                                      |
| status                               | BUILD                                |
| updated                              | 2014-03-24T16:07:51Z                 |
| hostId                               |                                      |
| OS-EXT-SRV-ATTR:host                 | None                                 |
| OS-SRV-USG:terminated_at             | None                                 |
| key_name                             | None                                 |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | None                                 |
| name                                 | instance2                            |
| adminPass                            | TL6U3BvSo8PQ                         |
| tenant_id                            | 5f8ffb039ce844bc94ba031be85e0936     |
| created                              | 2014-03-24T16:07:51Z                 |
| os-extended-volumes:volumes_attached | []                                   |
| metadata                             | {}                                   |
+--------------------------------------+--------------------------------------+
[root@hostnamedab ~(keystone_admin)]# nova show instance2
+--------------------------------------+----------------------------------------------------------+
| Property                             | Value                                                    |
+--------------------------------------+----------------------------------------------------------+
| status                               | ACTIVE                                                   |
| updated                              | 2014-03-24T16:08:58Z                                     |
| OS-EXT-STS:task_state                | None                                                     |
| OS-EXT-SRV-ATTR:host                 | hostnamedbj                                              |
| key_name                             | None                                                     |
| image                                | cirros-3.2 (38de0608-74fd-47c3-8839-e0d839711171)        |
| hostId                               | 67a93b4953c7cf7ac992a4c27f8551f70aa7e113df364523a225460f |
| OS-EXT-STS:vm_state                  | active                                                   |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000010                                        |
| OS-SRV-USG:launched_at               | 2014-03-24T16:08:58.000000                               |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | hostnamedbj.dsit.sncf.fr                                 |
| flavor                               | m1.small (2)                                             |
| id                                   | d49d6328-289d-4a17-a3d6-7847dfe3fdec                     |
| security_groups                      | [{u'name': u'allowall'}]                                 |
| OS-SRV-USG:terminated_at             | None                                                     |
| user_id                              | ab1435cbeb5d46829299525fc4b37c7d                         |
| name                                 | instance2                                                |
| created                              | 2014-03-24T16:07:51Z                                     |
| mynettenant network                  | 192.168.165.2                                            |
| tenant_id                            | 5f8ffb039ce844bc94ba031be85e0936                         |
| OS-DCF:diskConfig                    | MANUAL                                                   |
| metadata                             | {}                                                       |
| os-extended-volumes:volumes_attached | []                                                       |
| accessIPv4                           |                                                          |
| accessIPv6                           |                                                          |
| progress                             | 0                                                        |
| OS-EXT-STS:power_state               | 1                                                        |
| OS-EXT-AZ:availability_zone          | nova                                                     |
| config_drive                         |                                                          |
+--------------------------------------+----------------------------------------------------------+

Exemple 2 : Création d’une image depuis un volume

Il arrive souvent que le moyen le plus simple pour créer une image pour glance soit d’installer un système de manière classique, de le paramétrer avec tout les prérequis et de convertir le disque en image. Cinder permet de convertir directement un volume en image glance lorsque tout est près coté système guest.

[root@hostnamedab ~(keystone_admin)]# cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
|                  ID                  |   Status  | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| a3ac8866-2af5-4372-914e-e0546f8212d6 | available |   my_disk    |  1   |     None    |  false   |             |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
[root@hostnamedab ~(keystone_admin)]# cinder upload-to-image --disk-format qcow2 a3ac8866-2af5-4372-914e-e0546f8212d6 my_image
+---------------------+--------------------------------------+
|       Property      |                Value                 |
+---------------------+--------------------------------------+
|   container_format  |                 bare                 |
|     disk_format     |                qcow2                 |
| display_description |                 None                 |
|          id         | a3ac8866-2af5-4372-914e-e0546f8212d6 |
|       image_id      | d9fd5a31-9756-4172-9736-5ab088b81b25 |
|      image_name     |               my_image               |
|         size        |                  1                   |
|        status       |              uploading               |
|      updated_at     |      2014-03-25T09:22:29.000000      |
|     volume_type     |                 None                 |
+---------------------+--------------------------------------+
[root@hostnamedab ~(keystone_admin)]# glance image-show my_image
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 739eb10663a518363f6d007e2adcfacc     |
| container_format | bare                                 |
| created_at       | 2014-03-25T14:54:22                  |
| deleted          | False                                |
| disk_format      | qcow2                                |
| id               | d9fd5a31-9756-4172-9736-5ab088b81b25 |
| is_public        | False                                |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | my_image                             |
| owner            | 5f8ffb039ce844bc94ba031be85e0936     |
| protected        | False                                |
| size             | 393216                               |
| status           | active                               |
| updated_at       | 2014-03-25T14:54:30                  |
+------------------+--------------------------------------+
No Comments on OpenStack : Exemple d’utilisation pour présenter Glance

Leave a Reply

Your email address will not be published. Required fields are marked *