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.
Scheint auch ähnlich zu Kubernetes [# 28709] (https://github.com/kubernetes/kubernetes/issues/28709). – Drux