SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Docker und Kubernetes
Patterns & Anti-Patterns
Josef Adersberger ( @adersberger, #cloudnativenerd)
Safe Harbor Statement
• Selbst identifizierte und recherchierte Patterns - 

teilweise noch nicht geläufig
• Haben sich in realen Projekten als wertvoll erwiesen
• Auswahl, kein Anspruch aufVollständigkeit
• Kein Pattern-Formalismus
HYPERSCALE
RESILIENT
OPEX SAVINGS
SPEED
CLOUD NATIVE APPLICATIONS
PACKAGED AND
DISTRIBUTED AS CONTAINERS
DYNAMICALLY
EXECUTED IN THE CLOUD
BUILD AND COMPOSED
AS MICROSERVICES
Lasst uns 

Cloud Native
Anwendungen 

bauen!
WIE ?????
… so dass es mir bei der
Entwicklung und in
Produktion nicht auf die
Nase fällt.
CLOUD NATIVE HELL
Modus: Jugend forscht
https://www.weltmaschine.de/physik/geschichte_des_universums
2013 2015
Jugend forscht Patterns und Anti-Patterns
docker run -it -v /var/run/docker.sock:/var/run/docker.sock qaware/devbox
Dings
Bums
*
*
Abstraktionsgrad
Sweetspot für Docker/k8s Patterns/Antipatterns
Abstraktion stabil genug
Konkrete Beispiele möglich
Abstraktionsgrad
(1) CONTAINER-LEVEL
(II) PLATTFORM-LEVEL
(III) DELIVERY-LEVEL
(1) CONTAINER-LEVEL
(II) PLATTFORM-LEVEL
(III) DELIVERY-LEVEL
OPS COMPONENT
DESIGN
Design Components
• Complexity unit
• Data integrity unit
• Cohesive feature unit
• Decoupled unit
PATTERN
• Planning unit
• Team assignment unit
• Development unit
• Integration unit
BUILD
Dev Components
+
RUN
Ops Components
• Release unit
• Deployment unit
• Runtime unit
• Scaling unit
+
Container = Verpackung für Ops Components
Standard-Schnittstellen für Standard-Betriebsprozeduren
Einfach zu transportierende, schnell zu startende und mit
wenig Overhead ausführbare Software-Einheiten
Container
Prozess

(pid 1)
Well-behaved Process
reagiert auf SIGTERM [1] oder 

definiert ein STOPSIGNAL [2] für einen

würdevollen Abgang
gibt sinnvolle Exit Codes zurück [3]:

0 = OK, 1 = allgemeiner Fehler, …
schreibt Log-Ausgaben auf 

STDOUT/STDERR [4], damit sie per 

Docker Log Driver verschifft werden 

können
Vordergrund-Prozess, kein 

Daemon- oder Hintergrund-Prozess

CMD ["nginx", "-g", "daemon off;"]
[1] https://medium.com/@gchudnov/trapping-signals-in-docker-
containers-7a57fdda7d86
[2] https://docs.docker.com/engine/reference/builder/#stopsignal
[3] http://tldp.org/LDP/abs/html/exitcodes.html
[4] https://success.docker.com/article/Docker_Reference_Architecture-
_Docker_Logging_Design_and_Best_Practices
[5] http://label-schema.org/rc1
[6] https://alexei-led.github.io/post/docker_testing
Container Interface
EXPOSE von allen 

von außen zugänglichen Ports

EXPOSE 80 443
Alle Umgebungsvariablen,

die von außen gesetzt werden können

per ENV definieren und möglichst mit

sinnvollem Default-Wert besetzen

ENV NGINX_VERSION 1.9.9
Dockerfile als Interface Definition
Kommentare und LABEL [5]
ENV, EXPOSE und VOLUME

(möglichst im Block und ganz am Schluss)
ENTRYPOINT für Prozessstart und 

CMD für Default-Argumente

ENTRYPOINT ["/entrypoint.sh"] 

CMD ["--db", "localhost","--user", “root”]
Standard-Entrypoints 

(z.B. docker run my-container /usr/bin/test)
run: Container produktiv laufen lassen (default)
run-dev: im Dev-Modus laufen mit z.B.Verbose Log
test:Testfälle im Container durchlaufen lassen
HEALTHCHECK: einen Healthcheck durchführen
debug: eine passende interaktive Shell öffnen
help: einen Hilfe zurVerwendung anzeigen
BEISPIEL: LABELS
http://label-schema.org/rc1
https://microbadger.com/images/microscaling/microscaling
CONTAINER INITIALIZER PATTERN
Container
Initializer

(pid 1)
Prozess
Prozess-
management

(Exit, SIG,
Zombies)
Log-
Umleitung
(syslog, files)
Config-
Dateien
schreiben
Cron
Warten auf
TCP/HTTP
Endpunkt
Chaperone

(veraltet)
x x x x
Dockerize x x x
Tini 

(in Docker >
1.13 enthalten)
x
dumb-init x
pid1 x
TrivialRC x
phusion
baseimage
x x x
… oder eigenes Shell-Skript oder Go-Programm (aber Achtung: Prozess stets mit exec starten!)
IMAGE LAYER ARCHITECTURE PATTERN
Layer 2
Layer 4
Layer 3
My Image
Layer 1
FROM debian:jessie
ENV NGINX_VERSION 1.12.2-1~jessie
RUN apt-get update && 
apt-get install -y ca-certificates && 

nginx=${NGINX_VERSION} && 
rm -rf /var/lib/apt/lists/*
RUN ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
Layer 5
jede Instruktion im Dockerfile erzeugt einen
neuen Layer (manche einen mit 0 Bytes)
Base Image
Scratch
Niemals latest Tag nutzen!
Layer 2
Layer 4
Layer 3
My Image
Layer 1
Layer 5
Änderung
FROM debian:jessie
ENV NGINX_VERSION 1.12.2-1~jessie
RUN apt-get update && 
apt-get install -y ca-certificates && 

wget nginx=${NGINX_VERSION} && 
rm -rf /var/lib/apt/lists/*
RUN ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
Cache wird invalidiert [1]:
Muss neu gebaut und
transportiert werden!
[1] mehr zu Docker Caching: https://www.ctl.io/developers/blog/post/caching-docker-images
Layer 2
Layer 4
Layer 3
My Image
Layer 1
Layer 5
Änderungs- und
Transporteinheit
klein
geringer Impact
von Änderungen
Layer 2
Layer 4
Layer 3
My Image
Layer 1
Layer 5
Base Image
volatil
stabil
klein
groß
klein:Alpine-*, Baseimage-
Docker, Busybox, Scratch
• Minimale Docker Images mit Java 9: https://blog.dekstroza.io/building-minimal-docker-containers-with-java-9
• Security Checks von Docker Images: Clair & docker-bench-security & dockscan
1. Abhängigkeiten
2. Applikation
3. Konfiguration
4. Metadaten / Schnittstelle
IMAGE SHRINKING 101
• Unnötige Layer vermeiden
• RUN Chaining: 

RUN apk add --update wget git && rm -rf /var/cache/apk/*
• Alle Layer verschmelzen zu einem (nur bei Basis-Images empfehlenswert): 

docker export + docker import

• Platzschonende Installation von Paketen

RUN apt-get update && apt-get install -y —no-install-recommends apache2 wget && apt-get
clean && rm -rf /var/lib/apt/lists/*
IMAGE METAMORPHOSIS ANTIPATTERN
DEV INT PROD
myimage-dev myimage-int myimage-prod
myimage
DEV.config INT.config PROD.config
STATEFUL CONTAINER ANTIPATTERN
mycontainer
Prozess
Container
FileSystem
• Zustand im Hauptspeicher:
User-Session
• Zustand auf Platte: Logs,
Anwendungsdaten
• Container sind flüchtig:
Zustand kann verloren
gehen
• Das Container FS ist
langsam
mycontainer
VOLUME In-Memory 

DB/Grid 

(z.B. redis, Ignite, Hazelcast)
Für Log-Dateien:
RUN ln -sf /proc/1/fd/1 /var/log/test.log
Prozess
CONTAINER UNITTESTING PATTERN
nginx-container-test.rb
describe package('nginx') do
it { should be_installed }
end
describe port(80) do
it { should be_listening }
end
https://www.inspec.io
Alternativen: goss+dgoss, ServerSpec, Bats, Testinfra
(1) CONTAINER-LEVEL
(II) PLATTFORM-LEVEL
(III) DELIVERY-LEVEL
Kubernetes Patterns, Bilgin Ibryam und Roland Huß, https://leanpub.com/k8spatterns
ENTERPRISE POD ANTIPATTERN
Pod
Web

Server
Data-
base
App

Server
• verletzt das Single

Responsibility Prinzip
• Scheduling schwierig 

durch hohe Anforderungen
• unzureichende Isolation 

(Netzwerk,Volumes, IPC,

Hostname, PID)
MQ

Broker
STRUCTURAL CONTAINER PATTERNS
• Scheduling (Quartz)
• Failbot
Pod
Application Container
Pattern Container
Other Container
“Design patterns for container-based distributed systems”. Brendan Burns, David Oppenheimer. 2016
Sidecar (Sidekick): Enhance container behaviour
Ambassador: Proxy communication
• TLS tunnel (Stunnel, ghosttunnel, istio)
• Circuit Breaking (linkerd, istio)
• Request monitoring (linkerd, istio)
Adapter: Provide standardized interface
• Configuration (ConfigMaps & Secrets to files)
• Log extraction / re-formatting / shipping (fluentd)
EXTERNALIZED CONFIGURATION
apiVersion: v1
kind: ConfigMap
metadata: 
  name: april-aos-runtime-config
data: 
  april-aos.properties: |       
    com.foo.iap.april.jwt.secret=some-secret      
    osmc.username=april   
    osmc.url=https://www.magic.works
    ...
  april-feature-togglz.properties: |         
    WRITE_TEXT5_TO_SOFAK_INVOICES=false
    ...
  log4j2.xml: |   
    <?xml version="1.0" encoding="UTF-8"?>   
    <Configuration monitorInterval="60">
      <Appenders> ... </Appenders>
      <Loggers> ... </Loggers>
    </Configuration>
spec:     
  containers:     
    - name: april-aos-runtime
      image: 'april-aos-runtime:1.5.0'
      imagePullPolicy: Always       
      ports:       
      - containerPort: 8080      
     
      volumeMounts:       
      - mountPath: /april/cfg         
        name: april-aos-runtime-config-vol     
 
  volumes:     
  - name: april-aos-runtime-config-vol          
    configMap:         
      name: april-aos-runtime-config
PATTERN
Umgebungsspezifische Konfiguration: ConfigMap ENV
Dynamische Konfiguration: ConfigMap Files
Statische Konfiguration: Config Files im Container
PACKAGE MANAGEMENT PATTERN
• kubectl, kubectl, kubectl, …
• Konfiguration?
• Endpunkte?
https://helm.sh
• Chart suchen auf https://hub.kubeapps.com
• Doku dort lesen (README.md)
• Konfigurationsparameter lesen: 

helm inspect stable/spark
• Chart starten mit überschriebener Konfiguration:

helm install --name my-release 

-f values.yaml stable/spark
SERVICE MESH PATTERN
Pod Pod
Pod
• Sichere Kommunikation (2-Way-SSL,Token Relay)
• Resilienz (Circuit Breaker)
• Policy Enforcement
• Diagnostizierbarkeit (Traces, Logs, Metriken)
• A/BTesting, Canary Releases
• Fault Injection, LatencyTesting
• LocationTransparency
Pod Pod
Pod
Proxy
Proxy
Proxy
Mesh Control Plane
• ohne Anpassung der Anwendungen!
• zentral gesteuert!
DIAGNOSABILITYTRIANGLE PATTERN
Metrics
Events / LogsTraces
Diagnosability
Triangle
DIAGNOSABILITYTRIANGLE
Metrics (RED = rate, errors, duration)
Events / LogsDistributed Traces
Diagnosability
Triangle
OPERATORS
(Betriebsroboter)
[1] https://coreos.com/operators
[2] https://kubernetes.io/docs/concepts/api-extension/custom-resources
[3] https://github.com/giantswarm/operatorkit
[4] https://github.com/sapcc/kubernetes-operators
[5] https://www.youtube.com/watch?v=cj5uk1uje_Y
Zustandsbehaftete 

Infrastruktur

(z.B. Datenbanken)
• Cluster Join / Leave
• Failover auslösen
• Fehlerzustände erkennen
• Migration von Daten
Standard-

Betriebsprozeduren
für Anwendungen
• Zertifikate einspielen
• Neue Konfiguration einspielen
• Komplexe Rollout-Szenarien
• Alerting
…
(1) CONTAINER-LEVEL
(II) PLATTFORM-LEVEL
(III) DELIVERY-LEVEL
DEV ORCHESTRATION PATTERN
• schnelle Roundtrips
• geringe Komplexität
• lokales Troubleshooting 
Bei einzelnen lokalen Prozessen, die in ein existierendes Remote-
Cluster gehängt werden sollen: https://www.telepresence.io
kompose
K8s and OpenShift
Deployment YAML
Dockerfile +
docker-compose.yml
Local Development Cloud Deployment
PROMOTION PATTERN
MicroservicePipelines
Stage n Stage n+1
Promotion
Degradation
QUELLEN
• Generell
• Container Patterns: https://l0rd.github.io/containerspatterns/#1
• Docker
• DockerFile Best Practices: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-a-dockerignore-file
• DockerTools: https://github.com/veggiemonk/awesome-docker
• OpenShift General Docker Guidelines: https://docs.openshift.com/enterprise/3.0/creating_images/guidelines.html
• Common Docker Mistakes: https://runnable.com/blog/9-common-dockerfile-mistakes
• Kubernetes
• Kubernetes Patterns: https://vimeo.com/233785743
• Kubernetes Best Practices: https://www.youtube.com/watch?v=BznjDNxp4Hs
• Continuous Delivery
• Continuous Delivery Patterns: https://continuousdelivery.com/implementing/patterns/
https://www.heise.de/developer/know-how-1033.html
41 http://www.qaware.de/news/java-magazin-cloud-native-universum
42
https://www.qaware.de
https://slideshare.net/qaware
https://github.com/qaware
&
@adersberger

Weitere ähnliche Inhalte

Was ist angesagt?

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
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15m1no
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Dockergedoplan
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker ContainerAndreas Koop
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows ContainerThomas Wilhelm Wiefel
 
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
 
Containerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayContainerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayTobias Schneck
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenNicholas Dille
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumNicholas Dille
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...B1 Systems GmbH
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Chris Michael Klinger
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Gitpaultcochrane
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtOPITZ CONSULTING Deutschland
 

Was ist angesagt? (20)

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
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15
 
Hendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit DockerHendrik Jungnitsch: Software verpacken mit Docker
Hendrik Jungnitsch: Software verpacken mit Docker
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Docker for Windows / Windows Container
Docker for Windows / Windows ContainerDocker for Windows / Windows Container
Docker for Windows / Windows Container
 
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)
 
Containerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony DayContainerized End-2-End Testing - JUG Saxony Day
Containerized End-2-End Testing - JUG Saxony Day
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
 
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
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
Docker und Virtualisierung - Container Use Cases für eine isolierte, performa...
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Git
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 

Ähnlich wie Docker und Kubernetes Patterns & Anti-Patterns

Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfSyahri Ramadhan
 
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
 
In den sicheren Hafen jax2020
In den sicheren Hafen jax2020In den sicheren Hafen jax2020
In den sicheren Hafen jax2020Stephan Kaps
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
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
 
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
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
 
DOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerDOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerStefan Oehrli
 
200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollenUwe Küchler
 
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
 
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
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHFlorian Holzhauer
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenAndré Goliath
 
Infrastructure as Code mit Terraform
Infrastructure as Code mit TerraformInfrastructure as Code mit Terraform
Infrastructure as Code mit TerraformHarald Schmaldienst
 

Ähnlich wie Docker und Kubernetes Patterns & Anti-Patterns (20)

Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
 
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
 
In den sicheren Hafen jax2020
In den sicheren Hafen jax2020In den sicheren Hafen jax2020
In den sicheren Hafen jax2020
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
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!
 
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
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
FLOW3-Workshop F3X12
FLOW3-Workshop F3X12FLOW3-Workshop F3X12
FLOW3-Workshop F3X12
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Oracle und Docker
Oracle und DockerOracle und Docker
Oracle und Docker
 
DOAG Webinar Oracle und Docker
DOAG Webinar Oracle und DockerDOAG Webinar Oracle und Docker
DOAG Webinar Oracle und Docker
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
 
Node.js
Node.jsNode.js
Node.js
 
200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen200 verteilte Oracle- Server mit Ansible ausrollen
200 verteilte Oracle- Server mit Ansible ausrollen
 
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
 
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
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
Infrastructure as Code mit Terraform
Infrastructure as Code mit TerraformInfrastructure as Code mit Terraform
Infrastructure as Code mit Terraform
 

Mehr von QAware GmbH

50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdfQAware GmbH
 
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...QAware GmbH
 
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN MainzFully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN MainzQAware GmbH
 
Down the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile ArchitectureDown the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile ArchitectureQAware GmbH
 
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!QAware GmbH
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringQAware GmbH
 
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit PlaywrightDer Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit PlaywrightQAware GmbH
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAsQAware GmbH
 
Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo QAware GmbH
 
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See... Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...QAware GmbH
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster QAware GmbH
 
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.QAware GmbH
 
Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!QAware GmbH
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s AutoscalingQAware GmbH
 
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAPKontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAPQAware GmbH
 
Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.QAware GmbH
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s AutoscalingQAware GmbH
 
Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.QAware GmbH
 
Per Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API GatewaysPer Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API GatewaysQAware GmbH
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster QAware GmbH
 

Mehr von QAware GmbH (20)

50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf50 Shades of K8s Autoscaling #JavaLand24.pdf
50 Shades of K8s Autoscaling #JavaLand24.pdf
 
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
 
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN MainzFully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
Fully-managed Cloud-native Databases: The path to indefinite scale @ CNN Mainz
 
Down the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile ArchitectureDown the Ivory Tower towards Agile Architecture
Down the Ivory Tower towards Agile Architecture
 
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!"Mixed" Scrum-Teams – Die richtige Mischung macht's!
"Mixed" Scrum-Teams – Die richtige Mischung macht's!
 
Make Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform EngineeringMake Developers Fly: Principles for Platform Engineering
Make Developers Fly: Principles for Platform Engineering
 
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit PlaywrightDer Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAs
 
Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo Cloud Migration mit KI: der Turbo
Cloud Migration mit KI: der Turbo
 
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See... Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
Migration von stark regulierten Anwendungen in die Cloud: Dem Teufel die See...
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
 
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
Endlich gute API Tests. Boldly Testing APIs Where No One Has Tested Before.
 
Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!Kubernetes with Cilium in AWS - Experience Report!
Kubernetes with Cilium in AWS - Experience Report!
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
 
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAPKontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
Kontinuierliche Sicherheitstests für APIs mit Testkube und OWASP ZAP
 
Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.Service Mesh Pain & Gain. Experiences from a client project.
Service Mesh Pain & Gain. Experiences from a client project.
 
50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling50 Shades of K8s Autoscaling
50 Shades of K8s Autoscaling
 
Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.Blue turns green! Approaches and technologies for sustainable K8s clusters.
Blue turns green! Approaches and technologies for sustainable K8s clusters.
 
Per Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API GatewaysPer Anhalter zu Cloud Nativen API Gateways
Per Anhalter zu Cloud Nativen API Gateways
 
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
Aus blau wird grün! Ansätze und Technologien für nachhaltige Kubernetes-Cluster
 

Docker und Kubernetes Patterns & Anti-Patterns

  • 1. Docker und Kubernetes Patterns & Anti-Patterns Josef Adersberger ( @adersberger, #cloudnativenerd)
  • 2. Safe Harbor Statement • Selbst identifizierte und recherchierte Patterns - 
 teilweise noch nicht geläufig • Haben sich in realen Projekten als wertvoll erwiesen • Auswahl, kein Anspruch aufVollständigkeit • Kein Pattern-Formalismus
  • 4. CLOUD NATIVE APPLICATIONS PACKAGED AND DISTRIBUTED AS CONTAINERS DYNAMICALLY EXECUTED IN THE CLOUD BUILD AND COMPOSED AS MICROSERVICES
  • 5. Lasst uns 
 Cloud Native Anwendungen 
 bauen!
  • 6. WIE ????? … so dass es mir bei der Entwicklung und in Produktion nicht auf die Nase fällt.
  • 10. docker run -it -v /var/run/docker.sock:/var/run/docker.sock qaware/devbox Dings Bums * * Abstraktionsgrad Sweetspot für Docker/k8s Patterns/Antipatterns Abstraktion stabil genug Konkrete Beispiele möglich
  • 13. OPS COMPONENT DESIGN Design Components • Complexity unit • Data integrity unit • Cohesive feature unit • Decoupled unit PATTERN • Planning unit • Team assignment unit • Development unit • Integration unit BUILD Dev Components + RUN Ops Components • Release unit • Deployment unit • Runtime unit • Scaling unit +
  • 14. Container = Verpackung für Ops Components Standard-Schnittstellen für Standard-Betriebsprozeduren Einfach zu transportierende, schnell zu startende und mit wenig Overhead ausführbare Software-Einheiten
  • 15. Container Prozess
 (pid 1) Well-behaved Process reagiert auf SIGTERM [1] oder 
 definiert ein STOPSIGNAL [2] für einen
 würdevollen Abgang gibt sinnvolle Exit Codes zurück [3]:
 0 = OK, 1 = allgemeiner Fehler, … schreibt Log-Ausgaben auf 
 STDOUT/STDERR [4], damit sie per 
 Docker Log Driver verschifft werden 
 können Vordergrund-Prozess, kein 
 Daemon- oder Hintergrund-Prozess
 CMD ["nginx", "-g", "daemon off;"] [1] https://medium.com/@gchudnov/trapping-signals-in-docker- containers-7a57fdda7d86 [2] https://docs.docker.com/engine/reference/builder/#stopsignal [3] http://tldp.org/LDP/abs/html/exitcodes.html [4] https://success.docker.com/article/Docker_Reference_Architecture- _Docker_Logging_Design_and_Best_Practices [5] http://label-schema.org/rc1 [6] https://alexei-led.github.io/post/docker_testing Container Interface EXPOSE von allen 
 von außen zugänglichen Ports
 EXPOSE 80 443 Alle Umgebungsvariablen,
 die von außen gesetzt werden können
 per ENV definieren und möglichst mit
 sinnvollem Default-Wert besetzen
 ENV NGINX_VERSION 1.9.9 Dockerfile als Interface Definition Kommentare und LABEL [5] ENV, EXPOSE und VOLUME
 (möglichst im Block und ganz am Schluss) ENTRYPOINT für Prozessstart und 
 CMD für Default-Argumente
 ENTRYPOINT ["/entrypoint.sh"] 
 CMD ["--db", "localhost","--user", “root”] Standard-Entrypoints 
 (z.B. docker run my-container /usr/bin/test) run: Container produktiv laufen lassen (default) run-dev: im Dev-Modus laufen mit z.B.Verbose Log test:Testfälle im Container durchlaufen lassen HEALTHCHECK: einen Healthcheck durchführen debug: eine passende interaktive Shell öffnen help: einen Hilfe zurVerwendung anzeigen
  • 17. CONTAINER INITIALIZER PATTERN Container Initializer
 (pid 1) Prozess Prozess- management
 (Exit, SIG, Zombies) Log- Umleitung (syslog, files) Config- Dateien schreiben Cron Warten auf TCP/HTTP Endpunkt Chaperone
 (veraltet) x x x x Dockerize x x x Tini 
 (in Docker > 1.13 enthalten) x dumb-init x pid1 x TrivialRC x phusion baseimage x x x … oder eigenes Shell-Skript oder Go-Programm (aber Achtung: Prozess stets mit exec starten!)
  • 18. IMAGE LAYER ARCHITECTURE PATTERN Layer 2 Layer 4 Layer 3 My Image Layer 1 FROM debian:jessie ENV NGINX_VERSION 1.12.2-1~jessie RUN apt-get update && apt-get install -y ca-certificates && 
 nginx=${NGINX_VERSION} && rm -rf /var/lib/apt/lists/* RUN ln -sf /dev/stderr /var/log/nginx/error.log EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"] Layer 5 jede Instruktion im Dockerfile erzeugt einen neuen Layer (manche einen mit 0 Bytes) Base Image Scratch Niemals latest Tag nutzen!
  • 19. Layer 2 Layer 4 Layer 3 My Image Layer 1 Layer 5 Änderung FROM debian:jessie ENV NGINX_VERSION 1.12.2-1~jessie RUN apt-get update && apt-get install -y ca-certificates && 
 wget nginx=${NGINX_VERSION} && rm -rf /var/lib/apt/lists/* RUN ln -sf /dev/stderr /var/log/nginx/error.log EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"] Cache wird invalidiert [1]: Muss neu gebaut und transportiert werden! [1] mehr zu Docker Caching: https://www.ctl.io/developers/blog/post/caching-docker-images
  • 20. Layer 2 Layer 4 Layer 3 My Image Layer 1 Layer 5 Änderungs- und Transporteinheit klein geringer Impact von Änderungen
  • 21. Layer 2 Layer 4 Layer 3 My Image Layer 1 Layer 5 Base Image volatil stabil klein groß klein:Alpine-*, Baseimage- Docker, Busybox, Scratch • Minimale Docker Images mit Java 9: https://blog.dekstroza.io/building-minimal-docker-containers-with-java-9 • Security Checks von Docker Images: Clair & docker-bench-security & dockscan 1. Abhängigkeiten 2. Applikation 3. Konfiguration 4. Metadaten / Schnittstelle
  • 22. IMAGE SHRINKING 101 • Unnötige Layer vermeiden • RUN Chaining: 
 RUN apk add --update wget git && rm -rf /var/cache/apk/* • Alle Layer verschmelzen zu einem (nur bei Basis-Images empfehlenswert): 
 docker export + docker import
 • Platzschonende Installation von Paketen
 RUN apt-get update && apt-get install -y —no-install-recommends apache2 wget && apt-get clean && rm -rf /var/lib/apt/lists/*
  • 23. IMAGE METAMORPHOSIS ANTIPATTERN DEV INT PROD myimage-dev myimage-int myimage-prod myimage DEV.config INT.config PROD.config
  • 24. STATEFUL CONTAINER ANTIPATTERN mycontainer Prozess Container FileSystem • Zustand im Hauptspeicher: User-Session • Zustand auf Platte: Logs, Anwendungsdaten • Container sind flüchtig: Zustand kann verloren gehen • Das Container FS ist langsam mycontainer VOLUME In-Memory 
 DB/Grid 
 (z.B. redis, Ignite, Hazelcast) Für Log-Dateien: RUN ln -sf /proc/1/fd/1 /var/log/test.log Prozess
  • 25. CONTAINER UNITTESTING PATTERN nginx-container-test.rb describe package('nginx') do it { should be_installed } end describe port(80) do it { should be_listening } end https://www.inspec.io Alternativen: goss+dgoss, ServerSpec, Bats, Testinfra
  • 27. Kubernetes Patterns, Bilgin Ibryam und Roland Huß, https://leanpub.com/k8spatterns
  • 28. ENTERPRISE POD ANTIPATTERN Pod Web
 Server Data- base App
 Server • verletzt das Single
 Responsibility Prinzip • Scheduling schwierig 
 durch hohe Anforderungen • unzureichende Isolation 
 (Netzwerk,Volumes, IPC,
 Hostname, PID) MQ
 Broker
  • 29. STRUCTURAL CONTAINER PATTERNS • Scheduling (Quartz) • Failbot Pod Application Container Pattern Container Other Container “Design patterns for container-based distributed systems”. Brendan Burns, David Oppenheimer. 2016 Sidecar (Sidekick): Enhance container behaviour Ambassador: Proxy communication • TLS tunnel (Stunnel, ghosttunnel, istio) • Circuit Breaking (linkerd, istio) • Request monitoring (linkerd, istio) Adapter: Provide standardized interface • Configuration (ConfigMaps & Secrets to files) • Log extraction / re-formatting / shipping (fluentd)
  • 30. EXTERNALIZED CONFIGURATION apiVersion: v1 kind: ConfigMap metadata:    name: april-aos-runtime-config data:    april-aos.properties: |            com.foo.iap.april.jwt.secret=some-secret           osmc.username=april        osmc.url=https://www.magic.works     ...   april-feature-togglz.properties: |              WRITE_TEXT5_TO_SOFAK_INVOICES=false     ...   log4j2.xml: |        <?xml version="1.0" encoding="UTF-8"?>        <Configuration monitorInterval="60">       <Appenders> ... </Appenders>       <Loggers> ... </Loggers>     </Configuration> spec:        containers:          - name: april-aos-runtime       image: 'april-aos-runtime:1.5.0'       imagePullPolicy: Always              ports:              - containerPort: 8080                   volumeMounts:              - mountPath: /april/cfg                  name: april-aos-runtime-config-vol          volumes:        - name: april-aos-runtime-config-vol               configMap:                name: april-aos-runtime-config PATTERN Umgebungsspezifische Konfiguration: ConfigMap ENV Dynamische Konfiguration: ConfigMap Files Statische Konfiguration: Config Files im Container
  • 31. PACKAGE MANAGEMENT PATTERN • kubectl, kubectl, kubectl, … • Konfiguration? • Endpunkte? https://helm.sh • Chart suchen auf https://hub.kubeapps.com • Doku dort lesen (README.md) • Konfigurationsparameter lesen: 
 helm inspect stable/spark • Chart starten mit überschriebener Konfiguration:
 helm install --name my-release 
 -f values.yaml stable/spark
  • 32. SERVICE MESH PATTERN Pod Pod Pod • Sichere Kommunikation (2-Way-SSL,Token Relay) • Resilienz (Circuit Breaker) • Policy Enforcement • Diagnostizierbarkeit (Traces, Logs, Metriken) • A/BTesting, Canary Releases • Fault Injection, LatencyTesting • LocationTransparency Pod Pod Pod Proxy Proxy Proxy Mesh Control Plane • ohne Anpassung der Anwendungen! • zentral gesteuert!
  • 33. DIAGNOSABILITYTRIANGLE PATTERN Metrics Events / LogsTraces Diagnosability Triangle
  • 34. DIAGNOSABILITYTRIANGLE Metrics (RED = rate, errors, duration) Events / LogsDistributed Traces Diagnosability Triangle
  • 35. OPERATORS (Betriebsroboter) [1] https://coreos.com/operators [2] https://kubernetes.io/docs/concepts/api-extension/custom-resources [3] https://github.com/giantswarm/operatorkit [4] https://github.com/sapcc/kubernetes-operators [5] https://www.youtube.com/watch?v=cj5uk1uje_Y Zustandsbehaftete 
 Infrastruktur
 (z.B. Datenbanken) • Cluster Join / Leave • Failover auslösen • Fehlerzustände erkennen • Migration von Daten Standard-
 Betriebsprozeduren für Anwendungen • Zertifikate einspielen • Neue Konfiguration einspielen • Komplexe Rollout-Szenarien • Alerting …
  • 37. DEV ORCHESTRATION PATTERN • schnelle Roundtrips • geringe Komplexität • lokales Troubleshooting  Bei einzelnen lokalen Prozessen, die in ein existierendes Remote- Cluster gehängt werden sollen: https://www.telepresence.io kompose K8s and OpenShift Deployment YAML Dockerfile + docker-compose.yml Local Development Cloud Deployment
  • 38. PROMOTION PATTERN MicroservicePipelines Stage n Stage n+1 Promotion Degradation
  • 39. QUELLEN • Generell • Container Patterns: https://l0rd.github.io/containerspatterns/#1 • Docker • DockerFile Best Practices: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-a-dockerignore-file • DockerTools: https://github.com/veggiemonk/awesome-docker • OpenShift General Docker Guidelines: https://docs.openshift.com/enterprise/3.0/creating_images/guidelines.html • Common Docker Mistakes: https://runnable.com/blog/9-common-dockerfile-mistakes • Kubernetes • Kubernetes Patterns: https://vimeo.com/233785743 • Kubernetes Best Practices: https://www.youtube.com/watch?v=BznjDNxp4Hs • Continuous Delivery • Continuous Delivery Patterns: https://continuousdelivery.com/implementing/patterns/
  • 42. 42