Kubernetes (K8s)-Bereitstellungen stellen häufig aus verschiedenen Blickwinkeln Herausforderungen dar, darunter Pods, Dienste, Ingress, nicht reagierende Cluster, Steuerungsebenen und Hochverfügbarkeitseinrichtung. Der Kubernetes- Pod ist die kleinste einsetzbare Einheit im Kubernetes-Ökosystem und kapselt einen oder mehrere Container, die Ressourcen und Netzwerke gemeinsam nutzen. Pods sind für die Ausführung einer einzelnen Instanz einer Anwendung oder eines Prozesses konzipiert und werden nach Bedarf erstellt und verworfen. Pods sind für die Skalierung, Aktualisierung und Wartung von Anwendungen in einer K8s-Umgebung unerlässlich.
Übersetzt aus Master Kubernetes Pods: Advanced Troubleshooting Strategies , Autor None.
In diesem Artikel werden die Herausforderungen untersucht, mit denen Kubernetes-Pods konfrontiert sind, und die erforderlichen Schritte zur Fehlerbehebung. Zu den Fehlermeldungen, die beim Ausführen von Kubernetes-Pods auftreten, gehören:
- ImagePullBackoff
- ErrImagePull
- Ungültiger Bildname
- CrashLoopBackOff
Manchmal treten die aufgeführten Fehler nicht einmal auf, stellen aber dennoch fest, dass Ihr Pod ausfällt. Zunächst ist es wichtig zu beachten, dass Sie beim Debuggen einer Kubernetes-Ressource die API-Referenz verstehen sollten . Es erklärt, wie die verschiedenen Kubernetes-APIs definiert sind und wie mehrere Objekte in einem Pod/einer Bereitstellung funktionieren. Die Dokumentation ist in der API-Referenz auf der Kubernetes-Website klar definiert. Wählen Sie in diesem Fall beim Debuggen des Pods das Pod-Objekt aus der API-Referenz aus, um mehr über die Funktionsweise des Pods zu erfahren. Es definiert die Felder, die in den Pod aufgenommen werden, nämlich Version, Typ, Metadaten, Spezifikation und Status. Kubernetes stellt außerdem einen Spickzettel mit einer Anleitung zu den erforderlichen Befehlen zur Verfügung.
Voraussetzungen
In diesem Artikel wird davon ausgegangen, dass die Leser die folgenden Bedingungen haben:
- Zur Szenariodemonstration installiert
- Mittleres Verständnis der Kubernetes-Architektur
- Kubectl- Befehlszeilentool
Kubernetes-Pod-Fehler – ImagePullBackoff
Dieser Fehler tritt aus drei verschiedenen Gründen auf:
- Ungültiges Bild
- Ungültiges Tag
- Ungültige Berechtigungen
Diese Situationen treten auf, wenn Sie nicht über die richtigen Informationen zum Bild verfügen. Möglicherweise verfügen Sie auch nicht über die Berechtigung, das Bild aus seinem Repository (privates Repository) abzurufen. Um dies im folgenden Beispiel zu demonstrieren, erstellen wir eine Nginx-Bereitstellung:
➜ ~ kubectl create deploy nginx --image=nginxdeployment.apps/nginx created
Nachdem der Pod ausgeführt wurde, rufen Sie den Pod-Namen ab:
➜ ~ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-8f458dc5b-hcrsh 1/1 Running 0 100s
Kopieren Sie den Namen des laufenden Pods und erhalten Sie weitere Informationen darüber:
➜ ~ kubectl describe pod nginx-8f458dc5b-hcrsh
Name: nginx-8f458dc5b-hcrsh
hable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m43s default-scheduler Successfully assigned default/nginx-8f458dc5b-hcrsh to k8s-troubleshooting-control-plane
Normal Pulling 2m43s kubelet Pulling image "nginx"
Normal Pulled 100s kubelet Successfully pulled image "nginx" in 1m2.220189835s
Normal Created 100s kubelet Created container nginx
Normal Started 100s kubelet Started container nginx
Das Bild wurde erfolgreich abgerufen. Ihr Kubernetes-Pod läuft ohne Fehler.
Um ImagePullBackoff zu demonstrieren, bearbeiten Sie die Bereitstellungs-YAML-Datei und geben Sie ein nicht vorhandenes Image an:
➜ kubectl edit deploy nginx
containers:
-image: nginxdoestexist
imagePullPolicy: Always
name: nginx
Der neue Pod wurde nicht erfolgreich bereitgestellt
➜ ~ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-5b847fdb95-mx4pq 0/1 ErrImagePull 0 3m40s
nginx-8f458dc5b-hcrsh 1/1 Running 0 38m
ImagePullBackoff-Fehler angezeigt
➜ ~ kubectl describe pod nginx-6f46cbfbcb-c92bl
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 88s default-scheduler Successfully assigned default/nginx-6f46cbfbcb-c92bl to k8s-troubleshooting-control-plane
Normal Pulling 40s (x3 over 88s) kubelet Pulling image "nginxdoesntexist"
Warning Failed 37s (x3 over 85s) kubelet Failed to pull image "nginxdoesntexist": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/nginxdoesntexist:latest": failed to resolve reference "docker.io/library/nginxdoesntexist:latest": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
Warning Failed 37s (x3 over 85s) kubelet Error: ErrImagePull
Normal BackOff 11s (x4 over 85s) kubelet Back-off pulling image "nginxdoesntexist"
Warning Failed 11s (x4 over 85s) kubelet Error: ImagePullBackOff
Kubernetes-Pod-Fehler – Das Image wurde abgerufen, aber der Pod befindet sich im Status „Ausstehend“.
Wenn Sie K8s in einer Produktionsumgebung ausführen, weist der K8s-Administrator jedem Namespace basierend auf den Anforderungen der im Cluster ausgeführten Namespaces Ressourcenkontingente zu. Namespaces dienen der logischen Trennung innerhalb eines Clusters.
Der Fehler „Image wurde abgerufen, aber der Pod steht noch aus“ wird ausgegeben, wenn die Spezifikationen im Ressourcenkontingent nicht den Mindestanforderungen der Anwendung im Pod entsprechen. Erstellen Sie im folgenden Beispiel einen Namensraum namens „Payments“:
➜ ~ kubectl create ns payments
namespace/payments created
Erstellen Sie Ressourcenkontingente anhand relevanter Spezifikationen
➜ ~ cat resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 4Gi
Weisen Sie Namespace-Zahlungen Ressourcenkontingente zu
➜ ~ kubectl apply -f resourcequota.yaml -n paymentsresourcequota/compute-resources created
Ressourcenkontingent/Rechenressourcen erstellt
Erstellen Sie eine neue Bereitstellung innerhalb eines Namespace mit Ressourcenkontingentbeschränkungen:
kubectl create deploy nginx --image=nginx -n paymentsdeployment.apps/nginx created
Obwohl die Bereitstellung erfolgreich erstellt wurde, sind keine Pods vorhanden:
➜ ~ kubectl get pods -n payments
No resources found in payments namespace
Die Bereitstellung wird erstellt, aber es sind keine Pods im Bereitschaftszustand, keine Pods zum Aktualisieren und keine Pods verfügbar:
➜ ~ kubectl get deploy -n payments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 0/1 0 0 7m4s
Beschreiben Sie zum weiteren Debuggen die Nginx-Bereitstellung. Pod-Erstellung fehlgeschlagen:
➜ ~ kubectl describe deploy nginx -n payments
Name: nginx
Namespace: payments
CreationTimestamp: Wed, 24 May 2023 21:37:55 +0300
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nginx
Replicas: 1 desired | 0 updated | 0 total | 0 available | 1 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available False MinimumReplicasUnavailable
ReplicaFailure True FailedCreate
Progressing False ProgressDeadlineExceeded
OldReplicaSets: <none>
NewReplicaSet: nginx-8f458dc5b (0/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 10m deployment-controller Scaled up replica set nginx-8f458dc5b to 1
Eine weitere Analyse von Kubernetes-Ereignissen ergab, dass für die Pod-Erstellung nicht genügend Speicher erforderlich war.
➜ ~ kubectl get events --sort-by=/metadata.creationTimestamp
Dieser Fehler tritt auf, wenn Ihr Image erfolgreich abgerufen und Ihr Container erstellt wurde, Ihre Laufzeitkonfiguration jedoch fehlschlägt. Wenn Sie beispielsweise über eine funktionierende Python-Anwendung verfügen, die versucht, in einen Ordner zu schreiben, der nicht existiert oder keine Berechtigung zum Schreiben in den Ordner hat. Die Anwendung wird zunächst ausgeführt und stellt dann einen Fehler fest. Wenn in Ihrer Anwendungslogik eine Panik auftritt, wird der Container angehalten. Der Container wird in CrashLoopBackOff verschoben. Schließlich stellen Sie fest, dass die Bereitstellung keine Pods hat, d. h. es gibt einen Pod, der jedoch nicht ausgeführt wird und einen CrashLoopbackoff-Fehler auslöst.
Lebendigkeits- und Bereitschaftstests schlugen fehl
Die Liveness-Erkennung erkennt, ob ein Pod beschädigt ist und keinen Datenverkehr mehr bereitstellen kann. Kubernetes startet den Pod für Sie neu. Bereitschaftsprüfungen prüfen, ob Ihre Anwendung für die Verarbeitung von Datenverkehr bereit ist. Bereitschaftsprüfungen stellen sicher, dass Ihre Anwendung alle erforderlichen Konfigurationen aus der Konfigurationszuordnung abruft und ihre Threads startet. Erst nach Abschluss dieses Vorgangs ist Ihre Bewerbung für den Empfang von Datenverkehr bereit. Wenn Ihre Anwendung während dieses Vorgangs auf einen Fehler stößt, wird sie auch CrashLoopBackoff eingeben.
Beginnen Sie mit der Fehlerbehebung!
Dieser Artikel bietet einen Überblick über Fehlerbehebungstechniken für Kubernetes-Pods. Es behebt häufige Fehler, die bei der Bereitstellung von Pods auftreten, und bietet praktische Lösungen zur Behebung dieser Fehler. Es bietet außerdem Einblick in Referenzseiten und Spickzettel, die für das Verständnis der Funktionsweise von Kubernetes und die effektive Identifizierung und Lösung von Problemen von entscheidender Bedeutung sind. Durch Befolgen der Anleitungen in diesem Artikel können Leser ihre Fähigkeiten zur Fehlerbehebung verbessern und die Bereitstellung und Verwaltung ihrer Kubernetes-Pods vereinfachen.
Ich habe beschlossen, Open-Source-Hongmeng aufzugeben . Wang Chenglu, der Vater von Open-Source-Hongmeng: Open-Source-Hongmeng ist die einzige Architekturinnovations- Industriesoftwareveranstaltung im Bereich Basissoftware in China – OGG 1.0 wird veröffentlicht, Huawei steuert den gesamten Quellcode bei Google Reader wird vom „Code-Scheißberg“ getötet Ubuntu 24.04 LTS wird offiziell veröffentlicht Vor der offiziellen Veröffentlichung von Fedora Linux 40 Microsoft-Entwickler: Die Leistung von Windows 11 ist „lächerlich schlecht“, Ma Huateng und Zhou Hongyi geben sich die Hand, „beseitigen den Groll“ Namhafte Spielefirmen haben neue Vorschriften erlassen: Hochzeitsgeschenke an Mitarbeiter dürfen 100.000 Yuan nicht überschreiten. Pinduoduo wurde wegen unlauteren Wettbewerbs zu einer Entschädigung von 5 Millionen Yuan verurteiltDieser Artikel wurde zuerst auf Yunyunzhongsheng ( https://yylives.cc/ ) veröffentlicht, jeder ist herzlich willkommen.