SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
Das Runde muss in das Eckige
Wie aus Java-Anwendungen Container werden
Java User Group Hamburg, 29.10.2019
Dirk Weil, GEDOPLAN GmbH
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
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 …
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!";
}
}
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
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
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
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>
…
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
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
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
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
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
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
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
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
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’) { … }
Jenkins
Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 18gedoplan.de
Argo-CD
Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 19gedoplan.de
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

Weitere ähnliche Inhalte

Was ist angesagt?

Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...inovex GmbH
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easyinovex GmbH
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Dockergedoplan
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Gregor Biswanger
 
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easydocker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easyinovex GmbH
 
Ü̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradleadesso AG
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerGregor Biswanger
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 
Docker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemachtDocker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemachtB1 Systems GmbH
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Torsten Kleiber
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Managementinovex GmbH
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenTorsten Kleiber
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15m1no
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
 
Our way to 19c - DOAG 2020
Our way to 19c - DOAG 2020Our way to 19c - DOAG 2020
Our way to 19c - DOAG 2020Torsten Kleiber
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Torsten Kleiber
 

Was ist angesagt? (20)

Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easy
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Docker
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easydocker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
 
Ü̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradle
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen Hacker
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Docker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemachtDocker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemacht
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Management
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
Our way to 19c - DOAG 2020
Our way to 19c - DOAG 2020Our way to 19c - DOAG 2020
Our way to 19c - DOAG 2020
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 

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

Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
DOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerDOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerStefan Oehrli
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerSteven Grzbielok
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerB1 Systems GmbH
 
JEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine EinführungJEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine Einführunggedoplan
 
MicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit QuarkusMicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit Quarkusgedoplan
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!OPEN KNOWLEDGE GmbH
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker ContainerAndreas Koop
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoOPEN KNOWLEDGE GmbH
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Joachim Baumann
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollWolfgang Weigend
 
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)Tobias Schneck
 
Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!gedoplan
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Servergedoplan
 
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBDocker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBPeter Ramm
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows ContainerThomas Wilhelm Wiefel
 

Ähnlich wie Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und betreiben (20)

Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
DOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerDOAG Webinar Oracle und Docker
DOAG Webinar Oracle und Docker
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit Docker
 
JEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine EinführungJEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine Einführung
 
MicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit QuarkusMicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit Quarkus
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
 
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
Containerized End-2-End-Testing - Software-QS-Tag (deutsch)
 
Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Server
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBDocker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
 
Dockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloudDockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloud
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows Container
 

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

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Jenkins Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 18gedoplan.de
  • 19. Argo-CD Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 19gedoplan.de
  • 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