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
Expertenkreis Java
28.02.2019
Hendrik Jungnitsch & Dirk Weil, GEDOPLAN GmbH
Hendrik Jungnitsch & Dirk Weil
GEDOPLAN GmbH, Bielefeld
GEDOPLAN IT Consulting
Consulting, coaching, concepts, reviews, development
GEDOPLAN IT Training
Java, JEE, tools trainings in Berlin, Bielefeld, on-site
JEE since 1998
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 for Windows
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
KSonnet Kapitan
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
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
Demo
Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 18gedoplan.de
Argo-CD
Demo
Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 19gedoplan.de
More
github.com/GEDOPLAN/k8s-demo
Demo project
www.gedoplan-it-training.de
Trainings in Berlin, Bielefeld, inhouse
www.gedoplan-it-consulting.de
Reviews, Coaching, …
Blog
 hendrik.jungnitsch@gedoplan.de
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?

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
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGTorsten Kleiber
 
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
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerGregor Biswanger
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerNicholas Dille
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Torsten Kleiber
 
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
 
Von Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 MinutenVon Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 MinutenQAware GmbH
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Joachim Baumann
 
Regulatorics: Offside is when the referee whistles - DOAG 2018
Regulatorics: Offside is when the referee whistles - DOAG 2018Regulatorics: Offside is when the referee whistles - DOAG 2018
Regulatorics: Offside is when the referee whistles - DOAG 2018Torsten 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
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHagilemethoden
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen B1 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
 
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
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Springdenschu
 
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
 
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
 

Was ist angesagt? (20)

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
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
 
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...
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen Hacker
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
 
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
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
Von Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 MinutenVon Maven zu Gradle in 45 Minuten
Von Maven zu Gradle in 45 Minuten
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
Regulatorics: Offside is when the referee whistles - DOAG 2018
Regulatorics: Offside is when the referee whistles - DOAG 2018Regulatorics: Offside is when the referee whistles - DOAG 2018
Regulatorics: Offside is when the referee whistles - DOAG 2018
 
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
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen
 
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
 
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...
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
 
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
 
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
 

Ä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
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Servergedoplan
 
MicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit QuarkusMicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit Quarkusgedoplan
 
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
 
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
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit antroskakori
 
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
 
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
 
Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus gedoplan
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Dockergedoplan
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker ContainerAndreas Koop
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsTorsten Kleiber
 

Ä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
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Server
 
MicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit QuarkusMicroProfile-Anwendungen mit Quarkus
MicroProfile-Anwendungen mit Quarkus
 
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
 
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!
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 
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
 
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!
 
Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Docker
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and Operations
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker 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 Expertenkreis Java 28.02.2019 Hendrik Jungnitsch & Dirk Weil, GEDOPLAN GmbH
  • 2. Hendrik Jungnitsch & Dirk Weil GEDOPLAN GmbH, Bielefeld GEDOPLAN IT Consulting Consulting, coaching, concepts, reviews, development GEDOPLAN IT Training Java, JEE, tools trainings in Berlin, Bielefeld, on-site JEE since 1998 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 for Windows 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 KSonnet Kapitan
  • 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 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 Demo Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 18gedoplan.de
  • 19. Argo-CD Demo Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 19gedoplan.de
  • 20. More github.com/GEDOPLAN/k8s-demo Demo project www.gedoplan-it-training.de Trainings in Berlin, Bielefeld, inhouse www.gedoplan-it-consulting.de Reviews, Coaching, … Blog  hendrik.jungnitsch@gedoplan.de dirk.weil@gedoplan.de @dirkweil Das runde muss in das Eckige - wie aus Java-Anwendungen Container werden 20gedoplan.de