我正在尝试将部署从Minikube平台迁移到AWS中的KOPS集群。 在我的部署中,我有多个共享同一个pvc(持久卷声明)的Pod。
因此,当这些Pod在不同节点(不同实例)上运行时,从KOPS集群中的不同Pod访问ebs pvc会遇到问题。例如-我有3个Pod和2个节点。假设pod1在node1上运行,而pod2&pod3在node2上运行。将pod1附加到ebs pvc后,pod2&pod3将无法附加ebs pvc。
如何使ebs pvc可从AWS的kops集群中不同节点上运行的不同Pod访问?
volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: media-volume
spec:
storageClassName: gp2-manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
fsType: ext4
volumeID: <volumeID>
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: media-volume-claim
spec:
storageClassName: gp2-manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
答案 0 :(得分:1)
这里的快速答案是使用 EFS 和ReadWriteMany
访问模式,而不是 EBS ,因为EBS只允许ReadWriteOnce {{3 }}。
但是正如@KKyaw Min Thu L在评论中提到的
当前,我正在使用EFS,但是老板更喜欢使用EBS而不是EFS。
为此,我建议使用access mode,这是@Harsh Manvar GlusterFS的建议。
正如您提到的那样,具有亲和力和节点选择器的EBS卷将停止可伸缩性,但是对于EBS,只有ReadWriteOnce可以工作。
分享我的经验,如果您在文件系统上执行许多操作并频繁推入和提取文件,那么使用EFS可能会很慢,这可能会降低应用程序性能。 EFS的运行速度很慢。
但是,您可以在后面使用GlusterF,以配置EBS卷。 GlusterFS还支持ReadWriteMany ,因为它是块存储(SSD),因此与EFS相比,速度更快。
在媒体上有here。
GlusterFS 是基于连接器的存储系统,即gluster本身不提供存储,但是它连接到持久存储并外推存储以使其与K8容器无缝连接。
高级拓扑如下图所示,其中每个运行kubernetes节点的EC2实例都安装一个EBS卷。我们在下面有3个EC2,EBS,K8节点设置。我们使用3个EBS节点形成一个glusterfs集群。然后,我们可以在3个已安装的EBS体积中定义并切出几个持久体积(pv)PV1,PV2…PV5,从而使其对于K8吊舱的索取而言是同质且无缝的。
K8根据其在任何K8节点上的算法调度pod,并且pod可以通过持久卷声明来声明持久卷。持久卷声明(pvc)只是标识POD和持久卷之间的连接的标签。根据下图,POD C声明PV1,POD A声明PV4。