Meistern Sie die Fehlerbehebung bei KUBERNETES POD: Erweiterte Strategien und Szenarien

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.

Dieser Artikel wurde zuerst auf Yunyunzhongsheng ( https://yylives.cc/ ) veröffentlicht, jeder ist herzlich willkommen.

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 verurteilt
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/6919515/blog/11054466
Empfohlen
Rangfolge