title: Kubernetes: Failed to get GCE GCECloudProvider with error <nil>
body: <p>I have set up a custom kubernetes cluster on GCE using kubeadm. I am trying to use StatefulSets with persistent storage.</p>
  
  <p>I have the following configuration:</p>
  
  <pre><code>kind: StorageClass
  apiVersion: storage.k8s.io/v1
  metadata:
    name: gce-slow
  provisioner: kubernetes.io/gce-pd
  parameters:
    type: pd-standard
    zones: europe-west3-b
  ---
  apiVersion: apps/v1
  kind: StatefulSet
  metadata:
    name: myname
    labels:
      app: myapp
  spec:
    serviceName: myservice
    replicas: 1
    selector:
      matchLabels:
        app: myapp
    template:
      metadata:
        labels:
          app: myapp
      spec:
        containers:
          - name: mycontainer
            image: ubuntu:16.04
            env:
            volumeMounts:
            - name: myapp-data
              mountPath: /srv/data
        imagePullSecrets:
        - name: sitesearch-secret
    volumeClaimTemplates:
    - metadata:
        name: myapp-data
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: gce-slow
        resources:
          requests:
            storage: 1Gi
  </code></pre>
  
  <p>And I get the following error:</p>
  
  <pre><code>Nopx@vm0:~$ kubectl describe pvc
   Name:          myapp-data-myname-0
   Namespace:     default
   StorageClass:  gce-slow
   Status:        Pending
   Volume:
   Labels:        app=myapp
   Annotations:   volume.beta.kubernetes.io/storage-provisioner=kubernetes.io/gce-pd
   Finalizers:    [kubernetes.io/pvc-protection]
   Capacity:
   Access Modes:
   Events:
     Type     Reason              Age   From                         Message
     ----     ------              ----  ----                         -------
     Warning  ProvisioningFailed  5s    persistentvolume-controller  Failed to provision volume 
   with StorageClass "gce-slow": Failed to get GCE GCECloudProvider with error &lt;nil&gt;
  </code></pre>
  
  <p>I am treading in the dark and do not know what is missing. It seems logical that it doesn't work, since the provisioner never authenticates to GCE. Any hints and pointers are very much appreciated.</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>I Tried the solution <a href="https://stackoverflow.com/questions/37421540/container-vm-image-with-gpd-volumes-fails-with-failed-to-get-gce-cloud-provider">here</a>, by editing the config file in kubeadm with <code>kubeadm config upload from-file</code>, however the error persists. The kubadm config looks like this right now:</p>
  
  <pre><code>api:
    advertiseAddress: 10.156.0.2
    bindPort: 6443
    controlPlaneEndpoint: ""
  auditPolicy:
    logDir: /var/log/kubernetes/audit
    logMaxAge: 2
    path: ""
  authorizationModes:
  - Node
  - RBAC
  certificatesDir: /etc/kubernetes/pki
  cloudProvider: gce
  criSocket: /var/run/dockershim.sock
  etcd:
    caFile: ""
    certFile: ""
    dataDir: /var/lib/etcd
    endpoints: null
    image: ""
    keyFile: ""
  imageRepository: k8s.gcr.io
  kubeProxy:
    config:
      bindAddress: 0.0.0.0
      clientConnection:
        acceptContentTypes: ""
        burst: 10
        contentType: application/vnd.kubernetes.protobuf
        kubeconfig: /var/lib/kube-proxy/kubeconfig.conf
        qps: 5
      clusterCIDR: 192.168.0.0/16
      configSyncPeriod: 15m0s
      conntrack:
        max: null
        maxPerCore: 32768
        min: 131072
        tcpCloseWaitTimeout: 1h0m0s
        tcpEstablishedTimeout: 24h0m0s
      enableProfiling: false
      healthzBindAddress: 0.0.0.0:10256
      hostnameOverride: ""
      iptables:
        masqueradeAll: false
        masqueradeBit: 14
        minSyncPeriod: 0s
        syncPeriod: 30s
      ipvs:
        minSyncPeriod: 0s
        scheduler: ""
        syncPeriod: 30s
      metricsBindAddress: 127.0.0.1:10249
      mode: ""
      nodePortAddresses: null
      oomScoreAdj: -999
      portRange: ""
      resourceContainer: /kube-proxy
      udpIdleTimeout: 250ms
  kubeletConfiguration: {}
  kubernetesVersion: v1.10.2
  networking:
    dnsDomain: cluster.local
    podSubnet: 192.168.0.0/16
    serviceSubnet: 10.96.0.0/12
  nodeName: mynode
  privilegedPods: false
  token: ""
  tokenGroups:
  - system:bootstrappers:kubeadm:default-node-token
  tokenTTL: 24h0m0s
  tokenUsages:
  - signing
  - authentication
  unifiedControlPlaneImage: ""
  </code></pre>
  
  <p><strong>Edit</strong></p>
  
  <p>The issue was resolved in the comments thanks to Anton Kostenko. The last edit coupled with <code>kubeadm upgrade</code> solves the problem.</p>