Terraform通过Helm部署EFS CSI Driver遇超时错误,求配置指导
Terraform+Helm部署EFS CSI Driver超时问题解决
问题描述
尝试通过Terraform使用Helm安装EFS CSI Driver时,遇到「context deadline exceeded」超时错误,以下是部署用的Terraform代码片段:
resource "helm_release" "test_aws_efs_controller" { name = "aws-efs-csi-driver" repository = "https://kubernetes-sigs.github.io/aws-efs-csi-driver/" chart = "aws-efs-csi-driver" namespace = "${var.project_name}-${var.environment_name}-microservices" version = "2.2.0" set { name = "clusterName" value = var.test_ekscluster_id } # set { # name = "image.repository" # value = "public.ecr.aws/efs-csi-driver/amazon/aws-efs-csi-driver:v1.6.0" # } # set { # name = "image.tag" # value = "v2.4.8" # } set { name = "controller.serviceAccount.create" value = true } set { name = "controller.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn" value = var.aws_efs_controller_role_arn } set { name = "controller.serviceAccount.name" value = "${var.project_name}-${var.environment_name}-efs-controller" } depends_on = [ var.test_nodegroup, var.aws_efs_controller_role_attach ] }
已尝试调整仓库、版本及镜像地址的多种组合,仍无法解决超时问题,需要明确部署时各字段的正确取值及必备配置。
一、先排查超时根源
- 确认Terraform执行环境(本地机器/CI/CD runner)能正常访问Helm仓库
https://kubernetes-sigs.github.io/aws-efs-csi-driver/和AWS Public ECR - 检查EKS集群节点的安全组/网络ACL是否允许出站访问AWS EFS服务及Public ECR
- 验证
depends_on中的依赖资源是否完全就绪(节点组所有节点处于Ready状态、IAM角色正确关联)
二、正确的字段取值及配置
1. Helm仓库与版本匹配
仓库地址是正确的,版本需和Chart适配,推荐使用稳定版(比如2.13.0),注意对应规则:
- Chart版本
2.x.x对应镜像版本v1.x.x(例:Chart v2.13.0 → 镜像v1.13.0)
2. 镜像配置(可选,默认自动匹配Chart版本)
若需手动指定镜像,使用AWS Public ECR官方地址:
set { name = "image.repository" value = "public.ecr.aws/efs-csi-driver/amazon/aws-efs-csi-driver" } set { name = "image.tag" value = "v1.13.0" # 需与Chart版本对应 }
3. 必备Helm配置项
除已有配置,需确保:
controller.serviceAccount.create设为true,并通过eks.amazonaws.com/role-arn注解绑定具备EFS权限的IAM角色- 节点端驱动默认开启(
node.enabled=true,无需额外配置) - EKS 1.23+版本按需开启快照功能(默认关闭)
三、修正后的完整代码示例
resource "helm_release" "test_aws_efs_controller" { name = "aws-efs-csi-driver" repository = "https://kubernetes-sigs.github.io/aws-efs-csi-driver/" chart = "aws-efs-csi-driver" namespace = "${var.project_name}-${var.environment_name}-microservices" version = "2.13.0" # 稳定版Chart set { name = "clusterName" value = var.test_ekscluster_id } # 可选:手动指定镜像,无需可注释 set { name = "image.repository" value = "public.ecr.aws/efs-csi-driver/amazon/aws-efs-csi-driver" } set { name = "image.tag" value = "v1.13.0" } set { name = "controller.serviceAccount.create" value = true } set { name = "controller.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn" value = var.aws_efs_controller_role_arn } set { name = "controller.serviceAccount.name" value = "${var.project_name}-${var.environment_name}-efs-controller" } depends_on = [ var.test_nodegroup, var.aws_efs_controller_role_attach ] }
四、额外注意事项
- 确保IAM角色关联
AmazonEFSCSIDriverPolicy权限策略,或自定义包含EFS相关操作的权限 - 私有子网环境下,需让节点通过NAT网关访问公网,或配置VPC端点访问ECR和EFS
- 执行Terraform前,可手动运行
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/和helm repo update验证仓库连通性
内容的提问来源于stack exchange,提问作者Kunal
相关产品推荐
相关产品推荐

