Entwicklungsumgebungen mit Rancher in der Amazon Cloud

13. Juli 2017 at 16:30

 

Entwicklungsumgebungen mit Rancher in der Amazon Cloud

Das gemeinsame Arbeiten an Projekten zwischen verschiedenen Standorten ist in der heutigen Zeit eine Herausforderung, der wir ständig begegnen und die auch bei brandung mit zwei Standorten in Berlin und Köln in der täglichen Arbeit auftritt. Traditionell haben Entwickler auf ihren lokalen Entwicklungsumgebungen gearbeitet und den Code in eine gemeinsame Versionsverwaltung eingestellt. Von dieser sind die entwickelten Artefakte dann auf eine Test-, Stage-, oder Liveumgebung überspielt worden. Vor ein paar Jahren haben wir bereits auf die docker Technologie gesetzt und konnten somit die Arbeitsweise deutlich flexibler gestalten. Es wurde möglich, Entwicklungsumgebungen ohne das Klonen von virtuellen Maschinen beliebig oft an verschiedene Standorte zu verteilen.

Um der wachsenden Anzahl von docker Containern Herr zu werden, haben wir als nächsten Schritt auf die Software Rancher zurückgegriffen. Rancher ist eine Open-Source Lösung zur Verwaltung und zum Einsatz der docker Technologie. Die Software kümmert sich um die Organisation der zugrundeliegenden Technik, von der Orchestrierung über die Registry bis hin zur Datenbank-Anbindung. Für das Load Balancing bringt die Plattform einen integrierten, elastischen Lastenverteiler mit. Rancher ermöglicht eine einfache Nutzung und ist für den Einsatz im Unternehmen ausgelegt. Die Software unterstützt LDAP- und AD-Anbindungen sowie rollenbasierte Zugriffe und erlaubt die Erstellung von verschiedenen, getrennten Umgebungen für Entwicklung, Test und Produktion.

Container Management mit Rancher

Durch den Einsatz von Rancher und docker wurde die Entwicklungsarbeit deutlich effizienter, hatte aber den Nachteil, dass eine (interne) Infrastruktur vorgehalten werden musste, die nicht ohne weiteres skalierbar und immer wieder von den Ressourcen endlich war. Daher haben wir uns dafür entschieden, die Entwicklungs-Infrastruktur in die Cloud zu verlegen und somit jedem Kollegen den Zugriff von überall aus zu gewähren. Da das Thema Sicherheit und Performance der Infrastruktur im Vordergrund steht, wurde eine praktikable Möglichkeit gesucht, die Infrastruktur schnell und unkompliziert anpassen zu können. So gelangt man über kurz oder lang zum Thema IaC (Infrastructure as Code), das es erlaubt, die Umgebung über einen versionierten Code anpassen zu können.

Das Tool terraform erlaubt die Beschreibung der Infrastruktur mittels Code. Eine Infrastruktur in Amazon AWS aufzubauen kann mitunter sehr langwierig und fehleranfällig sein. Mit der Verwendung von terraform Dateien lässt sich diese Infrastruktur beschreiben und anschließend starten. Durch die Verwaltung der Infrastruktur mittels Code lässt sich die Umgebung nicht nur starten, sondern auch während des laufenden Betriebes beliebig oft verändern, replizieren und auch wieder komplett „zerstören“. terraform bietet verschiedene „Provider“, zum Beispiel für AWS, DigitalOcean sowie für Rancher an.

Ein Beispiel für einen terraform Code zum Anlegen einer neuen Rancher Umgebung:

provider „rancher“ {

api_url = „${var.api_url}“

access_key = „${var.rancher_access_key}“

secret_key = „${var.rancher_secret_key}“

}

resource „rancher_environment“ „env-name“ {

name = „NAME“

description = „NAME terraform generated environment“

orchestration = „cattle“

}

resource „rancher_registration_token“ „name-token“ {

environment_id = „${rancher_environment.env-name.id}“

name = „name-token“

description = „Host registration token for NAME environment“

}

Über folgende Befehle wird die neue Umgebung in Rancher angelegt:

$~: terraform init

$~: terraform plan

$~: terraform apply

und wieder gelöscht:

$~: terraform destroy

Rancher Server Single Node HA in AWS

Mit Hilfe der oben genannten Tools sind wir in der Lage eine Infrastruktur in der Amazon Cloud schnell, nachvollziehbar und sicher aufzubauen und den Entwicklern Hilfe an allen Standorten für effizientes Arbeiten „on demand“ zur Verfügung zu stellen.

Lastspitzen in den verschiedenen Projekten können durch den Einsatz von LoadBalancern zur optimierten Verteilung wunschgemäß skaliert werden. Darüber hinaus kann so der Umfang von Speicherplatz, Arbeitsspeicher und Rechenleistung jederzeit an den tatsächlichen Bedarf angepasst werden.

Das Zusammenspiel von IaaS (Infrastructure as a Service) mit der Amazon Cloud und IaC (Infrastructure as Code) mit Hilfe von terraform erlaubt es uns, eine größtmögliche Flexibilität bei der Bereitstellung von benötigten Rechenressourcen zu erhalten. Ein weiterer Vorteil ist die deutliche Erhöhung der Ausfallsicherheit und die Verfügbarkeit der Entwicklungs-Infrastruktur.

Nützliche Links und Informationen zu denen im Blog erwähnten Tools finden sich hier:

www.rancher.com

www.docker.com

www.terraform.io

Alexander Linn, der Autor des aktuellen Blogbeitrages, ist bei brandung als DevOps Engineer für die Standorte Köln und Berlin zuständig. DevOps symbolisiert die Schnittstelle zwischen Softwareentwicklung und Betrieb und ermöglicht eine homogene und performante Infrastruktur für Entwickler und Kunde.