亚马逊AWS官方博客

New – AWS Fargate for Amazon EKS now supports Amazon EFS

AWS Fargate 是一项无服务器计算引擎,可用于 Amazon Elastic Kubernetes Service (EKS) 和 Amazon Elastic Container Service (ECS) 同时支持的容器。使用 Fargate,开发人员能够专注于构建应用程序,无需管理与基础设施相关的无差别繁重工作。

开发人员为每个 Kubernetes Pod 指定资源,只需为预配置的计算资源付费。使用 Fargate 时,每个 EKS Pod 都会运行自己的内核运行时环境,从来不与其他 Pod 分享 CPU、内存、存储和网络资源,从而提供工作负载隔离和提高安全性。

容器具有临时性。它们可以动态缩小和扩展,且他们保存的状态或数据会在退出时清除。自 2019 年推出 EKS 对 Fargate 的支持以来,我们对客户对容器化应用程序的数据持久性和共享存储提出了很多要求,并于 2020 年 4 月宣布对在 ECS上的 Fargate 提供 Amazon Elastic File System(EFS) 支持。现在,很多客户都在其上运行有状态的工作负载,而另一些则在与 EKS 一起使用时请求使用 Fargate 支持 EFS。今天,我们很高兴地宣布推出这项 EFS 支持。

EFS 提供了一个简单、可扩展的完全托管型共享文件系统,以与 AWS 云服务结合使用,并且还可以帮助保持 Kubernetes 应用程序的高可用性,因为写入 EFS 的所有数据也写入到多个 AWS 可用区中。EFS 专为按需的 PB 级增长设计,而不会中断应用程序,并且会随着文件的添加和删除而自动增大和缩小,从而无需预配置和管理容量以适应增长。EFS 接入点也非常适用于安全敏感型工作负载,因为它可以加密文件系统中的数据传输中的数据

Kubernetes 支持“容器存储接口 (CSI)”,它是一种向容器化工作负载公开数据块和文件存储系统的标准。EFS CSI 驱动程序可以简单地为 Kubernetes 集群配置弹性文件存储,在此更新之前,客户可以通过连接到集群的 Amazon EC2 工作节点使用 EFS。现在,客户还可以配置他们在 Fargate 上运行的 Pod,以便使用标准的 Kubernetes API 访问 EFS 文件系统。通过此更新,客户可以运行需要高可用性文件系统的由状态工作负载,以及需要访问共享存储的工作负载。使用 EFS CSI 驱动程序,会默认加密传输中的所有数据。

我们于 2020 年 7 月发布了适用于 EKS 的 Amazon EFS CSI 驱动程序正式版本。Amazon EFS CSI 驱动程序使您能够使用标准的 Kubernetes 界面轻松地为 AWS 上运行的 EKS 和自行管理 Kubernetes 集群配置弹性文件存储。如果 Kubernetes Pod 被终止并重新启动,CSI 驱动程序将重新连接 EFS 文件系统,即使该 Pod 在不同的 AWS 可用区中重新启动。 使用标准的 EC2 工作节点时,EFS CSI 驱动程序需要作为一组 Pod 和 DaemonSet 进行部署。有了这次新的更新,Fargate 不再需要此步骤,且您不需要安装 EFS CSI 驱动程序,因为它安装在 Fargate 堆栈中,并且对 EFS 的支持立即可用。客户可以将 EFS 与适用于 EKS 的 Fargate 结合使用,而无需花费时间和资源来安装和更新 CSI 驱动程序。

如何配置 Fargate/EKS 和 EFS 集成?

您需要使用三个 Kubernetes 设置来将 EFS 安装到 EKS 上的 Farfgate 中。他们是 StorageClassPersistentVolume (PV) 和 PersistentVolumeClaim (PVC)。配置 StorageClass 和 PV 是管理员(或类似人员)为使 EFS 文件系统可供应用程序开发人员使用而执行的步骤。PVC 用于根据需要从现有 PV 池中分配 PV 以部署应用程序。

StorageClass 对象为 Kubernetes 管理员提供登记特定存储类型(例如 EFS 或 EBS)和配置(例如吞吐量、备份策略)的一种方式。一旦定义了 StorageClass,PV 对象即可用于创建该类别中的实际存储卷。StorageClass 和 PV 是 Kubernetes 机制,可用于将实际存储子系统从 Kubernetes 用户使用它们的方式中抽象并解耦出来。例如,虽然 Kubernetes 管理员需要知道如何准确地从特定存储服务中配置特定的存储配置,但 Kubernetes 用户不会这样做,因为他们只能在抽象存储类中看到他们的卷。

最后一步是绑定:Kubernetes 用户通过 PVC 对象和相关 API 请求访问上述卷。这些卷可以在用户通过 PVC 请求它们时动态创建,或者需要由管理员静态地预先创建,以供 Kubernetes 用户以后使用。当前实施 EFS CSI 驱动程序时,需要静态地预先创建卷才能使 PVC 绑定工作。

如果您没有使用过 Kubernetes 永久卷并希望详细了解它们的工作原理,请访问 Kubernetes 文档中的此页面,以了解全部详细信息。

我们来了解一下实际操作。首先,您需要在同一个 AWS 区域中创建自己的 EFS 文件系统。如果您不熟悉 EFS,本 EFS 入门指南将会是一个很好的资源,供您开始使用。

创建 EFS 文件系统后,您将获取文件系统 ID。您可以使用 Kubernetes StorageClass 和 PersistentVolume 来配置挂载设置。以下是 YAML 文件的示例:

CSIDriver 对象

apiVersion: storage.k8s.io/v1beta1
kind: CSIDriver
metadata:
  name: efs.csi.aws.com
spec:
  attachRequired: false

现在,您需要将上面显示的 EFS CSIDriver 对象添加到您的集群中,以便 Kubernetes 可以发现 Fargate 自动安装的驱动程序。将来,此清单将默认添加到 EKS 集群中。

存储类别

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com

PersistentVolume(PV)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: efs-sc
  csi:
    driver: efs.csi.aws.com
    volumeHandle: <EFS filesystem ID>

当您创建文件系统时,EFS 服务会返回 volumeHandle,并且您需要使用它来配置 CSI 驱动程序以创建该 PV。您可以从 AWS 管理控制台中获取 EFS filesystem ID,或者通过 AWS CLI 获取以下命令。

aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text

现在,您已经通过应用上述清单创建了 PV,您可以配置 Kurbenetes Pod 配置以访问 EFS 文件系统,方法是在 Pod 清单中包含一个 PersistentVolumeClaim。下面是用于此操作的两个清单示例:

PersistentVolumeClaim(PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: efs-sc
  resources:
    requests:
      storage: 5Gi

Pod 清单

apiVersion: v1
kind: Pod
metadata:
  name: app1
spec:
  containers:
  - name: app1 image: busybox command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /data/out1.txt; sleep 5; done"]
    volumeMounts:
    - name: persistent-storage
      mountPath: /data
  volumes:
  - name: persistent-storage
    persistentVolumeClaim:
      claimName: efs-claim

现已推出

今天,此功能更新适用于具有 Kubernetes 版本 1.17 的新创建的 EKS 集群,我们计划在未来几周内通过在 EKS 上增加更多 Kubernetes 版本推出对此功能的支持。此更新已在提供 Fargate with EKS 的所有 AWS 区域推出。您可以查看我们的最新文档以了解更多详细信息。

– Kame;