Skip to content
This repository has been archived by the owner on Mar 4, 2022. It is now read-only.

Latest commit

 

History

History

40-Kubernetes

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

M300 - 40 Kubernetes (K8s)

Diese Wikiseite zeigt beinhaltet eine kleine Einführung in Kubernetes.

Lernziele

Sie können einen einfachen Kubernetes Kluster aufsetzen.

Voraussetzungen

Inhaltsverzeichnis


01 - Grundbegriffe

Nach oben

Service Discovery


Service Discovery ist der Prozess, Clients eines Service mit Verbindungsinformationen (normalerweise IP-Adresse und Port) einer passenden Instanz davon zu versorgen.

In einem statischen System auf einem Host ist das Problem einfach zu lösen, denn es gibt nur eine Instanz von allem.

In einem verteilten System mit mehreren Instanzen von Services, die kommen und gehen, ist das aber viel komplizierter.

Eine Möglichkeit ist, dass der Client einfach den Service über den Namen anfordert (zum Beispiel db oder api) und im Backend dann ein bisschen Magie geschieht, die dazu die passenden Daten liefert.

Für unsere Zwecke kann Vernetzung als der Prozess des Verknüpfens von Containern betrachtet werden.

Es geht nicht darum, reale Ethernet-Kabel einzustecken. Containervernetzung beginnt mit der Annahme, dass es eine Route zwischen Hosts gibt – egal, ob diese Route über das öffentliche Internet läuft oder nur über einen schnellen lokalen Switch.

Mit dem Service Discovery können Clients also Instanzen finden, und die Vernetzung kümmert sich darum, die Verbindungen herzustellen.

Vernetzungs Service-Discovery-Lösungen haben häufig gemeinsame Funktionalität, da Service-Discovery-Lösungen auf Ziele im Netz verweisen und Vernetzungslösungen häufig auch Service-Discovery-Features enthalten.

Weitere Funktionen von Service Discovery können sein:

  • Health Checking
  • Failover
  • Load Balancing
  • Verschlüsselung der übertragenen Daten
  • Isolieren von Containergruppen.

Lastverteilung (Load Balancing)


Mittels Lastverteilung (englisch Load Balancing) werden in der Informatik umfangreiche Berechnungen oder große Mengen von Anfragen auf mehrere parallel arbeitende Systeme verteilt.

Insbesondere bei Webservern ist eine Lastverteilung wichtig, da ein einzelner Host nur eine begrenzte Menge an HTTP-Anfragen auf einmal beantworten kann.

Für unsere Zwecke kann Lastverteilung als der Prozess des Verteilens von Anfragen auf verschiedene Container betrachtet werden.

Cluster


Ein Rechnerverbund oder Computercluster, meist einfach Cluster genannt (vom Englischen für „Rechner-Schwarm“, „-Gruppe“ oder „-Haufen“), bezeichnet eine Anzahl von vernetzten Computern.

Der Begriff wird zusammenfassend für zwei unterschiedliche Aufgaben verwendet:

  • die Erhöhung der Rechenkapazität (HPC-Cluster)
  • die Erhöhung der Verfügbarkeit (HA-Cluster, engl. high available - hochverfügbar).

Die in einem Cluster befindlichen Computer (auch Knoten, vom englischen nodes oder Server) werden auch oft als Serverfarm bezeichnet.

02 - Kubernetes

Nach oben

Kubernetes in 5 Minuten auf YouTube


Kubernetes (auch als „K8s“ oder einfach „K8“ bezeichnet - sprich immer: 'Kuhbernetties') ist ein Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Container-Anwendungen, das ursprünglich von Google entworfen und an die Cloud Native Computing Foundation gespendet wurde. Es zielt darauf ab, eine „Plattform für das automatisierte Bespielen, Skalieren und Warten von Anwendungscontainern auf verteilten Hosts“ zu liefern. Es unterstützt eine Reihe von Container-Tools, einschließlich Docker.

Die Orchestrierung mittels Kubernetes wird von führenden Cloud-Plattformen wie Microsofts Azure, IBMs Bluemix, Red Hats OpenShift und Amazons AWS unterstützt.

Merkmale


  • Immutable (Unveränderlich) statt Mutable.
  • Deklarative statt Imperative (Ausführen von Anweisungen) Konfiguration.
  • Selbstheilende Systeme - Neustart bei Absturz.
  • Entkoppelte APIs – LoadBalancer / Ingress (Reverse Proxy).
  • Skalieren der Services durch Änderung der Deklaration.
  • Anwendungsorientiertes statt Technik (z.B. Route 53 bis AWS) Denken.
  • Abstraktion der Infrastruktur statt in Rechnern Denken.

Objekte


  • Pod - Ein Pod repräsentiert eine Gruppe von Anwendungs-Containern und Volumes, die in der gleichen Ausführungsumgebung (gleiche IP, Node) laufen.
  • ReplicaSet: ReplicaSets bestimmen wieviele Exemplare eines Pods laufen und stellen sicher, dass die angeforderte Menge auch verfügbar ist.
  • Deployment: Deployments erweitern ReplicaSets um deklarative Updates (z.B. von Version 1.0 auf 1.1) von Container Images.
  • Service: Ein Service steuert den Zugriff auf einen Pod (IP-Adresse, Port). Während Pods (bzw. Images) ersetzt werden können (z.B. durch Update auf neue Version) bleibt ein Service stabil.
  • Ingress: Ähnlich einem Reverse Proxy ermöglicht ein Ingress den Zugriff auf einen Service über einen URL.

Weitere siehe Kubernetes Concepts.

Unterhaltsame Broschüre mit dem Titel "Phippy Goes to the Zoo – A Kubernetes Story", zeigt in der Form eines Kinderbuches wesentliche Objekte von Kubernetes auf.

Installation


Für die Installation verwenden Sie die Anleitung vom Projekt:

Beispiel YAML Datei


Ein Apache Web Server kann wie folgt Bereitgestellt werden:

apiVersion: v1
kind: Service
metadata:
  name: apache
  labels:
    app: apache
    group: web
    tier: frontend
spec:
  type: LoadBalancer
  ports:
  - port: 80
    protocol: TCP
  selector:
    app: apache
---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apache
  template:
    metadata:
      labels:
        app: apache
        group: web
        tier: frontend
    spec:
      containers:
      - name: apache
        image: httpd
        ports:
        - containerPort: 80
          name: apache

Links

03 - Kubernetes Cluster

Nach oben

Quelle: On setting up highly available Kubernetes clusters


Bei einem Cluster wird ein Kubernetes Master und mehrere Worker erzeugt. Diese Umgebung eignet sich zur Demonstration einer Verteilten Umgebung.

Voraussetzungen

Genügend GB RAM für alle VM's, z.B. können bei einem 32 GB RAM System ca. 7 VM's à 4 GB RAM eingerichtet werden.

Konfiguration


Siehe Datei cluster-large.yaml oder cluster-small.yaml.

Die wichtigsten Konfigurationen:

master:
  count: 1
  cpus: 2
  memory: 5120
worker:
  count: 2

Es wird ein Master und zwei Worker Nodes erstellt. Der Master und die Worker Nodes werden während der Installation automatisch miteinander gejoint.

use_dhcp: false  
# Fixe IP Adressen mit welchen die IP fuer Master und Worker beginnen sollen
ip:
  master:   192.168.137.100
  worker:   192.168.137.111
# Netzwerk "private_network" fuer Host-only Netzwerk, "public_network" fuer Bridged Netzwerke
net:
  network_type: private_network

Die restlichen Standardeinstellungen wie Host-only Netzwerk mit fixen IP-Adressen kann 1:1 verwendet werden.

Nachteil: es kann nur vom Notebook wo sich die VMs befinden auf den Cluster zugegriffen werden.

04 - Reflexion

Nach oben

07 - Quellenverzeichnis

Nach oben