gpt4 book ai didi

docker - 在 kubernetes/k8s StatefulSet 中使用 nfs/efs 作为 PersistentVolume 和普通卷有什么区别?

转载 作者:行者123 更新时间:2023-12-03 14:35:30 28 4
gpt4 key购买 nike

我试图在我们的 k8s 集群上安装一个 Cassandra 有状态集。我们想要将 AWS EFS 安装到所有 Cassandra pod。在配置卷的过程中,我发现我们有两种声明卷的方法。

  1. 创建 EFS,安装 efs-provisioner (一个 persistentVolume provisioner 插件)在我们的集群上,使用 EFS-provisioner 创建一个 PersistentVolume,并使用 volumeClaimTemplates(我认为它实际上意味着 persistentVolumeClaimTemplates,我不知道为什么他们忽略 pod 模板中的持久性前缀)。像这样:
apiVersion: v1
kind: Pod
metadata:
name: hello-openshift-nfs-pod
labels:
name: hello-openshift-nfs-pod
spec:
containers:
- name: hello-openshift-nfs-pod
image: openshift/hello-openshift
ports:
- name: web
containerPort: 80
volumeMounts:
- name: nfsvol
mountPath: /usr/share/nginx/html
securityContext:
supplementalGroups: [100003]
privileged: false
volumes:
- name: nfsvol
persistentVolumeClaim:
claimName: nfs-pvc

(来自 article 的代码)

  1. 或者我可以将 EFS 直接安装到我的 Cassandra pod 上:
apiVersion: v1
kind: Pod
metadata:
name: hello-openshift-nfs-pod
labels:
name: hello-openshift-nfs-pod
spec:
containers:
- name: hello-openshift-nfs-pod
image: openshift/hello-openshift
ports:
- name: web
containerPort: 80
volumeMounts:
- name: nfsvol
mountPath: /usr/share/nginx/html
securityContext:
supplementalGroups: [100003]
privileged: false
volumes:
- name: cassandra-shared-volume
nfs:
server: <EFS file system endpoint url>
path: "/cassandra/shared"

所以对我来说,方法 1 就像将 nfs(在本例中为 EFS)包装在一个 persistentVolume 中。我不知道方法 1 的主要好处是什么,尽管它几乎是每个团队使用 nfs 的方式。 efs-provisioner FAQ 有一个简短的回答:他们说

I noticed the EFS gets mounted directly to the efs-provisioner container, can I do that for my apps?Yes you can but it's not recommended. You lose the reusability of the StorageClass to be able to dynamically provision new PersistentVolumes for new containers and pods.

这个答案很好,但我想知道 persistentVolume 背后是否有任何暗示,而不是单独的 volume。有 StatefulSet 文档说:

The storage for a given Pod must either be provisioned by a PersistentVolume Provisioner based on the requested storage class, or pre-provisioned by an admin.

所以我想知道s StatefulSet是否必须有一个存储类型:PersistentVolume。主要冲突是,与 block 存储不同,EFS 本身是持久的,它的动态扩展能力已经由 AWS 处理,不需要 persistentVolumeProvisioner 来创建新资源。

我想知道我必须使用方法 1 的方法 1 的主要优点或方法 2 的缺陷吗?

最佳答案

使用 SAN 和网络文件系统(如 EFS)是 not recommended for Cassandra一般来说,由于性能问题。根据工作流的不同,您可以通过临时(实例)存储与 EBS 获得可接受的性能,如所述here .

添加容器层并没有阻止这些问题,此时我们正在进行类似的概念验证设置写密集型场景,并且我们已经能够使用 i3 实例和临时存储获得一些可接受的性能PersistentVolumes 定义,但这还不是一个明确的回应,因为我们继续为我们的目的寻找正确的配置。

关于docker - 在 kubernetes/k8s StatefulSet 中使用 nfs/efs 作为 PersistentVolume 和普通卷有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57915270/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com