Beschreibung
Mit dem Trident-Operator und Kubernetes 1.17.6 kann ich persistente Volumes erstellen, sie aber nicht in die Pods einbinden.
Beim Abrufen der Pod-Beschreibung wird folgender Fehler zurückgegeben:
CSINode does not contain driver csi.trident.netapp.io
Umfeld
Reproduzieren
Installieren Sie den Operator wie hier angegeben: https://netapp-trident.readthedocs.io/en/stable-v20.07/kubernetes/deploying/operator-deploy.html
Nach dem Erstellen der Speicherklasse und des Verbrauchers wird das PV gebunden, aber der Pod kann das Volume nicht lokal an den Worker anhängen
Erwartetes Verhalten
Pod sollte das Volume mounten und ausgeführt werden. stattdessen bleibt es einfach in "ausstehend"
Zusätzlicher Kontext
Pod-Beschreibung:
```kubectl -n test beschreibt po web-0
Warnung FailedScheduling 11s (x2 über 12s) Default-Scheduler-Fehler beim Ausführen des „VolumeBinding“-Filter-Plugins für Pod „web-0“: Pod hat ungebundene unmittelbare PersistentVolumeClaims
Normal Scheduled 9s default-scheduler Test/web-0 erfolgreich hh1kbw02x zugewiesen
Warnung FailedAttachVolume
Warnung FailedAttachVolume
Logs from trident on this worker:
kubectl -n trident logs trident-csi-9sgrt -c trident-main -f kubectl -n trident logs trident-csi-9sgrt -c Treiber-Registrar kubectl get csinode hh1kbw02x -n trident -o yaml Kubelet-Protokolle:
time="2020-10-21T17:15:31Z" level=debug msg="n>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > nPUT https://10.111.4.90 :34571/trident/v1/node/hh1kbw02xnHeaders: map[Content-Type:[application/json]]nBody: {n "name": "hh1kbw02x",n "ips": [n "10.49.12.102",n "172.17.0.1"n ]n}n-------------------------------- ----------------------------------"
time="2020-10-21T17:15:32Z" level=debug msg="n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Logs from registrar sidecar on this worker:
I1021 17:14:18.636803 6672 main.go:110] Version: v1.3.0-0-g6e9fff3e
I1021 17:14:18.636888 6672 main.go:120] Versuch, eine gRPC-Verbindung zu öffnen mit: „/plugin/csi.sock“
I1021 17:14:18.636908 6672 connection.go:151] Verbinden mit unix:///plugin/csi.sock
I1021 17:14:18.637420 6672 main.go:127] CSI-Treiber wird aufgerufen, um den Treibernamen zu ermitteln
I1021 17:14:18.637435 6672 connection.go:180] GRPC-Aufruf: /csi.v1.Identity/GetPluginInfo
I1021 17:14:18.637442 6672 connection.go:181] GRPC-Anfrage: {}
I1021 17:14:18.639851 6672 connection.go:183] GRPC-Antwort: {"name":"csi.trident.netapp.io","vendor_version":"20.07.1"}
I1021 17:14:18.640235 6672 connection.go:184] GRPC-Fehler:
I1021 17:14:18.640242 6672 main.go:137] CSI-Treibername: "csi.trident.netapp.io"
I1021 17:14:18.648537 6672 node_register.go:51] Starten des Registrierungsservers unter: /registration/csi.trident.netapp.io-reg.sock
I1021 17:14:18.648666 6672 node_register.go:60] Registrierungsserver gestartet unter: /registration/csi.trident.netapp.io-reg.sock
Description of csi node
apiVersion: storage.k8s.io/v1
Art: CSINode
Metadaten:
ErstellungZeitstempel: 2020-09-10T07:58:40Z
Name: hh1kbw02x
BesitzerReferenzen:
Art: Knoten
Name: hh1kbw02x
uid: d3db28d6-e2be-4ad4-8534-c853b2e025b5
resourceVersion: "30914526"
selfLink: /apis/storage.k8s.io/v1/csinodes/hh1kbw02x
uid: a764977a-be67-4ee9-8b7e-9aac304e0890
Spezifikation:
Treiber: null
6. November 10:14:18 hh1kbw01x kubelet: I1106 10:14:18.883059 2393 reconciler.go:209] operationExecutor.VerifyControllerAttachedVolume gestartet für Volume „pvc-3bcc4e38-2e69-4541-9910-711d2c086671“ (UniqueName: „kubernetes.io/ csi/csi.trident.netapp.io^pvc-3bcc4e38-2e69-4541-9910-711d2c086671") Pod "web-0" (UID: "a235d5f9-05bf-4c77-8a84-e48f2f657d98")
6. November 10:14:18 hh1kbw01x kubelet: E1106 10:14:18.883223 2393 nestedpendingoperations.go:301] Vorgang für "{v olumeName:kubernetes.io/csi/csi.trident.netapp.io ^pvc-3bcc4e38-2e69- 4541-9910-711d2c086671 podName: nodeName:}" fehlgeschlagen. Keine Wiederholungen zulässig bis 2020-11-06 10:14:19.383183856 +0100 CET m=+1353591.737508759 (durationBeforeRetry 500ms). Fehler: „Volume wurde nicht zur Liste von VolumesInUse im Volume-Status des Knotens für Volume „pvc-3bcc4e38-2e69-4541-9910-711d2c086671“ hinzugefügt (UniqueName: „kubernetes.io/csi/csi.trident.netapp.io ^pvc-3bcc4e38-2e69-4541-9910-711d2c086671") Pod "web-0" (UID: "a235d5f9-05bf-4c77-8a84-e48f2f657d98") "
6. November 10:14:18 hh1kbw01x kubelet: I1106 10:14:18.983580 2393 reconciler.go:209] operationExecutor.VerifyControllerAttachedVolume gestartet für Volume „pvc-f138b6cc-988b-455c-bb2e-fce022755634“ (UniqueName: „.io/kubernetes csi/csi.trident.netapp.io^pvc-f138b6cc-988b-455c-bb2e-fce022755634") Pod "web-0" (UID: "a235d5f9-05bf-4c77-8a84-e48f2f657d98")
6. November 10:14:18 hh1kbw01x kubelet: E1106 10:14:18.983662 2393 nestedpendingoperations.go:301] Vorgang für "{v olumeName:kubernetes.io/csi/csi.trident.netapp.io ^pvc-f138b6cc-988b- 455c-bb2e-fce022755634 podName: nodeName:}" fehlgeschlagen. Keine Wiederholungen zulässig bis 2020-11-06 10:14:19.483629729 +0100 MEZ m=+1353591.837954619 (durationBeforeRetry 500ms). Fehler: „Volume wurde nicht zur Liste von VolumesInUse im Volume-Status des Knotens für Volume „pvc-f138b6cc-988b-455c-bb2e-fce022755634“ hinzugefügt (UniqueName: „kubernetes.io/csi/csi.trident.netapp.io ^pvc-f138b6cc-988b-455c-bb2e-fce022755634") Pod "web-0" (UID: "a235d5f9-05bf-4c77-8a84-e48f2f657d98") "
6. November 10:14:19 hh1kbw01x kubelet: I1106 10:14:19.385072 2393 reconciler.go:209] operationExecutor.VerifyControllerAttachedVolume gestartet für Volume „pvc-3bcc4e38-2e69-4541-9910-711d2c086671“ (UniqueName: „kubernetes.io/ csi/csi.trident.netapp.io^pvc-3bcc4e38-2e69-4541-9910-711d2c086671") Pod "web-0" (UID: "a235d5f9-05bf-4c77-8a84-e48f2f657d98")
```
Identisches Problem hier mit Rancher RKE und K8S (v1.18.10) und Knoten, auf denen Ubuntu 18.04.4 LTS mit Docker 19.3.13 ausgeführt wird, stimmt mit der oben angegebenen Umgebung überein ...
dasselbe hier mit Upstream-k8s auf Ubuntu 18.04
Ich konnte es "lösen", indem ich sowohl das Trident-CSI-Daemonset als auch das Deployment erneut bereitstellte und anschließend Kubelet neu startete
ja. Ich habe tridentctl
anstelle des Operators verwendet.
Also habe ich es repariert, wenn ich das sagen darf. Nachdem ich gelesen hatte, wie der externe Speicherprovider funktioniert, und das Konzept der Fahrerregistrierung mit dem Sidecar-Container verstanden hatte, überprüfte ich unser Setup.
Das war sehr irreführend, da wir unsere Kubelets so konfigurieren, dass sie mit den Konfigurationsdateien beginnen, die sich unter /var/lib/kubelet befinden, dem Standard-Root-Verzeichnis.
Vor ein paar Monaten haben wir beschlossen, das Gehirn aufzuteilen und die Hülsen und Behälter an einen separaten Lagerort zu bringen, also haben wir das Management vom Betrieb getrennt
Daher haben wir das Root-Verzeichnis in der Konfigurationsdatei so geändert, dass es auf /containers statt auf /var/lib/kubelet zeigt
Der Standard-Trident-Bereitsteller sucht am Standardspeicherort und "bettet" die Plugins sozusagen ein.
Sie müssen also zwei Dinge überprüfen:
ps aux | grep kubelet | grep -e 'root-dir
-> den konfigurierten Ordner nehmen (in meinem Fall war es /container)apiVersion: trident.netapp.io/v1
kind: TridentProvisioner
metadata:
name: trident
namespace: trident
spec:
debug: true
kubeletDir: /container
Viel Glück. Ich schließe dies.
Ähnliches wurde beobachtet, wenn die trident-csi
Daemonset-Pods nicht mit trident-controller
kommunizieren konnten. In diesem Fall lag es an einer Netzwerkrichtlinie, die dies verhinderte.
Hilfreichster Kommentar
Also habe ich es repariert, wenn ich das sagen darf. Nachdem ich gelesen hatte, wie der externe Speicherprovider funktioniert, und das Konzept der Fahrerregistrierung mit dem Sidecar-Container verstanden hatte, überprüfte ich unser Setup.
Das war sehr irreführend, da wir unsere Kubelets so konfigurieren, dass sie mit den Konfigurationsdateien beginnen, die sich unter /var/lib/kubelet befinden, dem Standard-Root-Verzeichnis.
Vor ein paar Monaten haben wir beschlossen, das Gehirn aufzuteilen und die Hülsen und Behälter an einen separaten Lagerort zu bringen, also haben wir das Management vom Betrieb getrennt
Daher haben wir das Root-Verzeichnis in der Konfigurationsdatei so geändert, dass es auf /containers statt auf /var/lib/kubelet zeigt
Der Standard-Trident-Bereitsteller sucht am Standardspeicherort und "bettet" die Plugins sozusagen ein.
Sie müssen also zwei Dinge überprüfen:
ps aux | grep kubelet | grep -e 'root-dir
-> den konfigurierten Ordner nehmen (in meinem Fall war es /container)apiVersion: trident.netapp.io/v1 kind: TridentProvisioner metadata: name: trident namespace: trident spec: debug: true kubeletDir: /container
Viel Glück. Ich schließe dies.