Die Welt der On-Premise Private PaaSes verändert sich schnell. Vor ein paar Jahren bauten wir auf private On-Premise PaaSes auf, die auf der bestehenden Infrastruktur basierten, und nutzten Puppet als Automatisierungstool für die schnelle Bereitstellung neuer Anwendungsserver. Wir stellten ein Selbstbedienungsportal zur Verfügung, über das Entwicklungsteams jede Art von Server in jeder Art von Umgebung innerhalb weniger Minuten zum Laufen bringen konnten. Wir haben für jede Anwendung einen virtuellen Server erstellt, um sie überschaubar zu halten, was natürlich ziemlich ressourcenintensiv ist. Seit dem 9. Juni ist Docker als produktionsreif erklärt worden, so dass die Teams nun die Möglichkeit haben, statt einer vollständigen virtuellen Maschine leichtgewichtige Container bereitzustellen. Dadurch wird die Geschwindigkeit der Bereitstellung noch weiter erhöht, während die Kosten für die Erstellung einer Plattform gesenkt und der Ressourcenverbrauch minimiert werden. Um zu veranschaulichen, wie einfach das Leben wird, werden wir eine originale CloudFoundry node.js-Anwendung in Docker auf einem CoreOS-Cluster bereitstellen. Dieses praktische Experiment basiert auf MacOS, Vagrant und VirtualBox.
Schritt 1. Installation von etcdctl und fleetctl
Bevor Sie beginnen, müssen Sie etcdctl und fleetctl auf Ihrem Host installieren. etcd ist ein raffinierter verteilter Key-Value-Speicher, während fleet die Bereitstellung von (Docker-)Diensten in einem CoreOS-Cluster verwaltet.
$ brew install go etcdctl
$ git clone https://github.com/coreos/fleet.git
$ cd fleet && ./build && mv bin/fleetctl /usr/local/bin
Schritt 2. Installieren Sie den Deis Command Line Client
Um das PaaS zu steuern, müssen Sie den Deis-Kommandozeilen-Client installieren:
$ brew install python
$ sudo pip install deis
Schritt 3. Bauen Sie die Plattform
Deis bietet alle Möglichkeiten zur Erstellung, Bereitstellung und Verwaltung von Anwendungen.
$ git clone https://github.com/deis/deis.git
$ cd deis
$ vagrant up
$ ssh-add ~/.vagrant.d/insecure_private_key
$ export DOCKER_HOST=tcp://172.17.8.100:4243
$ export FLEETCTL_TUNNEL=172.17.8.100
$ make pull
Schritt 4. Starten Sie die Plattform
Jetzt ist alles bereit, um die Plattform zu starten:
$ make run
Nachdem dieser Lauf abgeschlossen ist, können Sie sehen, dass die 7 Komponenten der Deis-Architektur mit dem Befehl list-units gestartet wurden: Der Builder, der Cache, der Controller, die Datenbank, der Logger, die Registry und der Router. Diese Architektur sieht der Architektur von CloudFoundry recht ähnlich.
$ fleetctl list-units
| UNIT | STAAT | LADEN | AKTIV | SUB | DESC | MACHINE |
| deis-builder.service | gestartet | geladen | aktiv | Laufen | deis-builder | 79874bde.../172.17.8.100 |
| deis-cache.service | gestartet | geladen | aktiv | Laufen | deis-cache | 79874bde.../172.17.8.100 |
| deis-controller.service | gestartet | geladen | aktiv | Laufen | deis-Kontrolleur | 79874bde.../172.17.8.100 |
| deis-database.service | gestartet | geladen | aktiv | Laufen | deis-Datenbank | 79874bde.../172.17.8.100 |
| deis-logger.service | gestartet | geladen | aktiv | Laufen | deis-logger | 79874bde.../172.17.8.100 |
| deis-registry.service | gestartet | geladen | aktiv | Laufen | deis-registry | 79874bde.../172.17.8.100 |
| deis-router.1.service | gestartet | geladen | aktiv | Laufen | deis-router | 79874bde.../172.17.8.100 |
Alternativ können Sie das Ergebnis auch überprüfen, indem Sie einen Blick in die virtuelle Maschine werfen:
$ vagrant ssh -c "docker ps"
Jetzt, da unsere Plattform läuft, können wir sie benutzen!
Schritt 5. Registrieren Sie einen neuen Benutzer bei Deis und fügen Sie den öffentlichen ssh-Schlüssel hinzu
$ deis register 172.17.8.100:8000
--username=mark
--password=goddesses
--email=mark.van.holsteijn@..com
$ deis keys:add ~/.ssh/id_rsa.pub
Schritt 6. Einen Cluster erstellen
Erstellen Sie einen Anwendungscluster unter der Domäne 'dev.172.17.8.100.xip.io'. Die Option --hosts gibt alle Hosts im Cluster an: Der einzige verfügbare Host im Cluster ist derzeit 172.17.8.100.
$ deis clusters:create dev dev.172.17.8.100.xip.io
--hosts=172.17.8.100
--auth=~/.vagrant.d/insecure_private_key
Schritt 7. Holen Sie sich die App
Wir haben eine einfache, aber effektive node.js-Anwendung erstellt, die Ihnen zeigt, was passiert, wenn Sie die Anwendung skalieren oder eine neue Version pushen.
$ git clone git@github.com:mvanholsteijn/sample_nodejs_cf.git
$ deis apps:create appmon --cluster=dev
$ deis config:set RELEASE=deis-v1
$ git push deis master
Schritt 8. Öffnen Sie Ihre Anwendung
Voilà! Ihre Anwendung läuft. Klicken Sie jetzt auf Überwachung starten.
$ deis apps:open
sollten Sie etwa so etwas sehen:
Schritt 9. Skalierung Ihrer Anwendung
Um die Skalierung in Aktion zu sehen, geben Sie den folgenden Befehl ein:
$ deis ps:scale web=4
Es werden 3 neue Container gestartet, die in der Liste angezeigt werden.
Schritt 10. Aktualisieren Ihrer Anwendung
Nehmen Sie nun eine Änderung an der Anwendung vor, ändern Sie z.B. die Nachricht in 'Greetings from Deis release' und pushen Sie Ihre Änderung:
$ git commit -a -m "Message changed"
$ git push deis master
Nach einer Weile werden Sie folgendes auf Ihrem Monitor sehen!
Schritt 11. Blick auf CoreOS
Sie können fleetctl erneut verwenden, um sich die neuen Dienste anzusehen, die der Plattform hinzugefügt wurden!
$ fleetctl list-units
| UNIT | STAAT | LADEN | AKTIV | SUB | DESC | MACHINE |
| app-mon_v7.web.1-announce.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.1 anmelden | 79874bde.../172.17.8.100 |
| app-mon_v7.web.1-log.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.1 log | 79874bde.../172.17.8.100 |
| app-mon_v7.web.1.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.1 | 79874bde.../172.17.8.100 |
| app-mon_v7.web.2-announce.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.2 ankündigen | 79874bde.../172.17.8.100 |
| app-mon_v7.web.2-log.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.2 log | 79874bde.../172.17.8.100 |
| app-mon_v7.web.2.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.2 | 79874bde.../172.17.8.100 |
| app-mon_v7.web.3-announce.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.3 ankündigen | 79874bde.../172.17.8.100 |
| app-mon_v7.web.3-log.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.3 log | 79874bde.../172.17.8.100 |
| app-mon_v7.web.3.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.3 | 79874bde.../172.17.8.100 |
| app-mon_v7.web.4-announce.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.4 ankündigen | 79874bde.../172.17.8.100 |
| app-mon_v7.web.4-log.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.4 log | 79874bde.../172.17.8.100 |
| app-mon_v7.web.4.service | gestartet | geladen | aktiv | Laufen | app-mon_v7.web.4 | 79874bde.../172.17.8.100 |
| deis-builder.service | gestartet | geladen | aktiv | Laufen | deis-builder | 79874bde.../172.17.8.100 |
| deis-cache.service | gestartet | geladen | aktiv | Laufen | deis-cache | 79874bde.../172.17.8.100 |
| deis-controller.service | gestartet | geladen | aktiv | Laufen | deis-Kontrolleur | 79874bde.../172.17.8.100 |
| deis-database.service | gestartet | geladen | aktiv | Laufen | deis-Datenbank | 79874bde.../172.17.8.100 |
| deis-logger.service | gestartet | geladen | aktiv | Laufen | deis-logger | 79874bde.../172.17.8.100 |
| deis-registry.service | gestartet | geladen | aktiv | Laufen | deis-registry | 79874bde.../172.17.8.100 |
| deis-router.1.service | gestartet | geladen | aktiv | Laufen | deis-router | 79874bde.../172.17.8.100 |
Fazit
Deis ist eine sehr einfache und leicht zu bedienende Methode, um mit Docker und CoreOS ein PaaS zu erstellen. Die node.js-Anwendung, die wir erstellt haben, kann mit Deis ohne eine einzige Änderung bereitgestellt werden. In den folgenden Beiträgen werden wir uns näher mit Deis und CoreOS befassen!
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Unsere Ideen
Weitere Blogs
Contact



