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
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.