Faktor Zehn Tech Talk: Einführung in Docker & Kubernetes (Gastbeitrag)

Faktor Zehn Docker Kubernetes

Dies ist eine schnelle Einführung in Docker und Kubernetes für Entwickler. Ende 2019 hat Christian Trutz (Trutz Sofware Consulting GmbH) bei uns in Köln einen Vortrag zu diesem Thema gehalten. Die Videoaufnahme hat damals nicht geklappt, deshalb wurde der Vortrag erneut aufgenommen. Das neue ca. 50 Min. Video findet ihr unter: https://springacademy.fra1.digitaloceanspaces.com/linkedin/Docker%20und%20Kubernetes%20(Faktor%20Zehn)%20-%20handbraked.mp4

Der Fokus des Vortrags liegt auf Kubernetes, wir fangen aber mit einer kurzen Einführung in Docker an, da man Kubernetes ohne Docker nicht verstehen kann.

Faktor Zehn Docker

Docker: www.docker.com

Faktor Zehn Kubernetes

Kubernetes: https://kubernetes.io/

Was ist Docker?

  1. Docker ist eine Containerlösung für (Java) Anwendungen, aber nicht nur für Java
    Anwendungen. Beliebige Anwendungen, die unter Linux lauffähig sind, können
    innerhalb eines Docker Containers laufen. Für Java Entwickler ist Docker
    besonders interessant für Microservices, die zum Beispiel unter Spring Boot oder
    Quarkus laufen. In Kombination mit der GraalVM ergegen sich besonders
    effiziente Lösungen.
  2. Docker basiert auf besonderen Fähigkeiten des Linux Betriebsystems, um
    Anwendungen innerhalb eines sogenannten Jails zu schützen. Grob gesprochen
    verhält sich ein Docker Container wie ein chroot.
  3. Docker ist somit keine Containerlösung, die einen kompletten Rechner
    vollständig simuliert. Windows und OSX Programme laufen zum Beispiel nicht
    unter Docker. Aber Docker selber kann unter Windows und OSX betrieben
    werden. Diese Präsentation verwendet zum Beispiel Docker unter OSX. Dies wird
    gelöst indem ein Linux innerhalb einer klassischen virtuellen Maschine gestartet
    wird. CoreOS ist die Linux Distribution für Docker.
  4. Docker ist extrem effizient, typische Docker Container benötigen lediglich
    Millisekunden um hochzufahren.
  5. Aus Entwicklersicht ist Docker aus zwei Gründen gut. Erstens kann ich die
    Systeme gegen die ich entwickle dockerisieren. Beispielsweise sind
    Datenbanken oder App Server die typischen Kandidaten dafür. Mein Rechner
    wird dadurch nicht mit diesen Programmen (in unterschiedlichen Versionen)
    beschmutzt und ich kann die Docker Images mit diesen Umsystemen mit meinen
    Kollegen im Projekt teilen.
  6. Zweitens kann die eigene Anwendung dockerisiert werden und produktiv
    betrieben werden. Die Artefakte, die die Entwickler an Betrieb liefern sind nicht
    mehr WARs oder EARs mit viel Dokumentation sondern komplette Docker
    Images, die einem virtuellen Rechner entsprechen. Docker Images müssen
    natürlich auch konfiguriert werden und gegebenfalls innerhalb eines Clusters
    betrieben werden. Die Orchestrierung von Docker Container wird typischerweise
    über Tools wie Kubernetes durchgeführt.

Docker Installation

  1. Die Installationseinleitung für Docker findest du unter
    https://www.docker.com/get-started. Du erhältst hier die Installationspakete für
    OSX und Windows, es werden alle notwendigen Komponenten installiert.
  2. Für Windows und OSX wird Docker innerhalb einer virtuellen Maschine
    gestartet, in der virtuellen Maschine läuft dann eine minimale Linux Distribution
    mit Docker.
  3. Docker wird remote gesteuert, der Docker Client wird nativ auf dem eigenen
    Rechner installiert, der Docker Daemon (Server) läuft innerhalb der virtuellen
    Maschine (oder remote auf einem anderen Rechner).
  4. Mit den Befehlen docker info und docker version kann überprüft werden, ob
    die Installation erfolgreich war und die Serverkomponente läuft.

Beispiel

  1. Wir wollen ein Beispiel nun einen Docker Container starten, der den nginx Server
    enthält. Das ist sozusagen das “Hello World!” Beispiel in der Docker Welt:

 

2. Der Befehl docker run erzeugt einen Docker Container aus dem Docker Image
nginx und startet ihn auch. Achtung: nicht mit dem Befehl docker start
verwechseln, der einen bestehen Container lediglich startet. Wenn der Befehl
   docker run mehrfach hintereinander ausgeführt wird, wird bei jedem Aufruf ein
neuer Container erzeugt.

Docker Hub

  1. Das zentrale Repository für Docker Images ist https://hub.docker.com.
  2. Jedes Image enthält eine ausführliche Beschreibung für den Betrieb, zum Beispiel https://hub.docker.com/_/nginx.
  3. Docker Images haben eine Version, typischerweise identisch mit der Version der Software, die im Image enthalten ist.
  4. Mit dem Befehl docker images erhält man eine Übersicht der Images, die lokal heruntergeladen wurden.
    Wenn ein Image nicht lokal vorhanden ist, wird es von Docker automatisch aus dem Docker Repository heruntergeladen.
    Organisationen / Firmen können auch eigene Docker Repositories aufbauen.

Docker Images

  1. Ein Docker Image (zum Beispiel nginx) besteht aus mehreren Layern, die separat
    heruntergeladen werden. Dieses Layerprinzip führt dazu, dass der Bau eines
    Docker Images sehr effizient ist.
  2. Zum Beispiel kann ich ein bestehendes Docker Image mit einem Application
    Server als Grundlage nehmen und meine eigene Anwendung als Layer
    hinzufügen. Immer wenn ich meine Anwendung baue (Maven), kann auch das
    entsprechende Docker Image effizient mitgebaut werden, da lediglich der
    oberste Layer mit meiner Anwendung ausgetauscht werden muss.

Docker und Maven

  1. Maven kann verwendet werden um das eigene Projekt zu dockerisieren.
  2. Ein Beispiel findet man unter http://spring.academy/docker/.

 

Kubernetes

Was ist Kubernetes?

  1. Eine Clusterlösung für Docker Container von Google, wobei Google selber massiv
    in der eigenen Infrastruktur auf Kubernetes setzt.
  2. Der Status des Kubernetes Clusters wird innerhalb einer .yml Datei definiert, die
    Hauptaufgabe von Kubernetes ist diesen Status zu erhalten.
  3. Ein einfaches Beispiel für einen solchen Status könnte zum Beispiel sein: Drei
    Docker Container mit nginx.
  4. Der Status eines Kubernetes Clusters ist
    a. die Anzahl der Container,
    b. wie die Container miteinander verdrahtet sind,
    c. Load Balancing,
    d. usw.
  5. Kubernetes selber besteht aus Docker Container / Images.

kubectl

  1. Der zentrale Befehl mit dem Kubernetes gesteuert wird, heißt kubectl.
  2. Kubernetes ist out-of-the-box in der Docker Installation enthalten, muss aber
    eingeschaltet werden.
Faktor Zehn Kubernetes

Kubernetes einschalten

3. Die Kubernetes Instanz, die mit der Docker Installation kommt, ist lediglich für
die Entwicklung geeignet, nichts für die Produktion (enthält lediglich einen
Knoten).
4. Mit dem Befehl kubectl config get-contexts können die unterschiedlichen
Kubernetes Cluster angezeigt werden. Ein Kubernetes Context beschreibt die
Verbindung zu einem Cluster.
5. Befehle um den Kubernetes Context zu sichten:

 

Kubernetes Dashboard

1. Kubernetes enthält auch ein sogenanntes Dashboard um den Status des Cluster
zu sichten und zu verändern. Der Dashboard ist eine Web Anwendung, die
innerhalb des Clusters läuft und in Kubernetes deployed werden muss.
2. Der Dashboard ist ein Tool für Admins.
3. Installation des Kubernetes Dashboard über

4. Der Befehl kubectl apply ist der Standardbefehl um einen Status im Cluster
neu zu setzen oder zu verändern. Es wird als Parameter eine .yaml Datei
übergeben, die den gewünschten Status enthält.
5. Der Dashboard wird über die Kommandozeile gestartet

und kann dann im Browser geöffnet werden

http://localhost:8001/api/v1/namespaces/kubernetesdashboard/services/https:kubernetes-dashboard:/proxy/

Dashboard Authentifizierung

  1. Kubernetes hat eingebaute Security by default. Die Anmeldung an den
    Dahsboard im Browser erfolgt über einen Token, der mit den Befehlen

2. kubectl get secrets
kubectl describe secret default-token-2hh8v
ermittet werden kann.

Kubernetes Nodes

1. Kubernetes Nodes sind Maschinen (auch virtuelle), die räumlich verteilt werden
können und Bestandteil eines Kubernetes Clusters sein können.
2. In der lokalen Docker Installation existiert nur ein Kubernetes Node. Docker
Desktop ist also lediglich für Entwickler geeignet.

Kubernetes Pods

  1. Pod = mehrere Docker Container, die eng kooperieren, z.B. Application Server +
    Datenbank.
  2. Typisch ist aber auch ein Pod = ein Docker Container.
  3. Ein Pod wird innerhalb eines Kubernetes Deployments deployed

und kann sehr leicht skaliert werden.
4. Beispiel: Replicas auf 2 setzen und erneut kubectl apply anwenden.
5. Beispiel deployment.yaml:

 

Kubernetes Services

  1. Ein Kubernetes Service definiert den Zugriff auf die Pods.

2. Service kann zum Beispiel vom Typ LoadBalancer sein.
3. Beispiel service.yaml

 

Fazit

Docker und Kubernetes sind die Tools um containerisierte Anwendungen zu
entwickeln und zu betreiben. Aus meiner Sicht eignet sich Docker hervorragend um
während der Entwicklung Fremdsysteme (gegen die entwickelt wird) auf dem
Rechner des Entwicklers zu betreiben. Der Betrieb kann wiederum Kubernetes
verwenden, um Docker Container zu betreiben und zu skalieren. OpenShift ist zum
Beispiel eine Kubernetes Platform von RedHat, eine andere ist die Google
Kubernetes Platform.

 

Christian Trutz
https://www.linkedin.com/in/christiantrutz/

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Solve : *
10 − 8 =