Ein Pod in Kubernetes repräsentiert die kleinste “deployable” Einheit innerhalb eines Clusters und ist ein zentraler Baustein, um Anwendungen auf der Plattform zu betreiben. Jeder Pod kann einen oder mehrere Container hosten, die zusammen als eine Einheit orchestriert werden. Hier sind die Kernkonzepte und Funktionen von Pods in Kubernetes:
localhost miteinander kommunizieren und die gleiche
IP-Adresse und die gleichen Port-Räume teilen können.apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: nginx-storage
mountPath: /usr/share/nginx/html
volumes:
- name: nginx-storage
persistentVolumeClaim:
claimName: nginx-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1GiIn diesem Beispiel-Manifest wird ein Pod erstellt, der einen
Container hostet, welcher das neueste nginx-Image verwendet. Der
Container öffnet Port 80 und montiert ein Persistent Volume an
/usr/share/nginx/html. Ein PersistentVolumeClaim namens
nginx-pvc wird ebenfalls erstellt, um eine dauerhafte
Speicheranforderung von 1 GiB zu stellen.
Ein gründliches Verständnis von Pods und ihrer Funktionsweise ist entscheidend für die effektive Nutzung von Kubernetes für die Orchestrierung von Container-basierten Anwendungen. Pods bilden die Grundlage für die Erstellung, Verwaltung und Skalierung von Anwendungen in einer Kubernetes-Umgebung.
kubectl Befehle
für Pod-Management in KubernetesPod Aktionen und entsprechende kubectl Befehle:
| Aktion | Kommando | Beispiel |
|---|---|---|
| Pod erstellen | kubectl apply -f pod.yaml |
kubectl apply -f pod.yaml |
| Pod auflisten | kubectl get pods |
kubectl get pods |
| Pod-Details | kubectl describe pod <pod-name> |
kubectl describe pod mypod |
| Pod löschen | kubectl delete pod <pod-name> |
kubectl delete pod mypod |
| Pod-Logs anzeigen | kubectl logs <pod-name> |
kubectl logs mypod |
| Pods in Namespace | kubectl get pods --namespace=<name> |
kubectl get pods --namespace=development |
| Interaktive Shell | kubectl exec -it <pod-name> -- /bin/sh |
kubectl exec -it mypod -- /bin/sh |
| Label hinzufügen | kubectl label pods <pod-name> key=value |
kubectl label pods mypod environment=production |
Erweiterte Pod-Management Befehle:
| Aktion | Kommando |
|---|---|
Pod mit run |
kubectl run <pod-name> --image=<image> |
| Pod-Informationen | kubectl get pods <pod-name> -o wide |
| Pod bearbeiten | kubectl edit pods <pod-name> |
| Pod löschen (Datei) | kubectl delete -f [fileName].yaml |
| Ressourcenverbrauch | kubectl top pods --sort-by cpu |
In einer Kubernetes-Pod-Spezifikation werden ENTRYPOINT
und CMD aus einem Dockerfile
# Verwenden eines Basisimages
FROM ubuntu:latest
# Setzen des Arbeitsverzeichnisses im Container
WORKDIR /app
# Kopieren des Start-Skripts in das Arbeitsverzeichnis
COPY start.sh /app/start.sh
# Bereitstellen des Start-Skripts als ausführbare Datei
RUN chmod +x /app/start.sh
# Setzen des ENTRYPOINT auf das Start-Skript
ENTRYPOINT ["/app/start.sh"]
# Definieren des default CMD
CMD ["-a", "option1"]wie folgt übersetzt
ENTRYPOINT wird durch das Feld command in
der Pod-Spezifikation ersetzt.
Beispiel in Kubernetes YAML:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
command: ["/app/start.sh"]CMD wird durch das Feld args in der
Pod-Spezifikation ersetzt.
Beispiel in Kubernetes YAML:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
args: ["-a", "option1"]Wenn sowohl command als auch args in der
Kubernetes-Pod-Spezifikation definiert sind, werden sie zusammen
verwendet, ähnlich wie ENTRYPOINT und CMD in
einem Dockerfile.
Beispiel in Kubernetes YAML:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
command: ["/app/start.sh"]
args: ["-a", "option1"]In diesem Fall wird der Container mit dem Befehl
/app/start.sh -a option1 gestartet.
args kann in der Kubernetes-Pod-Spezifikation als Liste
von Strings definiert werden. Jeder String in der Liste wird als
separates Argument an den Befehl übergeben, der im
command-Feld definiert ist.
Beispiel in Kubernetes YAML:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
command: ["/app/start.sh"]
args:
- "-a"
- "option1"
- "--flag"
- "value"In diesem Fall wird der Container mit dem Befehl
/app/start.sh -a option1 --flag value gestartet.