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. 3.

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

    OpenShift? 03 Wie deployen wir? 04 Umsetzung MyHermes.de 05 Fazit & Ausblick
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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?
  7. 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
  8. 14.

    Source Code – S2I 14 GIT STI Docker Registry App

    Image Builder Image Build Deploy App Container
  9. 15.

    Binary – S2I 15 GIT STI Docker Registry App Image

    Builder Image Build Deploy App Container Binary Repository 010101010 001101001 010010101 Build Binary
  10. 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
  11. 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)
  12. 20.

    20

  13. 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
  14. 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}
  15. 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}
  16. 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
  17. 26.

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

    apply –f 02_deployment-config.yaml $ oc apply –f 03_service.yaml
  18. 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
  19. 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
  20. 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)
  21. 32.

    32

  22. 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