2

我正在尝试将我的部署从 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 访问?

卷.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
4

1 回答 1

2

这里的快速回答是使用EFSReadWriteMany访问模式而不是EBS,因为 EBS 只允许 ReadWriteOnce访问模式

但正如评论中提到的@KKyaw Min Thu L

目前,我正在使用 EFS,但我的老板更喜欢使用 EBS 而不是 EFS。

作为一种解决方法,我建议使用GlusterFS,@Harsh Manvar在这里提出了建议。

正如您提到的具有亲和力和节点选择器的 EBS 卷将停止可扩展性,但是对于 EBS,只有 ReadWriteOnce 才能工作。

分享我的经验,如果您在文件系统上执行许多操作并经常推送和获取文件,则使用 E​​FS 可能会很慢,这会降低应用程序性能。EFS 上的运行速度很慢。

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

媒体上有关于此的教程。

GlusterFS是一个基于连接器的存储系统,即 Gluster 本身不提供存储,但它连接到持久存储并外推存储以使其与 K8 pod 无缝连接。

高级拓扑如下图所述,其中每个运行 kubernetes 节点的 EC2 实例安装一个 EBS 卷。我们在下面设置了 3 个 EC2、EBS、K8 节点。我们使用 3 个 EBS 节点形成一个 glusterfs 集群。然后,我们可以从已安装的 3 个 EBS 卷中定义并划分出几个持久性卷 (pv) PV1、PV2 ... PV5,使其同质且无缝地供 K8 pod 声明。

K8 根据其算法在任何 K8 节点上调度 Pod,Pod 可以通过持久卷声明来声明持久卷。持久卷声明 (pvc) 只不过是一个标签,用于标识 POD 和持久卷之间的连接。根据下图,我们有 POD C 声明 PV1,而 POD A 声明 PV4。

在此处输入图像描述

于 2020-11-25T08:18:50.550 回答