AWS EKS 集群存储初始化配置

平台与 AWS EKS 集成及存储初始化配置。

约束和限制

  • 默认的 efs-sc 文件存储类在挂载后可能不支持修改权限,这可能导致 PostgreSQL 和 Jenkins 等某些应用无法正常运行。

  • A1 系列实例不受 AL2023 AMI 支持,因此 EBS 块存储插件(Amazon EBS CSI Driver)无法正常部署。EBS CSI driver 已正式提供多架构/ARM 支持,因此限制在于 AMI/实例支持,而非驱动程序本身。如果需要使用 EBS 块存储类,请避免使用以下实例类型,并考虑改用 Graviton2/3 实例:

    • a1.medium
    • a1.large
    • a1.xlarge
    • a1.2xlarge
    • a1.4xlarge

    推荐替代方案:使用 m6g、c6g、r6g、t4g 等 Graviton2/3 实例系列,它们性能更佳,并且完全支持 EBS CSI driver。

先决条件

  • 确保已安装 kubectl 和 AWS CLI 工具。

  • 如果已创建 EKS 集群,请导入 Amazon EKS 集群;如果尚未创建,请创建 AWS EKS 集群。

  • 在 EKS 集群中部署 EFS 文件存储插件 Amazon EFS CSI Driver 和 EBS 块存储插件 Amazon EBS CSI Driver。

    注意:如果使用 EFS 文件存储,请在 EKS 地域中创建文件存储,并记录 File System 中的 File System ID。

配置步骤

创建存储类

  1. 前往平台管理,然后在左侧导航中点击存储管理 > 存储类。

  2. 点击创建存储类旁边的下拉菜单 > 从 YAML 创建。

  3. 根据需要,将以下内容添加到 YAML 文件中以创建默认存储类。文件存储的默认存储类名称为 efs-sc,块存储的默认存储类名称为 ebs-sc。

    • EFS 文件存储

      注意:将 <File System ID> 替换为实际的 File System ID,例如 fileSystemId: fs-05aef9e1edd309f2b。

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: efs-sc
      provisioner: efs.csi.aws.com
      parameters:
        provisioningMode: efs-ap
        fileSystemId: <File System ID>  
        directoryPerms: "755"
    • EBS 块存储

      allowVolumeExpansion: true
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: ebs-sc
      provisioner: ebs.csi.aws.com
      reclaimPolicy: Delete
      volumeBindingMode: WaitForFirstConsumer
  4. 点击创建。

    注意:如果默认存储类不满足要求,请按照上述步骤创建新的存储类,并根据需要修改参数。请参阅可用存储类参数。

修改存储类项目分配

  1. 在左侧导航中,点击存储管理 > 存储类。

  2. 点击名为 efs-sc 或 ebs-sc 的存储类旁边的三个点 > 更新项目。

  3. 根据需要选择项目分配方式,然后点击更新,将存储类分配给项目。

相关操作

配置可用存储类参数

  • EFS 文件存储可用参数

    参数可选值默认值可选描述
    az""true用于跨账户挂载。如果指定,则使用与 az 关联的挂载目标进行跨账户挂载;如果未指定,则随机选择一个挂载目标进行跨账户挂载。
    basePathtrue用于创建动态预置访问点的路径。如果未指定,则在文件系统根目录下创建访问点。
    directoryPermsfalse创建访问点根目录时使用的目录权限。
    uidtrue创建访问点根目录时使用的 POSIX 用户 ID。
    gidtrue创建访问点根目录时使用的 POSIX 组 ID。
    gidRangeStart50000true创建访问点根目录时应用的 POSIX 组 ID 范围起始值。如果已设置 uid/gid,则无需设置。
    gidRangeEnd7000000truePOSIX 组 ID 范围的结束值。如果已设置 uid/gid,则无需设置。
    subPathPatterntrue用于构造子路径的模板,每个通过动态预置创建的访问点都位于此路径下。可由固定字符串和有限变量组成,类似于 nfs-subdir-external-provisioner chart 中的 "subPathPattern" 变量。可选参数为 .PVC.name、.PVC.namespace 和 .PV.name。
    ensureUniqueDirectorytruetrue在启用动态预置时使用。设为 true 时,会将 UID 附加到 subPathPattern 中指定的模式,以确保访问点不会意外指向同一目录。注意:只有在确定这是所需行为时,才将其设为 false。
    provisioningModeefs-apfalseEFS 卷类型,目前支持访问点。
    fileSystemIdfalse已创建访问点的文件系统 ID。
  • EBS 块存储可用参数

    注意:有关不同卷类型的性能参数,请参阅 Amazon EBS Volume Types。

    参数可选值默认值描述
    "allowAutoIOPSPerGBIncrease"true, falsefalse设为 "true" 时,如果 iopsPerGB * <volume size> 过低,无法满足 AWS 支持的 IOPS 范围,则 CSI 驱动程序会提高卷的 IOPS。这样可确保即使用户指定的 PVC 容量或 iopsPerGB 值过小,动态预置仍始终成功;但由于此类卷的 IOPS 高于 iopsPerGB 所需值,可能会产生额外费用。
    "blockExpress"true, falsefalse通过将 io2 卷的 IOPS 限制提高到 256000 来创建 io2 Block Express 卷,但在不支持 io2 Block Express 的实例上无法挂载 IOPS 超过 64000 的卷。
    "blockSize"格式化底层文件系统时使用的块大小。仅适用于使用 ext2、ext3、ext4 或 xfs 文件系统类型的 Linux 节点。
    "bytesPerINode"格式化底层文件系统时使用的每个 inode 的字节数。仅适用于使用 ext2、ext3 或 ext4 文件系统类型的 Linux 节点。
    "csi.storage.k8s.io/fstype"xfs, ext2, ext3, ext4ext4创建卷时要格式化的文件系统类型。区分大小写。
    "encrypted"true, falsefalse是否需要加密卷。
    "inodeSize"格式化底层文件系统时使用的 inode 大小。仅适用于使用 ext2、ext3、ext4 或 xfs 文件系统类型的 Linux 节点。inode 是文件系统中的数据结构,用于存储文件和目录的元数据。
    "iops"每秒 I/O 操作数,适用于 IO1、IO2 和 GP3 卷。
    "iopsPerGB"每 GiB 每秒的 I/O 操作数,适用于 IO1、IO2 和 GP3 卷。
    "kmsKeyId"用于加密卷的密钥完整 ARN。如果未指定,AWS 会使用卷所在地域的默认 KMS 密钥,并自动生成名为 /aws/ebs 的密钥。
    "numberOfINodes"格式化底层文件系统时指定的 inode 数量。仅适用于使用 ext2、ext3 或 ext4 文件系统类型的 Linux 节点。
    "throughput"125吞吐量,单位为 MiB/s。仅在指定 gp3 卷类型时有效。如果为空,则默认为 125 MiB/s。请参阅 Amazon EBS Volume Types。
    "type"io1, io2, gp2, gp3, sc1, st1, standard, sbp1, sbg1gp3EBS 卷类型。