Unser Weg in die OpenShift - Deployment-Strategien aus der Sicht von Hermes

Unser Weg in die OpenShift - Deployment-Strategien aus der Sicht von Hermes

Microservice-Architektur und Cloud-Betrieb, diese zwei Stichworte suggerieren ein relativ klares Vorgehen, was das Deployment angeht.
Tatsächlich gibt es aber vielfältige Strategien, Microservices innerhalb einer Organisation live in der Cloud zu deployen. OpenShift bietet hier verschiedene Wege zum Ziel.
In diesem Vortrag stellen wir unterschiedliche Deployment-Strategien vor und liefern anhand unseres Vorgehens bei Hermes Antworten auf die Frage, wie verschiedene Entwicklungs-Teams den für sie richtigen Weg zu einer Continuous Integration/ Continuous Deployment-Pipeline finden.

Kirsten Schneider, Hermes Germany
Max Jonas Werner, Hermes Germany

13dc3c065d3758409140b827062e59c7?s=128

Hermes Germany GmbH

August 24, 2018
Tweet

Transcript

  1. Unser Weg in die OpenShift Deployment-Strategien aus der Sicht von

    Hermes Hamburg, 24.08.2018
  2. Kontakt Max Jonas Werner max.werner@hermesworld.com @makkes Kontakt Kirsten Schneider kirsten.schneider@hermesworld.com

  3. Inhalt 01 Ein kurzer Überblick über Hermes Germany 02 Warum

    OpenShift? 03 Wie deployen wir? 04 Umsetzung MyHermes.de 05 Fazit & Ausblick
  4. Ein kurzer Überblick über Hermes Germany 01

  5. Ausrichtung auf digitale Geschäftsmodelle Hermes Germany ist ein Unternehmen im

    Wandel • Wir stellen derzeit etwa 400 Millionen Pakete pro Jahr zu • Wir stellen uns mit 250 IT-Spezialisten den Herausforderungen der Logistik • Wir arbeiten in ca. 15 Entwicklungteams an logistischen Lösungen
  6. Warum OpenShift? 02

  7. Was sind unsere Ziele? Release early, release often (und zwar

    zum Kunden) Hohe Produktqualität Volle Automatisierung, keine manuellen Eingriffe Skalierung nach Bedarf Zero Downtime Deployment Deployment unabhängig von der Microservice-Technologie Deployment weitgehend unabhängig von der Plattform 7
  8. PaaS als Lösung 8 Cloud Anwendungen: Zugriff auf Anwendungs-Software, die

    unmittelbar genutzt werden kann. SaaS Cloud Plattformen: Programmiermodell, um cloudbasierte Anwendungen erstellen zu können und ohne Infrastruktur-Kenntnisse betreiben zu können. PaaS Cloud Infrastrukturen: Zugriff auf virtuelle Ressourcen (Server, Storage, Netzwerk); für den Betrieb ist der Nutzer selbst verantwortlich. IaaS
  9. Wie finden wir heraus, was für uns technisch der richtige

    Weg ist? 9 Aufbau eines Prototypen im Rahmen eines Projekts • IaaS (Openstack) && PaaS (OpenShift) bei einem Cloud-Provider • Cloud-Architekturen werden entwickelt und • parallel CI/CD-Tools implementiert und • Anwendungen/Services ausgerollt IaaS PaaS IaaS
  10. Wie deployen wir? 03

  11. Eine Methode für alle? 11 • Unterschiedliche Voraussetzungen in den

    Teams • Existiert bereits eine CI/CD Pipeline? • Welche Technologien werden bereits eingesetzt? • Wird bereits Container basiert entwickelt? • Welche Tools werden bereits in der Entwicklung eingesetzt? • Entwickelt das Team ein neues Produkt oder muss ein Bestandssystem migriert werden? • Welche Möglichkeiten bietet OpenShift? • Zu welchem Zeitpunkt soll OpenShift zum Einsatz kommen? Build? Deploy? Runtime?
  12. Übersicht OpenShift 12

  13. 3 mögliche Build-Strategien deploy source code mit source-to-image (S2I) deploy

    binary mit source-to-image (S2I) deploy docker image 01010101 00011010 01010010
  14. Source Code – S2I 14 GIT STI Docker Registry App

    Image Builder Image Build Deploy App Container
  15. Binary – S2I 15 GIT STI Docker Registry App Image

    Builder Image Build Deploy App Container Binary Repository 010101010 001101001 010010101 Build Binary
  16. Docker Image 16 GIT Docker Registry App Image Deploy App

    Container Build Docker Image
  17. Welche Build Strategie für welches Team? • schnelle Prototypen •

    existierender Container basierter Build-Prozess 01010101 00011010 01010010 • existierender Jenkins Build • bisher keine Container basierte Entwicklung
  18. Umsetzung MyHermes.de 04

  19. Recap: Was sind unsere Ziele? 19 Release early, release often

    (und zwar zum Kunden) Hohe Produktqualität Volle Automatisierung, keine manuellen Eingriffe("cattle, not pets") Skalierung nach Bedarf Zero Downtime Deployment Deployment unabhängig von der Microservice-Technologie Deployment weitgehend unabhängig von der Plattform (OpenShift)
  20. 20

  21. Umsetzung MyHermes.de 21 Eintauchen in die AppAgile-Oberfläche Beispiel loginservice Build-Job

    erzeugt Docker-Image Infrastruktur-Job konfiguriert per YAML-Dateien die OpenShift-Umgebung Deploy-Job aktualisiert das Image-Tag UI-Test-Jobs lassen mit Selenium die UI-Tests laufen Jenkins, Seed-Job
  22. OpenShift-Konfiguration – Image Stream 22 apiVersion: v1 kind: ImageStream metadata:

    name: loginservice labels: app: myhermes tag: ${TAG} spec: tags: - annotations: openshift.io/imported-from: registry.doa.otc.hlg.de/myh/loginservice:${TAG} from: kind: DockerImage name: registry.doa.otc.hlg.de/myh/loginservice:${TAG}
  23. OpenShift-Konfiguration – Deployment 23 apiVersion: v1 kind: DeploymentConfig spec: replicas:

    2 selector: deploymentconfig: loginservice template: spec: containers: - resources: limits: cpu: 2 memory: 1Gi requests: cpu: 250m memory: 768Mi readinessProbe: httpGet: path: /admin/health port: 8080 scheme: HTTP initialDelaySeconds: 80 timeoutSeconds: 3 periodSeconds: 10 successThreshold: 1 failureThreshold: 3 test: false triggers: - type: ConfigChange - type: ImageChange imageChangeParams: automatic: true containerNames: - loginservice from: kind: ImageStreamTag name: loginservice:${TAG}
  24. OpenShift-Konfiguration – Service 24 apiVersion: v1 kind: Service metadata: name:

    loginservice labels: app: myhermes annotations: prometheus.io.port: '8080' prometheus.io.probe: 'true' spec: ports: - name: 8080-tcp port: 8080 targetPort: 8080 selector: deploymentconfig: loginservice
  25. Jenkins Pipeline 25

  26. Jenkins OpenShift 26 $ oc apply -f 01_image-stream.yaml $ oc

    apply –f 02_deployment-config.yaml $ oc apply –f 03_service.yaml
  27. Jenkins OpenShift 27 $ oc tag --alias=true registry.doa.otc.hlg.de/myh/loginservice:current- dev loginservice:current-dev

    $ oc get pods --selector=deploymentconfig=loginservice --show-all=false - -no-headers $ oc describe pod loginservice-454-bgl1d
  28. Git Jenkins 28

  29. Recap: Was sind unsere Ziele? Release early, release often (und

    zwar zum Kunden) ✓ Hohe Produktqualität (✓) Volle Automatisierung, keine manuellen Eingriffe ("cattle, not pets") (✓) Skalierung nach Bedarf ✓ Zero Downtime Deployment ✓ Deployment unabhängig von der Microservice-Technologie ✓ Deployment weitgehend unabhängig von der Plattform (OpenShift) ✓ 29
  30. Fazit & Ausblick 05

  31. Fazit 31 Lange Vorbereitungs- und Konzeptionszeit Komplexe Umgebung (im Vergleich

    zu selbst-verwaltetem Cluster), DevOps Umgang mit instabiler Umgebung (Backend-APIs, Plattform, SLA) Nach einem Jahr mit 22 Services live Deployments mehrmals täglich (allerdings manchmal langsam, ~2-3 Minuten)
  32. 32

  33. Aktuelle Herausforderungen 33 Deployments beschleunigen Datenbank-Anbindung Automatisierung Schema-Änderungen (Rollbacks?) Traffic-Einleitung

    direkt in die OpenShift-Umgebung Verwaltung von Zertifikaten Automatisierte Verwaltung von Credentials (Key Management, Rotation, IAM Roles) DDoS-Schutz
  34. Vielen Dank!

  35. Inhalt Platzhalter Präsentationstitel