Gol*_*den 8 kubernetes persistent-volumes aws-ebs
我想在AWS上设置PVC,在此我需要将其ReadWriteMany
作为访问模式。不幸的是,EBS仅支持ReadWriteOnce
。
我该如何解决?
ReadWriteMany
,但是如上所述,它仍然是beta,并且其安装看起来有些不稳定。ReadWriteOnce
,但这会限制可伸缩性。还有其他解决方法吗?基本上,我需要的是一种持久存储数据的方法,以便在彼此独立的pod之间共享数据。
hel*_*ert 11
EFS设置程序可以是beta,但EFS本身不是。由于可以通过NFS挂载EFS卷,因此您可以简单地PersistentVolume
手动使用NFS卷源创建一个-假设对您而言,自动配置并不是硬性要求:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-efs-volume
spec:
capacity:
storage: 100Gi # Doesn't really matter, as EFS does not enforce it anyway
volumeMode: Filesystem
accessModes:
- ReadWriteMany
mountOptions:
- hard
- nfsvers=4.1
- rsize=1048576
- wsize=1048576
- timeo=600
- retrans=2
nfs:
path: /
server: fs-XXXXXXXX.efs.eu-central-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用来声明此卷的大小,PersistentVolumeClaim
并照常在Pod(或多个Pod)中使用它。
如果对您而言自动配置非常困难,那么您可以考虑以下替代解决方案:您可以在集群中部署多个分布式文件系统,这些系统ReadWriteMany
在Kubernetes和/或AWS之上提供存储。例如,您可以看一下Rook(它基本上是Ceph的Kubernetes运算符)。它也正式处于预发布阶段,但是我已经对其进行了一些操作,并且运行得相当好。还有一个GlusterFS运算符,它似乎已经有一些稳定的发行版。
您可以使用Amazon EFS创建具有ReadWriteMany
访问模式的PersistentVolume 。
Amazon EKS于 2019 年 9 月 19 日宣布支持 Amazon EFS CSI 驱动程序,这使得使用标准 Kubernetes 接口为在 AWS 上运行的 EKS 和自我管理的 Kubernetes 集群配置弹性文件存储变得简单。
在 Kubernetes 中运行的应用程序可以使用 EFS 文件系统在横向扩展组中的 Pod 之间共享数据,或者与在 Kubernetes 内部或外部运行的其他应用程序共享数据。
EFS 还可以帮助 Kubernetes 应用程序实现高可用性,因为写入 EFS 的所有数据都会写入多个 AWS 可用区。如果 Kubernetes Pod 终止并重新启动,CSI 驱动程序将重新连接 EFS 文件系统,即使 Pod 在不同的 AWS 可用区中重新启动也是如此。
您可以按照EKS-EFS-CSI 用户指南将 Amazon EFS CSI 驱动程序部署到 Amazon EKS 集群,基本上如下所示:
步骤 1:部署 Amazon EFS CSI 驱动程序
kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"
Run Code Online (Sandbox Code Playgroud)
注意:此命令需要 1.14 或更高版本的 kubectl。
步骤 2:为您的 Amazon EKS 集群创建一个 Amazon EFS 文件系统
步骤 2.1:创建一个安全组,允许您的 Amazon EFS 挂载点的入站 NFS 流量。
步骤 2.2:向您的安全组添加规则以允许来自您的 VPC CIDR 范围的入站 NFS 流量。
步骤 2.3:创建使用您刚刚创建的安全组配置的 Amazon EFS 文件系统。
现在,您可以ReadWriteMany
在具有以下示例清单文件的 EKS Kubernetes 项目中使用具有访问模式的EFS :
1. efs-storage-class.yaml:创建存储类
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
Run Code Online (Sandbox Code Playgroud)
kubectl apply -f efs-storage-class.yaml
2. efs-pv.yaml : 创建 PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: ftp-efs-pv
spec:
storageClassName: efs-sc
persistentVolumeReclaimPolicy: Retain
capacity:
storage: 10Gi # Doesn't really matter, as EFS does not enforce it anyway
volumeMode: Filesystem
accessModes:
- ReadWriteMany
csi:
driver: efs.csi.aws.com
volumeHandle: fs-642da695
Run Code Online (Sandbox Code Playgroud)
注意:您需要将 volumeHandle 值替换为您的 Amazon EFS 文件系统 ID。
3. efs-pvc.yaml : 创建 PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ftp-pv-claim
labels:
app: ftp-storage-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: efs-sc
Run Code Online (Sandbox Code Playgroud)
应该是这样。您需要参考上述官方用户指南以获得详细说明,您还可以在其中找到示例应用程序来验证您的设置。
归档时间: |
|
查看次数: |
3121 次 |
最近记录: |