AWS EKS 集群存储初始化配置

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

目录

约束与限制

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

  • AL2023 AMI 不支持 A1 系列实例,导致 EBS 块存储插件(Amazon EBS CSI Driver)无法正常部署。EBS CSI 驱动已支持 GA 多架构/ARM,因此限制在于 AMI/实例支持,而非驱动本身。如果需要使用 EBS 块存储类,请避免使用以下实例类型,建议使用 Graviton2/3 替代方案:

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

    推荐替代方案:使用 m6g、c6g、r6g、t4g 等 Graviton2/3 实例系列,提供更佳性能及完整的 EBS CSI 驱动支持。

前提条件

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

  • 若已创建 EKS 集群,则导入 Amazon EKS 集群;若未创建,则创建 AWS EKS 集群。

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

    注意:使用 EFS 文件存储时,请在 EKS 所在地域创建文件存储,并记录 文件系统 ID

配置步骤

创建存储类

  1. 进入 平台管理,点击左侧导航的 存储管理 > 存储类

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

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

    • EFS 文件存储

      注意:将 <File System ID> 替换为实际的 文件系统 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-scebs-sc 旁的三点按钮 > 更新项目

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

相关操作

配置可用存储类参数

  • EFS 文件存储可用参数

    参数可选值默认值可选描述
    az""用于跨账户挂载。指定时,使用与 az 关联的挂载目标进行跨账户挂载;未指定时,随机选择挂载目标进行跨账户挂载。
    basePath动态创建访问点时的路径。未指定时,访问点创建在文件系统根目录下。
    directoryPerms创建 访问点根目录 的目录权限。
    uid创建 访问点根目录 的 POSIX 用户 ID。
    gid创建 访问点根目录 的 POSIX 组 ID。
    gidRangeStart50000创建 访问点根目录 时应用的 POSIX 组 ID 起始范围。若设置了 uid/gid,则不需要此参数。
    gidRangeEnd7000000POSIX 组 ID 结束范围。若设置了 uid/gid,则不需要此参数。
    subPathPattern构造动态创建访问点所在子路径的模板。可由固定字符串和有限变量组成,类似于 nfs-subdir-external-provisioner chart 中的 "subPathPattern" 变量。可选参数包括 .PVC.name、.PVC.namespace 和 .PV.name。
    ensureUniqueDirectorytrue动态创建时使用。设置为 true 时,会在 subPathPattern 指定的模式后追加 UID,确保访问点不会意外指向同一目录。注意:仅当确定需要此行为时才设置为 false。
    provisioningModeefs-apEFS 卷类型,目前支持访问点。
    fileSystemId创建访问点的文件系统 ID。
  • EBS 块存储可用参数

    注意:不同卷类型的性能参数详见 Amazon EBS 卷类型

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