get: bad option;当尝试在K8容器中挂载azure文件共享时,对于几个文件系统(例如nfs, cifs).



我创建了一个Azure文件共享,我可以在我的windows 10笔记本电脑上使用地图网络驱动器连接到它。我创建了一个hello-world spring引导应用程序,它带有用于azure文件共享的卷挂载配置,并试图在docker-desktop中部署到Kubernetes中。但是我的pod不启动-

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

当我描述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> //mystorage.file.core.windows.net/myshare /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.

然后我更新了我的Dockerfile来安装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"]

这个错误仍然没有消失。我在谷歌上搜索了很多解决方案,但没有运气。在docker-desktop [windows机器]中使用azure文件共享与kuberates容器有任何限制吗?

这是我的K8配置-

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:
volume.beta.kubernetes.io/storage-class: ""
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

您可能需要安装一个知道如何挂载该文件系统的包。对于NFS,这可能是NFS -在Debian/Ubuntu中很常见。

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

它发生在我的ubuntu服务器22.04 LTS机器上。用sudo apt install nfs-commonsudo apt install nfs-utils解决

最新更新