NFS卷在kubernetes

时间:2017-11-29 10:14:51

标签: kubernetes nfs

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

为什么会这样?

我在kubernetes docs中看到:

  

nfs卷允许现有的NFS(网络文件系统)共享   安装到你的吊舱。与emptyDir不同,emptyDir是在Pod时删除的   删除后,将保留nfs卷的内容并且卷为   只是没有安装。这意味着可以预先填充NFS卷   使用数据,这些数据可以在pod之间“切换”。 NFS可以   由多个作家同时安装。

我正在使用kubernetes版本1.8.3。

蒙戈-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

蒙戈-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

蒙戈-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主机)中。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我看到你做了nobody:nogroup。 确保您的广告连播上的应用程序运行为void fillArr(vector <student> &arr, vector <student *> &ptrels){ student temp; ifstream inFile ("index.txt"); while (!inFile.eof()) { inFile >> temp.fName >> temp.Lname >> temp.gpa >> temp.id >> temp.email; arr.push_back(temp); ptrels.push_back(&arr.back()); } // combine the two above loops }

答案 2 :(得分:0)

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

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

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