使用Terraform创建EKS集群时遇stream error问题求助
问题原因分析
这个错误本质是Terraform的Helm Provider与EKS API Server之间的gRPC连接中断,结合你的日志和配置,主要原因包括:
- Helm Provider版本过旧:你使用的
v2.4.1版本存在已知的gRPC连接稳定性问题,与新版EKS集群交互时易出现流读取错误。 - CRD安装逻辑缺陷:旧版本Helm Provider处理cert-manager的CRD部署逻辑不完善,导致资源查询时触发内部错误。
- 并发资源负载过高:多个Helm Release同时部署,导致EKS API Server压力过大,主动断开连接。
解决方法
1. 升级Helm Provider到最新稳定版
在providers.tf中更新Helm Provider版本,推荐使用v2.12.0及以上:
terraform { required_providers { helm = { source = "hashicorp/helm" version = "~> 2.12.0" } } }
执行terraform init -upgrade完成升级,这会修复旧版本的gRPC连接bug,同时解决日志中的"legacy plugin SDK"警告。
2. 调整cert-manager的Helm配置
显式启用CRD安装
在helm_release.cert-manager资源中添加CRD安装配置,确保CRD优先部署:
resource "helm_release" "cert-manager" { name = "jetstack" repository = "https://charts.jetstack.io" chart = "cert-manager" namespace = "cert-manager" create_namespace = true version = "v1.5.5" # 适配Helm Provider v2.x的CRD安装参数 crds_installation_enabled = true values = [ file("helm-values/cert-manager.yml") ] }
若使用Helm Provider v3.x,参数改为install_crds = true。
添加集群就绪依赖
确保cert-manager在EKS集群完全就绪后再部署,关联集群和节点组资源:
resource "helm_release" "cert-manager" { # 已有配置... depends_on = [ aws_eks_cluster.your_eks_cluster_name, aws_eks_node_group.your_node_group_name ] }
3. 降低Terraform并行度
临时减少并行创建的资源数量,避免API Server过载:
terraform apply -parallelism=1
4. 手动预安装CRD(可选)
若上述方法无效,先手动安装cert-manager的CRD,再执行Terraform:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.5.5/cert-manager.crds.yaml
然后在Terraform的helm_release中添加:
resource "helm_release" "cert-manager" { # 已有配置... skip_crds = true }
5. 检查EKS集群状态
确认EKS集群API Server正常、节点全部就绪:
kubectl get nodes kubectl api-resources | grep cert-manager
内容的提问来源于stack exchange,提问作者Prashanthakumar Emmadi
相关产品推荐
相关产品推荐

