无法在Kubernetes Pod上装载NFS

bvjveswy  于 2023-02-15  发布在  Kubernetes
关注(0)|答案(2)|浏览(240)

我正在Kubernetes minikube集群上部署Hyperledger Fabric测试网络。我打算使用PersistentVolume在各个对等方和订购方之间共享cytpo-config和通道构件。以下是我的PersistentVolume.yaml和PersistentVolumeClaime.yaml

  1. kind: PersistentVolume
  2. apiVersion: v1
  3. metadata:
  4. name: persistent-volume
  5. spec:
  6. capacity:
  7. storage: 1Gi
  8. accessModes:
  9. - ReadWriteMany
  10. nfs:
  11. path: "/nfsroot"
  12. server: "3.128.203.245"
  13. readOnly: false
  14. kind: PersistentVolumeClaim
  15. apiVersion: v1
  16. metadata:
  17. name: persistent-volume-claim
  18. spec:
  19. accessModes:
  20. - ReadWriteOnce
  21. resources:
  22. requests:
  23. storage: 1Gi

以下是装载上述声明的Pod/data

  1. kind: Pod
  2. apiVersion: v1
  3. metadata:
  4. name: test-shell
  5. labels:
  6. name: test-shell
  7. spec:
  8. containers:
  9. - name: shell
  10. image: ubuntu
  11. command: ["/bin/bash", "-c", "while true ; do sleep 10 ; done"]
  12. volumeMounts:
  13. - mountPath: "/data"
  14. name: pv
  15. volumes:
  16. - name: pv
  17. persistentVolumeClaim:
  18. claimName: persistent-volume-claim

NFS已在我的EC2示例上设置。我已验证NFS服务器工作正常,并且我能够将其装载到minikube中。我不知道我做错了什么,但www.example.com中存在的任何文件3.128.203.245:/nfsroot都不在test-shell:/data中
我错过了什么。我甚至尝试了hostPath挂载,但无济于事。请帮助我。

oyt4ldly

oyt4ldly1#

我认为您应该检查以下内容,以验证NFS是否已成功装载
1.在要装载的节点上运行此命令。

    • 一月一日**

就像我的例子**$showmount -e 172.16.10.161导出www.example.com的列表:/opt/share 172.16.10.161: /opt/share *
1.使用
$df -hT命令,查看是否已装载NFS,是否与我的情况不同,它将给出输出172.16.10.161:/opt/share nfs4 91G 32G 55G 37% /opt/share
*
1.如果未安装,请使用以下命令

    • 一米四分一秒**

1.如果以上命令显示错误,则检查防火墙是否允许NFS

    • 一个月五个月一个月**

1.如果没有,则允许使用以下命令

    • 一米六米一x**

我做了同样的设置,但没有遇到任何问题。My k8s cluster of fabric is running successfully。hf k8s yaml文件可以在我的GitHub repo中找到。在那里,我在超级账本结构上部署了银行联盟,这是一个动态的多主机区块链网络,意味着你可以在现有运行的区块链网络中添加组织、节点、加入节点、创建通道、安装和示例化链码。

展开查看全部
neskvpey

neskvpey2#

默认情况下,minikube中的默认StorageClass应为:
每个StorageClass包含字段provisioner、parameters和reclaimPolicy,当属于该类的PersistentVolume需要动态预配置时使用这些字段。
例如,NFS不提供内部预配置程序,但可以使用外部预配置程序。也有第三方存储供应商提供自己的外部预配置程序的情况。
Change the default StorageClass
在你的例子中,这个属性可能会导致一些问题。为了在minikube中列出已启用的插件,请使用:

  1. minikube addons list

要列出群集中的所有StorageClass,请使用:

  1. kubectl get sc
  2. NAME PROVISIONER
  3. standard (default) k8s.io/minikube-hostpath

请注意,最多只能将一个StorageClass标记为默认值。如果将其中两个或多个标记为默认值,则无法创建未显式指定storageClassName的PersistentVolumeClaim。
在您的示例中,最有可能的情况是您已经有default StorageClass。应用这些资源会导致:创建新的PV(没有StoraglClass),创建新的PVC(引用现有的默认StorageClass)。在这种情况下,您的自定义pv/pvc绑定之间没有引用)作为示例,请查看:

  1. kubectl get pv,pvc,sc
  2. NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
  3. persistentvolume/nfs 3Gi RWX Retain Available 50m
  4. persistentvolume/pvc-8aeb802f-cd95-4933-9224-eb467aaa9871 1Gi RWX Delete Bound default/pvc-nfs standard 50m
  5. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
  6. persistentvolumeclaim/pvc-nfs Bound pvc-8aeb802f-cd95-4933-9224-eb467aaa9871 1Gi RWX standard 50m
  7. NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
  8. storageclass.storage.k8s.io/standard (default) k8s.io/minikube-hostpath Delete Immediate false 103m

此示例将不起作用,原因如下:

      • 已创建新的持久卷/nfs**(不引用pvc)
      • 已使用默认StorageClass创建了新的持久卷/pvc-8aeb802f-cd95 - 4933 - 9224-eb467aaa9871**。在"声明"部分,我们可以注意到,由于动态pv预配使用默认StorageClass并引用默认/pvc-nfs声明(persistentvolumeclaim/pvc-nfs),因此创建了此pv。

溶液1。

从评论中得到的信息来看:
我也可以在我的minikube和我的实际ubuntu系统中连接到它。我你可以从minikube主机内部挂载这个nfs共享
如果您已将nfs共享挂载到minikube节点,请尝试直接从pod使用此示例和hostpath卷:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: test-shell
  5. namespace: default
  6. spec:
  7. volumes:
  8. - name: pv
  9. hostPath:
  10. path: /path/shares # path to nfs mount point on minikube node
  11. containers:
  12. - name: shell
  13. image: ubuntu
  14. command: ["/bin/bash", "-c", "sleep 1000 "]
  15. volumeMounts:
  16. - name: pv
  17. mountPath: /data

溶液2。

如果您使用PV/PVC方法:

  1. kind: PersistentVolume
  2. apiVersion: v1
  3. metadata:
  4. name: persistent-volume
  5. spec:
  6. capacity:
  7. storage: 1Gi
  8. accessModes:
  9. - ReadWriteOnce
  10. storageClassName: "" # Empty string must be explicitly set otherwise default StorageClass will be set / or custom storageClassName name
  11. nfs:
  12. path: "/nfsroot"
  13. server: "3.128.203.245"
  14. readOnly: false
  15. claimRef:
  16. name: persistent-volume-claim
  17. namespace: default
  18. apiVersion: v1
  19. kind: PersistentVolumeClaim
  20. metadata:
  21. name: persistent-volume-claim
  22. namespace: default
  23. spec:
  24. accessModes:
  25. - ReadWriteOnce
  26. resources:
  27. requests:
  28. storage: 1Gi
  29. storageClassName: "" # Empty string must be explicitly set otherwise default StorageClass will be set / or custom storageClassName name
  30. volumeName: persistent-volume

注:
如果未引用任何与StorageClass关联的预配程序,则可能需要与卷类型相关的帮助程序来使用群集中的PersistentVolume。在本示例中,PersistentVolume的类型为NFS,并且需要帮助程序/sbin/mount. nfs来支持NFS文件系统的装载。
请记住,在创建PVC时,kubernetespersistent-controller会尝试将PVC与正确的pv绑定。在此过程中,将考虑不同的因素,例如:* * 存储类名**(默认/自定义)、访问模式声明引用卷名。在这种情况下,您可以使用:* * 持久性卷规格声明参考名称:持久卷请求****持久卷请求规范卷名称:持续体积**
注:
控制平面可以将PersistentVolumeClaims绑定到群集中匹配的PersistentVolumes。但是,如果您希望PVC绑定到特定PV,则需要预先绑定它们。
通过在PersistentVolumeClaim中指定PersistentVolume,您可以声明该特定PV和PVC之间的绑定。如果PersistentVolume存在并且没有通过其claimRef字段保留PersistentVolumeClaim,则PersistentVolume和PersistentVolumeClaim将被绑定。
无论某些卷匹配标准(包括节点关联)如何,绑定都会发生。控制平面仍然会检查存储类、访问模式和请求的存储大小是否有效。
创建PV/pvc后,或者如果PV/pvc绑定出现任何问题,请使用以下命令来确定当前状态:

  1. kubectl get pv,pvc,sc
  2. kubectl describe pv
  3. kubectl describe pvc
  4. kubectl describe pod
  5. kubectl get events
展开查看全部

相关问题