【问题标题】:NFS volumes are not persistent in kubernetesNFS 卷在 kubernetes 中不是持久的
【发布时间】:2018-05-13 00:16:06
【问题描述】:

我正在尝试将 mongo /data 目录挂载到我的 kubernetes 主机中的 NFS 卷上,以保存 mongo 数据。我看到卷已成功安装,但我只能看到 configdbdb 目录,但看不到它们的子目录。而且我看到数据甚至没有保留在卷中。当我kubectl describe <my_pv> 它显示NFS (an NFS mount that lasts the lifetime of a pod)

为什么会这样?

我在 kubernetes 文档中看到:

nfs 卷允许现有的 NFS(网络文件系统)共享 安装到您的吊舱中。与 emptyDir 不同,后者在 Pod 运行时被擦除 删除,保留 nfs 卷的内容,并且该卷是 只是卸载。这意味着可以预先填充 NFS 卷 有了数据,这些数据可以在 Pod 之间“传递”。 NFS 可以 由多个作者同时挂载。

我使用的是 kubernetes 1.8.3 版。

mongo-deployment.yml:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: mongo
  labels:
    name: mongo
    app: mongo
spec:
  replicas: 3
  selector:
    matchLabels:
      name: mongo
      app: mongo
  template:
    metadata:
      name: mongo
      labels:
        name: mongo
        app: mongo
    spec:
      containers:
        - name: mongo
          image: mongo:3.4.9
          ports:
            - name: mongo
              containerPort: 27017
              protocol: TCP
          volumeMounts:
            - name: mongovol
              mountPath: "/data"
      volumes:
      - name: mongovol
        persistentVolumeClaim:
          claimName: mongo-pvc

mongo-pv.yml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongo-pv
  labels:
    type: NFS
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: "/mongodata"
    server: 172.20.33.81

mongo-pvc.yml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongo-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 3Gi
  storageClassName: slow
  selector:
    matchLabels:
      type: NFS

我在我的 kubernetes 主机上挂载我的 nfs 共享的方式:

1) apt-get install nfs-kernel-server
2) mkdir /mongodata
3) chown nobody:nogroup -R /mongodata
4) vi /etc/exports
5) added the line "/mongodata *(rw,sync,all_squash,no_subtree_check)"
6) exportfs -ra
7) service nfs-kernel-server restart
8) showmount -e ----> shows the share

我登录到我的 pod 的 bash,我看到目录已正确挂载,但数据未保存在我的 nfs 服务器(kubernetes 主机)中。

请帮我看看我在这里做错了什么。

【问题讨论】:

    标签: kubernetes nfs


    【解决方案1】:

    Pod 可能没有创建文件和目录的权限。您可以 exec 到您的 pod 并尝试 touch NFS 共享中的文件,如果您遇到权限错误,您可以放宽文件系统的权限和 exports 文件以允许写入访问。

    可以在 PV 对象中指定GID 以避免权限被拒绝问题。 https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#access-control

    【讨论】:

      【解决方案2】:

      我看到你做了一个chown nobody:nogroup -R /mongodata。 确保您的 pod 上的应用程序以 nobody:nogroup

      运行

      【讨论】:

        【解决方案3】:

        将参数 mountOptions: "vers=4.1" 添加到您的 StorageClass 配置中,这应该可以解决您的问题。

        有关更多信息,请参阅此 Github 评论:

        https://github.com/kubernetes-incubator/external-storage/issues/223#issuecomment-344972640

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-24
          • 2021-01-30
          • 2017-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-07
          • 1970-01-01
          相关资源
          最近更新 更多