Kubernetes basics: Pods
Title | K8 Basic Pods |
Category | Course |
Level | Novice |
Duration | ? |
YouTube | https://youtube.com/crankzone/xxx |
Blog | https://muellermh.wordpress.com/k8s-basic-training-etcd |
Author | Manuel H. “Onko” Müller |
mm@kubernauts.de | |
Resource | https://kubernetes.io/docs/concepts/workloads/pods/pod/ |
Description | Diese Lektion vermittelt alle Informationen zum Thema Pods |
Pod allgemein
Ein Pod ist eine Gruppe von einem oder mehreren Containern. Hierbei sollte die Skalibarkeit der Container innerhalb eines Pods beachtet werden. Es sollten Grundsätzlich nur Container zusammen in einem Pod gestarted werden, bei denen es eine entsprechende Abhängigkeit gibt. Statt das Backend und das Frontend einer Applikation in einen Pod zu starten sollten diese zur skalierbarkeit in zwei verschiednen Pods laufen. Ein Container der die Logs einsammelt und die entsprechend weiterleitet kann natürlich im selben Pod gestartet werden.
Managment
Container in einem Pod werden immer zusammen deployed, gestartet und gestopped. Ebenso wird die Replikation auf Pod Ebene geführt.
Resourcen
Ein Pod ist ein logischer Host für die Container, alle Container teilen sich diesen und können über localhost miteinander kommunizieren. Alle Applikationen in einem Pod haben den gleichen Netzwerk Namespace, die gleiche IP und den gleichen Port space.
Verwendung
Im vergeleich zu Docker entspricht ein Pod einem Docker-compose File. Geteile Volumes in einem Pod können von allen Containern genutzt werden.
Pods werden in der Regel genutzt um ein Support für co-located und co-managed Hilfs programme zu gruppieren.
Zum Beispiel ein Content Managment System mit Files, Datenbank, Cache und mehr.
content management systems, file and data loaders, local cache managers, etc.
log and checkpoint backup, compression, rotation, snapshotting, etc.
data change watchers, log tailers, logging and monitoring adapters, event publishers, etc.
proxies, bridges, and adapters
controllers, managers, configurators, and updaters
Lebenscyclus
Pod dürfen als nicht dauerhafte Einheit gesehen werden. Die Pods können aus unterschiedlichsten Gründe ausfallen werden dann irgendwo neu erzeugt.
Beenden eines Pods
Da die Pods auf verschiedenen Nodes laufen muss immer sicher gestellt werden das Pods sauber aufgeräumt werden. Daher werden erst alle Container angewisen sich zu terminieren, nach einer kurzen wartezeit werden alle Conatainer Prozesse gekillt. Sollte ein verwaltender Prozess wärend des beenden nicht verfügbar sein wird der beenden Prozess erneut ausgeführt.
Der Befehl dafür lautet kubectl delete ...
dieser Befehl kann mit Flags erweitert werden. Zum Beispiel kann die Zeit zwischen Terminieren und Killen mit --grace-period=<seconds>
gesetzt werden oder ein Force delete angefordert werden mit --force
.
Privilegierte Pods
Jeder Container in einem Pod kann im privilegierten Modus gestartet werden. hier für wird das Flag --privileged
gesetzt. Damit hat der Container nahzu die selben Rechte wie der Host User auf dem er läuft.
Lifecycle
Pod Phase
Ein Pod kann sich in verschiedenen Phasen befinden, eine Liste im Überblick:
Wert | Beschreibung |
---|---|
Pending | der Pod befindet sich im Aufbau |
Running | der Pod ist aktiv und läuft |
Suceedded | alle container im Pod wurden beendet und nicht neu gestarted |
Failed | alle container im Pod sind beendet und der letzte container ist in ein Fehler gelaufen |
Unknown | Manchmal kann ein Pod aus ungeklärten Gründen in diesem Status stecken da vermutlich etwas mit der Kommunikation nicht stimmte |
Pod Zustände
Zusätzlich hat jeder Pod noch definierte Zustände in einem Array Wert | Beschreibung — | — lastProbeTime | timestamp der letzten prüfung lastTransisitionTime | timestamp der letzten Veränderung des Pods message | eine lesbare Nachricht mit details zur Veränderung reason | a unique, one-word, camelCase Reason for transistion status | true false and unkown type | transition type
Werte für den Typen von Transitions
Wert | Beschreibung |
---|---|
PodScheduled | Pod ist für ein node geplant |
Ready | der Pod ist einsatzbereit |
Initialized | alle container sind initalisiert und starten |
Unschedulable | der Pod kann nicht geplant werden |
ContainersReady | alle Container im Pod sind fertig |
Container Proben
Eine Probe ist eine rythmische Prüfung durch den Kubelet, der einen Handler im Container aufruft ob ein Container noch arbeitet. Es gibt 3 Arten von Handlern:
Wert | Beschreibung |
---|---|
ExecAction | führt ein Befehl im Container aus |
TCPSocketAction | prüft anhand der IP ob der Container arbeitet |
HTTPGetAction | prüft anhand eines WebRequest ob der Container noch reagiert |
Jede Probe kann einen der Werte zurückliefern: Success , Failure , Unkown
Zusätzlich kan Kubelet noch zwei optionale Aktionen auf laufende Container durchführen.
livenessProbe
welcher prüft ob der Container noch läuft und readinessProbe
welcher prüft ob der Container noch Service Anfragen beantworten kann