尽管等效 gcloud/mnt 工作正常,但 Kubernetes 部署无法挂载卷

Kubernetes deployment cannot mount volume despite equivalent gcloud/mnt works fine

我有一个 Kubernetes 部署,其中 pod 应该挂载 PD。

spec.template.spec.containers.[*]下我有这个:

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

spec.template.spec 下:

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

app-pd 是一个 GCE 永久磁盘,上面有一个 ext4 文件系统(因此没有分区)。如果我 运行 kubectl create 我从 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]

在 运行 作为 pod 的 VM 实例上,/var/log/kubelet.log 包含这些错误消息的重复,这些错误消息可能与以上内容相关甚至导致:

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.

但是,如果我尝试将 PD 附加到 运行 带有 gcloud compute instances attach-diskgcloud compute ssh 的 pod 的 VM 实例,我可以看到以下内容文件已创建。

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

如果我安装它(PD),我可以看到并使用预期的文件。

如何进一步诊断这个问题并最终解决它?

问题可能是文件被称为 /dev/disk/google-persistent-disk-1 而不是 /dev/disk/google-<id> 如果我从云控制台安装它们会发生什么 UI?

UPDATE 我通过使用单个 ext4 文件系统(因此没有分区)格式化磁盘来简化设置,并相应地编辑上面的描述。我还添加了来自 kubelet.log.

的更具体的错误指示

UPDATE 如果我在部署到将托管 pod 的实例 VM 之前手动添加 PD(在 Cloud Console UI 中),问题仍然存在。 PD和实例VM都在同一个可用区。

UPDATE 根据 GCE #211.

,观察到同一永久性磁盘的块设备名称差异是正常的

我还不知道为什么,但在部署之前删除并重新创建 GKE 集群显然解决了这个问题。