Skip to content

fix(aws-eks): EBS CSI driver + default gp3 StorageClass (EKS 1.34 storage gap) - #66

Merged
cmchenr merged 4 commits into
mainfrom
fix/eks-ebs-csi-default-storageclass
Jun 15, 2026
Merged

fix(aws-eks): EBS CSI driver + default gp3 StorageClass (EKS 1.34 storage gap)#66
cmchenr merged 4 commits into
mainfrom
fix/eks-ebs-csi-default-storageclass

Conversation

@cmchenr

@cmchenr cmchenr commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator

Problem

The AWS EKS blueprints build EKS 1.34 clusters that had no working block storage. The only StorageClass is the auto-created gp2 using the legacy in-tree provisioner kubernetes.io/aws-ebs, which no longer exists in 1.34 (nothing provisions it), and it isn't marked default. Only efs.csi.aws.com was registered; the aws-ebs-csi-driver addon was never installed and had no IRSA role. Any PVC-backed workload (e.g. LibreChat's MongoDB/MeiliSearch) hangs Pending.

Fix

  • modules/aws-eks-cluster (shared): EBS CSI IRSA role (kube-system:ebs-csi-controller-sa, attach_ebs_csi_policy) + ebs_csi_role_arn output. Both EKS blueprints inherit it.
  • aws-eks-singlecluster + aws-eks-multicluster (frontend & backend): cluster layers re-export ebs_csi_role_arn; nodes layers add the aws-ebs-csi-driver managed addon (Layer 3, after nodes — same reason CoreDNS lives there) + a default gp3 StorageClass (ebs.csi.aws.com, encrypted, expandable, WaitForFirstConsumer).
  • READMEs updated (layer summaries + deployment order).

Validation

terraform fmt + validate clean on all affected layers. Applied live on aws-eks-singlecluster:

  • addon ACTIVE via the IRSA role; ebs-csi-controller (2×6/6) + ebs-csi-node DaemonSet (3/3) Running
  • gp3 is now the default StorageClass
  • a test PVC (no explicit class) bound to a gp3 PV, provisioned a real EBS volume (vol-0f14aa…), mounted and writable — then cleaned up

Note: two riding-along commits

This branch also carries two local-only commits unrelated to the EBS fix (they existed nowhere else and would otherwise be lost):

  • 08245af docs(secure-enterprise-chat): README standards pass + architecture.svg
  • dbad414 chore: gitignore .worktrees/

🤖 Generated with Claude Code

cmchenr and others added 4 commits June 15, 2026 15:08
EKS 1.34 ships no in-tree kubernetes.io/aws-ebs provisioner, so the
auto-created gp2 StorageClass is non-functional and is not marked default.
Any PVC-backed workload (databases, caches) hangs Pending with no usable
default StorageClass. Surfaced while deploying LibreChat (MongoDB/MeiliSearch)
onto the live cluster.

- shared module (modules/aws-eks-cluster): add EBS CSI IRSA role
  (kube-system:ebs-csi-controller-sa, attach_ebs_csi_policy) + ebs_csi_role_arn output
- aws-eks-singlecluster cluster layer: re-export ebs_csi_role_arn
- aws-eks-singlecluster nodes layer: aws-ebs-csi-driver managed addon
  (deployed in Layer 3 like CoreDNS, needs nodes) + default gp3 StorageClass
  (ebs.csi.aws.com, encrypted, expandable, WaitForFirstConsumer)
- README: reflect new IRSA role + addon/StorageClass in layer summaries

Validated: terraform fmt + validate clean on module, cluster, and nodes layers.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Multicluster already uses the shared aws-eks-cluster module, so it inherits the
EBS CSI IRSA role added there. Mirror the singlecluster fix into both clusters:

- clusters/frontend + clusters/backend: re-export ebs_csi_role_arn
- nodes/frontend + nodes/backend: aws-ebs-csi-driver addon (Layer 3, after nodes)
  + default gp3 StorageClass (ebs.csi.aws.com, encrypted, expandable)
- README: layer summaries + deployment order

Validated: terraform fmt + validate clean on all four layers.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add architecture.svg and reference it (T2.3)
- Add Resources Created section with cost notes (T2.4)
- Reframe StorageClass prereq + PVC troubleshooting: repo EKS blueprints now
  ship a default gp3 StorageClass (EBS CSI), so manual install is only needed
  for externally-built/non-EKS clusters
- Drop superfluous live-test validation-status blockquote (belongs in PR/QA notes)
- Add eksctl IRSA service-account cleanup note (orphan prevention)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@cmchenr
cmchenr merged commit 9aea620 into main Jun 15, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant