0

Ich habe eine Kubernetes-Bereitstellung, wo ein Pod sollte ein PD montieren.Kubernetes Bereitstellung kann nicht Volume trotz gleichwertiger gcloud/mnt funktioniert

Unter spec.template.spec.containers.[*] Ich habe dies:

volumeMounts: 
    - name: app-volume 
     mountPath: /mnt/disk/app-pd 

und unter spec.template.spec, die:

volumes: 
    - name: app-volume 
    gcePersistentDisk: 
     pdName: app-pd 
     fsType: ext4 

app-pd ist eine GCE persistente Festplatte mit einem einzigen ext4 Dateisystem (daher keine Partitionen) auf sich. Wenn ich kubectl create laufen bekomme ich diese Fehlermeldungen von kubectl describe pod:

Warning FailedMount Unable to mount volumes for pod "<id>": 
    timeout expired waiting for volumes to attach/mount for pod"<id>"/"default". 
    list of unattached/unmounted volumes=[app-volume] 
Warning FailedSync Error syncing pod, skipping: 
    timeout expired waiting for volumes to attach/mount for pod "<id>"/"default". 
    list of unattached/unmounted volumes=[app-volume] 

Auf der VM-Instanz, die die Kapsel läuft, enthält /var/log/kubelet.log Wiederholungen dieser Fehlermeldungen, die vermutlich in Zusammenhang stehen oder sogar Ursache für die oben:

reconciler.go:179] 
    VerifyControllerAttachedVolume operation started for volume "kubernetes.io/gce-pd/<id>" 
    (spec.Name: "<id>") pod "<id>" (UID: "<id>") 
goroutinemap.go:155] 
    Operation for "kubernetes.io/gce-pd/<id>" failed. 
    No retries permitted until <date> (durationBeforeRetry 2m0s). 
    error: Volume "kubernetes.io/gce-pd/<id>" (spec.Name: "<id>") pod "<id>" (UID: "<id>") 
    is not yet attached according to node status. 

Wenn ich jedoch versuche, das PD an die VM-Instanz anfügen, die den Pod mit gcloud compute instances attach-disk und gcloud compute ssh hinein läuft, kann ich sehen, dass diese die folgende Datei erstellt wurden.

/dev/disk/by-id/google-persistent-disk-1 

Wenn ich es (die PD) mounte, kann ich mit den erwarteten Dateien sehen und arbeiten.

Wie kann ich dieses Problem weiter diagnostizieren und es letztendlich beheben?

Könnte das Problem sein, dass die Datei /dev/disk/google-persistent-disk-1 anstelle von /dev/disk/google-<id> aufgerufen wird, wie würde passieren, wenn ich sie von der Cloud Console UI bereitgestellt hätte?

UPDATE Ich habe das Setup vereinfacht, indem die Plattenformatierung mit einem einzigen ext4 Dateisystem (daher keine Partitionen) und die obige Beschreibung entsprechend bearbeitet. Ich habe auch spezifischere Fehleranzeigen von kubelet.log hinzugefügt.

UPDATE Das Problem bleibt auch, wenn ich das PD (in der Cloud Console UI) vor der Bereitstellung manuell zur Instanz-VM hinzufüge, die den Pod hostet. Sowohl die PD als auch die Instanz-VM befinden sich in derselben Zone.

UPDATE Der beobachtete Unterschied in Block-Gerätenamen für die gleiche persistente Festplatte ist normal gemäß GCE #211.

+0

Scheint auch ähnlich zu Kubernetes [# 28709] (https://github.com/kubernetes/kubernetes/issues/28709). – Drux

Antwort

1

Ich weiß nicht, warum (noch), aber das Löschen und erneute Erstellen des GKE-Clusters vor der Bereitstellung offenbar das Problem gelöst.