我已将一个 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 时,存储也会安装在同一个节点上
您使用的是本地路径,您不能这样做。
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
我已将一个 EBS 卷附加到集群中的一个节点,并且我希望无论出现什么 pod,无论它们被调度到哪个节点,都应该使用该 EBS 卷。这可能吗?
不。一个EBS卷最多只能挂载到一个EC2实例,对应一个Kubernetes节点。在 Kubernetes 术语中,它只允许 ReadWriteOnce 访问模式。
您尝试创建的卷似乎是 Redis 实例的后备存储。如果卷一次仅附加到一个 pod,那么这本身并不是问题,但您需要让 Kubernetes 为您管理卷。然后,集群将知道从当前所在的节点分离 EBS 卷,并将其重新附加到具有新 Pod 的节点。设置它是一个集群管理问题,而不是程序员可以做的事情,但应该在 Amazon 的 EKS 管理的 Kubernetes 等环境中为您设置。
在这样的环境下:
storageClass:
。举个例子:
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
您可以使用来自 https://www.zebware.com/ 的 ZebClient 来完成此操作 只需创建一个具有 zebclient 存储类的 PVC,它就可以在任何节点甚至集群外部的机器中使用。