Modius - Techblog

  • Ansible
  • Docker
  • DevOps
  • Gastautor werden
  • Newsletter abonnieren
  • Über Mich
  • Kontakt

Docker Container in Kubernetes deployen

Veröffentlicht am 19. August 2020 von Christian Piazzi Hinterlasse ein Kommentar , Aktualisiert am 16. August 2020
Geschätzte Lesezeit: 2 Minuten

Titelbild Docker Kubernetes - Beleuchtetes Containerschiff

Nachdem ich hier in den letzten Artikel gezeigt habe, wie man ein lokales Single-Node Cluster mit Minikube oder ein drei Node Cluster mit unter CentOS aufsetzt, will ich heute einen ersten Docker Container im Kubernetes Cluster deployen.

Inhaltsverzeichnis

Als Container verwende ich den Docker Container meiner NLP Pipeline, welche ich in meiner Bachelor Thesis entwickelt habe. Falls du dazu auch mal einen Artikel hier lesen möchtest, dann hinterlasse mir doch eine kurze Nachricht als Kommentar =)

Generell müssen wir in unsere Konfigurationsdatei zwei Bereiche anlegen:

  • Deployment: In diesem Bereich erstellen wir alles zum Deployen des Containers als sogenannter Pod auf Kubernetes
  • Service: Eine Service ist eine abstrakte Möglichkeit eine Anwendung, die auf einer Reihe von Pods läuft, als Netzwerkdienst bereitzustellen.

Kubernetes Deployment für den Container erstellen

Der Inhalt des Deploymentbereiches sieht bei mir wie folgt aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nlp-pipeline
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nlp-pipeline
  template:
    metadata:
      labels:
        app: nlp-pipeline
    spec:
      containers:
      - name: nlp-pipeline
        image: modius22/nlp-pipeline
        ports:
        - name: api
          containerPort: 5000

Am Anfang werden die Version und der Typ des Bereichs (hier Deployment) definiert.

Danach folgt der erste spec Bereich. Dieser teilt sich in 3 Bereiche (replicas, selector, template). Mit replicas gibt man an, wie viele Pods auf dem Cluster erstellt werden soll. Dies ist also wichtig für die Skalierung.

Im selector legt man ein Label an. Dies dient zur Identifikation des Pods. Im Bereich template werden dann die Containerinformationen wie Image und Port definiert.

Wenn der Pod im Kubernetes nur eine interne Funktion wahrnehmen soll, wären wir an dieser Stelle nun schon fertig. Da ich aber zum Testen den Pod von außen ansprechen will, müssen wir jetzt noch einen Service definieren.

Kubernetes Service erstellen

Der Code für den Service ist deutlich kürzer und sieht so aus:

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Service
metadata:
  name: nlp-pipeline
spec:
  type: LoadBalancer
  selector:
    app: nlp-pipeline
  ports:
  - port: 5000
    name: api

Auch hier wird am Anfang die API Version definiert und der Typ Service festgelegt. Im spec Bereich verwenden wir den type LoadBalancer. Dieser würde bei mehreren Repicas auch die Last zwischen den Pods verteilen.

Am Ende wird auch hier der Port wieder aufgeführt.

Deployment auf dem Kubernetes Cluster

Das Deployment könnt ihr generell von überall ausführen, wo kubectl installiert ist und eine Verbindung zum Cluster eingerichtet wurde. Auf diesem System legen wir eine .yaml Datei an (bei mir nlp-pipeline.yaml), wo wir die beiden Bereiche, getrennt mit — einfügen.

Die komplette Datei sieht dann wie folgt aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nlp-pipeline
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nlp-pipeline
  template:
    metadata:
      labels:
        app: nlp-pipeline
    spec:
      containers:
      - name: nlp-pipeline
        image: modius22/nlp-pipeline
        ports:
        - name: api
          containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
  name: nlp-pipeline
spec:
  type: LoadBalancer
  selector:
    app: nlp-pipeline
  ports:
  - port: 5000
    name: api

Um das ganze auf den Cluster zu deployen, verwendet man den folgenden Befehl:

1
kubectl apply -f nlp-pipeline.yaml

Jetzt dauert es einige Minuten bis der Pod gestartet ist, da das Image erst noch von Dockerhub geladen werden muss.

Zum Prüfen ob der Pod läuft, kann der folgende Befehl verwendet werden.

1
2
3
4
kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
nginx-f89759699-s6vxx           1/1     Running   1          13d
nlp-pipeline-86c57b9d96-lw6kx   1/1     Running   0          53m

Damit habe wir erfolgreich unseren ersten Docker Container als Pod in einem Kubernetes Cluster deployed.

Dieser ist aber zur Zeit noch nicht von extern aufrufbar. Wie dies funktioniert, schauen wir uns in einem der nächsten Artikel an.

Kategorie: DevOps Tags: Container, Deployment, Kubernetes, Service, yaml

Über Christian Piazzi

Ich blogge hier über alles, was mir so in meinem ITler Altag über den Weg läuft =)
Man findet mich privat bei Google+ und Twitter

Schreibe einen Kommentar Antworten abbrechen

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

Kategorien

  • Linux
  • Internet, Bloggen & Co
  • Programmierung
  • Sicherheit
  • Netzwerk & Co
  • Mikrokontroller
  • Windows

Neueste Kommentare

  • Prometheus Installation unter Ubuntu - Modius - Techblog bei Prometheus Installation unter CentOS
  • Rainer bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen

Werbung

Archive

Kontakt, Datenschutz und Impressum

  • Kontakt
  • Datenschutz
  • Impressum

Schlagwörter

Anleitung Ansible Apache Apple App Store Automatisierung Blogparade C++ Centos centos 7 CentOS7 Container Datenbank DevOps Docker Dr. Racket Dr. Scheme funktional Gastartikel Google HowTo httpd Icinga2 Icinga 2 Installation itsm Linux Minecraft Monitoring mooc MySQL owncloud PHP Plugin Programmierung python Raspberry Pi Schritt für Schritt Server Sicherheit Tutorial Ubuntu Update Windows Wordpress

Copyright © 2025 · Outreach Pro on Genesis Framework · WordPress · Anmelden