Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und betreiben

4 Aufrufe

Veröffentlicht am

Vortrag auf der Java User Group Hamburg, 10.10.2019

Dirk Weil, GEDOPLAN GmbH

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und betreiben

  1. 1. Das Runde muss in das Eckige Wie aus Java-Anwendungen Container werden Java User Group Hamburg, 29.10.2019 Dirk Weil, GEDOPLAN GmbH
  2. 2. Dirk Weil GEDOPLAN GmbH, Bielefeld GEDOPLAN IT Consulting Consulting, coaching, concepts, reviews, development GEDOPLAN IT Training & partner Java, JEE, tools trainings in Berlin, Bielefeld, Köln, on-site JEE since 1998 Speaker and author Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 2gedoplan.de
  3. 3. Application Stage Odyssey Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 3gedoplan.de Dev Ops Hier ist die Anwendung als WAR-File Du braucht ein JDK 8 und einen WildFly 14 Die Datasource xyz wird benötigt; für Test und Integration reicht die H2-DB Ach ja! Kopiere bitte diese Dateien ins Home des Users! OK. Worauf läuft das? Gut, stelle ich bereit; was noch? Läuft nicht: config.yaml fehlt! Damit scheint es zu laufen Jetzt dasselbe für Prod …
  4. 4. Application Stage Odyssey Anwendung  JAR/WAR/EAR! Lösungsmöglichkeit: Virtuelle Maschine Komplettes OS mit Tools, Dateien etc. automatisierbar mit Ansible o. ä. schwergewichtig! Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 4gedoplan.de @Path("hello") @ApplicationScoped public class HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String getHello() { return "Hello World!"; } }
  5. 5. Virtuelle Maschinen vs. Container VM = „kompletter Rechner“ Hypervisor teilt HW zu Isolation durch Hypervisor Container = Prozess auf Host OS Isolation durch Namespaces Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 5gedoplan.de VM 1 App Guest OS VM 2 App Guest OS Hypervisor Host OS Container 1 App Container 2 App Namespaces Host OS (Linux) Container 4 App Container 3 App
  6. 6. Docker Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 6gedoplan.de FROM openjdk:8 ADD target/k8s-demo-hello.jar /opt/ ENTRYPOINT [ "java", "-jar", "/opt/k8s-demo-hello.jar" ] Debian curl git JDK Layeredfilesystem
  7. 7. Docker Demo Docker Desktop (aka Docker for Windows / Mac) Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 7gedoplan.de # Build image docker build –t gedoplan/k8s-demo-hello . # Run container docker run --rm gedoplan/k8s-demo-hello
  8. 8. Docker io.fabric8:docker-maven-plugin Integriert Docker Build in Maven Build Interpoliert Maven-Properties im Dockerfile Assembly mit vorbereiteten Descriptoren diverse weitere Operationen Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 8gedoplan.de <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <configuration> <images> <image> <name>gedoplan/${project.artifactId}</name> <build> <dockerFileDir>${project.basedir}</dockerFileDir> <assembly> <descriptorRef>artifact</descriptorRef> </assembly> …
  9. 9. Docker Demo Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 9gedoplan.de # Einfache SE-Anwendung: k8s-demo-hello mvn -Pdocker docker run gedoplan/k8s-demo-hello # REST-Service als WAR auf WildFly: k8s-demo-rest-war mvn -Pdocker docker run -p 8888:8080 gedoplan/k8s-demo-rest-war # REST-Service mit Apache Meecrowave: k8s-demo-rest-mee mvn -Pdocker docker run -p 8888:8080 gedoplan/k8s-demo-rest-mee
  10. 10. Kubernetes (aka K8s) Container (~Prozesse) brauchen Laufzeitplattform (~Betriebssystem) Start, Stopp, Überwachung Verteilung (On-prem / Cloud) Networking / Discovery Skalierung Persistenz Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 10gedoplan.de
  11. 11. Node 2 Node 1 K8s Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 11gedoplan.de Deployment b Pod b-1 C y C z Deployment a Pod a-3 C x RS a RS b Pod a-2 C x Pod a-1 C x Svc a Svc b Ingress a Pod ein Container, ggf. mehrere Abstraktion eines Rechners Node „echter Rechner“ ReplicaSet sorgt für n laufende Pods Deployment ergänzt RS um Rolling Update Service feste IP-Adresse Load Balancer Ingress Reverse Proxy
  12. 12. K8s Demo Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 12gedoplan.de # K8s-Manifest für REST-Service als WAR: rest-war.yaml # (enthält Deployment, Service + Ingress) kubectl apply –f rest-war.yaml # Pod-Neustart nach (simuliertem) Ausfall kubectl get all -l app=rest-war kubectl delete pod rest-war-xxx # Pod-Anzahl manipulieren kubectl edit deployment rest-war # Webservice „von Außen“ konsumieren curl http://rest-war.localtest.me/rs/hello
  13. 13. Paketieren und Ausliefern K8s-Application = Deployment(s) Service(s) Ingress(es) (ConfigMaps, Secrets, Persistent Volumes, …) Anwendungen in unterschiedlichen Umgebungen ausrollbar Prod, Test, lokal, … Bedarf: Application- / Package-Management und Templating Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 13gedoplan.de
  14. 14. Werkzeuge zum Paketieren ermöglichen: K8s-Manifeste zusammenfassen zu Anwendungen Templating Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 14gedoplan.de Kustomize
  15. 15. Ausrollen der Anwendung Anforderungen Immutable Pakete mit K8s-Manifesten Zentrale Bereitstellung der Pakete -> einfaches Verteilen Historie der Releases Automatisiertes Ausrollen Probleme beim Ausrollen per CMD-Werkzeug Nicht wiederholbar bei Verwendung von Parametern Erfordert entsprechende Berechtigung Know-how bei allen Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 15gedoplan.de
  16. 16. GitOps Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 16gedoplan.de Application Instance K8s Manifeste Synchronisieren GitOps Service Weave Flux Argo-CDoder Push CI
  17. 17. Jenkins CI/CD-Server Ausführung in K8s Jenkins läuft im Cluster Konfigurierbare Build-Container Deployment in K8s per GitOps Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 17gedoplan.de Entwicklungs- Umgebung Plan Test SCM Build Build Deploy pipeline { agent { kubernetes { label 'rest-war-build‘ … } stages { stage('Checkout Project‘) { … } stage('Build Maven project‘) { … } stage('Build Docker Images‘) { … } stage('Deploy Application in Test’) { … }
  18. 18. Jenkins Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 18gedoplan.de
  19. 19. Argo-CD Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 19gedoplan.de
  20. 20. More github.com/GEDOPLAN/k8s-demo Demo-Projekt http://www.gedoplan-it-training.de Seminare in Berlin, Bielefeld, Köln, Frankfurt, Inhouse http://www.gedoplan-it-consulting.de Reviews, Coaching, Development, … http://javaeeblog.wordpress.com/ http://gedoplan-it-consulting.de/expertenkreis-java/  dirk.weil@gedoplan.de @dirkweil Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 20gedoplan.de

×