Globale Fehlerbehebung Hikube
Dieser Leitfaden behandelt die häufigsten Probleme auf Hikube und deren Lösungen.
1. Allgemeine Diagnose
Bevor Sie nach einer spezifischen Lösung suchen, beginnen Sie mit diesen Diagnosebefehlen:
# Status der Ressourcen in Ihrem Namespace
kubectl get all
# Aktuelle Events (nach Datum sortiert)
kubectl get events --sort-by=.metadata.creationTimestamp
# Detaillierte Beschreibung einer Ressource
kubectl describe <type> <name>
# Logs eines Pods
kubectl logs <pod-name>
# Logs des vorherigen Containers (bei Absturz)
kubectl logs <pod-name> --previous
2. Pods mit Fehlern
CrashLoopBackOff
Symptom: Der Pod startet in einer Schleife neu, der Status zeigt CrashLoopBackOff.
Diagnose:
kubectl describe pod <pod-name>
kubectl logs <pod-name> --previous
Lösungen:
- Unzureichender Arbeitsspeicher: Erhöhen Sie
resources.memoryoder verwenden Sie ein höheresresourcesPreset - Konfigurationsfehler: Überprüfen Sie die Umgebungsvariablen und Konfigurationsdateien in den Logs
- Fehlende Abhängigkeit: Überprüfen Sie, ob die erforderlichen Dienste (Datenbank, Secrets) verfügbar sind
Pending
Symptom: Der Pod bleibt im Status Pending, ohne zu starten.
Diagnose:
kubectl describe pod <pod-name>
# Suchen Sie den Abschnitt "Events" am Ende der Ausgabe
Lösungen:
- Unzureichende Ressourcen: Der Cluster hat nicht genug CPU/Arbeitsspeicher. Überprüfen Sie die verfügbaren Knoten mit
kubectl get nodesundkubectl top nodes - PVC nicht gebunden: Das angeforderte persistente Volume ist nicht verfügbar (siehe Abschnitt Speicher)
- NodeSelector/Affinity: Der Pod hat Platzierungseinschränkungen, die zu keinem Knoten passen
ImagePullBackOff
Symptom: Der Pod startet nicht, der Status zeigt ImagePullBackOff oder ErrImagePull.
Diagnose:
kubectl describe pod <pod-name>
# Suchen Sie "Failed to pull image" in den Events
Lösungen:
- Image nicht gefunden: Überprüfen Sie den Namen und das Tag des Images in Ihrem Manifest
- Private Registry: Stellen Sie sicher, dass ein
imagePullSecretkonfiguriert ist - Netzwerkproblem: Überprüfen Sie die Konnektivität zur Registry
OOMKilled
Symptom: Der Pod wird mit dem Exit-Code 137 und dem Grund OOMKilled beendet.
Diagnose:
kubectl describe pod <pod-name>
# Suchen Sie "Last State: Terminated - Reason: OOMKilled"
Lösungen:
- Erhöhen Sie das Arbeitsspeicher-Limit in
resources.memoryoder wechseln Sie zu einem höherenresourcesPreset - Überprüfen Sie, ob die Anwendung ein Speicherleck hat, indem Sie den Verbrauch mit
kubectl top podbeobachten
3. Cluster-Zugang
Ungültige Kubeconfig
Symptom: error: You must be logged in to the server (Unauthorized)
Diagnose:
# Verwendete kubeconfig-Datei überprüfen
echo $KUBECONFIG
kubectl config current-context
Lösungen:
- Generieren Sie die kubeconfig aus Ihrem Hikube-Cluster neu:
kubectl get secret <cluster-name>-admin-kubeconfig \
-o go-template='{{ printf "%s\n" (index .data "super-admin.conf" | base64decode) }}' \
> my-cluster-kubeconfig.yaml
export KUBECONFIG=my-cluster-kubeconfig.yaml - Überprüfen Sie, ob die Variable
KUBECONFIGauf die richtige Datei zeigt
Abgelaufenes Zertifikat
Symptom: Unable to connect to the server: x509: certificate has expired
Diagnose:
kubectl config view --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}' | base64 -d | openssl x509 -text -noout | grep -A2 Validity
Lösung: Rufen Sie eine aktuelle kubeconfig aus dem Secret des Clusters ab (siehe oben).
Verbindung abgelehnt
Symptom: The connection to the server was refused
Diagnose:
# Konnektivität testen
kubectl cluster-info
Lösungen:
- Überprüfen Sie, ob der Cluster im Status
Readyist:kubectl get kubernetes <cluster-name> - Überprüfen Sie, ob die Control Plane von Ihrem Netzwerk aus erreichbar ist
- Wenn Sie ein VPN verwenden, stellen Sie sicher, dass es aktiv ist
4. Speicher
PVC im Status Pending
Symptom: Das PVC bleibt im Status Pending und abhängige Pods starten nicht.
Diagnose:
kubectl get pvc
kubectl describe pvc <pvc-name>
Lösungen:
- Ungültige StorageClass: Überprüfen Sie, ob die angegebene
storageClassexistiert mitkubectl get storageclass - Unzureichende Kapazität: Reduzieren Sie die angeforderte Grösse oder kontaktieren Sie den Support zur Erhöhung der Kontingente
- Leere StorageClass: Wenn
storageClass: "", wird die Standardklasse verwendet. Versuchen Sie explizitstorageClass: replicated
Unzureichender Festplattenspeicher
Symptom: Pods stürzen ab mit Fehlern vom Typ No space left on device.
Diagnose:
# PVC-Nutzung überprüfen
kubectl exec -it <pod-name> -- df -h
Lösungen:
- Erhöhen Sie den Wert von
sizeim Manifest und wenden Sie es erneut an - Löschen Sie unnötige Daten (Logs, temporäre Dateien)
5. Netzwerk
Dienst nicht erreichbar
Symptom: Verbindung zum Dienst von aussen oder zwischen Pods nicht möglich.
Diagnose:
# Überprüfen, ob der Dienst existiert und einen Endpoint hat
kubectl get svc
kubectl get endpoints <service-name>
# Konnektivität von einem Pod aus testen
kubectl run test-net --image=busybox --rm -it -- wget -qO- http://<service-name>:<port>
Lösungen:
- Kein Endpoint: Die Labels des
selectordes Dienstes stimmen mit keinem Pod überein - External nicht aktiviert: Fügen Sie
external: trueim Manifest hinzu, um einen LoadBalancer zu erstellen - Falscher Port: Überprüfen Sie, ob der Port des Dienstes mit dem von der Anwendung exponierten Port übereinstimmt
DNS wird nicht aufgelöst
Symptom: Could not resolve host beim Zugriff auf einen Dienst über seinen Namen.
Diagnose:
# Cluster-DNS überprüfen
kubectl run test-dns --image=busybox --rm -it -- nslookup <service-name>
# CoreDNS-Pods überprüfen
kubectl get pods -n kube-system -l k8s-app=kube-dns
Lösungen:
- Verwenden Sie den vollständigen DNS-Namen:
<service>.<namespace>.svc.cluster.local - Überprüfen Sie, ob die CoreDNS-Pods im Status
Runningsind
Ingress gibt 404 oder 502 zurück
Symptom: Die Ingress-URL gibt einen Fehler 404 (Not Found) oder 502 (Bad Gateway) zurück.
Diagnose:
kubectl describe ingress <ingress-name>
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller
Lösungen:
- 404: Überprüfen Sie, ob
pathundhostdes Ingress mit Ihrer Konfiguration übereinstimmen - 502: Der Backend-Dienst antwortet nicht. Überprüfen Sie, ob die Backend-Pods im Status
Runningsind und der Port korrekt ist - Fehlende IngressClass: Fügen Sie
ingressClassName: nginxin der Ingress-Spec hinzu
6. Datenbanken
Verbindung abgelehnt
Symptom: Connection refused beim Verbindungsversuch zur Datenbank.
Diagnose:
# Status der Datenbank-Pods überprüfen
kubectl get pods | grep <datenbank-name>
# Services überprüfen
kubectl get svc | grep <datenbank-name>
Lösungen:
- Überprüfen Sie, ob die Datenbank-Pods im Status
Runningsind - Überprüfen Sie die Zugangsdaten:
kubectl get secret <name>-auth -o json | jq -r '.data | to_entries[] | "\(.key): \(.value|@base64d)"' - Wenn
external: false, verwenden Siekubectl port-forwardfür eine lokale Verbindung
Replikationsverzögerung
Symptom: Die Replicas haben eine erhebliche Replikationsverzögerung gegenüber dem Master.
Diagnose:
# Redis - Replikation überprüfen
kubectl exec -it rfr-redis-<name>-0 -- redis-cli -a "$REDIS_PASSWORD" INFO replication
# PostgreSQL - Verzögerung überprüfen
kubectl exec -it <name>-1 -- psql -c "SELECT * FROM pg_stat_replication;"
Lösungen:
- Erhöhen Sie die Ressourcen (CPU/Arbeitsspeicher) der Replicas
- Überprüfen Sie die Netzwerklast zwischen den Rechenzentren
- Reduzieren Sie die Schreiblast, wenn die Verzögerung anhält
Failover wird nicht ausgelöst
Symptom: Der Master ist ausgefallen, aber kein Replica wird befördert.
Diagnose:
# Redis - Sentinel überprüfen
kubectl exec -it rfs-redis-<name>-<id> -- redis-cli -p 26379 SENTINEL masters
# Events überprüfen
kubectl get events --sort-by=.metadata.creationTimestamp | grep <datenbank-name>
Lösungen:
- Überprüfen Sie, ob
replicas > 1im Manifest gesetzt ist (Failover erfordert mindestens ein Replica) - Überprüfen Sie, ob die Sentinel-Pods (Redis) oder der Operator im Status
Runningsind - Konsultieren Sie die Logs des Operators auf Fehler
7. Messaging (NATS, RabbitMQ)
Produzent/Konsument getrennt
Symptom: Clients verlieren die Verbindung zum Message-Broker.
Diagnose:
# Status der Broker-Pods überprüfen
kubectl get pods | grep <nats|rabbitmq>
# Logs überprüfen
kubectl logs <broker-pod-name>
Lösungen:
- Überprüfen Sie, ob die Broker-Pods im Status
Runningsind - Implementieren Sie eine automatische Reconnect-Logik auf Client-Seite
- Überprüfen Sie die konfigurierten Verbindungslimits
Verlorene Nachrichten
Symptom: Gesendete Nachrichten werden von den Konsumenten nie empfangen.
Diagnose:
# RabbitMQ - Queues überprüfen
kubectl exec -it <rabbitmq-pod> -- rabbitmqctl list_queues name messages consumers
# NATS - JetStream-Streams überprüfen
kubectl exec -it <nats-pod> -- nats stream ls
Lösungen:
- RabbitMQ: Verwenden Sie Quorum Queues, um die Dauerhaftigkeit der Nachrichten zu gewährleisten
- NATS: Aktivieren Sie JetStream für die Nachrichtenpersistenz
- Überprüfen Sie, ob die Konsumenten verbunden und aktiv sind
- Stellen Sie sicher, dass die Queues/Subjects existieren, bevor Sie Nachrichten senden