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:
- Aufbau einer grundlegenden Umgebung aus Datenbank und Host-Dateien;
- Installation des Identity Service;
- Installation des Image Service;
- Installation des Compute Service;
- 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!