Kubernetes NFS卷挂载失败,退出状态为32。

31

我在我的Ubuntu机器上安装了Kubernetes设置。我正在尝试按照此http://kubernetes.io/v1.1/examples/nfs/文档的说明,设置一个nfs卷并将其挂载到容器中。

nfs服务和Pod配置

kind: Service
apiVersion: v1
metadata:
  name: nfs-server
spec:
  ports:
    - port: 2049
  selector:
    role: nfs-server
---
apiVersion: v1
kind: Pod
metadata:
  name: nfs-server
  labels:
    role: nfs-server
spec:
  containers:
    - name: nfs-server
      image: jsafrane/nfs-data
      ports:
        - name: nfs
          containerPort: 2049
      securityContext:
        privileged: true

配置Pod以挂载nfs卷

apiVersion: v1
kind: Pod
metadata:
  name: nfs-web
spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
      volumeMounts:
          # name must match the volume name below
          - name: nfs
            mountPath: "/usr/share/nginx/html"
  volumes:
    - name: nfs
      nfs:
        # FIXME: use the right hostname
        server: 192.168.3.201
        path: "/"
当我运行 kubectl describe nfs-web 时,输出如下,提到无法挂载 NFS 卷。这可能是什么原因?
Name:               nfs-web
Namespace:          default
Image(s):           nginx
Node:               192.168.1.114/192.168.1.114
Start Time:         Sun, 06 Dec 2015 08:31:06 +0530
Labels:             <none>
Status:             Pending
Reason:             
Message:            
IP:             
Replication Controllers:    <none>
Containers:
  web:
    Container ID:   
    Image:      nginx
    Image ID:       
    State:      Waiting
      Reason:       ContainerCreating
    Ready:      False
    Restart Count:  0
    Environment Variables:
Conditions:
  Type      Status
  Ready     False 
Volumes:
  nfs:
    Type:   NFS (an NFS mount that lasts the lifetime of a pod)
    Server: 192.168.3.201
    Path:   /
    ReadOnly:   false
  default-token-nh698:
    Type:   Secret (a secret that should populate this volume)
    SecretName: default-token-nh698
Events:
  FirstSeen LastSeen    Count   From            SubobjectPath   Reason      Message
  ───────── ────────    ─────   ────            ─────────────   ──────      ───────
  36s       36s     1   {scheduler }                Scheduled   Successfully assigned nfs-web to 192.168.1.114
  36s       2s      5   {kubelet 192.168.1.114}         FailedMount Unable to mount volumes for pod "nfs-web_default": exit status 32
  36s       2s      5   {kubelet 192.168.1.114}         FailedSync  Error syncing pod, skipping: exit status 32

相关问题:https://dev59.com/S1kT5IYBdhLWcg3wa-1z#57141195 我在那里给出了一个与Kubernetes相关的答案,因为我认为它更接近问题。 - Bruno Medeiros
7个回答

46

我遇到了同样的问题,通过在每个Kubernetes节点上安装nfs-common解决了它。

apt-get install -y nfs-common

我的节点没有安装nfs-common。Kubernetes将要求每个节点将NFS挂载到特定目录以便Pod使用。由于找不到mount.nfs,挂载过程失败了。

祝好运!


1
在每个Kubernetes节点上安装nfs-common解决了我的问题!谢谢! - RazvanParautiu
2
那么...你是使用自定义的Docker镜像吗?你是在每个节点上使用kubectl exec来安装吗?你是修改清单以确保它在Pod初始化时被安装吗?还是这真的需要在_node_本身上?如果是这样,我想在Mac上使用Docker就没戏了。 - Ambidex
对于任何使用RHEL/CentOS的人,请安装nfs-utils。 - Dunatotatos

1

看起来您的客户端配置中volumes.nfs.server=192.168.3.201设置不正确。应该将其设置为nfs-server服务的ClusterIP地址。


1
我通过在工作节点上安装nfs-utils解决了这个问题。

1
在我的情况下,问题是我没有在/etc/exports文件中声明nfs的主机服务器。在那里为我的主机服务器添加条目后,卷就能正常工作了。
如果您以任何方式修改文件,则需要重新启动服务。
sudo systemctl restart nfs-kernel-server

一个在/etc/exports文件中的条目示例:
/var/nfs/home   192.111.222.333(rw,sync,no_subtree_check)

你说得对!我忘记给NFS服务器添加更多的PVC了。 - nobjta_9x_tq

1

我遇到了与NFS相关的问题,它只允许root挂载。

解决方法如下:

a. 允许非root用户在服务器上挂载NFS。

或者

b. 在PersistentVolume中添加

  mountOptions:
    - nfsvers=4.1

添加mountOptions未解决我的问题。我正在使用AWS EFS。 - alltej
以上内容适用于手动设置Linux NFS服务器。对于EFS,您可以从AWS文档中获取精确的说明。 - Pav K.
编辑 /etc/exports 文件,以启用非 root 用户挂载 NFS 共享路径解决了我的问题。我添加了 no_root_squash。我的配置大致如下:/mnt/storage x.x.x.x (rw,sync,no_root_squash,no_subtree_check) - daniel rubambura

0
在我的情况下,问题是volume hostPath中定义的文件夹在本地未被创建。一旦在工作节点服务器上创建了该文件夹,问题就得到解决。
  Warning  FailedMount  3m18s                 kubelet            Unable to attach or mount volumes: unmounted volumes=[temp-volume], unattached volumes=[nfsvol-vre-data temp1-volume consumer1-serviceaccount-token-sdfsdf nfsvol]: timed out waiting for the condition
  Warning  FailedMount  71s (x10 over 5m20s)  kubelet            MountVolume.SetUp failed for volume "temp-volume" : hostPath type check failed: /tmp/folder is not a directory
  Warning  FailedMount  63s                   kubelet            Unable to attach or mount volumes: unmounted volumes=[temp-volume], unattached volumes=[nfsvol nfsvol-vre-data temp1-volume consumer1-serviceaccount-token-sdfsdf]: timed out waiting for the condition

0
您需要在每个主节点和工作节点上执行以下操作。
sudo yum install nfs-utils -y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接