Die Orchestrierung von OpenStack Komponenten und Anwendungen ist eines der größten Probleme im Bereich OpenStack.
OpenStack selbst besteht aus einer großen Anzahl einzelner Komponenten die separat oder zusammen installiert werden müssen und die insgesamt ca. 1200-1400 Konfigurationsparamenter besitzen. Deshalb wurden mit der Zeit verschiedene Werkzeuge erschaffen bzw. benutzt um die Orchestrierung der OpenStack Komponenten zu einer funktionierenden Installation zu ermöglichen.
Einige Distributionen verwenden Chef (z.B. die IBM Distributionen Cloud Manager und Cloud Orchestrator), andere Triple-O (OpenStack on OpenStack, hier wird ein fertiges OpenStack Image zur Installation einer angepassten OpenStack Installation verwendet). Die unserer Meinung nach beste Orchestrierung stellt jedoch Ubuntu mit der Software Juju bereit.
Juju ist eine Software die Orchestrierung von OpenStack sowohl über eine grafische Oberfläche als auch per CLI Befehle ermöglicht. Eine grafische OpenStack Installation sieht z.B. so aus:
Auf diesem Bild sieht man die einzelnen Komponenten von OpenStack, wie Keystone, Glance, Cinder, usw. sowie die Infrastruktur wie mysql, rabbitmq, ntp.
Weiterhin sieht man sehr gut die Verbindungen der einzelnen Komponenten untereinander. So haben fast alle Module Verbindung zur mysql Datenbank, da sie dort ihre Daten ablegen.
Mit Hilfe von Juju kann man OpenStack installieren indem man auf der grafischen Zeichenoberfläche die einzelnen Komponenten anordnet und dann mit der Maus untereinander verbindet. Dies ergibt ein sehr übersichtliches Bild und man findet sich in der Installation schnell zurecht. Sobald man ein Modul auf der Oberfläche angeordnet hat, kann man es noch konfigurieren bevor man es startet. Dabei kann man Dinge wie Netzwerkschnittstellen oder Konfigurationsparameter ändern und auch angeben wo das neue Modul laufen soll. Das kann z.B. ein neuer Server sein oder eine weitere LXC Umgebung auf einem bestehenden Server. Sobald man all es fertig konfiguriert hat kann man das Modul dann starten. Danach kann man es dann mit anderen schon bestehenden Modulen verbinden. Dabei werden die einzelnen Module automatisch neu gestartet falls das notwendig ist. Am Ende hat man dann eine komplette, funktionierende OpenStack Umgebung.
Aber fangen wir am Besten vorne an:
Zunächst einmal muss man seine Server auf denen man OpenStack installieren will mit dem Ubuntu Tool MAAS verwaltet haben. (Siehe maas.ubuntu.com)
Wenn man alle Server dort verwaltet hat, kann man mit der JuJu Installation beginnen. Auf dem MAAS Server muss auch Juju installiert sein und man kann nun Juju mit dem Befehl "juju bootstrap" initialisieren. Dies entnimmt einen Server aus dem von MAAS verwalteten Pool und benutzt ihn als Orchestrierungsserver für die weitere Juju Installation. Mittels
juju deploy --to 0 juju-gui
wird nun auf diesem Orchestrierungsserver auch das Juju-GUI installiert. Der erste von MAAS initialisierte Server bekommt nämlich die Nummer 0, der zweite 1, usw. Mit der expliziten Anweisung "--to 0" weisen wir Juju an nicht noch einen weiteren Server aus dem Pool zu holen sondern die Installation auch auf dem Server 0 durchzuführen.
Nun können wir weitere Komponenten installieren, wie mysql, rabbitmq, nova-cloud-controller, usw. Um hierbei nicht weitere Server zu verbrauchen aber trotzdem eine Separierung der Dienste zu erreichen können wir diese auf separaten Linux Containern auf unserem Server 0 folgendermaßen installieren:
juju deploy --to lxc:0 mysqljuju deploy --to lxc:0 keystonejuju deploy --to lxc:0 nova-cloud-controllerjuju deploy --to lxc:0 glancejuju deploy --to lxc:0 rabbitmq-serverjuju deploy --to lxc:0 openstack-dashboardjuju deploy --to lxc:0 cinder
Nun haben wir schon eine ziemlich ausführliche OpenStack Installation und es fehlt eigentlich nur noch ein Compute Node auf dem dann unsere von OpenStack verwalteten virtuellen Maschinen ausgeführt werden sollen. Da wir dafür mehr Ressourcen brauchen spendieren wir hier einen eigenen Server und legen diesen folgendermaßen an:
juju deploy nova-compute
Wie man hier sieht verwenden wir weder "--to 0" noch "--to lxc:0" und legen somit einen neuen Server aus dem MAAS Pool an und verwenden nicht einen alten oder einen Linux Container.
Nun müssen wir noch die einzelnen Komponenten miteinander in Beziehung setzen, was mit folgenden Befehlen geschieht:
juju add-relation mysql keystonejuju add-relation nova-cloud-controller mysqljuju add-relation nova-cloud-controller rabbitmq-serverjuju add-relation nova-cloud-controller glancejuju add-relation nova-cloud-controller keystonejuju add-relation nova-compute nova-cloud-controllerjuju add-relation nova-compute mysql-serverjuju add-relation nova-compute rabbitmq-serverjuju add-relation nova-compute glancejuju add-relation glance mysqljuju add-relation glance keystonejuju add-relation glance cinderjuju add-relation mysql cinderjuju add-relation cinder rabbitmq-serverjuju add-relation cinder nova-cloud-controllerjuju add-relation cinder keystonejuju add-relation openstack-dashboard keystone
Diese Befehle ergeben eine voll lauffähige OpenStack Installation so wie sie von Marco Ceppi in seinem schönen Artikel auf http://marcoceppi.com/2014/06/deploying-openstack-with-just-two-machines/ beschrieben wird und im unten stehenden Bild zu sehen ist.
Diese Implementierung ist ein Beispiel für eine OpenStack Minimalinstallation auf nur zwei Server n (plus einem Server für MAAS, also insgesamt drei).
Juju hat aber insbesondere auch Vorteile wenn man nicht nur schnell eine Minimalinstallation machen, sondern eine bestehende Installation hochskalieren will. Wenn ich also z.B. meinen RabbitMQ Server redundant machen will, kann ich das auf einfache Weise tun, entweder in dem ich bei der initialen Installation schon angebe auf wievielen Knoten der Service verteilt laufen soll (hier 3):
juju deploy -n 3 rabbitmq-server
oder, wenn ich eine bestehende Installation im laufenden Betrieb hochskalieren will kann ich das mit folgendem Befehl tun:
juju add-unit rabbitmq-server
Eine sehr gute Anleitung zur Hochverfügbarkeit von OpenStack mittels Juju Installation finden man übrigens unter https://wiki.ubuntu.com/ServerTeam/OpenStackHA
Wenn nun die einzelnen von Juju implementierten Module konfiguriert werden müssen, also diverse Konfigurationsparameter eingestellt werden müssen, kann man diese in eine sogenannte yaml Datei eintragen und dann beim Deployment verwenden. So kann z.B. eine Ceph Implementierung auf drei Knoten so aussehen:
juju deploy --config local.yaml -n 3 ceph
Aber man kann Juju nicht nur verwenden um OpenStack zu installieren! Nein, man kann, wenn man OpenStack installiert hat, Juju auch dazu verwenden Anwendungen auf OpenStack zu installieren und automatisch dazu neue virtuelle Maschinen zu generieren.
Hierzu muss zuerst in einer virtuellen OpenStack Maschine die als Startpunkt verwendet wird Juju installiert werden, mittels:
sudo apt-get install juju-core
Nun muss mittels "juju init" die Juju Umgebung initialisiert werden. Dabei wird die initiale Juju Umgebung in der Datei ".juju/environments.yaml" generiert. Diese ist jetzt an die Erfordernisse der eigenen Cloud anzupassen. Dies könnte z.B. so aussehen:
default: mycloudenvironments: mycloud: type: openstack use-floating-ip: false use-default-secgroup: false network: private auth-url: http://192.168.0.100:5000/v2.0 region: RegionOne auth-mode: userpass tenant-name: demo username: demo password: <das gewählte Passwort>
Nun muss ein Umage gewählt werden mit dem neue Instanzen deployt werden. Es wird zunächst heruntergeladen und dann in Glance abgelegt. Die dabei generierte Image ID wird dann weiter verwendet.
wget https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-amd64-disk1.imgglance image-create --name ubuntu-14.04-server-cloudimg-amd64-disk1 --disk-format qcow2 --container-format bare --owner demo --is-public True --file ubuntu-14.04-server-cloudimg-amd64-disk1.img
Nun müssen die Metadaten für das Image generiert werden:
juju metadata generate-image -a amd64 -i b2731f9e-6971-4c91-bea3-39aa0e23e15b -r RegionOne -s trusty -d /opt/stack -u http://192.168.0.100:5000/v2.0 -e mycloud
Im nächsten Schritt werden die Metadaten gefüllt:
juju metadata generate-tools -d /opt/stack
Und jetzt wird das Juju gebootstrapped und damit die erste virtuelle Maschine für Juju generiert:
juju bootstrap --metadata-source /opt/stack --upload-tools
Ab jetzt können mittels Juju weitere Instanzen erzeugt werden und wie vorher Juju sich die Compute Nodes aus MAAS gezogen hat, tut es dies jetzt als virtuelle Instanzen aus OpenStack.
juju deploy mysqljuju deploy wordpressjuju add-relation wordpress mysqljuju expose wordpressjuju status
Nach diesen Befehlen hat man ein auf Basis mysql laufendes Wordpress innerhalb zweier OpenStack Instanzen.
Hier wollen wir in der nächsten Zeit Neuigkeiten, Anleitungen und interessate Hinweise zum Thema Cloud veröffentlichen.
Es geht dabei sowohl um die von uns supporteten OpenStack Distributionen als auch um allgemeine Informationen die alle Distributionen oder OpenStack als solches betreffen.
Wir besprechen hierbei die Bereiche aus OpenStack:
Compute
Storage
Network
Zudem werden wir einen Schwerpunkt auf den Bereich Orchestration legen, sowohl Orchestrierung der OpenStack Komponenten, als auch Orchestrierung von Anwendungen auf Basis von OpenStack Compute Nova.