Azure – Microservices automatisiert betreiben: VSTS, Docker Swarm Mode, Traefik und Azure IaaS

Datum

30.08.2018

Dieser Beitrag wurde verfasst von:

Samuel Weber

Die meisten Software Hersteller benötigen zur Entwicklung und Wartung ihrer Produkte mehrere Umgebungen – seien dies Entwicklungsumgebungen, verschiedene Testumgebungen oder die produktive Umgebung. Heutzutage gibt es Bestrebungen, jede Codeanpassung direkt (Continuous Deployment) oder in kurzen Release-Zyklen und einer allfälligen, manuellen Bestätigung (Continuous Delivery) auf verschiedene Umgebungen oder allenfalls direkt in die Produktion zu überführen. Damit das möglich ist, sind Automatismen und die richtigen Frameworks bzw. Plattformen notwendig.

Mit Docker als Container-Plattform und Traefik als Reverse Proxy können mit minimalem Aufwand neue Umgebungen “gezaubert” werden. VSTS übernimmt dabei das Tooling für das Build – und Releasemanagement.

Dieser Blog setzt ein Setup eines Docker Swarm-Mode Clusters mit IaaS Ressourcen voraus. Dies wird nicht in diesem Artikel beschrieben (Bei Fragen dazu, dürfen Sie gerne mit uns Kontakt aufnehmen).

Umgebungen

Für die Produktentwicklung, bei der Code-Änderungen verschiedene Teststufen durchlaufen, braucht es typischerweise die folgenden Umgebungen:

  • dev: Entwicklungsumgebung
  • integration: Umgebung, welche durch Continuous Integration (CI) aktualisiert wird
  • release/hotfix: Bei Release Isolation (z.B. git flow)
  • acceptance: Umgebung für user acceptance tests (aka staging)
  • production: Produktive Umgebung

Ziel ist es, diese Umgebungen automatisch zu erstellen und das Deployment der Software automatisiert durchzuführen bzw. bereitzustellen (Manuelles Approval).

Prozessübersicht

Mit VSTS gibt es zwei Pipelines (Build und Release).

Buildpipeline

Die Buildpipeline ist für das automatisierte Testing sowie das Erstellen der Artefakte zuständig. In diesem Setup wird in dieser Pipeline ein Docker Image für den Microservice (Basis-Image & Binaries des Microservices) und die Konfiguration (Version, Namen des Images, etc.) erstellt, welche an das Releasemanagement weitergegeben wird.

Releasepipeline

Die Releasepipeline erstellt die Umgebung und deployed den Microservice auf Azure, indem sie das vom Build erstellte Docker-Image verwendet, um einen Docker Swarm-Mode Service  zu erstellen (https://docs.docker.com/engine/swarm/).

Buildpipeline

In der Buildpipeline werden folgende Tasks ausgeführt:

  1. Kompilierung des Source Codes
  2. Ausführen der automatisierten Tests
  3. Wenn die Tests erfolgreich waren, wird ein Docker-Image erstellt
  4. Das Docker-Image wird in die Azure Container Registry (https://azure.microsoft.com/en-us/services/container-registry/) hochgeladen
  5. Das eigentliche VSTS Build-Artefakt ist eine Konfigurationsdatei mit den Informationen über das erstellte Docker-Image (Name, Version)

Konfigurationsdatei
Die erstellte Datei ist eine Docker-compose Konfiguration (https://docs.docker.com/compose/compose-file/). Die Datei wird später von der Releasepipeline genutzt, um den Docker-Service zu erstellen.

Beispiel aus einem Build vom master-branch:

version: “3.5”
services:
    accountingservice:
      image: “novacaptach.azurecr.io/img-accountingservice-master:0.1.0
      environment:
          – ASPNETCORE_ENVIRONMENT=#{aspnetcore.environment}#
      deploy:
        placement:
          constraints:
            – node.role == worker
        labels:
          traefik.port: “#{traefik.port}#”
          traefik.enable: “#{traefik.enable}#”
          traefik.backend: “#{traefik.backend}#”
          traefik.frontend.rule: “#{traefik.frontend.rule}#”
networks:
  default:
    external: true
    name: traefik-net

Releasepipeline

Die Releasepipeline wird automatisch getriggert, sobald ein Build erfolgreich abgeschlossen wurde. Diese Pipeline ist dafür zuständig, die Services auf Azure bereitzustellen. Dies geschieht in den folgenden Schritten:

Je nach Umgebung und Setup kann es nötig sein, den automatischen Prozess zu unterbrechen und eine manuelle Bestätigung abzuwarten (Approval), die Installation zu einem bestimmten Zeitpunkt durchzuführen (Scheduled) oder sonstige Prozessschritte dazwischen zu schieben (Gates). Die Funktionalität kann in der VSTS-Release Konfiguration sehr einfach eingerichtet werden. Durch “Gates” wurde VSTS enorm flexibel. Gates erlauben momentan den Aufruf von Azure Functions, dem Azure Monitoring, einer Work Item Query (Prüfen des Counts) oder einer Custom REST API.

Danach loggt sich VSTS in den Swarm Manager ein und erstellt den Swam-Mode Service mit Hilfe der oben erwähnten Konfigurationsdatei.

Die drei letzten Schritte können in VSTS durch einen Task erledigt werden (Run a docker-command). Vorgängig muss allerdings noch die Konfigurations-Datei (aus dem Build) entsprechend der Zielumgebung angepasst werden. Dabei wird in einem VSTS Task (Replace Tokens – https://github.com/qetza/vsts-replacetokens-task) die Platzhalter “#{}#” mit den entsprechenden Werten ersetzt.

So kann beispielsweise eine fertige compose-Datei für den produktiven Release eines Service aussehen:

version: “3.5”
services:
    accountingservice:
      image: “novacaptach.azurecr.io/img-accountingservice-master:0.1.0”
      environment:
          – ASPNETCORE_ENVIRONMENT=production
      deploy:
        placement:
          constraints:
            – node.role == worker
        labels:
          traefik.port: “80
          traefik.enable: “true
          traefik.backend: “srv-accountingservice-production-master
          traefik.frontend.rule: “Host:accountingservice.apps.novacapta.ch
networks:
  default:
    external: true
    name: traefik-net

Durch den Befehl “docker stack deploy” und der Angabe des Konfigurationsfiles wird der Service nun in Azure erstellt oder aktualisiert.

Traefik

Traefik ist ein Reverse Proxy, Load Balancer und auch ein HTTPS Enabler (mit Hilfe von Let’s encrypt – https://letsencrypt.org/). Traefik läuft ebenso wie die oben beschriebenen Microservices im Swarm-Mode Cluster, unterstützt aber auch viele andere Provider.

https://docs.traefik.io/
https://docs.traefik.io/

Wir verwenden Traefik als Reverse Proxy, um unsere Services für die verschiedenen Umgebungen zu routen. Das Schöne daran ist, dass man sich um keine Ports kümmern muss und nur mit den Namen der Services arbeiten kann. Traefik überwacht die im Cluster vorhandenen oder neu erstellten Services. Einem Docker-Service können sogenannte Labels hinzugefügt werden, welche sich Traefik zunutze macht, um das Routing zu konfigurieren (traefik.port, traefik.backend, traefik.frontend.rule). Zudem wird der Zugriff von außen auf jeden Service automatisch HTTPS-enabled.

Voraussetzung für unseres Setup ist das einmalige Erstellen eines CNAME und eines Wilcard CNAME, welcher den Web-Traffic von apps.novacapta.ch bzw. *.apps.novacapta.ch auf die Azure Public-IP umleitet.

Fazit

VSTS, Azure, Docker und Traefik bilden ein kompetentes Gespann, mit welchem man die agile Produktentwicklung sehr gut im Griff hat. Eine sehr transparente, flexible und ausbaubare Lösung, die sich auch einfach skalieren lässt. Durch den Support verschiedenster Provider durch Traefik wäre auch ein Switch zu einem anderen Orchestrator (z.B. Kubernetes) nicht mehr aufwändig.

Erfahren Sie mehr

Valo ist neuer Partner der novaCapta für Intranets
News
News

Valo ist neuer Partner der novaCapta für Intranets

Durch die Partnerschaft mit Valo, dem Ready-2-Go Intranet-Baukasten aus Finnland baut die novaCapta ihr Angebot bei der Umsetzung von schnellen und funktionalen...

novaCapta auf der Fachtagung für Interne Revision
Event
Event

novaCapta auf der Fachtagung für Interne Revision

Das Expertenteam der novaCapta präsentiert am 15. und 16. November ihre innovative Audit Management Lösung auf dem DIIR-Kongress in Dresden. Besuchen Sie unsere...

Jan
25
Webcast mit Microsoft: Fit für die digitale Arbeitswelt
Webinar
Webinar

Webcast mit Microsoft: Fit für die digitale Arbeitswelt

Die digitale Transformation und die Veränderung der Arbeitswelt ist längst in vielen Unternehmen und in den öffentlichen Einrichtungen angekommen. Dennoch stell...

Office 365 Groups als Evolution von SharePoint?
Blog
Blog

Office 365 Groups als Evolution von SharePoint?

Zusätzlich zu SharePoint erlauben die Office 365 Groups es mir als Anwender, schnell und einfach neue Gruppen anzulegen und selbständig Benutzer hinzuzufügen.

Jan
17
Webinar Azure DevOps und Docker Machine
Webinar
Webinar

Webinar Azure DevOps und Docker Machine

DevOps ist in aller Munde, doch was genau verbirgt sich eigentlich hinter dem so viel beschworenen Konzept der IT-Zusammenarbeit? Im Webinar am 17.01.2019 erfah...

Strukturen lernen und leben – Praxis Informationsarchitektur
Blog
Blog

Strukturen lernen und leben – Praxis Informationsarchitektur

Teil 1 – Strukturen lernen – Informationsarchitektur erfolgreich vertreten

Farben zur Optimierung des SharePoint-Kalender
Blog
Blog

Farben zur Optimierung des SharePoint-Kalender

Auch in SharePoint kann man Kategorien für Teamkalender-Einträge farblich abheben und damit die Lesbarkeit erhöhen. Wir zeigen Ihnen, wie das geht.

Die Micro-Info-Architektur
Blog
Blog

Die Micro-Info-Architektur

Vertiefung zum Thema Informationsarchitektur moderner Intranets mit SharePoint: Das Micro-Management.

Das neuste Mitglied der Office 365 Familie: Delve
Blog
Blog

Das neuste Mitglied der Office 365 Familie: Delve

Microsoft legt nach: Mit Delve startet eine neue Form des Suchens und des Auffinden von Dokumenten und Informationen.

Ich bin im Flow! – Eine Übersicht zu Microsoft Flow
Blog
Blog

Ich bin im Flow! – Eine Übersicht zu Microsoft Flow

Die Power Platform wird aktuell von Microsoft sehr stark gepusht. Zeit, sich mit dem Potenzial der einzelnen Komponenten zu beschäftigen. Heute: Flow.

SharePoint Framework Client-Side Webparts mit React
Blog
Blog

SharePoint Framework Client-Side Webparts mit React

React ist ein Framework zur Erstellen von Benutzeroberflächen. In der SharePoint Online Entwicklung bietet es sich für die Entwicklung von Client-Side Webparts...

Referenz: Miltenyi Biotec

Referenz: Miltenyi Biotec

Der Laborgerätehersteller Miltenyi Biotec entwickelte in Zusammenarbeit mit novaCapta eine auf modernsten Technologien basierende App, die Prozesse der tägliche...