This IBM Redpaper provides a brief overview of OpenStack and a basic familiarity of its usage with the IBM XIV Storage System Gen3. The illustration scenario that is presented uses the OpenStack Folsom release implementation IaaS with Ubuntu Linux servers and the IBM Storage Driver for OpenStack. For more information on IBM Storage Systems, visit http://ibm.co/LIg7gk.
Visit http://bit.ly/KWh5Dx to 'Follow' the official Twitter handle of IBM India Smarter Computing.
2. 2 Using the IBM XIV Storage System in OpenStack Cloud Environments
Introduction
With the availability of the IBM Storage Driver for OpenStack, the XIV Storage System can
offer a range of capabilities that enable more effective storage automation deployments into
private or public clouds. Enabling OpenStack with XIV allows for storage to be made
available whenever needed without the traditional associated cost of highly skilled
administrators and infrastructure.
Cloud computing is defined as the use of computing services and resources (hardware and
software) that are delivered over a network, typically Ethernet. Cloud computing allows for
more economical usage of the data center hardware and software. It entrusts remote services
with a user’s data, software, and computation.
OpenStack is being developed as an industry standard cloud-computing project. It was
started by Rackspace Cloud and NASA in 2010. Currently more than 150 companies have
joined the project, including IBM.
OpenStack is a no-charge, open source software release under the terms of the Apache
License.
OpenStack has a modular architecture that encompasses three components:
Compute (Nova)
Object Storage (Swift)
Image service (Glance)
Several components are added:
OpenStack Identity Management (Keystone)
User Interface Dashboard (Horizon)
OpenStack Compute (Nova) is a cloud-computing fabric controller (the main part of an IaaS
system). It is written in Python and uses many external libraries, such as Eventlet (for
concurrent programming), Kombu (for AMQP communication), and SQLAlchemy (for
database access).
IBM XIV with the OpenStack community is on a mission to provide scalable, elastic cloud
computing for both public and private clouds, large and small. The cloud must be simple to
implement and massively scalable.
XIV Storage System with Folsom (the latest version of OpenStack at the time of writing and
referred to as OpenStack in the remainder of this paper) offers an open source cloud
implementation. This implementation allows organizations to deploy cloud-computing
capabilities on standard hardware.
There are several releases. The current release is Folsom (September 2012). For the latest
information, see the following website:
http://www.openstack.org/software/folsom/
Important: Illustrations of commands in this paper are based on the Folsom release. This
release offers two options in terms of block storage: nova-volume and Cinder. Both are
nearly identical in terms of functionality, APIs, and even the general theory of operation.
Remember, however, that nova-volume is deprecated and will be removed at the Grizzly
release.
3. Using the IBM XIV Storage System in OpenStack Cloud Environments 3
Concept
The OpenStack cloud connects to the XIV over an iSCSI connection. Remote cloud users
can issue requests for storage resources from the OpenStack cloud. These requests are
transparently handled by the IBM Storage Driver. The IBM Storage Driver communicates with
the XIV Storage System and controls the storage volumes on it.
Terminology
OpenStack introduced a specific terminology to describes its features and functions, including
these important terms:
User Any person, user, or administrator who wants to use cloud services or
administer tenants.
Role User, administrator, or system service within a tenant
Tenant OpenStack supports the concept of multi-tenancy as an organizational
structure. By this approach, resources are managed within a tenant
and can share services. A tenant offers the ability to correlate usage
tracking, auditing, authorization, and so on.
Service OpenStack and Linux services have some similarities. A Linux service
(formally a daemon) is a program that runs in the background and
listens to a port to respond to service requests. An OpenStack service
is a group of Linux services that work together. For example,
nova-compute and nova-scheduler are two of the Linux services that
implement the Compute service.
Hypervisor Software that allows multiple virtual images to share a single physical
machine. OpenStack Compute requires a hypervisor, and Compute
controls the hypervisors through an API server. The process for
selecting a hypervisor usually is prioritizing and deciding based on
budget and resource constraints and the inevitable list of supported
features and required technical specifications. Most developments are
done with the kernel-based virtual machine (KVM) and Xen based
hypervisors. For a detailed list of features and support across the
hypervisors, see this website:
http://wiki.openstack.org/HypervisorSupportMatrix
The types of virtualization standards that can be used with Compute
include KVM, Quick Emulator (QEMU), VMware ESX/ESXi 4.1
update 1, and Xen.
Code names Every OpenStack service has a code name as shown in Table 1 on
page 4. These code names are reflected in the names of configuration
files and command-line utility programs. For example, the Keystone
Identity service has a configuration file called keystone.conf.
Service: In this document, we use the term “service” to refer both to Linux and OpenStack
services.
4. 4 Using the IBM XIV Storage System in OpenStack Cloud Environments
Table 1 OpenStack code name
OpenStack architecture and components
The OpenStack architecture and its components are described.
What is Nova
Nova is a global collaboration of developers and cloud-computing technologists that seek to
produce a ubiquitous IaaS open source cloud-computing platform for public and private
clouds. OpenStack was founded by Rackspace Hosting and NASA jointly in July 2010. Nova
consists of 160 companies and close to 3,000 developers.
OpenStack components
OpenStack has several components:
Swift (Object Store) provides object storage and allows users to store or retrieve files in a
blob mode.
Glance (Image) provides a catalog and repository for disk images that are mostly used in
OpenStack Compute. It has several components:
– Glance-api accepts Image API calls for discovery, retrieval, and store images
– Glance-registry stores, processes, and retrieves metadata about images (size, type,
and so on)
– A database to store the image metadata
– A data repository for the image files
Nova (Compute) provides virtual machines (VM) or instances. Nova interacts with several
OpenStack services, such as Keystone, Horizon, or Glance. The API process can upload
and query Glance while nova-compute downloads images for use in launching images.
Nova is the most complex and distributed component of OpenStack. Many processes are
involved to handle user API requests and launch virtual machines.
The following list is a summary of Nova processes:
– nova-api handles user compute API calls, synchronizes activities, and enforces policy.
– nova-compute process is a daemon that launches and ends virtual machine instances
by using the hypervisor’s APIs.
Service name Code name
Identity Keystone
Compute Nova
Image Glance
Dashboard Horizon
Object Store Swift
Block Storage Cinder
5. Using the IBM XIV Storage System in OpenStack Cloud Environments 5
– nova-volume manages the creation, attachment, and detachment of persistent
volumes to compute instances. It uses volumes from various providers, such as iSCSI
or Rados Block Device in Ceph. IBM provides the XIV Storage driver for OpenStack
through the nova-volume driver architecture. The OpenStack project Cinder will
probably replace nova-volume, and the XIV nova volume driver will offer full
functionality in a future release.
– nova-network manages the network by setting up bridge or changes to iptables rules.
– nova-schedule, which is implemented with RabbitMQ or Qpid, determines where
instances run based on requests that are in the message queue.
– The SQL database stores items for the cloud. The items can be a type of instances,
available networks, projects, and so on.
– nova-console and nova-consoleauth offer a proxy to access the virtual machines to
users.
Horizon (Dashboard) provides a modular web-based user interface for all the OpenStack
services. With this web GUI, you can perform most operations on your cloud. You can
create volumes, launch an instance, assign IP addresses, and set access controls.
Keystone (Identity) provides authentication and authorization for all the OpenStack
services. It also provides a service catalog of services within a particular OpenStack
cloud.
Quantum (Network) provides “network connectivity as a service” between interface
devices that are managed by other OpenStack services (most likely Nova). The service
works by allowing users to create their own networks and then attach interfaces to them.
Cinder (Block Storage) provides persistent block storage to guest VMs. This project was
born from code that was originally in Nova (the nova-volume service). The IBM Storage
Driver for OpenStack is fully supported with Cinder 2012.11 and provides “block storage
as a service” via iSCSI to VMs.
For more details about Cinder and the IBM Storage Driver for OpenStack, see this web
page:
http://wiki.openstack.org/Cinder
In addition to these core projects, there are a number of “incubation” projects that are being
considered for future inclusion in the OpenStack core.
Regarding IBM Storage, read more at this web page:
http://ibmresearchnews.blogspot.com/2012/10/storage-drivers-take-advantage-of.html
Important: The Folsom release offers two options in terms of block storage: nova-volume
and Cinder. Both are nearly identical in terms of functionality, APIs, and even the general
theory of operation. Illustrations in this paper are based on nova-volume. Remember,
however, that nova-volume is deprecated and will be removed at the Grizzly release.
6. 6 Using the IBM XIV Storage System in OpenStack Cloud Environments
Figure 1 depicts the OpenStack services.
Figure 1 OpenStack architecture
Getting started
To successfully implement and test the OpenStack cloud environment by using the IBM
Storage Driver for OpenStack, follow these steps:
1. Install a supported Linux Distribution on every node (for example, any server that is
connected to the network where a Nova component is installed).
2. Configure separate networks: a management network, a storage network, and a service
network for public access to cloud services.
3. Install and configure a supported database to store credentials and centralized items.
4. Install and configure the cloud controller.
5. Install and configure the OpenStack components (Network, Compute, and Volume) on the
other nodes.
6. Create a storage pool for the OpenStack on the XIV Storage System
7. Install IBM Storage Driver for OpenStack on the Compute Node.
8. Install and configure the supported hypervisors.
9. Build and import operating system images to the catalog.
Important: The storage pool must be created prior to installing the storage driver for
OpenStack.
Restriction: The driver supports a single XIV Storage System. To use multiple storage
systems, multiple instances of the driver must be run.
7. Using the IBM XIV Storage System in OpenStack Cloud Environments 7
In the environment that we used for our experimentation, the OpenStack infrastructure is set
up with a single node that is hosted by Ubuntu Server 12.04.1 Long-Term Support (LTS). The
following key components were installed and configured:
Control Node
Image Node
Volume Node (Cinder)
Compute Node
IBM Storage Driver for OpenStack
IBM XIV Storage System Gen3
OpenStack system requirements
Before you deploy the supported infrastructure, verify that you have the appropriate
hardware. Ensure that you have the servers, SAN, and IP switches that are required to set
the environment. See Table 2.
For the latest information, see the release notes at this website:
http://pic.dhe.ibm.com/infocenter/strhosts/ic/topic/com.ibm.help.strghosts.doc/nov
a_pdfs.html
Hardware specifications
There are several ways to implement the Nova OpenStack infrastructure. Consider single
and the multiple node configurations:
Single node: We used this configuration for our test purposes (it is understood that we
cannot expect great performance from such a small environment). This configuration
cannot deliver the performance that most cloud environments require. A virtualized
environment can be enough to deploy this configuration. See Figure 2 on page 8.
Multiple nodes: In this environment, Nova components can be distributed across several
systems. Use this setup for a typical production environment. For small environments, see
Figure 3 and Table 3 on page 8. For the requirements for larger environments, see Table 4
on page 9.
Table 2 Single-node requirements
Installation and configuration: Detailed installation and configuration steps for all
required components (Linux, network, or SAN configuration, and so on) are beyond the
scope of this paper.
Nova component Minimum requirements Preferred setup
Controller
Network
Volume
Compute
IBM Storage Driver for
OpenStack
Ubuntu 12.04 or later, x64
edition
CPU: Dual-core 64 bits
RAM: 8 GB
Disk Drive: 60 GB
Network: 1 x 1 GbE
Ubuntu 12.04 or later, x64
edition
CPU: Dual-core 64 bits
RAM: 16 GB
Disk Drive: 80 GB
Network: 1 x 1 GbE
8. 8 Using the IBM XIV Storage System in OpenStack Cloud Environments
Figure 2 Nova single node
Table 3 Multiple node (small)
Nova component Minimum requirements Preferred setup
Controller
Network
Volume
Ubuntu 12.04 or later, x64
edition
CPU: Dual-core 64 bits
RAM: 8 GB
Disk Drive: 60 GB
Network: 1 x 1 GbE
Ubuntu 12.04 or later, x64
edition
CPU: Dual-core 64 bits
RAM: 8 GB
Disk Drive: 60 GB
Network: 1 x 1 GbE
Compute Node
IBM Storage Driver for
OpenStack
Ubuntu 12.04 or later, x64
edition
CPU: Quad core
RAM: 16 GB
Disk Drive: 60 GB
Network: 2 x 1 GbE
Ubuntu 12.04 or later, x64
edition
CPU: > Quad core
RAM: > 32 GB
Disk Drive: 60 GB
Network: 1 x 1GbE +
1 x 10 GbE
SAN
IP
Nova Single Node
Contr oller, Volume, Network,
Compute Node, IBM Storage
Driver for OpenStack
iSCSI attachm ent
Nova Single Node
Contr oller, Volume, Network,
Compute Node, IBM Storage
Driver for OpenStack
Fibre Channel Attachment
XIV
SAN
IP
Nova Single Node
Controller, Volume, Network,
Compute Node, IBM Storage
Driver for OpenStack
iSCSI attachment
Nova Single Node
Controller, Volume, Network,
Compute Node
Fibre Channel Attachment
XIV
9. Using the IBM XIV Storage System in OpenStack Cloud Environments 9
Figure 3 Nova multiple node
Table 4 Multiple-node large environment requirements
Nova component Minimum requirements Preferred setup
Controller Node Ubuntu 12.04 or later, x64
edition
CPU: Dual core
RAM: 8 GB
Disk Drive: 60 GB
Network: 1 x 1 GbE
Ubuntu 12.04 or later, x64
edition
CPU: Dual core
RAM: 8 GB
Disk Drive: 60 GB
Network: 1 x 1 GbE
Network Node Ubuntu 12.04 or later, x64
edition
CPU: 1 x 64 bits
RAM: 1 GB
Disk Drive: 60 GB
Network: 1 x 1GbE
Ubuntu 12.04 or later, x64
edition
CPU: 1 x 64 bits
RAM: 4 GB
Disk Drive: 60 GB
Network: 1 x 1 GbE
Volume (Cinder)Node Ubuntu 12.04 or later, x64
edition
CPU: Dual core
RAM: 4 GB
Disk Drive: 30 GB
Network: 1 x 1 GbE
Ubuntu 12.04 or later, x64
edition
CPU: Dual core
RAM: 4 GB
Disk Drive: > 60 GB
Network: 1 x 1 GbE + 1 x
10 GbE
SAN: 1 Fibre Channel (FC) card
Controller Node
Contr oller Node
Compute Node
Storage Node
Storage Node
Cinder Node
IBM Storage Driver for OpenStack
XIV
External
Network
IP
SAN
10. 10 Using the IBM XIV Storage System in OpenStack Cloud Environments
Installation
The first step is to install Ubuntu Server 12.04.1 (x64) and then to update the APT repository
with OpenStack Folsom. Then, install the MySQL Server and OpenStack components.
Repository configuration
To ensure that you have the up-to-date release of the operating system, update the system.
Add the appropriate repository for OpenStack and add the following lines to
/etc/apt/sources.list:
deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/folsom main
deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-proposed/folsom main
Then, update the system as shown in Example 1.
Example 1 APT repository
# sudo aptitude update
# sudo aptitude install ubuntu-cloud-keyring
# sudo aptitude upgrade
Configuration prerequisite
To avoid issues when you use bridging with nova-dhcpbridge or an HTTP service, consider
some optional dependencies and install the initial packages as shown in Example 2. These
packages are mandatory because they provide important utilities that you need.
Example 2 Installing initial packages
# sudo aptitude install dnsmasq-utils bridge-utils
In a multiple-node configuration, the Network Time Protocol (NTP) server must be used to
synchronize time on all OpenStack nodes. Install NTP as shown in Example 3 on page 10.
Example 3 Installing the NTP server
# sudo aptitude install ntp
Compute Node Ubuntu 12.04 or later, x64
edition
CPU: Dual-core 64 bits
RAM: 4 GB
Disk Drive: 30 GB
Network: 2 x 1 GbE
SAN: 2 x 1 Fibre Channel card
Ubuntu 12.04 or later, x64
edition
CPU: > Quad-core 64 bits with
Intel VT or AMD-V
RAM: 32 GB
Disk Drive: >60 GB
Network: 1 x 1 GbE + 2 x
10 GbE
SAN: 2 x Fibre Channel card
Important: These requirements are provided as is and are based on code that was
available at the time of writing this paper. For the latest information, see the IBM Storage
Driver for OpenStack release notes at this web page:
http://pic.dhe.ibm.com/infocenter/strhosts/ic/topic/com.ibm.help.strghosts.doc/
nova_pdfs.html
Nova component Minimum requirements Preferred setup
11. Using the IBM XIV Storage System in OpenStack Cloud Environments 11
Verify the service is running:
# service ntp status
* NTP server is running
MySQL database
OpenStack uses several databases to store configuration items. Nova, Keystone, and Glance
can use MySQL, PostgreSQL, or SQLite3. In our environment, we use MySQL. Follow these
steps:
1. To install MySQL, run the following command:
# sudo aptitude install mysql-server
Set a new password for the root MySQL user as requested.
2. Validate that the database can be stopped and restarted. Also, validate that the
administrator’s password that was requested during the MySQL installation can be used
as shown in Example 4.
Example 4 Validate MySQL administrator account
# mysql -u root -ppassword
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 266
Server version: 5.5.29-0ubuntu0.12.04.1 (Ubuntu)
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> quit
Bye
To start MySQL after the reboot, run this command:
# sudo chkconfig mysql on
Keystone (Identity) installation and initial configuration
Keystone is the main authentication repository for all OpenStack services. Start by installing
and configuring Keystone. Then, populate the database with users, tenants, and services.
The assumption is that the repository is set up correctly and that you have the latest
OpenStack Folsom release. To set up the repository, see “Repository configuration” on
page 10.
Install the openstack-keystone package by running the following command:
# sudo aptitude install keystone
Administrator name and password: In our example, the MySQL database
administrator is root and the password is passw0rd.
12. 12 Using the IBM XIV Storage System in OpenStack Cloud Environments
After the Keystone installation, create a database that is named keystone. Then, create the
tables that are required to store Keystone Items.
Creating the keystone database manually
Create an empty database that is named keystone:
1. Create the keystone database with the command:
# mysql -u root -ppassw0rd -e ‘CREATE DATABASE keystone;’
2. To create the MySQL Keystone user and give full access to the keystone database that
you created, run this command:
# mysql -u root -ppassw0rd -e ‘GRANT ALL ON keystone.* TO
“keystone”@”localhost” IDENTIFIED BY “YOUR_KEYSTONE_PASSWORD”;’
Creating the keystone admin credential
To administer Keystone, you need to “source” the Keystone client’s environment variable with
the SERVICE_TOKEN and SERVICE_ENDPOINT. Follow these steps:
1. At the command prompt, enter the following commands:
# export SERVICE_TOKEN=$(openssl rand -hex 10)
# export SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0
2. Save the value of SERVICE_TOKEN in a file:
# echo $SERVICE_TOKEN > ~/keystone_admin_token
3. Update the /etc/keystone/keystone.conf file by setting the admin_token and connection
options:
# admin_token = ADMIN replaced by:
admin_token = SERVICE_TOKEN_VALUE
and
# connection = sqlite:////var/lib/keystone/keystone.db replaced by:
connection = mysql://keystone:KEYSTONE_PASSWORD@HOST_NAME/keystone
Keystone installation script: The Keystone installation script creates an SQLite database
on /var/lib/keystone/. We do not use SQLite as the main repository because the
preferred method is to use the separate MySQL installation process that we described in
“MySQL database” on page 11.
Password: In the preceding command, you created a MySQL user named “keystone”
with the password YOUR_KEYSTONE_PASSWORD. Replace YOUR_KEYSTONE_PASSWORD with
your own password and keep it in a safe place.
Tip: We use OpenSSL’s rand function, which might not be installed on your system, to
generate the Service Token Key.
Tip: Save the generated file (keystone_admin_token) in a safe place because the
content is used to configure other OpenStack components.
13. Using the IBM XIV Storage System in OpenStack Cloud Environments 13
Starting the Keystone service
Start the Keystone service and make it part of the system start procedure:
1. To start the Keystone service, run this command:
# sudo service openstack-keystone start
2. To make the service available after the system starts, run this command:
# sudo chkconfig openstack-keystone on
Verify that the Keystone service is running and that no errors exist in the Keystone log file:
1. Check whether the Keystone service is running. Run the command that is shown in
Example 5.
Example 5 Check Keystone service
# sudo service keystone status
keystone start/running, process 909
2. Check the error log:
# grep -i error /var/log/keystone/keystone.log
Synchronizing the keystone database
You can now synchronize the keystone database. The synchronization process creates the
required tables in the database. To synchronize the keystone database, run the
keystone-manage db_sync command in the terminal prompt as the root user.
After the database initialization, you can create users, roles, tenants, and services.
Creating users, roles, and tenants
When you install Keystone, the database tables are empty. You must create several items to
administer and allow other components to interact with Keystone. Example 6 shows how to
create a user that is called admin. Then, give that user the admin role within a defined tenant
named admin. Then, use the admin user that you created to manage Keystone.
Creating a user
Create an admin user with the Keystone user-create command as shown in Example 6.
Example 6 Keystone creating a user
# keystone user-create --name admin --pass passw0rd
+----------+----------------------------------------------------------------------
---------------------------------------------------+
| property | value
|
+----------+----------------------------------------------------------------------
---------------------------------------------------+
| email |
|
| enabled | true
|
Important: If you created the database manually, you must synchronize the database in
this way.
14. 14 Using the IBM XIV Storage System in OpenStack Cloud Environments
| id |
c8bcbaaa5a244e49919918bda9a894a4 |
| name | admin
|
| password |
$6$rounds=40000$wo3vvujrr2vxnu.c$5d5chfsptblnnsn/bnpnxwgtwhkkwnkrwgv/wrzsp9qu4tgok
unvdboavbz1p711o.2klfyqn/cwyhipckx2t/ |
| tenantid |
|
+----------+----------------------------------------------------------------------
---------------------------------------------------+
Creating a role
Create a role with the Keystone role-create command as shown in Example 7.
Example 7 Keystone creating a role
# keystone role-create --name admin
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| id | fb2c178790704412bf0cefaa66c5d01a |
| name | admin |
+----------+----------------------------------+
Creating a tenant
Create a tenant with the Keystone tenant-create command as shown in Example 8.
Example 8 Keystone creating a tenant
# keystone tenant-create --name admin
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | |
| enabled | True |
| id | e7b3098b7ac140c9ae9b0c78136ee7dc |
| name | admin |
+-------------+----------------------------------+
Add the admin user to the admin tenant with an admin role, as illustrated in Example 9.
Example 9 Keystone adding a user to a tenant with a role
# keystone user-role-add --user-id c8bcbaaa5a244e49919918bda9a894a4
> --role-id fb2c178790704412bf0cefaa66c5d01a
> --tenant-id e7b3098b7ac140c9ae9b0c78136ee7dc
Explanation: The IDs come from the previous commands. The user-add-role command
has no output.
15. Using the IBM XIV Storage System in OpenStack Cloud Environments 15
Defining an admin credential
A credential is the identification data, which is generally a user name, password, and API key,
that proves your identity. A credential is used for your authentication to the Identity service
before the Identity service issues a token to you. You can use this token with Keystone or
nova client for subsequent requests within the cloud infrastructure. The token, which is valid
for a defined duration, is required to access cloud resources.
To simplify the process, create the admin user’s credentials by using environment variables.
Table 5 describes the environment variables.
Table 5 Client environment variables
Create a credential file:
# echo export OS_USERNAME=admin >keystonerc_admin
# echo export OS_TENANT_NAME=admin >>keystonerc_admin
# echo export OS_PASSWORD=passw0rd >>keystonerc_admin
# echo export OS_AUTH_URL=http://127.0.0.1:35357/v2.0/ >>keystonerc_admin
Then, verify that the user can use the keystone client as shown in Example 10.
Example 10 Keystone validating the admin accounts
# . ~/keystonerc_admin
# keystone user-list
+----------------------------------+-------+---------+-------+
| id | name | enabled | email |
+----------------------------------+-------+---------+-------+
| c8bcbaaa5a244e49919918bda9a894a4 | admin | True | |
+----------------------------------+-------+---------+-------+
Environment variable Description
OS_USERNAME Your OpenStack user name.
OS_PASSWORD Your OpenStack user password.
OS_TENANT_NAME Your tenant name, which is provided with your
user name typically.
OS_AUTH_URL The endpoint for the Identity service (Keystone),
which the nova client uses for authentication.
Include the trailing forward slash (/) in the URL.
Otherwise, you receive a 404 error.
NOVACLIENT_DEBUG Set to 1 to show the underlying cURL (cURL is a
command-line tool for running REST API
requests with OpenSSL) commands with the
embedded API requests in the command
responses. Otherwise, omit this variable.
16. 16 Using the IBM XIV Storage System in OpenStack Cloud Environments
Creating the Service Tenant
This special tenant contains the services to be made available through the service catalog. To
create the Service Tenant, run the Keystone tenant-create client command as shown in
Example 11.
Example 11 Keystone creating the Service Tenant
# keystone tenant-create --name service --description "Service Tenant" --enabled
true
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Service Tenant |
| enabled | True |
| id | 8e40211618884c169e7c98166e903531 |
| name | service |
+-------------+----------------------------------+
Creating the glance user
The Glance service has many interactions with Keystone and other OpenStack services. To
allow Glance to interact and use cloud services, create the glance user in the Service Tenant.
Create the glance service user in the Service Tenant as shown in Example 12.
Example 12 Creating the service user in the Service Tenant
# keystone user-create --name glance --pass password --tenant_id
8e40211618884c169e7c98166e903531 --enabled true
+----------+----------------------------------------------------------------------
---------------------------------------------------+
| Property | Value
|
+----------+----------------------------------------------------------------------
---------------------------------------------------+
| email |
|
| enabled | True
|
| id |
39080354a8d6429da958931dab748ad4 |
| name | glance
|
| password |
$6$rounds=40000$TEM9ujWBDe/w4R30$bdmbuItECsSF3JEeGBEnMuGylTyFhItbIDvSTsF5Y4SBnPNW3
Cp62nJNBiO.Y5j3UlmnyNgwpxIfDbZjvYB1j1 |
| tenantId |
8e40211618884c169e7c98166e903531 |
+----------+----------------------------------------------------------------------
---------------------------------------------------+
Important: You must create a user in the Service Tenant for all services that are added
(Nova service user, EC2 user, and so on.)
17. Using the IBM XIV Storage System in OpenStack Cloud Environments 17
Grant the admin role to the glance user in the Service Tenant by using this command:
# keystone user-role-add --user-id 39080354a8d6429da958931dab748ad4 --role-id
fb2c178790704412bf0cefaa66c5d01a --tenant-id 8e40211618884c169e7c98166e903531
Creating the Nova service user
Create a Nova service user that is named nova in the Service Tenant as shown in
Example 13.
Example 13 Creating the Nova service user in the Service Tenant
# keystone user-create --tenant-id 8e40211618884c169e7c98166e903531 --name nova
--pass password --enabled true
+----------+-----------------------------------------------------------------------------+
| Property | Value
|
+----------+-----------------------------------------------------------------------------+
| email |
| enabled | True
| id |
09d138247dda46659f078c9a322901a8 |
| name | nova
|
| password |
$6$rounds=40000$7M5yTg0lPB/G3NEE$OCLxu5kwxwKO.5JCWH7Ev4gre6rU5N0ZV1emFyQEuVO8RE/XU5QgHncEXk
PZr4W4BZaS4e0tf7BGG5a37xu9/. |
| tenantId | 8e40211618884c169e7c98166e903531
|
+----------+-------------------------------------------------------------------------------
------------------------------------------+
Grant the admin role to the nova user in the Service Tenant by using this command:
# keystone user-role-add --user-id 09d138247dda46659f078c9a322901a8 --role-id
fb2c178790704412bf0cefaa66c5d01a --tenant-id 8e40211618884c169e7c98166e903531
Creating the EC2 user
Elastic Compute Cloud (EC2) is an Amazon public cloud. OpenStack has APIs that are
compatible with EC2. This compatibility support is intended to migrate client applications that
are written for Amazon Web Services to OpenStack web services. To offer this compatibility,
you must create the EC2 service.
Create an EC2 service user that is named ec2 in the Service Tenant as shown in Example 14.
Example 14 Creating the EC2 service user in the Service Tenant
# keystone user-create --tenant-id 8e40211618884c169e7c98166e903531 --name ec2
--pass password --enabled true
+----------+----------------------------------------------------------------------
---------------------------------------------------+
| Property | Value
|
+----------+----------------------------------------------------------------------
---------------------------------------------------+
| email |
|
| enabled | True
|
18. 18 Using the IBM XIV Storage System in OpenStack Cloud Environments
| id |
edcdf01973dd44f8857896b95ecf9d09 |
| name | ec2
|
| password |
$6$rounds=40000$zxHONO76nUjXilpe$j1z318Gp49ivGaLqcQYH0w5xRa8eDfED//tSWbs4zFfy1WTnp
anuzMG2pq8Wzr3HXbnty4J9VEg232Z4wKXcJ0 |
| tenantId |
8e40211618884c169e7c98166e903531 |
+----------+----------------------------------------------------------------------
---------------------------------------------------+
Grant the admin role to the ec2 user in the Service Tenant:
# keystone user-role-add --user-id edcdf01973dd44f8857896b95ecf9d09 --role-id
fb2c178790704412bf0cefaa66c5d01a --tenant-id 8e40211618884c169e7c98166e903531
Creating the Swift user
Create a Swift service user that is named swift in the Service Tenant as shown in
Example 15.
Example 15 Creating the Swift user in the Service Tenant
# keystone user-create --tenant-id 8e40211618884c169e7c98166e903531 --name swift
--pass password --enabled true
+----------+----------------------------------------------------------------------
---------------------------------------------------+
| Property | Value
|
+----------+----------------------------------------------------------------------
---------------------------------------------------+
| email |
|
| enabled | True
|
| id |
7059a9f98c4c4e4d921e0d24de562624 |
| name | swift
|
| password |
$6$rounds=40000$rjzQRF0fqfqkcWZi$9nYH3utSrw27EejdckVA/TbzJBuJ9l3TwvcM0B.MxZc75zqhZ
B2v0axe4vPSciKQaWFWwtgUTv5hvrEDdXhwN. |
| tenantId |
8e40211618884c169e7c98166e903531 |
+----------+----------------------------------------------------------------------
---------------------------------------------------+
Grant the admin role to the swift user in the Service Tenant:
# keystone user-role-add --user-id 7059a9f98c4c4e4d921e0d24de562624 --role-id
fb2c178790704412bf0cefaa66c5d01a --tenant-id 8e40211618884c169e7c98166e903531
Example 16 on page 19 shows the user and tenant definitions that we created.
19. Using the IBM XIV Storage System in OpenStack Cloud Environments 19
Example 16 OpenStack items list
# keystone user-list
+----------------------------------+--------+---------+-------+
| id | name | enabled | email |
+----------------------------------+--------+---------+-------+
| 09d138247dda46659f078c9a322901a8 | nova | True | |
| 39080354a8d6429da958931dab748ad4 | glance | True | |
| 7059a9f98c4c4e4d921e0d24de562624 | swift | True | |
| c8bcbaaa5a244e49919918bda9a894a4 | admin | True | |
| edcdf01973dd44f8857896b95ecf9d09 | ec2 | True | |
+----------------------------------+--------+---------+-------+
# keystone role-list
+----------------------------------+-------+
| id | name |
+----------------------------------+-------+
| fb2c178790704412bf0cefaa66c5d01a | admin |
+----------------------------------+-------+
# keystone tenant-list
+----------------------------------+---------+---------+
| id | name | enabled |
+----------------------------------+---------+---------+
| 8e40211618884c169e7c98166e903531 | service | True |
| e7b3098b7ac140c9ae9b0c78136ee7dc | admin | True |
+----------------------------------+---------+---------+
Enabling Keystone
To enable the compatibility for Swift with the Amazon Simple Storage Service (S31) API in
Keystone, ensure that you define a filter. Enable the new filter in the
/etc/keystone/keystone.conf file:
[filter:s3_extension]
paste.filter_factory = keystone.contrib.s3:S3Extension.factory
[pipeline:admin_api]
pipeline = token_auth admin_token_auth xml_body json_body debug ec2_extension
s3_extension crud_extension admin_service
Defining services
You must perform two Keystone operations when you define an OpenStack service in the
catalog.
First, use the Keystone service-create command to enter a service item in the keystone
database. For each service, you must define a type. The following services require these
types:
Nova service type is compute.
EC2 service type is ec2.
Glance service type is image.
Keystone service type is identify.
1
Amazon S3 is a simple web services interface that can be used to store and retrieve any amount of data, at any
time, from anywhere on the web.
20. 20 Using the IBM XIV Storage System in OpenStack Cloud Environments
Then, in a second step, with the Keystone endpoint-create command, create an endpoint
item that links back to the service that you entered. This endpoint item specifies how the
client can connect to the service.
Example 17 through Example 22 on page 22 show the definitions of an associated endpoint
for the mandatory services.
Example 17 Creating the Keystone service with its endpoint
# keystone service-create --name=keystone --type=identity
--description="Keystone Identity Service"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Keystone Identity Service |
| id | dbbd584177e84b2b95ff4cd4033de6b8 |
| name | keystone |
| type | identity |
+-------------+----------------------------------+
# keystone endpoint-create --region RegionOne --service_id
dbbd584177e84b2b95ff4cd4033de6b8 --publicurl 'http://172.16.104.169:5000/v2.0'
--adminurl 'http://172.16.104.169:35357/v2.0' --internalurl
'http://172.16.104.169:5000/v2.0'
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| adminurl | http://172.16.104.169:35357/v2.0 |
| id | 0ddb84d4ef534ecaaa93901836e6f58e |
| internalurl | http://172.16.104.169:5000/v2.0 |
| publicurl | http://172.16.104.169:5000/v2.0 |
| region | RegionOne |
| service_id | dbbd584177e84b2b95ff4cd4033de6b8 |
+-------------+----------------------------------+
Example 18 shows the creation of a Compute service with its associated endpoint.
Example 18 Creating the Compute service with its endpoint
# keystone service-create --name nova --type compute --description="Nova
Compute Service"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Nova Compute Service |
| id | bc65b85d04524b36b502cbd3f61f504c |
| name | nova |
| type | compute |
+-------------+----------------------------------+
# keystone endpoint-create --region RegionOne
--service_id=bc65b85d04524b36b502cbd3f61f504c
--publicurl='http://172.16.104.169:8774/v2/%(tenant_id)s'
--internalurl='http://172.16.104.169:8774/v2/%(tenant_id)s'
--adminurl='http://172.16.104.169:8774/v2/%(tenant_id)s'
+-------------+---------------------------------------------+
21. Using the IBM XIV Storage System in OpenStack Cloud Environments 21
| Property | Value |
+-------------+---------------------------------------------+
| adminurl | http://172.16.104.169:8774/v2/%(tenant_id)s |
| id | e02e542363524bf8b9288526bea1825d |
| internalurl | http://172.16.104.169:8774/v2/%(tenant_id)s |
| publicurl | http://172.16.104.169:8774/v2/%(tenant_id)s |
| region | RegionOne |
| service_id | bc65b85d04524b36b502cbd3f61f504c |
+-------------+---------------------------------------------+
Example 19 shows the creation of the Volume service with its associated endpoint.
Example 19 Creating the Volume service with its endpoint
# keystone service-create --name volume --type volume --description="Nova
Volume Service"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Nova Volume Service |
| id | c5826ce21c4e4268a175dee78453ec79 |
| name | volume |
| type | volume |
+-------------+----------------------------------+
# keystone endpoint-create --region RegionOne
--service_id=c5826ce21c4e4268a175dee78453ec79
--publicurl='http://172.16.104.169:8776/v1/%(tenant_id)s'
--internalurl='http://172.16.104.169:8776/v1/%(tenant_id)s'
--adminurl='http://172.16.104.169:8776/v1/%(tenant_id)s'
+-------------+---------------------------------------------+
| Property | Value |
+-------------+---------------------------------------------+
| adminurl | http://172.16.104.169:8776/v1/%(tenant_id)s |
| id | 1b6ef336a3444382b0bc87cf8012280e |
| internalurl | http://172.16.104.169:8776/v1/%(tenant_id)s |
| publicurl | http://172.16.104.169:8776/v1/%(tenant_id)s |
| region | RegionOne |
| service_id | c5826ce21c4e4268a175dee78453ec79 |
+-------------+---------------------------------------------+
Example 20 shows the creation of the Image service with its associated endpoint.
Example 20 Creating the Image service with its endpoint
# keystone service-create --name glance --type image --description="Glance
Image Service"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | Glance Image Service |
| id | 4b4e999ea40b42f7abfdd4a88e29e72b |
| name | glance |
| type | image |
+-------------+----------------------------------+
22. 22 Using the IBM XIV Storage System in OpenStack Cloud Environments
# keystone endpoint-create --region RegionOne
--service_id=4b4e999ea40b42f7abfdd4a88e29e72b
--publicurl='http://172.16.104.169:9292/v1'
--internalurl='http://172.16.104.169:9292/v1'
--adminurl='http://172.16.104.169:9292/v1'
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| adminurl | http://172.16.104.169:9292/v1 |
| id | 63400c355f814b00b07480de8b65ce85 |
| internalurl | http://172.16.104.169:9292/v1 |
| publicurl | http://172.16.104.169:9292/v1 |
| region | RegionOne |
| service_id | 4b4e999ea40b42f7abfdd4a88e29e72b |
+-------------+----------------------------------+
Example 21 shows the creation of the EC2 service with its associated endpoint.
Example 21 Creating the EC2 service with its endpoint
# keystone service-create --name ec2 --type ec2 --description="EC2
Compatibility Layer"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | EC2 Compatibility Layer |
| id | d6359302111948319b0ebb48e7a42b30 |
| name | ec2 |
| type | ec2 |
+-------------+----------------------------------+
# keystone endpoint-create --region RegionOne
--service_id=d6359302111948319b0ebb48e7a42b30
--publicurl='http://172.16.104.169:8773/services/Cloud'
--internalurl='http://172.16.104.169:8773/services/Cloud'
--adminurl='http://172.16.104.169:8773/services/Admin'
+-------------+-------------------------------------------+
| Property | Value |
+-------------+-------------------------------------------+
| adminurl | http://172.16.104.169:8773/services/Admin |
| id | d0d9328cd8d843d4a5bbaeaa265437e4 |
| internalurl | http://172.16.104.169:8773/services/Cloud |
| publicurl | http://172.16.104.169:8773/services/Cloud |
| region | RegionOne |
| service_id | d6359302111948319b0ebb48e7a42b30 |
+-------------+-------------------------------------------+
Example 22 shows the creation of the Storage service with its associated endpoint.
Example 22 Creating the Storage service with its endpoint
# keystone service-create --name swift --type object-store
--description="Object Store Service"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
23. Using the IBM XIV Storage System in OpenStack Cloud Environments 23
| description | Object Store Service |
| id | 4cade54c7d8c44d393dff1a887e06700 |
| name | swift |
| type | object-store |
+-------------+----------------------------------+
# keystone endpoint-create --region RegionOne
--service_id=4cade54c7d8c44d393dff1a887e06700 --publicurl
'http://172.16.104.169:8080/v1/AUTH_%(tenant_id)s' --adminurl
'http://172.16.104.169:8080/' --internalurl
'http://172.16.104.169:8080/v1/AUTH_%(tenant_id)s'
+-------------+--------------------------------------------------+
| Property | Value |
+-------------+--------------------------------------------------+
| adminurl | http://172.16.104.169:8080/ |
| id | 55b151af1377469686bad18e238e2d4e |
| internalurl | http://172.16.104.169:8080/v1/AUTH_%(tenant_id)s |
| publicurl | http://172.16.104.169:8080/v1/AUTH_%(tenant_id)s |
| region | RegionOne |
| service_id | 4cade54c7d8c44d393dff1a887e06700 |
+-------------+--------------------------------------------------+
Validating the Keystone installation with cURL
Install cURL (curl), which is a command-line tool for running REST API requests with
OpenSSL (openssl). If you are required to install cURL, run this command:
# aptitude install curl openssl
The command in Example 23 shows a query to ensure that Keystone (Identity service) is
running. In return, you receive a token for the admin user.
Example 23 Validating the Keystone installation with the cURL tool
# curl -d '{"auth": {"tenantName": "admin", "passwordCredentials": {"username":
"admin", "password": "passw0rd"}}}' -H "Content-type:application/json"
http://172.16.104.169:35357/v2.0/tokens | python -mjson.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2555 0 2452 100 103 18580 780 --:--:-- --:--:-- --:--:-- 18717
{
"access": {
"metadata": {
"is_admin": 0,
"roles": [
"fb2c178790704412bf0cefaa66c5d01a"
]
},
"serviceCatalog": [
{
"endpoints": [
{
"adminURL":
"http://172.16.104.169:8774/v2/e7b3098b7ac140c9ae9b0c78136ee7dc",
"id": "e02e542363524bf8b9288526bea1825d",
"internalURL":
"http://172.16.104.169:8774/v2/e7b3098b7ac140c9ae9b0c78136ee7dc",
24. 24 Using the IBM XIV Storage System in OpenStack Cloud Environments
"publicURL":
"http://172.16.104.169:8774/v2/e7b3098b7ac140c9ae9b0c78136ee7dc",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "nova",
"type": "compute"
},
{
"endpoints": [
{
"adminURL": "http://172.16.104.169:9292/v1",
"id": "63400c355f814b00b07480de8b65ce85",
"internalURL": "http://172.16.104.169:9292/v1",
"publicURL": "http://172.16.104.169:9292/v1",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "glance",
"type": "image"
},
Another way to test Keystone is to “source” a credential as shown in Example 24. Then, run a
command by using the keystone client.
Example 24 Validating the Keystone installation with the keystone command
# cat > keystonerc_admin
export OS_USERNAME=admin
export OS_PASSWORD=passw0rd
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://127.0.0.1:5000/v2.0/
enter CTRL-D to close the file keystonerc_admin
# source keystonerc_admin
# keystone user-list
+----------------------------------+--------+---------+-------+
| id | name | enabled | email |
+----------------------------------+--------+---------+-------+
| 09d138247dda46659f078c9a322901a8 | nova | True | |
| 39080354a8d6429da958931dab748ad4 | glance | True | |
| 7059a9f98c4c4e4d921e0d24de562624 | swift | True | |
| c8bcbaaa5a244e49919918bda9a894a4 | admin | True | |
| edcdf01973dd44f8857896b95ecf9d09 | ec2 | True | |
+----------------------------------+--------+---------+-------+
Keystone client: The keystone client is installed with the Keystone packages.
25. Using the IBM XIV Storage System in OpenStack Cloud Environments 25
Installing Glance
After the Keystone installation, Glance (Image service) must be installed. Install the Glance
package by using this command:
# aptitude install glance
Or, you can initialize the glance database manually:
# mysql -u root -p
mysql> CREATE DATABASE glance;
mysql> GRANT ALL ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'passw0rd';
Enter quit at the mysql> prompt to exit MySQL.
Configuring Glance (Image service to use Keystone)
Keystone is the main authentication processor. Update the Glance configuration files to use
Keystone and to set the MySQL user and password. Follow these steps:
1. To update the configuration files, run the commands as shown in Example 25.
Example 25 Updating the Glance configuration files
# /etc/glance/glance-api-paste.ini
[filter:authtoken]
admin_token = $(cat ~/keystone_admin_token)
admin_tenant_name = service
admin_user = glance
admin_password = passw0rd
/etc/glance/glance-api.conf
[paste_deploy]
flavor = keystone
# Allow access to version 1 of glance api
enable_v1_api = True
# Allow access to version 2 of glance api
enable_v2_api = True
/etc/glance/glance-registry.conf
sql_connection = "mysql://glance:passw0rd@localhost/glance"
2. Synchronize the Glance database with the glance-manage command:
# glance-manage db_sync
3. Start the glance-api and glance-registry services:
# for svc in registry api ; do service glance-$svc start; done
4. Make Glance available after the reboot:
# for svc in registry api ; do chkconfig glance-$svc on; done
Attention: Depending on which python script version you use, errors might appear in the
database. In this case, delete the glance database and the glance user in MySQL, and
follow the manual Glance database initialization that is shown next.
Troubleshooting: You can troubleshoot the Image service by checking the
/var/log/glance/registry.log and /var/log/glance/api.log files.
26. 26 Using the IBM XIV Storage System in OpenStack Cloud Environments
You can check that Glance is running correctly by issuing the Glance command:
# glance index
There is no output because Glance does not have any images yet.
Adding an image to Glance
For our example, we use an image that we created with the virt-install command. You
might want to create your own image or download the test image as shown in Example 27.
Follow these steps:
1. Create the image. Example 26 shows how to create an image from the Red Hat Linux
Server 6.3 Installation ISO DVD.
Example 26 Creating a virt-install image
# sudo virt-install -n rh-qemu-02 -r 1024 --os-type=linux -f
/tmp/red-hat-6.3-server-2.qcow2 -s 8 -c
/home/itso/RHEL6.3-20120613.2-Server-x86_64-DVD1.iso
OpenStack offers several test images that you can download from this website:
http://docs.openstack.org/trunk/openstack-compute/admin/content/starting-images
.html
In our scenario, we use the cirros image. To download the test image, run the command
that is shown in Example 27.
Example 27 External test images for Glance
# mkdir -p /home/itso/images
# cd /home/itso/images
# wget
http://smoser.brickies.net/ubuntu/ttylinux-uec/ttylinux-uec-amd64-12.1_2.6.35-2
2_1.tar.gz
--2012-10-25 07:12:11--
http://smoser.brickies.net/ubuntu/ttylinux-uec/ttylinux-uec-amd64-12.1_2.6.35-2
2_1.tar.gz
Resolving smoser.brickies.net... 173.236.255.44
Connecting to smoser.brickies.net|173.236.255.44|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24346106 (23M) [application/x-tar]
Saving to: “ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz”
100%[==========================================================================
=========================================>] 24,346,106 370K/s in 85s
2012-10-25 07:13:37 (278 KB/s) - “ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz”
saved [24346106/24346106]
# tar -zxvf ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz
2. Now, you can load the images to Glance as shown in Example 28.
Example 28 Loading images to Glance
# glance image-create --name="tty-linuxkernel" --disk-format=aki
--container-format=aki --file=ttylinux-uec-amd64-12.1_2.6.35-22_1-vmlinuz
+------------------+--------------------------------------+
28. 28 Using the IBM XIV Storage System in OpenStack Cloud Environments
| is_public | False |
| min_disk | 0 |
| min_ram | 0 |
| name | MY-Linux |
| owner | None |
| protected | False |
| size | 25165824 |
| status | active |
| updated_at | 2013-01-28T12:09:11.352986 |
+------------------+--------------------------------------+
3. Verify that the images are correctly loaded into the Glance database as shown in
Example 29.
Example 29 Verifying that the images are loaded in Glance
# glance image-show 6da3fc51-be7e-4e57-ad2d-9d53b3f9b867
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | 10047a119149e08fb206eea89832eee0 |
| container_format | bare |
| created_at | 2013-01-28T12:09:10.978193 |
| deleted | False |
| disk_format | qcow2 |
| id | 6da3fc51-be7e-4e57-ad2d-9d53b3f9b867 |
| is_public | False |
| min_disk | 0 |
| min_ram | 0 |
| name | MY-Linux |
| protected | False |
| size | 25165824 |
| status | active |
| updated_at | 2013-01-28T12:09:11.352986 |
+------------------+--------------------------------------+
Installing Nova Compute
Now, we can install Nova, which is also called Cloud Controller. Nova is responsible for
managing the virtual machine (VM). The Nova installation requires the installation of several
OpenStack services. The OpenStack services are qpid (messaging system), nova-compute,
and memcached (used to speed up authentication, which is done with every request and
insures proper communication with Dashboard).
Install the Cloud Controller packages by using this command:
# aptitude install nova-compute nova-volume nova-network nova-scheduler
nova-objectstore memcached qpidd
Create the Nova database:
1. Connect to the MySQL database by running the mysql -u root -p command.
2. At the MySQL prompt, enter the CREATE DATABASE nova; command.
3. At the MySQL prompt, create the MySQL user and grant access to the nova database:
GRANT ALL ON nova.* TO 'nova'@'localhost' IDENTIFIED BY ‘passw0rd’;
29. Using the IBM XIV Storage System in OpenStack Cloud Environments 29
4. Enter quit to quit MySQL.
5. Ensure that the owner of the /etc/nova/nova.conf file is set to root:nova. Ensure that the
mode is set to 0640 by entering the following command as the root user:
# groupadd nova
# usermod -g nova nova
# chown -R username:nova /etc/nova
# chmod 640 /etc/nova/nova.conf
6. Update the /etc/nova/nova.conf and /etc/nova/nova/api-paste.ini files:
– Make these updates in the etc/nova/nova.conf file:
[DEFAULT]
sql_connection = "mysql://nova:passw0rd@localhost/nova"
auth_strategy = keystone
network_manager = nova.network.manager.FlatDHCPManager
fixed_range = 192.168.100.0/24
public_interface = eth0
flat_interface = eth0
flat_network_bridge = br100
– Make these updates in the /etc/nova/api-paste.ini file:
[filter:authtoken]
admin_token = YOUR_keystone_admin_token_VALUE
7. Then, stop the Nova services before the database synchronization:
# for svc in api objectstore compute network volume scheduler cert; do sudo
service nova-$svc stop ; sudo chkconfig nova-$svc on ; done
8. Create the tables in the nova database by using the nova-manage command:
# nova-manage db sync
9. Restart the Nova services:
# for svc in api objectstore compute network volume scheduler cert; do sudo
service nova-$svc start ; done
Configuring Qpid
Configure and start Qpid, which provides Advanced Message Queueing Protocol (AMQP) to
the Nova services. In the /etc/qpid/qpidd.conf file, uncomment #auth=yes and set it to
auth=no as shown:
auth=no
Then, start by using these commands:
# sudo service qpidd start
# sudo chkconfig qpidd on
Installing KVM
In our environment, we use kernel-based virtual machine (KVM) as a hypervisor. Follow
these steps:
1. To install the kvm package, run this command:
# aptitude install kvm
30. 30 Using the IBM XIV Storage System in OpenStack Cloud Environments
2. Install the other suggested virtualization packages:
# aptitude install virt-manager libvirt0
Configuring the Nova Compute service to use the KVM hypervisor
We use libvirt, which provides the hypervisor to nova-compute. The nova-compute service
interacts with the KVM through the libvirt service. Follow these steps:
1. Start the hypervisor and make it available after the reboot:
# sudo service libvirtd start
# sudo chkconfig libvirtd on
2. Update the nova.conf file to use the correct hypervisor. Change the following lines in the
/etc/nova/nova.conf file:
[DEFAULT]
connection_type = libvirt
libvirt_type = kvm
libvirt_inject_partition = -1
3. Generate the Secure Shell (ssh) key pair that is used to connect to the VM instance
through SSH.
Before you instantiate a VM, you need to create at least one key pair. This key pair is
injected into the VM so that you can use SSH to connect to the VM.
Create a key pair and add the public key to OpenStack:
# nova keypair-add oskey > oskey.priv
# chmod 600 oskey.priv
Creating the network for VM
Use the bridge br100 for the VM use. Define the network range by using 192.168.100.0/24 as
the fixed range:
# aptitude install bridge-utils
# ip link set eth0 promisc on
# nova-manage network create private --multi_host=T
--fixed_range_v4=192.168.100.0/24 --bridge_interface=br100 --num_networks=1
--network_size=256 -vlan=100
Configuring nova-volume (Cinder)
Either nova-volume or Cinder, which is responsible for handling persistent storage for VMs,
can have multiple back-end storage devices, such as IBM XIV or IBM V7000.
Set up a nova-volume group as a quick and easy way to try out persistent volumes in the
testing environment, as shown in Example 30.
Example 30 nova-volume file-backed Logical Volume Manager (LVM) volume group
# sudo truncate --size 20G ~/nova-volumes
# sudo losetup -fv ~/nova-volumes
Loop device is /dev/loop1
# sudo vgcreate nova-volumes /dev/loop1
Remember: This method must not be used in a production environment.
31. Using the IBM XIV Storage System in OpenStack Cloud Environments 31
No physical volume label read from /dev/loop0
Physical volume "/dev/loop0" successfully created
Volume group "nova-volumes" successfully created
# vgdisplay nova-volumes
--- Volume group ---
VG Name nova-volumes
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 20.00 GiB
PE Size 4.00 MiB
Total PE 5119
Alloc PE / Size 0 / 0
Free PE / Size 5119 / 20.00 GiB
VG UUID 11yCOi-2je7-oXgd-g0MQ-lLMn-vUr0-taygT6
Start the tgtd (SCSI target daemon) service:
# sudo service tgtd start
# sudo chkconfig tgtd on
Verify the controller installation as shown in Example 31.
Example 31 nova service control
# nova-manage service list
Binary Host Zone Status
State Updated_At
nova-cert cloud01 nova enabled
XXX None
nova-scheduler cloud01 nova enabled
XXX None
nova-compute cloud01 nova enabled
XXX None
nova-network cloud01 nova enabled
XXX None
# nova image-list
+--------------------------------------+-------------------+--------+--------+
| ID | Name | Status | Server |
+--------------------------------------+-------------------+--------+--------+
| 6da3fc51-be7e-4e57-ad2d-9d53b3f9b867 | MY-Linux | ACTIVE | |
| 243a91a2-dd3b-486c-a7ce-fb395bb924ef | tty-linux-ramdisk | ACTIVE | |
| f792c482-630c-4f83-b969-500d4718aece | tty-linuxkernel | ACTIVE | |
+--------------------------------------+-------------------+--------+--------+
32. 32 Using the IBM XIV Storage System in OpenStack Cloud Environments
Installing the IBM Storage Driver for OpenStack
The proxy is compatible with the open source driver that is already part of OpenStack in the
Folsom release. The current IBM Storage Driver for OpenStack offers the following features:
Create or delete a volume in the XIV Storage System by using the nova volume-* or
volume-snapshot-* command.
Attach an XIV Volume to or detach an XIV Volume from a VM and make the volume
accessible via iSCSI. The iSCSI qualified name (IQN) is automatically created on the XIV
Storage System.
To install the IBM Storage Driver for OpenStack, create a pool on the XIV Storage System for
the node. In our example, we created a pool that is named OpenStack.
For the driver installation, you need the XIV IP address, admin name, and password. To
install the IBM Storage Driver for OpenStack, see the driver installation guide:
http://pic.dhe.ibm.com/infocenter/strhosts/ic/index.jsp?topic=%2Fcom.ibm.help.strg
hosts.doc%2Fnova-homepage.html
Verify that the IBM Storage Driver for OpenStack is correctly installed by checking the
nova.conf file as shown in Example 32. The SAN parameters must have the volume_driver
set to xiv_openstack.xiv.XIVDriver and the xiv_proxy set to
xiv_openstack.nova_proxy.XIVNovaProxy.
Example 32 XIV nova driver setup
# tail /etc/nova/nova.conf
libvirt_type=qemu
auth_strategy = keystone
flat_interface = eth0
public_interface = eth0
volume_driver = xiv_openstack.xiv.XIVDriver
xiv_proxy = xiv_openstack.nova_proxy.XIVNovaProxy
san_login = YOUR_XIV_ADMIN_ID
san_password = YOUR_XIV_ADMIN_PASSWORD
san_clustername = OpenStack
san_ip = ip_address
Create a volume by using IBM XIV Storage Driver for OpenStack:
# nova volume-create --display_name redbk-03 34
This command has no output. Verify the volume that we created with the nova volume-list
command (see Example 33 on page 32). The volume must have the “available” status
before it can be used.
Example 33 Verifying an XIV volume creation by using the nova command
# nova volume-list
+----+-----------+--------------+------+-------------+-------------+
| ID | Status | Display Name | Size | Volume Type | Attached to |
Important: The Folsom release offers two options in terms of block storage: nova-volume
and Cinder. Both options are nearly identical in terms of functionality, APIs, and even the
general theory of operation. The illustrations in this paper are based on nova-volume.
Remember, however, that nova-volume is deprecated and will be removed at the Grizzly
release.
33. Using the IBM XIV Storage System in OpenStack Cloud Environments 33
+----+-----------+--------------+------+-------------+-------------+
| 4 | available | redbk-01 | 10 | None | |
| 5 | available | redbk-03 | 34 | None | |
+----+-----------+--------------+------+-------------+-------------+
# nova volume-show 5
+---------------------+---------------------+
| Property | Value |
+---------------------+---------------------+
| attachments | [] |
| availability_zone | nova |
| created_at | 2012-10-26 09:02:27 |
| display_description | None |
| display_name | redbk-03 |
| id | 5 |
| metadata | {} |
| size | 34 |
| snapshot_id | None |
| status | available |
| volume_type | None |
+---------------------+---------------------+
Starting a virtual machine and attaching an XIV volume
To create a VM or instance, select the following information:
The “flavor” or “instance type” that is needed for that VM or instance
The image
A flavor or instance type describes the compute, memory, and storage capacity of nova
computing instances. The flavor or instance type is the size (in terms of vCPUs, RAM, and so
on) of the virtual server. In the EC2 API, these instance types are named m1.large or
m1.tiny. The OpenStack API designates these flavors with names, such as 512 MB Server.
OpenStack Image (Glance) uses predefined machine characteristics. The nova flavor-list
command prints existing machine characteristics that are defined in the Nova database. A
new flavor can be created by using the nova flavor-create command.
Example 34 shows how to start a new image that is created with the virt-install command.
Add the VM image to the catalog by using the glance add command. Then, launch the
instance with a nova boot command.
Example 34 Adding an image to Glance
# glance add name="RedHat Enterprise Server 6.3" disk_format=qcow2
container_format=bare < /tmp/red-hat-6.3-server-2.qcow2
Uploading image 'RedHat Enterprise Server 6.3'
==================================================================================
============================================[100%] 55.4M/s, ETA 0h 0m 0s
Added new image with ID: 5a7e4539-df7c-47be-8093-7da418d62e42
# nova image-list
+--------------------------------------+-----------------------+--------+--------+
| ID | Name | Status | Server |
Storage capacity: The storage capacity in the flavor-list represents local storage on the
Compute Node.
34. 34 Using the IBM XIV Storage System in OpenStack Cloud Environments
+--------------------------------------+-----------------------+--------+--------+
| 0c5de13c-8a66-4004-9b42-797f34fa2059 | cirros-0.3.0-x86_64 | ACTIVE | |
| 53fee854-c9b6-4b66-98e6-62a8c5244d66 | tty-linuxramdisk | ACTIVE | |
| 5a7e4539-df7c-47be-8093-7da418d62e42 | RedHat Enterprise Server 6.3 | ACTIVE |
|
| a19c7ada-982b-4062-bc09-32ac618e1d4f | tty-linuxkernel | ACTIVE | |
| f6e3c2a1-8c5b-4c32-bb40-2ed45f563133 | tty-linux | ACTIVE | |
+--------------------------------------+-----------------------+--------+--------+
# nova boot --flavor 2 --key_name oskey --image
5a7e4539-df7c-47be-8093-7da418d62e42 redhat
+-------------------------------------+--------------------------------------+
| Property | Value |
+-------------------------------------+--------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-SRV-ATTR:host | None |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None |
| OS-EXT-SRV-ATTR:instance_name | instance-00000003 |
| OS-EXT-STS:power_state | 0 |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| accessIPv4 | |
| accessIPv6 | |
| adminPass | JTnrCV33dT6N |
| config_drive | |
| created | 2012-10-26T16:07:28Z |
| flavor | m1.small |
| hostId | |
| id | ef6e6477-951c-4b1c-b5c8-73943800d5da |
| image | RedHat Enterprise Server 6.3 |
| key_name | oskey |
| metadata | {} |
| name | redhat |
| progress | 0 |
| status | BUILD |
| tenant_id | aedd77cd85d84c9886395c8fa8e620ae |
| updated | 2012-10-26T16:07:29Z |
| user_id | 965e7fa9579e4ceba733e9bb225aac63 |
+-------------------------------------+--------------------------------------+
# nova list
+--------------------------------------+--------+--------+----------------+
| ID | Name | Status | Networks |
+--------------------------------------+--------+--------+----------------+
| ef6e6477-951c-4b1c-b5c8-73943800d5da | redhat | BUILD | vmnet=10.0.0.3 |
| efbaa726-ab57-4d5b-ab39-741f57f0d1a3 | cirros | ACTIVE | vmnet=10.0.0.2 |
+--------------------------------------+--------+--------+----------------+
# nova show redhat
+-------------------------------------+------------------------------------------+
| Property | Value |
+-------------------------------------+------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-SRV-ATTR:host | blade11-HS21-13 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None |
35. Using the IBM XIV Storage System in OpenStack Cloud Environments 35
| OS-EXT-SRV-ATTR:instance_name | instance-00000003 |
| OS-EXT-STS:power_state | 1 |
| OS-EXT-STS:task_state | None |
| OS-EXT-STS:vm_state | active |
| accessIPv4 | |
| accessIPv6 | |
| config_drive | |
| created | 2012-10-26T16:07:28Z |
| flavor | m1.small |
| hostId
|d7a4f8634212269134c1f66f2447e821c128cbb445a4638bb8914200 |
| id | ef6e6477-951c-4b1c-b5c8-73943800d5da |
| image | RedHat Enterprise Server 6.3 |
| key_name | oskey |
| metadata | {} |
| name | redhat |
| progress | 0 |
| status | ACTIVE |
| tenant_id | aedd77cd85d84c9886395c8fa8e620ae |
| updated | 2012-10-26T16:17:27Z |
| user_id | 965e7fa9579e4ceba733e9bb225aac63 |
| vmnet network | 10.0.0.3 |
+-------------------------------------+------------------------------------------+
Using Horizon (Dashboard)
Installing Horizon, the OpenStack web dashboard, is simple. Install the
OpenStack-Dashboard package and then start the apache2 daemon. No additional
configuration is needed.
After the httpd daemon is running, users can log on to the Dashboard by using their
OpenStack user names and passwords at http://host_ip_addr/horizon.
Installing the Dashboard package
Follow these steps to install the Dashboard package:
1. At the terminal prompt, run this command:
# sudo aptitude install openstack-dashboard
2. Run this command to start the Dashboard:
# sudo service httpd start
3. Then, to make the Dashboard available after the reboot, run this command:
# sudo chkconfig httpd on
Another service that is named qpidd might prevent you from starting the rabbitmq-server
daemon correctly. To avoid this situation, stop the qpidd daemon before you start the
rabbitmq-server daemon. Then, restart the qpidd daemon.
Use these commands:
# service qpidd stop
# service rabbitmq-server start
# service qpidd start
36. 36 Using the IBM XIV Storage System in OpenStack Cloud Environments
Check that the memcached service is running by using this command:
# service memcached status
If the service is not running, restart it by running this command:
# service memcached start
Load the Dashboard in a web browser to confirm that it is running. The Log In page is shown
in Figure 4.
Figure 4 Dashboard Log In window
Managing Nova by using Dashboard
In this example, the Object Store is used to create an instance. Follow these steps:
1. Log on to the catalog by providing a user name and password.
2. Select the Project tab and then select Volumes. The Volumes menu is shown in Figure 5
on page 37.
37. Using the IBM XIV Storage System in OpenStack Cloud Environments 37
Figure 5 Dashboard - Volumes
3. Create a volume by selecting Create Volume.
4. On the Create Volume window, enter a volume name, a size in GBs, and an optional
description. Then, click Create Volume as shown in Figure 6.
Figure 6 Dashboard - Create Volume
5. Select Launch Instance to open the window that is shown in Figure 7 on page 38.
38. 38 Using the IBM XIV Storage System in OpenStack Cloud Environments
Figure 7 Dashboard - Images & Snapshots
6. Select the image to launch (we selected image01) and click Launch.
7. In the Launch Instance window, select a medium Flavor as shown in Figure 8. Click
Launch.
Figure 8 Dashboard - Launch Instance
8. You are returned to the Instances window, which this time displays the new instance as
shown in Figure 9 on page 39.
39. Using the IBM XIV Storage System in OpenStack Cloud Environments 39
Figure 9 Dashboard - Instances window that shows a new instance
9. Select the volume to attach to the instance. For our example, we selected the Vol01
volume. Then, select Edit attachment to open the window that is shown in Figure 10.
Figure 10 Dashboard - Manage Volume Attachments
10.On Figure 10, in the drop-down list, select the instance that is launched and define a
device that is named /dev/vdc/. Then, click Attach Volume. When you attach a volume
by using the XIV Nova Volume Driver, an iSCSI host is created on the XIV Storage
System.
11.Control the attachment of the created volume to the Compute Node. If the XIV Host
Attachment Kit is installed, you can run the xiv_devlist command.
12.To verify that the volume is correctly attached to the instance, connect to the instance by
running the ssh -i oskey.priv root@instance_ip_addr command.
13.List the device that is seen by the instance by using the ls /dev/vd* command.
14.You can now format the device within the instance as shown in Example 35 on page 40.
40. 40 Using the IBM XIV Storage System in OpenStack Cloud Environments
Example 35 Formatting the virtual device
# sudo mkfs.ext4 /dev/vdc
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2211840 inodes, 8835546 blocks
441777 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
270 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
15.Mount the formatted device as shown in Figure 11.
Figure 11 XIV Nova volume mount on the VM
16.Enter exit to leave the instance.
41. Using the IBM XIV Storage System in OpenStack Cloud Environments 41
The team who wrote this paper
This paper was produced by a team of specialists from around the world working at the
International Technical Support Organization, San Jose Center.
Desire Brival is a Certified Architect who works with clients and sales teams to architect
complex multi-brand solutions. He has deep knowledge of the IBM cross-brand initiatives,
such as Cloud Computing, Virtualization, IT Optimization, IBM Dynamic Infrastructure®, and
Storage Optimization Infrastructure. He has competitive knowledge of the major storage
providers, as well as converged infrastructure solution offerings (Matrix, UCS, and
Exadata/Exalogic).
Bert Dufrasne is an IBM Certified Consulting I/T Specialist and Project Leader for IBM
System Storage® disk products at the International Technical Support Organization, San
Jose Center. He worked at IBM in various I/T areas. He authored many IBM Redbooks®
publications and also developed and taught technical workshops. Before he joined the ITSO,
he worked for IBM Global Services as an Application Architect. He holds a Master’s degree in
Electrical Engineering.
Bruce Allworth is a Senior IT Specialist who works as a Client Technical Open Systems
Storage Specialist in Americas Sales and Distribution. He has over 20 years in IT and
extensive experience with midrange storage products in solution design, solution
management, advanced problem determination, and disaster recovery. He worked closely
with various IBM divisions in launching new products and creating critical documentation,
including Technical and Delivery Assessment Checklists, and developing and delivering
technical training for a wide range of audiences.
Mark Kremkus is a Senior IT Specialist in the Advanced Technical Skills organization. He
has 11 years of experience in the design of high performance, high availability solutions.
Mark achieved Consulting-level certification in Actualizing IT solutions. Mark’s areas of
expertise include enterprise storage performance analysis with emphasis on using empirical
data to perform mathematical modeling of disk storage performance, as well as integrating
storage with open systems hypervisors. He writes and presents on these topics. He holds a
BS degree in Electrical Engineering from Texas A&M.
Markus Oscheka is an IT Specialist for Proof of Concepts and Benchmarks in the Disk
Solution Europe team in Mainz, Germany. His areas of expertise include setup and
demonstration of IBM System Storage solutions in open environments. He has written
several IBM Redbooks and acted as the co-project lead for Redbooks publications, including
IBM DS8000® and IBM XIV Storage. He holds a degree in Electrical Engineering from the
Technical University in Darmstad.
Thomas Peralto is a Principal Consultant in the Storage Solutions Engineering Group. He
has extensive experience in implementing large and complex transport networks and
mission-critical data protection throughout the globe. Mr. Peralto also serves as a data
replication and data migration expert and speaks on both topics at the national and
international levels for IBM on the best practices for corporate data protection.
Special thanks to Lihi Lihi Tikolsky, IBM, for her help in preparation of this document.
Thanks to the following people for their contributions to this project:
Ohad Atia, Erik Zaadi, Miron Aloni, Anthony Vattathil, and Brian Carmody
IBM
42. 42 Using the IBM XIV Storage System in OpenStack Cloud Environments
Now you can become a published author, too!
Here’s an opportunity to spotlight your skills, grow your career, and become a published
author—all at the same time! Join an ITSO residency project and help write a book in your
area of expertise, while honing your experience using leading-edge technologies. Your efforts
will help to increase product acceptance and customer satisfaction, as you expand your
network of technical contacts and relationships. Residencies run from two to six weeks in
length, and you can participate either in person or as a remote resident working from your
home base.
Find out more about the residency program, browse the residency index, and apply online at:
ibm.com/redbooks/residencies.html
Stay connected to IBM Redbooks
Find us on Facebook:
http://www.facebook.com/IBMRedbooks
Follow us on Twitter:
http://twitter.com/ibmredbooks
Look for us on LinkedIn:
http://www.linkedin.com/groups?home=&gid=2130806
Explore new Redbooks publications, residencies, and workshops with the IBM Redbooks
weekly newsletter:
https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm
Stay current on recent Redbooks publications with RSS Feeds:
http://www.redbooks.ibm.com/rss.html
44. 44 Using the IBM XIV Storage System in OpenStack Cloud Environments
®
Redpaper™
This document REDP-4971-00 was created or updated on March 11, 2013.
Send us your comments in one of the following ways:
Use the online Contact us review Redbooks form found at:
ibm.com/redbooks
Send your comments in an email to:
redbooks@us.ibm.com
Mail your comments to:
IBM Corporation, International Technical Support Organization
Dept. HYTD Mail Station P099
2455 South Road
Poughkeepsie, NY 12601-5400 U.S.A.
Trademarks
IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines
Corporation in the United States, other countries, or both. These and other IBM trademarked terms are
marked on their first occurrence in this information with the appropriate symbol (® or ™), indicating US
registered or common law trademarks owned by IBM at the time this information was published. Such
trademarks may also be registered or common law trademarks in other countries. A current list of IBM
trademarks is available on the Web at http://www.ibm.com/legal/copytrade.shtml
The following terms are trademarks of the International Business Machines Corporation in the United States,
other countries, or both:
DS8000®
Dynamic Infrastructure®
IBM®
Redbooks®
Redpaper™
Redbooks (logo) ®
System Storage®
XIV®
The following terms are trademarks of other companies:
Intel, Intel logo, Intel Inside logo, and Intel Centrino logo are trademarks or registered trademarks of Intel
Corporation or its subsidiaries in the United States and other countries.
Linux is a trademark of Linus Torvalds in the United States, other countries, or both.
Snapshot, and the NetApp logo are trademarks or registered trademarks of NetApp, Inc. in the U.S. and other
countries.
Other company, product, or service names may be trademarks or service marks of others.