In diesem Thema werden Schritte erläutert, mit denen Sie Probleme mit dem Cassandra-Datenspeicher beheben können. Cassandra ist ein nichtflüchtiger Datenspeicher, der in der Komponente cassandra
der Hybridlaufzeitarchitektur ausgeführt wird.
Weitere Informationen finden Sie unter Laufzeitdienst-Konfiguration – Übersicht.
Cassandra-Pods verbleiben im Status "Ausstehend"
Symptom
Nach dem Start verbleiben die Cassandra-Pods im Status Ausstehend.
Fehlermeldung
Wenn Sie den Pod-Status mit kubectl
aufrufen, sehen Sie, dass ein oder mehrere Cassandra-Pods im Status Pending
verbleiben. Der Status Pending
gibt an, dass Kubernetes den Pod auf einem Knoten nicht planen kann: Der Pod kann nicht erstellt werden. Beispiel:
kubectl get pods -n namespace
NAME READY STATUS RESTARTS AGE
adah-resources-install-4762w 0/4 Completed 0 10m
apigee-cassandra-default-0 0/1 Pending 0 10m
...
Mögliche Ursachen
Ein Pod, der im Status "Ausstehend" verbleibt, kann mehrere Ursachen haben. Beispiel:
Ursache | Beschreibung |
---|---|
Unzureichende Ressourcen | Es ist nicht genügend CPU oder Arbeitsspeicher zum Erstellen des Pods verfügbar. |
Volume nicht erstellt | Der Pod wartet auf die Erstellung des nichtflüchtigen Volumes. |
Fehlender Amazon EBS CSI-Treiber | Der erforderliche Amazon EBS CSI-Treiber ist nicht installiert. |
Diagnose
Verwenden Sie kubectl
, um den Pod zu beschreiben und die Ursache des Fehlers zu ermitteln. Beispiel:
kubectl -n namespace describe pods pod_name
Beispiel:
kubectl describe pods apigee-cassandra-default-0 -n apigee
Die Ausgabe kann eines der folgenden möglichen Probleme anzeigen:
- Wenn unzureichende Ressourcen das Problem sind, wird eine Warnmeldung angezeigt, dass die CPU oder der Arbeitsspeicher nicht ausreicht.
- Wenn in der Fehlermeldung darauf hingewiesen wird, dass der Pod ungebundene sofortige PersistentVolumeClaims (PVC) hat, kann der Pod kein nichtflüchtiges Volume erstellen.
Lösung
Unzureichende Ressourcen
Ändern Sie den Cassandra-Knotenpool so, dass er über ausreichende CPU- und Speicherressourcen verfügt. Weitere Informationen finden Sie unter Größe eines Knotenpools anpassen.
Kein nichtflüchtiges Volume erstellt
Wird ein Problem mit einem nichtflüchtigen Volume festgestellt, so beschreiben Sie den PVC (PersistentVolumeClaim), um festzustellen, warum er nicht erstellt wird:
- Listen Sie die PVCs im Cluster auf:
kubectl -n namespace get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE cassandra-data-apigee-cassandra-default-0 Bound pvc-b247faae-0a2b-11ea-867b-42010a80006e 10Gi RWO standard 15m ...
- Beschreiben Sie den PVC für den Pod, der fehlschlägt. Mit dem folgenden Befehl wird beispielsweise der PVC beschrieben, der an den Pod
apigee-cassandra-default-0
gebunden ist:kubectl -n apigee describe pvc cassandra-data-apigee-cassandra-default-0 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 3m (x143 over 5h) persistentvolume-controller storageclass.storage.k8s.io "apigee-sc" not found
Beachten Sie, dass in diesem Beispiel die StorageClass namens
apigee-sc
nicht vorhanden ist. Erstellen Sie zum Beheben dieses Problems die fehlende StorageClass im Cluster, wie unter Standard-StorageClass ändern beschrieben.
Weitere Informationen finden Sie unter Pods debuggen.
Fehlender Amazon EBS CSI-Treiber
Wenn die Hybridinstanz in einem EKS-Cluster ausgeführt wird, achten Sie darauf, dass der EKS-Cluster den CSI-Treiber (Container Storage Interface) von Amazon EBS verwendet. Weitere Informationen finden Sie unter Häufig gestellte Fragen zur Migration von Amazon EBS CSI.
Cassandra-Pods verbleiben im CrashLoopBackoff-Status
Symptom
Während des Starts verbleiben die Cassandra-Pods im Status CrashLoopBackoff.
Fehlermeldung
Wenn Sie den Pod-Status mit kubectl
aufrufen, sehen Sie, dass sich ein oder mehrere Cassandra-Pods im Status CrashLoopBackoff
befinden.
Dieser Status gibt an, dass Kubernetes den Pod nicht erstellen kann. Beispiel:
kubectl get pods -n namespace
NAME READY STATUS RESTARTS AGE
adah-resources-install-4762w 0/4 Completed 0 10m
apigee-cassandra-default-0 0/1 CrashLoopBackoff 0 10m
...
Mögliche Ursachen
Ein Pod, der im Status CrashLoopBackoff
verbleibt, kann mehrere Ursachen haben. Beispiel:
Ursache | Beschreibung |
---|---|
Rechenzentrum unterscheidet sich vom vorherigen Rechenzentrum | Dieser Fehler weist darauf hin, dass der Cassandra-Pod ein nichtflüchtiges Volume mit Daten aus einem vorherigen Cluster hat und die neuen Pods dem alten Cluster nicht mehr beitreten können. Dies geschieht in der Regel, wenn veraltete nichtflüchtige Volumes vom vorherigen Cassandra-Cluster auf demselben Kubernetes-Knoten erhalten bleiben. Dieses Problem kann auftreten, wenn Sie Cassandra im Cluster löschen und neu erstellen. |
Truststore-Verzeichnis nicht gefunden | Dieser Fehler zeigt an, dass der Cassandra-Pod keine TLS-Verbindung herstellen kann. Dies ist in der Regel der Fall, wenn die bereitgestellten Schlüssel und Zertifikate ungültig, fehlen oder andere Probleme sind. |
Diagnose
Prüfen Sie das Cassandra-Fehlerlog, um die Ursache des Problems zu ermitteln.
- Listen Sie die Pods auf, um die ID des Cassandra-Pods zu erhalten, der fehlschlägt:
kubectl get pods -n namespace
- Prüfen Sie das Log des fehlerhaften Pods:
kubectl logs pod_id -n namespace
Lösung
Suchen Sie die folgenden Hinweise im Log des Pods:
Rechenzentrum unterscheidet sich vom vorherigen Rechenzentrum
Wenn dieser Logeintrag angezeigt wird:
Cannot start node if snitch's data center (us-east1) differs from previous data center
- Prüfen Sie, ob der Cluster veraltete oder alte PVCs enthält und löschen Sie diese.
- Wenn es sich um eine Neuinstallation handelt, löschen Sie alle PVCs und wiederholen die Einrichtung. Beispiel:
kubectl -n namespace get pvc
kubectl -n namespace delete pvc cassandra-data-apigee-cassandra-default-0
Truststore-Verzeichnis nicht gefunden
Wenn dieser Logeintrag angezeigt wird:
Caused by: java.io.FileNotFoundException: /apigee/cassandra/ssl/truststore.p12 (No such file or directory)
Prüfen Sie den Schlüssel und die Zertifikate korrekt und gültig sind, sofern sie in der Überschreibungsdatei angegeben sind. Beispiel:
cassandra: sslRootCAPath: path_to_root_ca-file sslCertPath: path-to-tls-cert-file sslKeyPath: path-to-tls-key-file
Client-Container zur Fehlerbehebung erstellen
In diesem Abschnitt wird erläutert, wie Sie einen Client-Container erstellen, über den Sie auf Cassandra-Debugging-Dienstprogramme wie cqlsh
zugreifen können. Diese Dienstprogramme können zum Abfragen von Cassandra-Tabellen und für Fehlerbehebungszwecke nützlich sein.
Client-Container erstellen
So erstellen Sie den Client-Container:
- Der Container verwendet das TLS-Zertifikat aus dem Pod
apigee-cassandra-user-setup
. Der erste Schritt besteht darin, diesen Zertifikatsnamen abzurufen:kubectl get secrets -n apigee --field-selector type=kubernetes.io/tls | grep apigee-cassandra-user-setup | awk '{print $1}'
Dieser Befehl gibt den Zertifikatsnamen zurück. Beispiel:
apigee-cassandra-user-setup-rg-hybrid-b7d3b9c-tls
. - Öffnen Sie eine neue Datei und fügen Sie folgende Pod-Spezifikation in diese ein:
apiVersion: v1 kind: Pod metadata: labels: name: cassandra-client-name # For example: my-cassandra-client namespace: apigee spec: containers: - name: cassandra-client-name image: "gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra-client:1.8.8" imagePullPolicy: Always command: - sleep - "3600" env: - name: CASSANDRA_SEEDS value: apigee-cassandra-default.apigee.svc.cluster.local - name: APIGEE_DML_USER valueFrom: secretKeyRef: key: dml.user name: apigee-datastore-default-creds - name: APIGEE_DML_PASSWORD valueFrom: secretKeyRef: key: dml.password name: apigee-datastore-default-creds volumeMounts: - mountPath: /opt/apigee/ssl name: tls-volume readOnly: true volumes: - name: tls-volume secret: defaultMode: 420 secretName: your-secret-name # For example: apigee-cassandra-user-setup-rg-hybrid-b7d3b9c-tls restartPolicy: Never
- Speichern Sie die Datei mit der Erweiterung
.yaml
. Beispiel:my-spec.yaml
- Wenden Sie die Spezifikation auf Ihren Cluster an:
kubectl apply -f your-spec-file.yaml -n apigee
- Melden Sie sich beim Container an:
kubectl exec -n apigee cassandra-client -it -- bash
- Stellen Sie mit dem folgenden Befehl eine Verbindung zur Cassandra-Schnittstelle
cqlsh
her. Geben Sie den Befehl genau so ein:cqlsh ${CASSANDRA_SEEDS} -u ${APIGEE_DML_USER} -p ${APIGEE_DML_PASSWORD} --ssl
Client-Pod löschen
Verwenden Sie diesen Befehl, um den Cassandra-Client-Pod zu löschen:
kubectl delete pods -n apigee cassandra-client
Weitere Informationen
Einführung in Apigee- und Apigee Hybrid-Playbooks