【问题标题】:Kubernetes volume typesKubernetes 卷类型
【发布时间】:2020-08-09 18:57:07
【问题描述】:

我在K8 主服务器上有目录。

我有 20 个 pod(带有部署副本)。

我希望从主目录/path/in/master/infiles 读取所有 pod,并将它们的输出写入同一目录/path/in/master/outfiles,在这种情况下我应该使用哪种卷类型?我希望我的文件在 pod 死后不被删除。

我试图查看以下内容:https://kubernetes.io/docs/concepts/storage/volumes/,但仍然不知道什么是适合我的情况的最佳选择。

有什么建议吗?

【问题讨论】:

  • 如果您的应用程序的关键部分是读取和写入文件,那么 Kubernetes 可能不是最佳技术选择。想象一下这些 Pod 在 8 个不同的节点上运行; 文件如何进出节点?

标签: kubernetes


【解决方案1】:

您可以使用hostPath 音量。

hostPath 卷将文件或目录从主机节点的文件系统挂载到您的 Pod 中。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/path/in/master/infiles"

查看guide,了解如何使用 hostPath。

更好的选择是使用local 音量。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 100Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  local:
    path: "/path/in/master/infiles"
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - example-node

与 hostPath 卷相比,本地卷可以以持久且可移植的方式使用,而无需手动将 Pod 调度到节点,因为系统通过查看 PersistentVolume 上的节点亲和性来了解卷的节点约束。

编辑:

将数据存储在节点本身的文件系统中的问题是无法在节点之间同步数据。如果应用程序需要这样做,那么在 ReadWriteMany(RWX) 模式下使用由 NFS 支持的 PV 是更好的选择。这里是guide,关于如何在数字海洋中进行这项工作。

【讨论】:

  • 我不建议在这里使用hostPath 卷,因为它们会指向每个节点上的不同内容。让集群配置一个持久卷可能会有所帮助,但有 20 个不同的 pod 试图访问相同的文件,它需要是 ReadWriteMany,而且您的实现选择相当有限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多