首页 > 解决方案 > Kubernetes 卷类型

问题描述

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

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

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

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

有什么建议么?

标签: kubernetes

解决方案


您可以使用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"

查看本指南以了解如何使用 hostPath。

更好的选择是使用本地卷。

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 是更好的选择。这是有关如何在数字海洋中进行这项工作的指南。


推荐阅读