kubernetes-retired / external-storage

[EOL] External storage plugins, provisioners, and helper libraries
Apache License 2.0
2.7k stars 1.6k forks source link

NFS. failed to provision volume with StorageClass #1271

Closed Ufaowl closed 4 years ago

Ufaowl commented 4 years ago

Hello. I'm trying to set up nfs-provisioner and configure StorageClass for my kubernetes cluster. I follow instruction https://github.com/kubernetes-incubator/external-storage/tree/master/nfs. And the result - in logs of nfs-provisioner pod there are errors like:

failed to provision volume with StorageClass "example-nfs": error getting NFS server IP for volume: service SERVICE_NAME=nfs-provisioner is not valid; check that it has for ports map[{111 TCP}:true {111 UDP}:true {2049 TCP}:true {20048 TCP}:true] exactly one endpoint, this pod's IP POD_IP=10.244.0.65

I tried again on brand new cluster with the same result. Steps: From external-storage/nfs directory i run:

[root@local-master nfs]# kubectl apply -f deploy/kubernetes/deployment.yaml 
serviceaccount/nfs-provisioner created
service/nfs-provisioner created
deployment.apps/nfs-provisioner created
[root@local-master nfs]# kubectl apply -f deploy/kubernetes/class.yaml 
storageclass.storage.k8s.io/example-nfs created
[root@local-master nfs]# kubectl apply -f deploy/kubernetes/rbac.yaml 
clusterrole.rbac.authorization.k8s.io/nfs-provisioner-runner created
clusterrolebinding.rbac.authorization.k8s.io/run-nfs-provisioner created
role.rbac.authorization.k8s.io/leader-locking-nfs-provisioner created
rolebinding.rbac.authorization.k8s.io/leader-locking-nfs-provisioner created
[root@local-master nfs]# kubectl apply -f deploy/kubernetes/claim.yaml 
persistentvolumeclaim/nfs created

The error says that there is something wrong with service's endpoints, but there are look fine to me:

[root@local-master nfs]# kubectl describe svc nfs-provisioner 
Name:              nfs-provisioner
Namespace:         default
Labels:            app=nfs-provisioner
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"nfs-provisioner"},"name":"nfs-provisioner","namespace":"...
Selector:          app=nfs-provisioner
Type:              ClusterIP
IP:                10.110.203.231
Port:              nfs  2049/TCP
TargetPort:        2049/TCP
Endpoints:         10.244.0.65:2049
Port:              nfs-udp  2049/UDP
TargetPort:        2049/UDP
Endpoints:         10.244.0.65:2049
Port:              nlockmgr  32803/TCP
TargetPort:        32803/TCP
Endpoints:         10.244.0.65:32803
Port:              nlockmgr-udp  32803/UDP
TargetPort:        32803/UDP
Endpoints:         10.244.0.65:32803
Port:              mountd  20048/TCP
TargetPort:        20048/TCP
Endpoints:         10.244.0.65:20048
Port:              mountd-udp  20048/UDP
TargetPort:        20048/UDP
Endpoints:         10.244.0.65:20048
Port:              rquotad  875/TCP
TargetPort:        875/TCP
Endpoints:         10.244.0.65:875
Port:              rquotad-udp  875/UDP
TargetPort:        875/UDP
Endpoints:         10.244.0.65:875
Port:              rpcbind  111/TCP
TargetPort:        111/TCP
Endpoints:         10.244.0.65:111
Port:              rpcbind-udp  111/UDP
TargetPort:        111/UDP
Endpoints:         10.244.0.65:111
Port:              statd  662/TCP
TargetPort:        662/TCP
Endpoints:         10.244.0.65:662
Port:              statd-udp  662/UDP
TargetPort:        662/UDP
Endpoints:         10.244.0.65:662
Session Affinity:  None
Events:            <none>

Docker - 19.03.5 Kubernetes - 1.17.1

Any thoughts why my provisioner behaves like this?

Ufaowl commented 4 years ago

It's the same error as in https://github.com/kubernetes-incubator/external-storage/issues/1262 I ended up leaving only {111 TCP}:true {111 UDP}:true {2049 TCP}:true {20048 TCP}:true ports in deployment for pod and service and it finally works