Getting: bad option; for several filesystems (e.g. nfs, cifs) when trying to mount azure file share in K8 container

I created a Azure file share and I am able to connect to it using map network drive in my laptop having windows 10. I created a hello-world spring boot application with volume mount configurations for azure file share and trying to deploy in Kubernetes in docker-desktop. But my pod doesn't starts -

hello-world-9d7479c4d-26mv2 0/1 ContainerCreating 0 15s

Here is the error I can see in events when I describe the POD -

Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 9h Successfully assigned default/hello-world-9d7479c4d-26mv2 to docker-desktop Warning FailedMount 9h (x7 over 9h) kubelet, docker-desktop MountVolume.SetUp failed for volume "fileshare-pv" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t cifs -o file_mode=0777,dir_mode=0777,vers=3.0,<masked> // /var/lib/kubelet/pods/425012d1-13ee-4c40-bf40-d2f7ccfe5954/volumes/kubernetes.io~azure-file/fileshare-pv
Output: mount: /var/lib/kubelet/pods/425012d1-13ee-4c40-bf40-d2f7ccfe5954/volumes/kubernetes.io~azure-file/fileshare-pv: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.

Then I updated my Dockerfile to install cifs-utils -

FROM ubuntu:16.04
# Install Java
RUN apt-get update && \ apt-get install -y openjdk-8-jdk && \ apt-get install -y ant && \ apt-get install -y cifs-utils && \ apt-get clean;
ENV PORT 8080
EXPOSE 8080
COPY target/*.jar /opt/app.jar
WORKDIR /opt
CMD ["java", "-jar", "app.jar"]

Still that error doesn't go. I googled a lot for solution but no luck. Is there any limitation in using azure file share with kubernates container in docker-desktop [windows machine]?

Here are my K8 configurations -

secret.yaml

apiVersion: v1
kind: Secret
metadata: name: storage-secret namespace: default
type: Opaque
data: azurestorageaccountname: BASE64-encoded-account-name azurestorageaccountkey: BASE64-encoded-account-key

pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata: name: fileshare-pv labels: usage: fileshare-pv
spec: capacity: storage: 1Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain azureFile: secretName: storage-secret shareName: myshare readOnly: false

pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata: name: fileshare-pvc namespace: default # Set this annotation to NOT let Kubernetes automatically create # a persistent volume for this volume claim. annotations: ""
spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi selector: # To make sure we match the claim with the exact volume, match the label matchLabels: usage: fileshare-pv

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata: name: hello-world namespace: default labels: app: hello-world
spec: replicas: 1 selector: matchLabels: app: hello-world template: metadata: labels: app: hello-world spec: containers: - name: hello-world-pod image: 'hello-world-k8:1.0' volumeMounts: - name: azure mountPath: /azureshare ports: - containerPort: 8080 volumes: - name: azure persistentVolumeClaim: claimName: fileshare-pvc
---
apiVersion: v1
kind: Service
metadata: name: hello-world-service namespace: default
spec: selector: app: hello-world ports: - name: http protocol: TCP port: 8080 targetPort: 8080 type: LoadBalancer

2 Answers

You likely need to install a package that knows how to mount that file system. For NFS this may be nfs-common with Debian/Ubuntu.

sudo apt update && sudo apt install nfs-common -y

2

It happened on my ubuntu server 22.04 LTS machine. Use sudo apt install nfs-common or sudo apt install nfs-utils to resolve it.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like