具有 GPD 卷的容器虚拟机映像失败并显示 "Failed to get GCE Cloud Provider. plugin.host.GetCloudProvider returned <nil> instead"

Container-VM Image with GPD Volumes fails with "Failed to get GCE Cloud Provider. plugin.host.GetCloudProvider returned <nil> instead"

我目前尝试从 "Container-Optimized Google Compute Engine Images" (https://cloud.google.com/compute/docs/containers/container_vms) to the "Container-VM" Image (https://cloud.google.com/compute/docs/containers/vm-image/#overview) 切换。在我的 containers.yaml 中,我定义了一个卷和一个使用该卷的容器。

apiVersion: v1
kind: Pod
metadata:
  name: workhorse
spec:
  containers:
    - name: postgres
      image: postgres:9.5
      imagePullPolicy: Always
      volumeMounts:
        - name: postgres-storage
          mountPath: /var/lib/postgresql/data
  volumes:
    - name: postgres-storage
      gcePersistentDisk:
        pdName: disk-name
        fsType: ext4

此设置在 "Container-Optimized Google Compute Engine Images" 上运行良好,但在 "Container-VM" 上失败。在日志中,我可以看到以下错误:

May 24 18:33:43 battleship kubelet[629]: E0524 18:33:43.405470 629 gce_util.go:176]
Error getting GCECloudProvider while detaching PD "disk-name":
Failed to get GCE Cloud Provider. plugin.host.GetCloudProvider returned <nil> instead

提前感谢任何提示!

只有当 kubelet 是 运行 且没有 --cloud-provider=gce 标志时才会发生这种情况。除非有什么不同,否则问题取决于 GCP 如何启动容器虚拟机。

请联系google云平台大佬

请注意,如果您在使用 GCE 时发生这种情况:--cloud-provider=gce 标记添加到所有工作程序中的 kubelet。这仅适用于 1.2 集群版本,因为如果我没记错的话,有一个正在进行的 attach/detach 设计针对 1.3 集群 ,它将把这个业务逻辑移出 kubelet

如果有人对这里的 attach/detach 重新设计感兴趣,它是它对应的 github 问题:https://github.com/kubernetes/kubernetes/issues/20262