everythingpossible - Fotolia

Schritt-für-Schritt-Anleitung zur OpenStack-Installation auf Ubuntu

Für ein Test-Lab kann OpenStack auch auf einer virtuellen Maschine installiert werden. Diese Anleitung zeigt die OpenStack-Installation auf Ubuntu.

Eine der besten Möglichkeiten herauszufinden, wie OpenStack eigentlich funktioniert, ist die Installation auf einem einzelnen Computer. Die OpenStack-Webseite bietet hierzu eine Anleitung, aber die vielen Einzelschritte und ein paar Ungenauigkeiten können die Installation etwas schwierig machen. Man kann sich zum Beispiel auch nicht einfach per apt-get seinen Weg durch die Installation bahnen. Als Alternative gäbe es auch noch einen grafischen Schritt-für-Schritt-Wizard, dafür sind aber dann fünf einzelne virtuelle Maschinen nötig.

Während der OpenStack-Installation dürften einige Fehler angezeigt werden. Statt aber dann die Suchmaschine der Wahl zu befragen und mit den Ergebnissen auf lange Sicht noch mehr Fragezeichen zu erhalten, empfiehlt sich das Vorgehen nach den folgenden Installationstipps.

Für diesen Artikel wurde OpenStack zweimal auf Ubuntu installiert, die lehrreichen Ergebnisse flossen in diesen Installationsratgeber. Letztlich geht es hierbei also nicht um das Bereitstellen einer Produktivumgebung, sondern um die Veranschaulichung der möglichen Konfigurationsoptionen während der OpenStack-Installation, um typische Probleme bei der OpenStack-Bereitstellung aufzuzeigen und Lösungen vorzuschlagen.

Voraussetzungen für die OpenStack-Installation

Für den Anfang sollte man zunächst einen Blick auf die Anleitungen der offiziellen OpenStack-Webseite werfen, hier gibt es auch einen Installation Guide for Ubuntu 14.04. Um die besten Ergebnisse zu erzielen sollte man sich soweit wie möglich an dieses Dokument halten. Als OpenStack-Version kam OpenStack Kilo zum Einsatz.

Die denkbar einfachste Arbeitsumgebung besteht aus einem Compute-Knoten und einem Controller Node. Anders als in Produktivumgebungen kommen in diesem Beispiel also keine separaten Storage- (Object oder Block Storage) oder Netzwerkknoten zum Einsatz.

Bis auf den ersten Schritt der Installationsanleitung müssen die einzelnen weiteren Schritte übrigens nicht zwingend in der hier beschriebenen Reihenfolge durchgeführt werden. Wer also bei einem Schritt Schwierigkeiten hat, sollte problemlos an anderer Stelle mit der OpenStack-Installation fortfahren können. Manchmal findet man später dann sowieso eher beiläufig eine Lösung für ein früher entdecktes Problem.

Die grundlegenden Schritte zur OpenStack-Installation sehen folgendermaßen aus:

  1. Aufbau einer grundlegenden Umgebung aus Datenbank und Host-Dateien;
  2. Installation des Identity Service;
  3. Installation des Image Service;
  4. Installation des Compute Service;
  5. Installation des Dashboards, um sich am lb-Interface anmelden zu können.

Aufbau der grundlegenden Umgebung

Für die Basisumgebung muss zunächst eine virtuelle Maschine mit Ubuntu Server 14.04 erstellt werden. Hierzu kann jeder beliebige Hypervisor verwendet werden, in diesem Beispiel kam vCloud Director zum Einsatz. Statt Ubuntu Server sollte prinzipiell auch Ubuntu Desktop funktionieren, der einzige Unterschied zwischen der Server- und Desktop-Version besteht im Fehlen einer grafischen Benutzeroberfläche in Ubuntu Server. Um dieses Problem kümmern wir uns aber später.

Die folgenden Schritte müssen als Root-Anwender durchgeführt werden. Wenn statt der Server- die Desktop-Version von Ubuntu verwendet wird, dann ist man meist mit einer anderen User-ID angemeldet. Daher muss in diesem Fall zunächst das Root-Passwort geändert werden, um die entsprechenden Befehle eingeben zu können. Während des gesamten Installationsprozesses empfiehlt es sich, häufig Snapshots anzufertigen, um im Fall der Fälle zu einem früheren zurückkehren zu können.

Für eine Testumgebung können die Passwörter einfach so übernommen werden, wie sie in der OpenStack-Installationsanleitung stehen. In der SQL-Datenbank wird hier zum Beispiel auch überhaupt gar kein Passwort vergeben. Der apt-get-Befehl sollte vermieden werden, außer es wird ausdrücklich verlangt. Laut OpenStack-Anleitung erlaubt OpenStack nämlich das Ausführen automatischer Updates nicht.

Nachdem die virtuelle Maschine für Ubuntu Server erstellt wurde, müssen die IP-Adressen für Controller und Compute1 zu /etc/hosts hinzugefügt werden. Um alles auf einer VM zu behalten, wird der folgende Befehl verwendet:

127.0.0.1 controller compute1

Als nächstes folgt dieser Befehl:

 apt-get install ubuntu-cloud-keyring

echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu" \

            "trusty-updates/kilo main" > /etc/apt/sources.list.d/cloudarchive-kilo.list

apt-get update && apt-get dist-upgrade

Die NTP-Konfiguration (Network Time Protocol) kann man für diese Testumgebung getrost ignorieren. Da sowieso nur eine VM zum Einsatz kommt, gibt es auch keine Notwendigkeit zur Zeitsynchronisierung. Als nächstes wird der folgende Befehl eingegeben:

apt-get install mariadb-server python-mysqldb

In diesem Beispiel verwenden wir MariaDB statt MySQL. Mit der hier aufgeführten Anleitung wird anschließend /etc/mysql/my.cnf geändert.

Nachdem dieser Schritt durchgeführt wurde, kann das folgende Kommando eingegeben werden:

service mysql restart

mysql_secure_installation

Danach wird RabbitMQ installiert:

apt-get install rabbitmq-server

rabbitmqctl change_password guest RABBIT_PASS

Identity Service Keystone für OpenStack bereitstellen

Um den Identity Service für OpenStack bereitzustellen, sollte man zunächst die OpenStack-Anleitung zur Einrichtung einer Keystone-Datenbank durcharbeiten. Als erstes wird hier für die Keystone-Vorgänge ein Token benötigt, bevor User ID und Passwort angelegt werden können. Dies erfolgt über den folgenden Befehl:

openssl rand -hex 10

Als nächstes wird das folgende Kommando ausgeführt:

apt-get install keystone python-keystoneclient

Die OpenStack-Anleitung zeigt, wie sich über vi/etc/keystone/keystone.conf die Konfigurationsdatei ändern lässt.

Folgt man der OpenStack-Anleitung, erhält man allerdings ziemlich sicher eine Fehlermeldung, weil eine neue Shell geöffnet wird. Um diesen Fehler zu vermeiden, kann aber einfach der folgende Befehl mit einem vorangestellten su – s ausgeführt werden:

/bin/sh -c "keystone-manage db_sync" keystone

Anschließend wird Keystone mit dem folgenden Befehl neu gestartet:

service keystone restart

Diese beiden Umgebungsvariablen müssen nun exportiert werden. So kann man sich gegenüber Keystone mit dem gerade erstellten Token statt mit Anmeldedaten authentifizieren.

export OS_SERVICE_TOKEN=cde3aa151a5a7e048da9

OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

Tenants, Anwender und Rollen erstellen

Wer an dieser Stelle den Fehler error 500 erhält, der hat vergessen, den Keystone-Service neu zu starten. Um dann Tenants, Anwender und Rollen für Keystone zu erstellen, wird das folgende Kommando verwendet:

 keystone tenant-create --name admin --description "Admin Tenant"

keystone user-create --name admin --pass ADMIN_PASS --email EMAIL_ADDRESS

Danach folgt man wieder den Angaben in der OpenStack-Anleitung und gibt anschließend diesen Befehl ein:

keystone tenant-create --name service --description "Service Tenant"

Service Entity und API-Endpunkt können über diese Anleitung erstellt werden. Probleme dürfte es erst wieder im nächsten Schritt geben: der Verifikation.

Verifizierung der Keystone-Umgebung

Für die Verifizierung der Keystone-Umgebung wird das folgende Kommando verwendet:

unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT

 Um zu überprüfen, ob Nutzer-ID und Passwort über die Kommandozeile verwendet werden können, dient der folgende Befehl:

 keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS \

>   --os-auth-url http://controller:35357/v2.0 token-get

Hiermit wird das Verhalten des Identity Service nachgeahmt, der Anwendern einen Log-in-Token generieren soll. Wer diesen OpenStack-Anleitungen folgt, wird aber wahrscheinlich den folgenden Fehler erhalten:

 The request you have made requires authentication. (HTTP 401) (Request-ID: req-0550f2c3-9077-470b-95d8-ce4ff498ff8f)

Der Fehlercode 401 deutet darauf hin, dass der Nutzer nicht autorisiert ist, was meist durch die fehlende Admin-Rolle verursacht wird. Diese wird folgendermaßen hinzugefügt:

keystone role-create --name admin

Mit dem folgenden Befehl lässt sich zudem überprüfen, welche Rolle ein Anwender hat:

keystone user-role-list --user admin --tenant admin

Über den folgenden Befehl können auch die Umgebungsvariablen des Token zurückgesetzt werden:

 export OS_SERVICE_TOKEN=cde3aa151a5a7e048da9

export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

Dem Anwender admin kann jetzt über den folgenden Befehl eine Admin-Rolle zugewiesen werden, um den oben beschriebenen Fehler zu beheben:

keystone user-role-add --user admin --tenant admin --role admin

Was man an dieser Stelle mitnehmen sollte, ist der Rückgriff auf bestimmte Keystone-Befehle wie list etc., um Probleme zu finden und zu lösen. Das gilt im Übrigen aber auch für die weitere Installation.

Skripte für die Client-Umgebung erstellen

Als nächstes sollten Umgebungsvariablen erstellt werden, damit diese Befehle auch ohne Token oder Kommandozeile ausgeführt werden können. Die entsprechenden Dateien können mit den folgenden Kommandos erstellt werden:

vi admin-openrc.sh

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=ADMIN_PASS

export OS_AUTH_URL=http://controller:35357/v2.0

 vi demo-openrc.sh

export OS_TENANT_NAME=demo

export OS_USERNAME=demo

export OS_PASSWORD=DEMO_PASS

export OS_AUTH_URL=http://controller:5000/v2.0

Anschließend muss noch der folgende Befehl eingegeben werden:

source admin-openrc.sh

Image-Service OpenStack Glance hinzufügen

Um OpenStack Glance bereitzustellen, kann wieder den OpenStack-Instruktionen gefolgt werden. Anschließend wird über den folgenden Befehl eine Datenbank erstellt:

keystone user-create --name glance --pass GLANCE_PASS

Wenn an dieser Stelle der Fehlercode 401 ausgegeben wird, lässt sich das Problem mit den folgenden Zeilen beheben:

export OS_SERVICE_TOKEN=cde3aa151a5a7e048da9

export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

Wenn die Anmeldedaten sowohl in der Shell als auch am Endpunkt verwendet werden, wird die folgende Warnung ausgegeben:

WARNING: Bypassing authentication using a token & endpoint (authentication credentials are being ignored).

Anschließend fährt man mit den folgenden Befehlen fort:

 keystone service-create --name glance --type image \

  --description "OpenStack Image Service"

keystone endpoint-create \

  --service-id $(keystone service-list | awk '/ image / {print $2}') \

  --publicurl http://controller:9292 \

  --internalurl http://controller:9292 \

  --adminurl http://controller:9292 \

  --region regionOne

apt-get install glance python-glanceclient

Wenn dann /etc/glance/glance-api.conf gemäß der OpenStack-Anleitung geändert wird, muss auch die Zeile

#sqlite_db = /var/lib/glance/glance.sqlite

durch die folgenden Zeilen ersetzt werden:

[keystone_authtoken]

#identity_uri = http://127.0.0.1:35357

#admin_tenant_name = %SERVICE_TENANT_NAME%

#admin_user = %SERVICE_USER%

#admin_password = %SERVICE_PASSWORD%

#revocation_cache_time = 10

     auth_uri = http://controller:5000/v2.0

identity_uri = http://controller:35357

admin_tenant_name = service

admin_user = glance

admin_password = GLANCE_PASS

Sobald dies erledigt ist, kann mit der folgenden Änderung wieder der OpenStack-Anleitung gefolgt werden:

vi /etc/glance/glance-registry.conf

Anschließend wird der folgende Befehl eingegeben:

/bin/sh -c "glance-manage db_sync" glance

In unserer Testumgebung wurde daraufhin die folgende Fehlermeldung angezeigt:

CRITICAL glance [-] DBConnectionError: (OperationalError) (2003, "Can't connect to MySQL server on 'controller' (111)") None None

Die Ursache hierfür war eine falsche IP-Adresse sowie die folgende Zeile, die noch ausgeführt werden muss:

flavor = keystone in [paste_deploy]

Glance-Installation verifizieren

Laut der OpenStack-Anleitung sollte man zur Verifizierung der Glance-Bereitstellung ein Linux-Image herunterladen und mit dem folgenden Befehl hochladen:

glance image-create --name "cirros-0.3.3-x86_64" --file /tmp/images/cirros-0.3.3-x86_64-disk.img \

  --disk-format qcow2 --container-format bare --is-public True --progress

 Wer hier einen Fehlercode 403 oder 500 erhält, der kann zur Lösung des Problems zunächst über folgende Befehle eine Neustart anstoßen:

service glance-registry restart

     service glance-api restart

Compute Service und Controller Node hinzufügen

Das nächste Kapitel der OpenStack-Anleitung ist eher verwirrend, weil hier ganze Bereiche der über apt-get installierten Konfigurationsdatei fehlen. Um diesen Fehler zu beheben können die folgenden Befehle genutzt werden:

[DEFAULT]

verbose = True

dhcpbridge_flagfile=/etc/nova/nova.conf

dhcpbridge=/usr/bin/nova-dhcpbridge

logdir=/var/log/nova

state_path=/var/lib/nova

lock_path=/var/lock/nova

force_dhcp_release=True

libvirt_use_virtio_for_bridges=True

verbose=True

ec2_private_dns_show_ip=True

api_paste_config=/etc/nova/api-paste.ini

enabled_apis=ec2,osapi_compute,metadata

my_ip = 127.0.0.1

vncserver_listen = 127.0.0.1

vncserver_proxyclient_address = 127.0.0.1

rpc_backend = rabbit

rabbit_host = controller

rabbit_password = RABBIT_PASS

auth_strategy = keystone

[database]

connection = mysql://nova:NOVA_DBPASS@controller/nova

[keystone_authtoken]

auth_uri = http://controller:5000/v2.0

identity_uri = http://controller:35357

admin_tenant_name = service

admin_user = nova

admin_password = NOVA_PASS

[glance]

host = controller

Anpassen des Compute-Codes

An dieser Stelle hat man /etc/nova/nova.conf im Controller-Node-Bereich bereits editiert, die einzige Änderung, die dann noch nötig ist, ist das Hinzufügen von zwei Code-Zeilen im DEFAULT-Bereich:

vnc_enabled = True

novncproxy_base_url = http://controller:6080/vnc_auto.html

Die Konfiguration des Neutron-Netzwerks kann man sich für dieses Beispiel ersparen, da bei einer einzigen virtuellen Maschine keine virtuellen Interfaces benötigt werden.

Hinzufügen des Dashboards

Mithilfe dieser Anleitung kann anschließend Apache installiert und darin das OpenStack Dashboard konfiguriert werden. Damit sollte man auch Zugriff auf das Befehlszeilen-Tool von OpenStack erhalten. Nach dem Start von Apache sollte die folgende Meldung angezeigt werden:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

Die Fehlermeldung kann aber ignoriert werden.

Wer Ubuntu Server verwendet, der kann jetzt noch den Unity-Ubuntu-Desktop nachinstallieren, um sich am Dashboard anzumelden. Bei Ubuntu Desktop ist Unity Ubuntu standardmäßig bereits vorinstalliert. Für die Installation auf Ubuntu Server kann der folgende Befehl verwendet werden:

sudo apt-get install --no-install-recommends ubuntu-desktop

Damit wird aber noch kein Browser wie Firefox oder ähnliches installiert, daher muss anschließend über die Ubuntu-Kommandozeile ein Nutzer angelegt und diesem über den visudo-Befehl Root-Zugang gewährt werden.

Anschließend kann man sich am Dashboard über den gleichen Admin-Anmeldedaten anmelden, die in der Datei admin-openrc.sh hinterlegt sind.

Anmerkung am 14. Februar 2017: Die Links zu den diversen Anleitungen auf der OpenStack-Webseite führen leider inzwischen ins Leere und wurden daher entfernt.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+ und Facebook!

Erfahren Sie mehr über Cloud Computing