如何在一个节点上安装 Pv 并在另一个阳极中的 pod 上使用相同的 PV

问题描述 投票:0回答:3

我已将一个 EBS 卷附加到集群中的一个节点,并且我希望无论出现什么 pod,无论它们被调度到哪个节点,都应该使用该 EBS 卷。这可能吗?

我的方法是创建一个挂载到该卷的 PV/PVC,然后在我的 pod 中使用该 PVC,但我不确定它是挂载到 pod 所在的同一主机还是不同的主机。

用于存储类的 YAML

kind: StorageClass
metadata:
  name: local-path
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate
allowVolumeExpansion: true
reclaimPolicy: Delete

PV.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-pv
  labels:
    type: local
spec:
  capacity:
    storage: 200Mi
  storageClassName: local-path
  claimRef:
    namespace: redis
    name: data-redis-0
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/mnt2/data/redis"

PVC.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-redis-0
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi
  storageClassName: local-path

不,当我尝试安排 Pod 时,存储也会安装在同一个节点上

kubernetes kubectl kubernetes-pod persistent-volumes persistent-volume-claims
3个回答
2
投票

您使用的是本地路径,您不能这样做。

PVC 有不同类型的 AccessMount ReadWriteMany、ReadWriteOnce 和 ReadyWriteOnly。

PersistentVolumeClaim (PVC) 是用户的存储请求。它 类似于 Pod。 Pod 消耗节点资源,PVC 消耗 PV 资源。 Pod 可以请求特定级别的资源(CPU 和 记忆)。声明可以请求特定的大小和访问模式(例如,它们 可以挂载 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany,请参阅 访问模式)。

了解更多信息:https://kubernetes.io/docs/concepts/storage/persistent-volumes/

是的,您可以将多个 POD 安装到单个 PVC,但在这种情况下,您必须使用 ReadWriteMany。大多数人将 NFS 或 EFS 用于此类用例。

EBS 是 ReadWriteOnce,因此在您的情况下不可能使用 EBS。您必须使用 NFS 或 EFS。

您可以在后面使用GlusterFs,它将配置EBS卷GlusterFS支持ReadWriteMany,与EFS相比,它会更快,因为它是块存储(SSD)。

对于 ReadWiteMany,您也可以结帐:https://min.io/

在此处查找访问模式详细信息:https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes


0
投票

我已将一个 EBS 卷附加到集群中的一个节点,并且我希望无论出现什么 pod,无论它们被调度到哪个节点,都应该使用该 EBS 卷。这可能吗?

不。一个EBS卷最多只能挂载到一个EC2实例,对应一个Kubernetes节点。在 Kubernetes 术语中,它只允许 ReadWriteOnce 访问模式

您尝试创建的卷似乎是 Redis 实例的后备存储。如果卷一次仅附加到一个 pod,那么这本身并不是问题,但您需要让 Kubernetes 为您管理卷。然后,集群将知道从当前所在的节点分离 EBS 卷,并将其重新附加到具有新 Pod 的节点。设置它是一个集群管理问题,而不是程序员可以做的事情,但应该在 Amazon 的 EKS 管理的 Kubernetes 等环境中为您设置。

在这样的环境下:

  • 不要创建StorageClass;这是集群级别的配置。
  • 不要手动创建PersistentVolume;集群将为您创建它。
  • 您应该能够在 PersistentVolumeClaim 中使用默认的
    storageClass:
  • 您可能应该使用 StatefulSet 为您创建 PersistentVolumeClaim。

举个例子:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
spec:
  volumeClaimTemplates: # automatically creates PersistentVolumeClaims
    - metadata:
        name: data-redis
      spec:
        accessModes: [ReadWriteOnce] # data won't be shared between pods
        resources:
          requests:
            storage: 200Mi
        # default storageClassName:
  template:
    spec:
      containers:
        - name: redis
          volumeMounts:
            - name: data-redis
              mountPath: /data

0
投票

您可以使用来自 https://www.zebware.com/ 的 ZebClient 来完成此操作 只需创建一个具有 zebclient 存储类的 PVC,它就可以在任何节点甚至集群外部的机器中使用。

© www.soinside.com 2019 - 2024. All rights reserved.